Esempio n. 1
0
 public void EmitIR(CILEmitter Emitter)
 {
     if (Type.IsArray)
     {
         foreach (Variable variable in variables)
         {
             Emitter.CreateArrayVariable(variable.Identifier, Type);
             Type.Size.EmitIR(Emitter, false);
             Emitter.PushArray(Type);
             Emitter.SaveVariable(variable.Identifier);
         }
     }
     else
     {
         foreach (Variable variable in variables)
         {
             Emitter.CreateSimpleVariable(variable.Identifier, Type);
             if (Type.Equals(MiniPascalType.Integer))
             {
                 Emitter.PushInt32(0);
             }
             else if (Type.Equals(MiniPascalType.Real))
             {
                 Emitter.PushSingle(0f);
             }
             else if (Type.Equals(MiniPascalType.String))
             {
                 Emitter.PushString("");
             }
             else if (Type.Equals(MiniPascalType.Boolean))
             {
                 Emitter.PushInt32(0);
             }
             Emitter.SaveVariable(variable.Identifier);
         }
     }
 }
Esempio n. 2
0
 public void SaveVariable(Identifier Variable)
 {
     if (localValueVariables.ContainsKey(Variable))
     {
         generator.Emit(OpCodes.Stloc, localValueVariables[Variable]);
     }
     else
     if (parameters != null && parameters.HasParameter(Variable))
     {
         byte loc = parameters.Index(Variable);
         generator.Emit(OpCodes.Starg_S, loc);
     }
     else
     {
         previous.SaveVariable(Variable);
     }
 }