libexpr: Optimize prim_derivationStrict by using more symbol comparisons
This commit is contained in:
		
							parent
							
								
									0845cdf944
								
							
						
					
					
						commit
						7e0360504d
					
				
					 3 changed files with 15 additions and 10 deletions
				
			
		|  | @ -294,6 +294,10 @@ EvalState::EvalState(const Strings & _searchPath, ref<Store> store) | |||
|     , sWrong(symbols.create("wrong")) | ||||
|     , sStructuredAttrs(symbols.create("__structuredAttrs")) | ||||
|     , sBuilder(symbols.create("builder")) | ||||
|     , sArgs(symbols.create("args")) | ||||
|     , sOutputHash(symbols.create("outputHash")) | ||||
|     , sOutputHashAlgo(symbols.create("outputHashAlgo")) | ||||
|     , sOutputHashMode(symbols.create("outputHashMode")) | ||||
|     , repair(NoRepair) | ||||
|     , store(store) | ||||
|     , baseEnv(allocEnv(128)) | ||||
|  |  | |||
|  | @ -69,7 +69,8 @@ public: | |||
|     const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName, sValue, | ||||
|         sSystem, sOverrides, sOutputs, sOutputName, sIgnoreNulls, | ||||
|         sFile, sLine, sColumn, sFunctor, sToString, | ||||
|         sRight, sWrong, sStructuredAttrs, sBuilder; | ||||
|         sRight, sWrong, sStructuredAttrs, sBuilder, sArgs, | ||||
|         sOutputHash, sOutputHashAlgo, sOutputHashMode; | ||||
|     Symbol sDerivationNix; | ||||
| 
 | ||||
|     /* If set, force copying files to the Nix store even if they
 | ||||
|  |  | |||
|  | @ -589,7 +589,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * * | |||
| 
 | ||||
|             /* The `args' attribute is special: it supplies the
 | ||||
|                command-line arguments to the builder. */ | ||||
|             if (key == "args") { | ||||
|             if (i->name == state.sArgs) { | ||||
|                 state.forceList(*i->value, pos); | ||||
|                 for (unsigned int n = 0; n < i->value->listSize(); ++n) { | ||||
|                     string s = state.coerceToString(posDrvName, *i->value->listElems()[n], context, true); | ||||
|  | @ -614,13 +614,13 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * * | |||
|                         drv.platform = state.forceStringNoCtx(*i->value, posDrvName); | ||||
|                     else if (i->name == state.sName) | ||||
|                         drvName = state.forceStringNoCtx(*i->value, posDrvName); | ||||
|                     else if (key == "outputHash") | ||||
|                     else if (i->name == state.sOutputHash) | ||||
|                         outputHash = state.forceStringNoCtx(*i->value, posDrvName); | ||||
|                     else if (key == "outputHashAlgo") | ||||
|                     else if (i->name == state.sOutputHashAlgo) | ||||
|                         outputHashAlgo = state.forceStringNoCtx(*i->value, posDrvName); | ||||
|                     else if (key == "outputHashMode") | ||||
|                     else if (i->name == state.sOutputHashMode) | ||||
|                         handleHashMode(state.forceStringNoCtx(*i->value, posDrvName)); | ||||
|                     else if (key == "outputs") { | ||||
|                     else if (i->name == state.sOutputs) { | ||||
|                         /* Require ‘outputs’ to be a list of strings. */ | ||||
|                         state.forceList(*i->value, posDrvName); | ||||
|                         Strings ss; | ||||
|  | @ -638,10 +638,10 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * * | |||
|                         drvName = s; | ||||
|                         printMsg(lvlVomit, format("derivation name is '%1%'") % drvName); | ||||
|                     } | ||||
|                     else if (key == "outputHash") outputHash = s; | ||||
|                     else if (key == "outputHashAlgo") outputHashAlgo = s; | ||||
|                     else if (key == "outputHashMode") handleHashMode(s); | ||||
|                     else if (key == "outputs") | ||||
|                     else if (i->name == state.sOutputHash) outputHash = s; | ||||
|                     else if (i->name == state.sOutputHashAlgo) outputHashAlgo = s; | ||||
|                     else if (i->name == state.sOutputHashMode) handleHashMode(s); | ||||
|                     else if (i->name == state.sOutputs) | ||||
|                         handleOutputs(tokenizeString<Strings>(s)); | ||||
|                 } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue