コード例 #1
0
        private void WaddleFunctionDeclaration(FunctionDeclSyntax function)
        {
            WaddleBody(function.Body);

            if (_currentFunction?.Type is not null && function.Body.Statements.LastOrDefault() is not ReturnStmtSyntax)
            {
                throw new SemanticErrorException($"missing return statement in function {_currentFunction?.Name}");
            }
        }
コード例 #2
0
ファイル: SymbolWaddler.cs プロジェクト: smackem/waddle
        private void WaddleFunctionDeclaration(FunctionDeclSyntax functionSyntax)
        {
            var parameters =
                functionSyntax.Parameters.Select(param => new VariableDecl(param !.Name, param !.TypeSyntax.ToSymbol())).ToArray();
            var function = new FunctionDecl(functionSyntax.Name, functionSyntax.ReturnType?.ToSymbol(),
                                            functionSyntax.Body.Statements
                                            .OfType <DeclStmtSyntax>()
                                            .Select(stmt => new VariableDecl(stmt.ParameterDeclSyntax.Name, stmt.ParameterDeclSyntax.TypeSyntax.ToSymbol()))
                                            .Concat(parameters),
                                            parameters);

            _functions.Add(function.Name, function);
        }
コード例 #3
0
ファイル: BaseSyntaxVisitor.cs プロジェクト: smackem/waddle
 public virtual TResult Visit(FunctionDeclSyntax syntax)
 {
     return(DefaultResult);
 }
コード例 #4
0
 public void LeaveFunctionDeclaration(FunctionDeclSyntax syntax, WaddleContext ctx)
 {
 }
コード例 #5
0
 public bool EnterFunctionDeclaration(FunctionDeclSyntax syntax, WaddleContext ctx)
 {
     _currentFunction = _currentFunction = _functions[syntax.Name];
     return(true);
 }