internal MSAst.Expression Transform(AstGenerator inner, bool needsWrapperMethod) { MSAst.ParameterExpression parameter; string name = SymbolTable.IdToString(Name); if (_variable.AccessedInNestedScope) { if (needsWrapperMethod) { parameter = inner.ClosedOverVariable(typeof(object), name); } else { parameter = inner.ClosedOverParameter(typeof(object), name); } } else { if (needsWrapperMethod) { parameter = inner.Variable(typeof(object), name); } else { parameter = inner.Parameter(typeof(object), name); } } inner.Globals.SetParameter(_variable, parameter); return parameter; }
public MSAst.Expression/*!*/ CreateVariable(AstGenerator/*!*/ ag, PythonVariable/*!*/ variable) { Assert.NotNull(ag, variable); Debug.Assert(variable.Kind != VariableKind.Parameter); string name = SymbolTable.IdToString(variable.Name); switch (variable.Kind) { case VariableKind.Global: case VariableKind.GlobalLocal: return _variables[variable] = GetGlobal(name, ag, false); case VariableKind.Local: case VariableKind.HiddenLocal: if (ag.IsGlobal) { return _variables[variable] = GetGlobal(name, ag, true); } else if (variable.AccessedInNestedScope) { return _variables[variable] = ag.ClosedOverVariable(typeof(object), name); } else { return _variables[variable] = ag.Variable(typeof(object), name); } case VariableKind.Temporary: return _variables[variable] = ag.HiddenVariable(typeof(object), name); default: throw Assert.Unreachable; } }