public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode = GetAssemblyMode.Code) { if (Assembly == GlobalContainer.OutputAssembly) { base.GetAssembly(CG, Mode); } }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode = GetAssemblyMode.Code) { CG.Container = this; for (var i = 0; i < Children.Count; i++) { Children[i].GetAssembly(CG); } }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode) { base.GetAssembly(CG, Mode); if ((Mode & GetAssemblyMode.Code) != 0 && NeedsToBeCompiled) { CG.InsContainer.Label(AssemblyName); Container.State.Arch.GetAssembly(CG, this); CG.InsContainer.Add("\n"); } }
public virtual void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode = GetAssemblyMode.Code) { for (var i = 0; i < IdentifierList.Count; i++) { IdentifierList[i].GetAssembly(CG, Mode); } for (var i = 0; i < Children.Count; i++) { Children[i].GetAssembly(CG, Mode); } }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode) { if ((Flags & IdentifierFlags.Extern) == 0) { if ((Mode == GetAssemblyMode.InitedValues && ConstInitValue != null) || (Mode == GetAssemblyMode.UninitedValues && ConstInitValue == null)) { CG.Align(Align); CG.InsContainer.Label(AssemblyName); CG.Declare(TypeOfSelf, ConstInitValue); CG.InsContainer.Add("\n"); } } }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode) { if (Mode == GetAssemblyMode.InitedValues && HasFunctionTable) { CG.InsContainer.Label(FunctionTableLabel); for (var i = 0; i < OldVirtuals.Count; i++) { CG.DeclareLabelPtr(OldVirtuals[i].AssemblyName); } CG.InsContainer.Add("\n"); } base.GetAssembly(CG, Mode); }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode = GetAssemblyMode.Code) { CG.Container = this; if (Extension != null) { Extension.GetAssembly(CG); return; } if (Type == CommandType.Expression) { CG.EmitExpression(Expressions[0]); } else if (Type == CommandType.Cycle) { CG.InsContainer.Label(ContinueLabel); Children[0].GetAssembly(CG); CG.InsContainer.Jump(ContinueLabel); CG.InsContainer.Label(BreakLabel); } else if (Type == CommandType.While || Type == CommandType.DoWhile) { GetWhileAssembly(CG, Expressions[0], Type == CommandType.DoWhile); } else if (Type == CommandType.For) { if (Expressions[0] != null) { CG.EmitExpression(Expressions[0]); } var DoWhile = WillRun == ConditionResult.True; GetWhileAssembly(CG, Expressions[1], DoWhile, Expressions[2]); } else if (Type == CommandType.If) { NextLabel = State.AutoLabel; CalcIfAssembly(CG, 0); CG.InsContainer.Label(NextLabel); } else if (Type == CommandType.Label) { CG.InsContainer.Label(Label); } else if (Type == CommandType.Try) { Children[0].GetAssembly(CG); if (CatchScope != null) { CG.InsContainer.Jump(FinallyLabel); } CG.InsContainer.Label(CatchLabel); if (CatchScope != null) { CatchScope.GetAssembly(CG); } CG.InsContainer.Label(FinallyLabel); if (FinallyScope != null) { FinallyScope.GetAssembly(CG); } } else if (Commands.IsJumpCommand(Type)) { if (Type == CommandType.Return && Expressions != null && Expressions.Count > 0) { CG.EmitExpression(Expressions[0]); } CG.InsContainer.Jump(Label); } else if (Type != CommandType.Unknown) { throw new NotImplementedException(); } }
public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode) { var Arch = State.Arch; base.GetAssembly(CG, Mode); if ((Mode & GetAssemblyMode.InitedValues) != 0) { var AssemblyData = Identifiers.GetByFullNameFast <StructType>( this, "Internals.Reflection.AssemblyData", false); if (AssemblyData != null) { CG.Align(AssemblyData.Align); CG.InsContainer.Label(AssemblyDescLabel + "_AssemblyData"); CG.Declare(AssemblyData, new ZeroValue()); } for (var i = 0; i < IncludedBinaries.Count; i++) { var Bin = IncludedBinaries[i]; CG.InsContainer.Label(Bin.Label); CG.DeclareFile(Bin.File); } var IncBinLabel = -1; if (IncludedBinaries.Count > 0) { IncBinLabel = State.AutoLabel; CG.Align(Arch.RegSize); CG.InsContainer.Label(IncBinLabel); for (var i = 0; i < IncludedBinaries.Count; i++) { CG.DeclareLabelPtr(IncludedBinaries[i].Label); } } if (State.Builder != null && State.Builder.Format == AssemblyFormat.Application) { CG.Align(Arch.RegSize); CG.InsContainer.Label("_Internals_Reflection_Reflection_EntryAssembly"); CG.DeclareLabelPtr(AssemblyDescLabel); } GetExprConstsCode(CG); } if ((Mode & GetAssemblyMode.ReflectionData) != 0) { if (State.LibOutFile != null) { CG.Align(Arch.RegSize); CG.InsContainer.Label(AssemblyDescLabel); var AssemblyData = Identifiers.GetByFullNameFast <StructType>( this, "Internals.Reflection.AssemblyData", false); if (AssemblyData == null) { CG.DeclareNull(); } else { CG.DeclareLabelPtr(AssemblyDescLabel + "_AssemblyData"); } CG.DeclareLabelPtr(GlobalPointersLabel); //if (IncBinLabel != -1) // CG.DeclareLabelPtr(IncBinLabel); string File; if (State.CodeOutFile == null) { File = State.LibOutFile; } else { File = Helper.GetRelativePath(State.CodeOutFile, State.LibOutFile); } CG.DeclareFile(File); CG.InsContainer.Add("\n"); CG.Align(Arch.RegSize); CG.InsContainer.Label(GlobalPointersLabel); for (var i = 0; i < GlobalPointers.Count; i++) { CG.DeclareLabelPtr(GlobalPointers[i]); } CG.InsContainer.Add("\n"); } } }