diff --git a/TestSuite/enum8.pas b/TestSuite/enum8.pas new file mode 100644 index 000000000..2477c0a6c --- /dev/null +++ b/TestSuite/enum8.pas @@ -0,0 +1,9 @@ +type + enum1 = ( + v1 = 1, + v2 = v1 + ); + +begin + assert(v2 = v1); +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 efe9250c7..650ac3d69 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -679,9 +679,11 @@ namespace PascalABCCompiler.TreeConverter AddError(new CanNotConvertTypes(en, dm.proper_methods[0].ret_type, to, loc)); // SSM 18/06/20 #2261 else return en; - } + } else if (en.type is undefined_type && en is base_function_call bfc) throw new SimpleSemanticError(loc, "RETURN_TYPE_UNDEFINED_{0}", bfc.function.name); + else if (en is enum_const_node && (en as enum_const_node).constant_value != 0) + return new int_const_node((en as enum_const_node).constant_value, loc); else AddError(new CanNotConvertTypes(en, en.type, to, loc)); } diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 1d0c8883b..1430477e6 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1112,6 +1112,12 @@ namespace PascalABCCompiler.TreeConverter type_node left_type = left.type; type_node right_type = right.type; + if (left_type == null && left is enum_const_node) + { + left_type = SystemLibrary.SystemLibrary.integer_type; + left.type = left_type; + } + if (left_type.semantic_node_type == semantic_node_type.delegated_method) {