Remove ExprBuiltin
It's slower than ExprVar since it doesn't compute a static displacement. Since we're not using the throw primop in the implementation of <...> anymore, it's also not really needed.
This commit is contained in:
		
							parent
							
								
									62a6eeb1f3
								
							
						
					
					
						commit
						d8c061e044
					
				
					 4 changed files with 8 additions and 35 deletions
				
			
		|  | @ -1004,17 +1004,6 @@ void ExprOpNot::eval(EvalState & state, Env & env, Value & v) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| void ExprBuiltin::eval(EvalState & state, Env & env, Value & v) | ||||
| { | ||||
|     // Not a hot path at all, but would be nice to access state.baseEnv directly
 | ||||
|     Env *baseEnv = &env; | ||||
|     while (baseEnv->up) baseEnv = baseEnv->up; | ||||
|     Bindings::iterator binding = baseEnv->values[0]->attrs->find(name); | ||||
|     assert(binding != baseEnv->values[0]->attrs->end()); | ||||
|     v = *binding->value; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void ExprOpEq::eval(EvalState & state, Env & env, Value & v) | ||||
| { | ||||
|     Value v1; e1->eval(state, env, v1); | ||||
|  |  | |||
|  | @ -123,11 +123,6 @@ void ExprOpNot::show(std::ostream & str) | |||
|     str << "! " << *e; | ||||
| } | ||||
| 
 | ||||
| void ExprBuiltin::show(std::ostream & str) | ||||
| { | ||||
|     str << "builtins." << name; | ||||
| } | ||||
| 
 | ||||
| void ExprConcatStrings::show(std::ostream & str) | ||||
| { | ||||
|     bool first = true; | ||||
|  | @ -342,10 +337,6 @@ void ExprOpNot::bindVars(const StaticEnv & env) | |||
|     e->bindVars(env); | ||||
| } | ||||
| 
 | ||||
| void ExprBuiltin::bindVars(const StaticEnv & env) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void ExprConcatStrings::bindVars(const StaticEnv & env) | ||||
| { | ||||
|     foreach (vector<Expr *>::iterator, i, *es) | ||||
|  |  | |||
|  | @ -272,13 +272,6 @@ struct ExprOpNot : Expr | |||
|     COMMON_METHODS | ||||
| }; | ||||
| 
 | ||||
| struct ExprBuiltin : Expr | ||||
| { | ||||
|     Symbol name; | ||||
|     ExprBuiltin(const Symbol & name) : name(name) { }; | ||||
|     COMMON_METHODS | ||||
| }; | ||||
| 
 | ||||
| #define MakeBinOp(name, s) \ | ||||
|     struct Expr##name : Expr \ | ||||
|     { \ | ||||
|  |  | |||
|  | @ -328,13 +328,13 @@ expr_if | |||
| 
 | ||||
| expr_op | ||||
|   : '!' expr_op %prec NOT { $$ = new ExprOpNot($2); } | ||||
| | '-' expr_op %prec NEGATE { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("sub")), new ExprInt(0)), $2); } | ||||
|   | '-' expr_op %prec NEGATE { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__sub")), new ExprInt(0)), $2); } | ||||
|   | expr_op EQ expr_op { $$ = new ExprOpEq($1, $3); } | ||||
|   | expr_op NEQ expr_op { $$ = new ExprOpNEq($1, $3); } | ||||
|   | expr_op '<' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("lessThan")), $1), $3); } | ||||
|   | expr_op LEQ expr_op { $$ = new ExprOpNot(new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("lessThan")), $3), $1)); } | ||||
|   | expr_op '>' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("lessThan")), $3), $1); } | ||||
|   | expr_op GEQ expr_op { $$ = new ExprOpNot(new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("lessThan")), $1), $3)); } | ||||
|   | expr_op '<' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $1), $3); } | ||||
|   | expr_op LEQ expr_op { $$ = new ExprOpNot(new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $3), $1)); } | ||||
|   | expr_op '>' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $3), $1); } | ||||
|   | expr_op GEQ expr_op { $$ = new ExprOpNot(new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $1), $3)); } | ||||
|   | expr_op AND expr_op { $$ = new ExprOpAnd(CUR_POS, $1, $3); } | ||||
|   | expr_op OR expr_op { $$ = new ExprOpOr(CUR_POS, $1, $3); } | ||||
|   | expr_op IMPL expr_op { $$ = new ExprOpImpl(CUR_POS, $1, $3); } | ||||
|  | @ -346,9 +346,9 @@ expr_op | |||
|       l->push_back($3); | ||||
|       $$ = new ExprConcatStrings(CUR_POS, false, l); | ||||
|     } | ||||
|   | expr_op '-' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("sub")), $1), $3); } | ||||
|   | expr_op '*' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("mul")), $1), $3); } | ||||
|   | expr_op '/' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprBuiltin(data->symbols.create("div")), $1), $3); } | ||||
|   | expr_op '-' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__sub")), $1), $3); } | ||||
|   | expr_op '*' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__mul")), $1), $3); } | ||||
|   | expr_op '/' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.create("__div")), $1), $3); } | ||||
|   | expr_op CONCAT expr_op { $$ = new ExprOpConcatLists(CUR_POS, $1, $3); } | ||||
|   | expr_app | ||||
|   ; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue