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); } } }
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); } }