diff --git a/TestSuite/classfield1.pas b/TestSuite/classfield1.pas new file mode 100644 index 000000000..cd71c7cdf --- /dev/null +++ b/TestSuite/classfield1.pas @@ -0,0 +1,13 @@ +type + cls = class + class i: integer := 3; + j: integer := 4; + class obj: object := new object; + end; + +begin + assert(cls.i = 3); + assert(cls.obj <> nil); + var obj := new cls; + assert(obj.j = 4); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index 3b6008b37..ff7d85e59 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -195,7 +195,10 @@ namespace PascalABCCompiler.TreeConverter case semantic_node_type.local_variable: return new local_variable_reference((local_variable)vd, 0, loc); case semantic_node_type.class_field: - return new class_field_reference((class_field)vd, syntax_tree_visitor.GetCurrentObjectReference((vd as class_field).cont_type.Scope,vd,loc), loc); + if (vd.polymorphic_state == polymorphic_state.ps_static) + return new static_class_field_reference((class_field)vd, loc); + else + return new class_field_reference((class_field)vd, syntax_tree_visitor.GetCurrentObjectReference((vd as class_field).cont_type.Scope,vd,loc), loc); case semantic_node_type.namespace_variable: return new namespace_variable_reference((namespace_variable)vd, loc); case semantic_node_type.local_block_variable: