private void LayoutVariablesForGenerator(Dictionary<MSAst.ParameterExpression, object> parameters) { IList<MSAst.ParameterExpression> hiddenVariables = _lambdaInfo.HiddenVariables; int strongBoxIndex = 0; for (int i = 0; i < _pendingLocals.Count; i++) { MSAst.ParameterExpression pendingLocal = _pendingLocals[i]; MSAst.ParameterExpression verifiedLocal = pendingLocal; string alias; // See if there's an alias for the local if (_lambdaInfo.VariableAliases == null || !_lambdaInfo.VariableAliases.TryGetValue(pendingLocal, out alias)) { alias = pendingLocal.Name; } bool isParameter = parameters.ContainsKey(pendingLocal); bool isHidden = hiddenVariables != null && hiddenVariables.Contains(pendingLocal); if (alias == null) { alias = "local"; isHidden = true; } bool isDuplicate = _verifiedLocalNames.ContainsKey(alias); // Check if we need to replace the local because of name collisions if (isDuplicate) { // Get a unique name int count = 1; while (isDuplicate) { alias = alias + count++; isDuplicate = _verifiedLocalNames.ContainsKey(alias); } verifiedLocal = Ast.Parameter(verifiedLocal.Type, alias); } _verifiedLocals.Add(verifiedLocal); _verifiedLocalNames.Add(alias, null); if (pendingLocal != verifiedLocal) { _pendingToVerifiedLocalsMap.Add(pendingLocal, verifiedLocal); } VariableInfo varInfo = new VariableInfo(alias, pendingLocal.Type, isParameter, isHidden, true, strongBoxIndex++, _variableInfos.Count); _variableInfos.Add(varInfo); _pendingToVariableInfosMap.Add(pendingLocal, varInfo); // Add the variable to builders if (isParameter) { _lambdaParams.Add(pendingLocal); _generatorParams.Add(pendingLocal); } else { _generatorVars.Add(pendingLocal); } } }
private void LayoutVariablesForGenerator(Dictionary <MSAst.ParameterExpression, object> parameters) { IList <MSAst.ParameterExpression> hiddenVariables = _lambdaInfo.HiddenVariables; int strongBoxIndex = 0; for (int i = 0; i < _pendingLocals.Count; i++) { MSAst.ParameterExpression pendingLocal = _pendingLocals[i]; MSAst.ParameterExpression verifiedLocal = pendingLocal; string alias; // See if there's an alias for the local if (_lambdaInfo.VariableAliases == null || !_lambdaInfo.VariableAliases.TryGetValue(pendingLocal, out alias)) { alias = pendingLocal.Name; } bool isParameter = parameters.ContainsKey(pendingLocal); bool isHidden = hiddenVariables != null && hiddenVariables.Contains(pendingLocal); if (alias == null) { alias = "local"; isHidden = true; } bool isDuplicate = _verifiedLocalNames.ContainsKey(alias); // Check if we need to replace the local because of name collisions if (isDuplicate) { // Get a unique name int count = 1; while (isDuplicate) { alias = alias + count++; isDuplicate = _verifiedLocalNames.ContainsKey(alias); } verifiedLocal = Ast.Parameter(verifiedLocal.Type, alias); } _verifiedLocals.Add(verifiedLocal); _verifiedLocalNames.Add(alias, null); if (pendingLocal != verifiedLocal) { _pendingToVerifiedLocalsMap.Add(pendingLocal, verifiedLocal); } VariableInfo varInfo = new VariableInfo(alias, pendingLocal.Type, isParameter, isHidden, true, strongBoxIndex++, _variableInfos.Count); _variableInfos.Add(varInfo); _pendingToVariableInfosMap.Add(pendingLocal, varInfo); // Add the variable to builders if (isParameter) { _lambdaParams.Add(pendingLocal); _generatorParams.Add(pendingLocal); } else { _generatorVars.Add(pendingLocal); } } }