public ASTCILIOInStringNode(CoolMethod method, ILabelILGenerator labelIlGenerator) : base(labelIlGenerator.GenerateFunc(Types.IO, Functions.InString), method, Enumerable.Empty <ASTCILExpressionNode>()) { }
public MipsProgram VisitType(ASTCILTypeNode Type) { var result = new MipsProgram(); foreach (var method in Type.Methods) { result += method.Accept(this); } var typeName = Type.Type.Name; var typeNameParent = Type.Type.Parent?.Name; var label_type_name = labelGenerator.GenerateLabelTypeName(typeName); result.SectionData.Append(MipsGenerationHelper.NewScript() .AddData(label_type_name.value, new[] { MipsGenerationHelper.AddStringData(typeName) })); result.SectionData.Append(MipsGenerationHelper.NewScript() .AddData(label_type_name.@object, new[] { MipsGenerationHelper.AddIntData(label_type_name.value), MipsGenerationHelper.AddIntData(typeName.Length) })); var label_virtual_table = labelGenerator.GenerateLabelVirtualTable(typeName); result.SectionData.Append(MipsGenerationHelper.NewScript() .AddData(label_virtual_table, Type.VirtualTable.Select(x => MipsGenerationHelper.AddIntData(labelGenerator.GenerateFunc(x.Type.Name, x.Name))))); var typeInfo_label = labelGenerator.GenerateLabelTypeInfo(typeName); var typeInfo_label_parent = typeNameParent != null?labelGenerator.GenerateLabelTypeInfo(typeNameParent) : labelGenerator.GenerateVoid(); result.SectionData.Append(MipsGenerationHelper.NewScript() .AddData(typeInfo_label, new[] { MipsGenerationHelper.AddIntData(label_type_name.@object), MipsGenerationHelper.AddIntData(Type.Type.AllocateSize), MipsGenerationHelper.AddIntData(label_virtual_table), MipsGenerationHelper.AddIntData(typeInfo_label_parent) })); result.SectionDataGlobals.Append(MipsGenerationHelper.NewScript().GlobalSection(label_type_name.value) .GlobalSection(label_type_name.@object) .GlobalSection(label_virtual_table).GlobalSection(typeInfo_label)); return(result); }
public ASTCILObjectTypeNameNode(CoolMethod method, ILabelILGenerator labelIlGenerator) : base( labelIlGenerator.GenerateFunc(Types.Object, Functions.Type_Name), method, Enumerable.Empty <ASTCILExpressionNode>()) { }
public ASTCILStringConcatNode(CoolMethod method, ILabelILGenerator labelIlGenerator) : base( labelIlGenerator.GenerateFunc(Types.String, Functions.Concat), method, Enumerable.Empty <ASTCILExpressionNode>()) { }
public ASTCILIOInIntNode(CoolMethod coolMethod, ILabelILGenerator labelgenerator) : base(labelgenerator.GenerateFunc(Types.IO, Functions.InInt), coolMethod, Enumerable.Empty <ASTCILExpressionNode>()) { }