Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 5
0
 public override IEnumerable <DeclarationReference> GetMembers(string name)
 {
     return(ContainingScope.GetMembers(name));
 }
 public FixedList <ISymbol> LookupInContainingScope()
 {
     return(ContainingScope.Lookup(Name));
 }
Exemplo n.º 7
0
 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);
 }