diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs
index c332a69c4..cca569e36 100644
--- a/Configuration/GlobalAssemblyInfo.cs
+++ b/Configuration/GlobalAssemblyInfo.cs
@@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "4";
public const string Build = "2";
- public const string Revision = "1941";
+ public const string Revision = "1950";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
diff --git a/Configuration/Version.defs b/Configuration/Version.defs
index b43f1975c..ebb509575 100644
--- a/Configuration/Version.defs
+++ b/Configuration/Version.defs
@@ -1,4 +1,4 @@
-%COREVERSION%=2
-%REVISION%=1941
%MINOR%=4
+%REVISION%=1950
+%COREVERSION%=2
%MAJOR%=3
diff --git a/NETGenerator/Helpers.cs b/NETGenerator/Helpers.cs
index 0afedc2bc..230b52d63 100644
--- a/NETGenerator/Helpers.cs
+++ b/NETGenerator/Helpers.cs
@@ -194,6 +194,7 @@ namespace PascalABCCompiler.NETGenerator {
public class GenericFldInfo : FldInfo
{
private Type _field_type;
+ public FieldInfo prev_fi; // передаю чтобы на третьем этапе в NegGenerator.cs (примерно 1586) можно было сконструировать правильный тип. Костыль для #1632
public override Type field_type
{
@@ -203,10 +204,11 @@ namespace PascalABCCompiler.NETGenerator {
}
}
- public GenericFldInfo(FieldInfo fi, Type field_type)
+ public GenericFldInfo(FieldInfo fi, Type field_type, FieldInfo prev_fi)
: base(fi)
{
_field_type = field_type;
+ this.prev_fi = prev_fi;
}
}
@@ -698,14 +700,14 @@ namespace PascalABCCompiler.NETGenerator {
return fi;
}
- public FldInfo AddGenericField(ICommonClassFieldNode f, FieldInfo fb, Type field_type)
+ public FldInfo AddGenericField(ICommonClassFieldNode f, FieldInfo fb, Type field_type, FieldInfo prev_fi)
{
- FldInfo fi = new GenericFldInfo(fb, field_type);
+ FldInfo fi = new GenericFldInfo(fb, field_type, prev_fi); // prev_fi - чтобы сконструировать на последнем этапе fi
#if DEBUG
/*if (f.name == "XYZW")
{
var y = f.GetHashCode();
- }*/
+ } */
#endif
defs[f] = fi;
return fi;
@@ -719,15 +721,15 @@ namespace PascalABCCompiler.NETGenerator {
/*if (f.name == "XYZW")
{
var y = f.GetHashCode();
- }*/
- /*if (r == null && f.name == "XYZW")
+ }
+ if (r == null && f.name == "XYZW")
{
foreach (var k in defs.Keys)
{
if ((k is ICommonClassFieldNode) && (k as ICommonClassFieldNode).name == "XYZW")
return (FldInfo)defs[k];
}
- }*/
+ } */
#endif
return r;
}
@@ -919,7 +921,8 @@ namespace PascalABCCompiler.NETGenerator {
{
if (type.type_special_kind == type_special_kind.text_file)
ti.is_text_file = true;
- if (!ti.is_set && !ti.is_typed_file && !ti.is_text_file) return ti;
+ if (!ti.is_set && !ti.is_typed_file && !ti.is_text_file)
+ return ti;
if (ti.clone_meth == null && !ti.is_typed_file && !ti.is_text_file)
{
if (type is ICommonTypeNode)
diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs
index aa767d63d..4dad6d42e 100644
--- a/NETGenerator/NETGenerator.cs
+++ b/NETGenerator/NETGenerator.cs
@@ -1498,7 +1498,7 @@ namespace PascalABCCompiler.NETGenerator
Type ftype = GetTypeOfGenericInstanceField(t, icfn.compiled_field);
FieldInfo fi = TypeBuilder.GetField(t, icfn.compiled_field);
- helper.AddGenericField(value.used_members[dn] as ICommonClassFieldNode, fi, ftype);
+ helper.AddGenericField(value.used_members[dn] as ICommonClassFieldNode, fi, ftype, null);
continue;
}
}
@@ -1562,14 +1562,44 @@ namespace PascalABCCompiler.NETGenerator
{
FieldInfo finfo = fldinfo.fi;
Type ftype = GetTypeOfGenericInstanceField(t, finfo);
- FieldInfo fi = TypeBuilder.GetField(t, finfo);
- helper.AddGenericField(value.used_members[dn] as ICommonClassFieldNode, fi, ftype);
+ FieldInfo fi = TypeBuilder.GetField(t, finfo); // возвращает fi: FieldOnTypeBuilderInstantiation
+ helper.AddGenericField(value.used_members[dn] as ICommonClassFieldNode, fi, ftype, finfo); // передаю также старое finfo чтобы на следующей итерации вызовом TypeBuilder.GetField(t, finfo) сконструировать правильное fi
}
else
{
- FieldInfo finfo = fldinfo.fi;
- FieldInfo fi = finfo;
- helper.AddGenericField(value.used_members[dn] as ICommonClassFieldNode, fi, (fldinfo as GenericFldInfo).field_type);
+ /* Вот этот код не выполняется ни в одном тесте и в примере
+ type
+ Base
var d := new DateTime(2015,5,15);
- var p := new class(d.Day, d.Month, d.Year);
Println(p.Day,
+ var p := new class(d.Day, d.Month, d.Year);
Println(p.Day,
p.Month, p.Year);
Println(p);