public FieldBuilder DefineField(string name, Runtime.TypeDescr type, FieldAttributes attr) { ILGenerator il; FieldBuilder fb = tb.DefineField(name, type.getRuntimeType(), attr); fbList.Add (name, fb); // emit initializing of fild in constructor System.Type rtc = type.getRuntimeType (); System.Type[] types = null; if ((attr & FieldAttributes.Static) == 0) { cil.Emit (OpCodes.Ldarg_0); il = cil; } else { il = ccil; } switch (type.getInternalType ()) { case Runtime.InternalType.c: il.Emit (OpCodes.Ldc_I4, type.getLength ()); //push 1st argument = text length il.Emit (OpCodes.Ldstr, ""); //push 2nd argument = inital string types = new Type[2]; types [0] = typeof(int); types [1] = typeof(string); il.Emit (OpCodes.Newobj, rtc.GetConstructor (types)); break; case Runtime.InternalType.n: break; case Runtime.InternalType.d: break; case Runtime.InternalType.t: break; case Runtime.InternalType.i: il.Emit (OpCodes.Ldc_I4, 0); //push 1st argument = initial integer value types = new Type[1]; types [0] = typeof(int); il.Emit (OpCodes.Newobj, rtc.GetConstructor (types)); break; case Runtime.InternalType.p: il.Emit (OpCodes.Ldc_R8, 0.0); //push 1st argument = initial integer value types = new Type[1]; types [0] = typeof(int); il.Emit (OpCodes.Newobj, rtc.GetConstructor (types)); break; } if ((attr & FieldAttributes.Static) != 0) { il.Emit (OpCodes.Stsfld, fb); } else { il.Emit (OpCodes.Stfld, fb); } return fb; }