Avoid thunks when a fromWith var can be looked up without evaluation
Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
		
							parent
							
								
									20866a7031
								
							
						
					
					
						commit
						e068f49f7d
					
				
					 2 changed files with 8 additions and 8 deletions
				
			
		|  | @ -304,13 +304,15 @@ void mkPath(Value & v, const char * s) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| inline Value * EvalState::lookupVar(Env * env, const VarRef & var) | ||||
| inline Value * EvalState::lookupVar(Env * env, const VarRef & var, bool noEval) | ||||
| { | ||||
|     for (unsigned int l = var.level; l; --l, env = env->up) ; | ||||
|      | ||||
|     if (var.fromWith) { | ||||
|         while (1) { | ||||
|             if (env->values[0] == NULL) { | ||||
|                 if (noEval) | ||||
|                     return NULL; | ||||
|                 env->values[0] = allocValue(); | ||||
|                 evalAttrs(*env->up, env->withAttrs, *env->values[0]); | ||||
|             } | ||||
|  | @ -409,12 +411,10 @@ unsigned long nrAvoided = 0; | |||
| 
 | ||||
| Value * ExprVar::maybeThunk(EvalState & state, Env & env) | ||||
| { | ||||
|     if (!info.fromWith) { | ||||
|         Value * v = state.lookupVar(&env, info); | ||||
|     Value * v = state.lookupVar(&env, info, true); | ||||
|     /* The value might not be initialised in the environment yet.
 | ||||
|        In that case, ignore it. */ | ||||
|     if (v) { nrAvoided++; return v; } | ||||
|     } | ||||
|     return Expr::maybeThunk(state, env); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -206,7 +206,7 @@ private: | |||
|     void addPrimOp(const string & name, | ||||
|         unsigned int arity, PrimOpFun primOp); | ||||
| 
 | ||||
|     inline Value * lookupVar(Env * env, const VarRef & var); | ||||
|     inline Value * lookupVar(Env * env, const VarRef & var, bool noEval = false); | ||||
|      | ||||
|     friend class ExprVar; | ||||
|     friend class ExprAttrs; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue