From 425d899e9ff5783e306d4817c793a15e9f37ce4f Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 4 Jun 2001 11:51:59 +0000 Subject: [PATCH] * enum type declarations assignments can also be of the same enum type --- compiler/ptype.pas | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/compiler/ptype.pas b/compiler/ptype.pas index 2b86ba177c..2b98d22213 100644 --- a/compiler/ptype.pas +++ b/compiler/ptype.pas @@ -367,7 +367,6 @@ implementation setdefdecl(pt.resulttype) else begin - do_resulttypepass(pt); if (pt.nodetype=rangen) then begin if (trangenode(pt).left.nodetype=ordconstn) and @@ -423,6 +422,9 @@ implementation ap.elementtype:=tt2; end; + var + p : tnode; + enumdupmsg : boolean; begin tt.reset; case token of @@ -435,6 +437,7 @@ implementation consume(_LKLAMMER); { allow negativ value_str } l:=-1; + enumdupmsg:=false; aktenumdef:=tenumdef.create; repeat s:=orgpattern; @@ -447,21 +450,31 @@ implementation consume(_ASSIGNMENT); v:=get_intconst; { please leave that a note, allows type save } - { declarations in the win32 units ! } - if v<=l then - Message(parser_n_duplicate_enum); + { declarations in the win32 units ! } + if (v<=l) and (not enumdupmsg) then + begin + Message(parser_n_duplicate_enum); + enumdupmsg:=true; + end; l:=v; end else if (m_delphi in aktmodeswitches) and (token=_EQUAL) then begin consume(_EQUAL); - v:=get_intconst; - { please leave that a note, allows type save } - { declarations in the win32 units ! } - if v<=l then - Message(parser_n_duplicate_enum); - l:=v; + p:=comp_expr(true); + if (p.nodetype=ordconstn) then + begin + { we expect an integer or an enum of the + same type } + if is_integer(p.resulttype.def) or + is_equal(p.resulttype.def,aktenumdef) then + l:=v + else + Message2(type_e_incompatible_types,p.resulttype.def.typename,s32bittype.def.typename); + end + else + Message(cg_e_illegal_expression) end else inc(l); @@ -586,7 +599,11 @@ implementation end. { $Log$ - Revision 1.24 2001-06-03 20:16:19 peter + Revision 1.25 2001-06-04 11:51:59 peter + * enum type declarations assignments can also be of the same enum + type + + Revision 1.24 2001/06/03 20:16:19 peter * allow int64 in range declaration for new types Revision 1.23 2001/04/13 01:22:13 peter