protected override LookupResult Lookup(IdentifierNameSyntax name, Package fromPackage) { var identifier = name.Identifier.ValueText; // First look in the current container var result = Resolve(mergedContainer.GetMembers(identifier), fromPackage); if (!result.IsEmpty) { return(result); } // Then look in the imported names var importedSymbols = imports[identifier].Select(x => x.Reference).ToList(); result = Resolve(importedSymbols, fromPackage); if (!result.IsEmpty) { return(result); } // Then look in containing scopes if (ContainingScope != null) { return(ContainingScope.Lookup(name, fromPackage)); } return(LookupResult.Empty); }
public override void GenerateCode(ILGenerator generator) { var saveFields = ContainingScope.FieldsToFunctionDeclaration(FunctionInfo); foreach (var fieldBuilder in saveFields) { generator.Emit(OpCodes.Ldsfld, fieldBuilder); } foreach (var expressionNode in Arguments) { expressionNode.GenerateCode(generator); } var method = FunctionInfo.MethodBuilder; generator.Emit(OpCodes.Call, method); LocalBuilder methodResult = null; if (!TigerType.AreOfSameType(FunctionInfo.ReturnType, TigerType.Void)) { methodResult = generator.DeclareLocal(FunctionInfo.ReturnType.Type); generator.Emit(OpCodes.Stloc, methodResult); } foreach (var t in saveFields) { generator.Emit(OpCodes.Stsfld, t); } if (!TigerType.AreOfSameType(FunctionInfo.ReturnType, TigerType.Void)) { generator.Emit(OpCodes.Ldloc, methodResult); } }
protected override bool LookupWithoutNumber(Name name, [NotNullWhen(true)] out VariableBinding?binding) { if (VariableBinding.Name != name) { return(ContainingScope.Lookup(name, out binding)); } binding = VariableBinding; return(true); }
protected override bool LookupWithoutNumber(SimpleName name, out VariableBinding binding) { if (VariableBinding.Name == name) { binding = VariableBinding; return(true); } return(ContainingScope.Lookup(name, out binding)); }
public override IEnumerable <DeclarationReference> GetMembers(string name) { return(ContainingScope.GetMembers(name)); }
public FixedList <ISymbol> LookupInContainingScope() { return(ContainingScope.Lookup(Name)); }
protected internal override void NestedBindingDeclared(VariableBinding binding) { VariableBinding.NestedBindingDeclared(binding); ContainingScope.NestedBindingDeclared(binding); }
protected internal override void AddShadowingBinding(VariableBinding binding) { VariableBinding.AddShadowingBinding(binding); ContainingScope.AddShadowingBinding(binding); }