Esempio n. 1
0
        public void EmitIR(CILEmitter Emitter)
        {
            CILEmitter proc = Emitter.StartProcedure(identifier, Parameters, ReturnType);

            block.EmitIR(proc);
            proc.Return();
        }
Esempio n. 2
0
 public void EmitIR(CILEmitter Emitter)
 {
     if (variable.IsReference)
     {
         if (reference.ArrayIndex == null)
         {
             Emitter.LoadVariable(reference.Name);
             assigment.EmitIR(Emitter, false);
             Emitter.SaveReferenceVariable(variable);
         }
         else
         {
             Emitter.LoadReferenceVariable(variable);
             reference.ArrayIndex.EmitIR(Emitter, false);
             assigment.EmitIR(Emitter, false);
             Emitter.SaveArray(variable);
         }
     }
     else
     {
         if (reference.ArrayIndex == null)
         {
             assigment.EmitIR(Emitter, false);
             Emitter.SaveVariable(reference.Name);
         }
         else
         {
             Emitter.LoadVariable(variable.Identifier);
             reference.ArrayIndex.EmitIR(Emitter, false);
             assigment.EmitIR(Emitter, false);
             Emitter.SaveArray(variable);
         }
     }
 }
Esempio n. 3
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         if (Type.IsArray && reference.ArrayIndex != null)
         {
             Emitter.LoadVariable(reference.Name);
             reference.ArrayIndex.EmitIR(Emitter, false);
             Emitter.LoadArrayIndexAddress(Type);
         }
         else
         {
             Emitter.LoadVariableAddress(reference.Name);
         }
     }
     else if (variable.IsReference)
     {
         Emitter.LoadReferenceVariable(variable);
     }
     else
     {
         Emitter.LoadVariable(reference.Name);
         if (reference.ArrayIndex != null)
         {
             reference.ArrayIndex.EmitIR(Emitter, false);
             Emitter.LoadArrayVariable(variable);
         }
     }
 }
Esempio n. 4
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     for (int i = 0; i < arguments.Count; i++)
     {
         IExpression expr          = arguments.Expression(i);
         bool        loadReference = ToCall.Parameters.At(i).IsReference;
         expr.EmitIR(Emitter, loadReference);
     }
     foreach (Variable prevVar in ToCall.Parameters.PreviousVariables)
     {
         if (current.Variable(prevVar.Identifier).IsReference)
         {
             Emitter.LoadVariable(prevVar.Identifier);
         }
         else
         {
             Emitter.LoadVariableAddress(prevVar.Identifier);
         }
     }
     Emitter.Call(toBeCalled);
 }
Esempio n. 5
0
 public void EmitIR(CILEmitter Emitter)
 {
     call.EmitIR(Emitter, false);
     if (call.ToCall.ReturnType != null)
     {
         Emitter.Pop();
     }
 }
Esempio n. 6
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     Emitter.CallRead(Type);
 }
Esempio n. 7
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     Emitter.PushInt32(literal);
 }
Esempio n. 8
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     expression.EmitIR(Emitter, Reference);
 }
Esempio n. 9
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     factor.EmitIR(Emitter, false);
     Type.UnaryOperation(oper).EmitIR(Emitter);
 }
Esempio n. 10
0
        public void EmitIR(CILEmitter Emitter, bool Reference)
        {
            if (Reference)
            {
                throw new InvalidByReferenceException();
            }
            int booleanValue = literal ? 1 : 0;

            Emitter.PushInt32(booleanValue);
        }
Esempio n. 11
0
 public void EmitIR(CILEmitter Emitter, bool Reference)
 {
     if (Reference)
     {
         throw new InvalidByReferenceException();
     }
     factor.EmitIR(Emitter, false);
     Emitter.ArraySize();
     Emitter.ToInt32();
 }
Esempio n. 12
0
 public void EmitIR(CILEmitter Emitter)
 {
     for (int i = 0; i < toPrint.Count; i++)
     {
         IExpression    expr     = toPrint.Expression(i);
         MiniPascalType exprType = toPrint.Type(i);
         expr.EmitIR(Emitter, false);
         Emitter.CallPrint(exprType);
     }
 }
Esempio n. 13
0
 public void EmitIR(CILEmitter Emitter)
 {
     condition.EmitIR(Emitter, false);
     if (elseStatement == null)
     {
         Emitter.If(() => thenStatement.EmitIR(Emitter));
     }
     else
     {
         Emitter.IfElse(() => thenStatement.EmitIR(Emitter), () => elseStatement.EmitIR(Emitter));
     }
 }
Esempio n. 14
0
 protected override void LoadFirst(CILEmitter Emitter, bool Reference)
 {
     base.LoadFirst(Emitter, Reference);
     if (sign == OperatorType.Substraction)
     {
         if (Type.Equals(MiniPascalType.Integer))
         {
             Emitter.PushInt32(-1);
         }
         else if (Type.Equals(MiniPascalType.Real))
         {
             Emitter.PushSingle(-1f);
         }
         Emitter.Multiply();
         return;
     }
 }
Esempio n. 15
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.CallStringLessThan();
 }
Esempio n. 16
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.LessThan();
 }
Esempio n. 17
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.CallStringEquals();
     Emitter.PushInt32(0);
     Emitter.Equals();
 }
Esempio n. 18
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Divide();
 }
Esempio n. 19
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Equals();
 }
Esempio n. 20
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.GreaterThan();
     Emitter.PushInt32(0);
     Emitter.Equals();
 }
Esempio n. 21
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.CallStringEquals();
 }
Esempio n. 22
0
 public void EmitIR(CILEmitter Emitter)
 {
     toAssert.EmitIR(Emitter, false);
     Emitter.Assert();
 }
Esempio n. 23
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Modulo();
 }
Esempio n. 24
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.While(() => condition.EmitIR(Emitter, false), () => doStatement.EmitIR(Emitter));
 }
Esempio n. 25
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.GreaterThan();
 }
Esempio n. 26
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Multiply();
 }
Esempio n. 27
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Substract();
 }
Esempio n. 28
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Add();
 }
Esempio n. 29
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.CallStringConcat();
 }
Esempio n. 30
0
 public void EmitIR(CILEmitter Emitter)
 {
     Emitter.Or();
 }