示例#1
0
 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");
 }
示例#2
0
        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);
        }
示例#3
0
        private void AssignInferredType(AstExpressionOperand operand, AstTypeDefinition typeDef)
        {
            var typeRef = AstTypeReferenceType.From(typeDef);

            typeRef.IsInferred = true;
            SymbolTable !.Add(typeRef);
            operand.SetTypeReference(typeRef);
        }
示例#4
0
 public AstDefinedType(AstTypeDefinition type)
 {
     this.Definition = type;
 }
示例#5
0
 public void MapDefinition(AstTypeDefinition typeAst, TypeDefinition type)
 {
     references.Add(typeAst, type);
 }
示例#6
0
 protected virtual void AppendTypeDefinition(StringBuilder builder, AstTypeDefinition typeDefinition)
 {
     builder.Append(typeDefinition);
 }