示例#1
0
        public override void Visit(DeclareAST declareAST)
        {
            var identifier = _symTableManager.LookupIdentifierInfo(_currentFileName, declareAST.VariableDec.Name, _currentScopeId, _currentNodePosition);

            if (identifier.valueRef.Pointer != IntPtr.Zero)
            {
                return;
            }

            var fnType = IRTypesConverter.GetFunctionType(declareAST.VariableDec.Type as FunctionTypeAST);

            identifier.valueRef = LLVM.AddFunction(_module, identifier.name, fnType);
            LLVM.SetFunctionCallConv(identifier.valueRef, 0);
            LLVM.SetLinkage(identifier.valueRef, LLVMLinkage.LLVMExternalLinkage);
        }
示例#2
0
        public override void Visit(DeclareAST declareAST)
        {
            var identInfo = new IdentifierInfo
            {
                name           = declareAST.VariableDec.Name,
                typeAST        = declareAST.VariableDec.Type,
                position       = _currentNodePosition,
                scopeId        = _currentScope.id,
                isFunctionType = declareAST.VariableDec.Type is FunctionTypeAST
            };

            AddIdentInfoToSymTable(identInfo);

            if (_currentScope.id != 0)
            {
                return;
            }

            GlobalIdentifiers.Add(declareAST.VariableDec.Name);
        }
示例#3
0
 public virtual void Visit(DeclareAST declareAST)
 {
 }