Ejemplo n.º 1
0
 public override void GetAssembly(CodeGenerator CG, GetAssemblyMode Mode = GetAssemblyMode.Code)
 {
     if (Assembly == GlobalContainer.OutputAssembly)
     {
         base.GetAssembly(CG, Mode);
     }
 }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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");
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
 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");
         }
     }
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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();
            }
        }
Ejemplo n.º 8
0
        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");
                }
            }
        }