Exemplo n.º 1
0
        public override ASTNode VisitFunctionDef([NotNull] DaedalusParser.FunctionDefContext context)
        {
            NameNode typeNameNode = new NameNode(GetLocation(context.dataType()), context.dataType().GetText());
            NameNode nameNode     = new NameNode(GetLocation(context.nameNode()), context.nameNode().GetText());

            List <ParameterDeclarationNode> varDeclarationNodes = new List <ParameterDeclarationNode>();

            foreach (DaedalusParser.ParameterDeclContext parameterDeclContext in context.parameterList().parameterDecl())
            {
                varDeclarationNodes.Add((ParameterDeclarationNode)VisitParameterDecl(parameterDeclContext));
            }

            List <StatementNode> statementNodes = GetStatementNodes(context.statementBlock());

            return(new FunctionDefinitionNode(GetLocation(context), typeNameNode, nameNode, varDeclarationNodes, statementNodes, false));
        }
Exemplo n.º 2
0
        public override void EnterFunctionDef([NotNull] DaedalusParser.FunctionDefContext context)
        {
            string        funcName        = context.nameNode().GetText();
            string        returnTypeName  = context.typeReference().GetText();
            DatSymbolType returnType      = DatSymbolTypeFromString(returnTypeName);
            uint          parametersCount = (uint)context.parameterList().parameterDecl().Length;

            var symbol = SymbolBuilder.BuildFunc(funcName, parametersCount, returnType);

            _assemblyBuilder.AddSymbol(symbol);
            _assemblyBuilder.ExecBlockStart(symbol, ExecBlockType.Function);
        }