protected override void AppendTypeDefinition(StringBuilder builder, AstTypeDefinition type) { builder.AppendLine("public class " + type.Name); AppendAll(builder, Environment.NewLine, type.Members); builder.AppendLine(); builder.AppendLine("end"); }
public override IAstElement ProcessAfterChildren(AstRoot root, ProcessingContext context) { var statements = root.Children <IAstStatement>(); var main = new AstFunctionDefinition("Main", No.Parameters, statements, AstVoidType.Instance) { Compilation = { Static = true, EntryPoint = true } }; if (!main.Body.Any()) { return(root); } // TODO: this should be done by GenerateReturns, but the ordering behavior is somewhat incorrect right now if (!main.Descendants <AstReturnStatement>().Any()) { main.Body.Add(new AstReturnStatement()); } root.Elements.RemoveWhere(s => s is IAstStatement); var program = new AstTypeDefinition(TypeDefintionTypes.Class, "Program", main); root.Elements.Add(program); return(root); }
private void AssignInferredType(AstExpressionOperand operand, AstTypeDefinition typeDef) { var typeRef = AstTypeReferenceType.From(typeDef); typeRef.IsInferred = true; SymbolTable !.Add(typeRef); operand.SetTypeReference(typeRef); }
public AstDefinedType(AstTypeDefinition type) { this.Definition = type; }
public void MapDefinition(AstTypeDefinition typeAst, TypeDefinition type) { references.Add(typeAst, type); }
protected virtual void AppendTypeDefinition(StringBuilder builder, AstTypeDefinition typeDefinition) { builder.Append(typeDefinition); }