diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index aecfe4435..7a11b6578 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -3008,7 +3008,8 @@ namespace PascalABCCompiler.NETGenerator private void CreateArrayForClassField(ILGenerator il, FieldBuilder fb, TypeInfo ti, IArrayInitializer InitalValue, ITypeNode ArrayType) { int rank = 1; - il.Emit(OpCodes.Ldarg_0); + if (!fb.IsStatic) + il.Emit(OpCodes.Ldarg_0); if (NETGeneratorTools.IsBoundedArray(ti)) NETGeneratorTools.CreateBoundedArray(il, fb, ti); else @@ -3023,8 +3024,13 @@ namespace PascalABCCompiler.NETGenerator if (InitalValue != null) { LocalBuilder lb = null; - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldfld, fb); + if (!fb.IsStatic) + { + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, fb); + } + else + il.Emit(OpCodes.Ldsfld, fb); if (NETGeneratorTools.IsBoundedArray(ti)) { lb = il.DeclareLocal(ti.arr_fld.FieldType); diff --git a/TestSuite/arrays12.pas b/TestSuite/arrays12.pas new file mode 100644 index 000000000..7056b7120 --- /dev/null +++ b/TestSuite/arrays12.pas @@ -0,0 +1,14 @@ +type + t1=class + + static a: array of integer := (0,1); + static a2: array[1..2] of integer := (0,1); + b: array of integer := (0,1); + end; + +begin + assert(t1.a[1] = 1); + assert(t1.a2[2] = 1); + var o := new t1; + assert(o.b[1] = 1); +end. \ No newline at end of file