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("}"); }
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>()); }
public Tree VisitFunction(object c, AstStatement.FunctionStmt functionStmt) => new Tree("func", functionStmt.Body.Accept(c, this));