private AddFreeVariable ( |
||
variable | ||
accessedInScope | bool | |
Результат | void |
internal override bool TryBindOuter(ScopeStatement from, PythonReference reference, out PythonVariable variable) { // Functions expose their locals to direct access if (TryGetVariable(reference.Name, out variable) && variable.Kind != VariableKind.Nonlocal) { variable.AccessedInNestedScope = true; if (variable.Kind == VariableKind.Local || variable.Kind == VariableKind.Parameter) { from.AddFreeVariable(variable, true); for (ScopeStatement scope = from.Parent; scope != this; scope = scope.Parent) { scope.AddFreeVariable(variable, false); } AddCellVariable(variable); ContainsNestedFreeVariables = true; } else { from.AddReferencedGlobal(reference.Name); } return(true); } return(false); }
internal override bool TryBindOuter(ScopeStatement from, PythonReference reference, out PythonVariable variable) { ContainsNestedFreeVariables = true; if (TryGetVariable(reference.Name, out variable)) { Debug.Assert(variable.Kind != VariableKind.Nonlocal, "there should be no nonlocals in a comprehension"); variable.AccessedInNestedScope = true; if (variable.Kind == VariableKind.Local || variable.Kind == VariableKind.Parameter) { from.AddFreeVariable(variable, true); for (ScopeStatement scope = from.Parent; scope != this; scope = scope.Parent) { scope.AddFreeVariable(variable, false); } AddCellVariable(variable); } else { from.AddReferencedGlobal(reference.Name); } return(true); } return(false); }
internal override bool TryBindOuter(ScopeStatement from, PythonReference reference, out PythonVariable variable) { if (reference.Name == "__class__") { needClassCell = true; ClassCellVariable = EnsureVariable("__classcell__"); ClassVariable = variable = EnsureVariable(reference.Name); variable.AccessedInNestedScope = true; from.AddFreeVariable(variable, true); for (ScopeStatement scope = from.Parent; scope != this; scope = scope.Parent) { scope.AddFreeVariable(variable, false); } AddCellVariable(variable); return(true); } return(base.TryBindOuter(from, reference, out variable)); }
internal override bool TryBindOuter(ScopeStatement from, PythonReference reference, out PythonVariable variable) { // Functions expose their locals to direct access ContainsNestedFreeVariables = true; if (TryGetVariable(reference.Name, out variable)) { variable.AccessedInNestedScope = true; if (variable.Kind == VariableKind.Local || variable.Kind == VariableKind.Parameter) { from.AddFreeVariable(variable, true); for (ScopeStatement scope = from.Parent; scope != this; scope = scope.Parent) { scope.AddFreeVariable(variable, false); } AddCellVariable(variable); } else { from.AddReferencedGlobal(reference.Name); } return true; } return false; }