public void VisitFunction(IndentWriter context, AstStatement.FunctionStmt functionStmt)
        {
            var fn = functionStmt.Function;

            context.WriteLine($"fn {fn.Name}[{string.Join(",", fn.Parameters.Select(p => p.Type.Name))}] {{");
            context.Indent();
            functionStmt.Body.Accept(context, this);
            context.Unindent();
            context.WriteLine("}");
        }
示例#2
0
        public AstStatement VisitFunction(Scope context, AstStatement.FunctionStmt functionStmt)
        {
            var functionScope = new Scope(context);

            foreach (var parameter in functionStmt.Parameter)
            {
                parameter.Type = DataTypes.GetFromName(parameter.TypeToken.Value);
                functionScope.DeclareVariable(parameter);
            }

            functionStmt.Function = new Function()
            {
                Name       = functionStmt.Name.Value,
                Parameters = functionStmt.Parameter,
                ReturnType = DataTypes.GetFromName(functionStmt.Type.Value)
            };

            functionScope.AttachedFunction = functionStmt.Function;
            context.DeclareFunction(functionStmt.Function);

            functionStmt.Body = functionStmt.Body.Accept(functionScope, this);
            return(functionStmt);
        }
 public List <Instruction> VisitFunction(object context, AstStatement.FunctionStmt functionStmt)
 {
     functionStmt.Function.Body = functionStmt.Body.Accept(context, this);
     return(new List <Instruction>());
 }
示例#4
0
 public Tree VisitFunction(object c, AstStatement.FunctionStmt functionStmt)
 => new Tree("func", functionStmt.Body.Accept(c, this));