* fix parsing of typecasts in type declarations

git-svn-id: trunk@2026 -
This commit is contained in:
peter 2005-12-22 12:21:06 +00:00
parent 5ff0e08283
commit 80fef1e8ad
3 changed files with 11 additions and 7 deletions

View File

@ -177,7 +177,7 @@ than 255 characters. That's why using Ansi Strings}
{ currently parsed block type }
tblock_type = (bt_none,
bt_general,bt_type,bt_const,bt_except,bt_body
bt_general,bt_type,bt_const,bt_except,bt_body,bt_specialize
);
{ Temp types }

View File

@ -1312,7 +1312,7 @@ implementation
if (htype.def=cvarianttype.def) and
not(cs_compilesystem in aktmoduleswitches) then
current_module.flags:=current_module.flags or uf_uses_variants;
if (block_type<>bt_type) and
if (block_type<>bt_specialize) and
try_to_consume(_LKLAMMER) then
begin
p1:=comp_expr(true);
@ -1392,7 +1392,7 @@ implementation
{ For a type block we simply return only
the type. For all other blocks we return
a loadvmt node }
if (block_type<>bt_type) then
if not(block_type in [bt_type,bt_specialize]) then
p1:=cloadvmtaddrnode.create(p1);
end;
end

View File

@ -359,7 +359,9 @@ implementation
pt1,pt2 : tnode;
lv,hv : TConstExprInt;
ispecialization : boolean;
old_block_type : tblock_type;
begin
old_block_type:=block_type;
{ use of current parsed object:
- classes can be used also in classes
- objects can be parameters }
@ -376,12 +378,13 @@ implementation
exit;
end;
{ Generate a specialization? }
ispecialization:=try_to_consume(_SPECIALIZE);
if try_to_consume(_SPECIALIZE) then
block_type:=bt_specialize;
{ we can't accept a equal in type }
pt1:=comp_expr(not(ignore_equal));
if (token=_POINTPOINT) then
if (block_type<>bt_specialize) and
try_to_consume(_POINTPOINT) then
begin
consume(_POINTPOINT);
{ get high value of range }
pt2:=comp_expr(not(ignore_equal));
{ make both the same type or give an error. This is not
@ -427,7 +430,7 @@ implementation
{ a simple type renaming or generic specialization }
if (pt1.nodetype=typen) then
begin
if ispecialization then
if (block_type=bt_specialize) then
generate_specialization(pt1,name);
tt:=ttypenode(pt1).resulttype;
end
@ -435,6 +438,7 @@ implementation
Message(sym_e_error_in_type_def);
end;
pt1.free;
block_type:=old_block_type;
end;
procedure array_dec;