* handle postfix type declations in typedefs properly

* small indention fixes
* omit empty lines after TypeName

git-svn-id: trunk@13822 -
This commit is contained in:
florian 2009-10-09 12:37:33 +00:00
parent 48e259876b
commit e17d6c1624
2 changed files with 47 additions and 43 deletions

View File

@ -1970,7 +1970,9 @@ begin
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
end;
end
else
writeln(outfile);
no_pop:=assigned(yyv[yysp-2]) and (yyv[yysp-2]^.str='no_pop');
shift(3);
(* Get the name to write the type definition for, try
@ -1987,7 +1989,6 @@ begin
end;
(* write type definition *)
is_procvar:=false;
writeln(outfile);
TN:=TypeName(ph^.p);
PN:=PointerName(ph^.p);
if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
@ -1996,7 +1997,7 @@ begin
(* write new type name *)
write(outfile,aktspace,TN,' = ');
shift(2);
write_type_specifier(outfile,yyv[yysp-3]);
write_p_a_def(outfile,yyv[yysp-1]^.p1^.p1,yyv[yysp-3]);
popshift;
(* if no_pop it is normal fpc calling convention *)
if is_procvar and
@ -2047,10 +2048,11 @@ begin
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
end;
end
else
writeln(outfile);
shift(3);
(* write as pointer *)
writeln(outfile);
writeln(outfile,'(* generic typedef *)');
writeln(outfile,aktspace,yyv[yysp-1]^.p,' = pointer;');
flush(outfile);

View File

@ -1772,42 +1772,42 @@ declaration :
shift(3);
if ( yyv[yysp-1]^.p2 <> nil ) then
begin
(* write new type name *)
TN:=TypeName($1^.p2^.p);
PN:=PointerName($1^.p2^.p);
(* define a Pointer type also for structs *)
if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
assigned($1) and ($1^.typ in [t_uniondef,t_structdef]) then
writeln(outfile,aktspace,PN,' = ^',TN,';');
write(outfile,aktspace,TN,' = ');
shift(2);
hp:=$1;
write_type_specifier(outfile,hp);
popshift;
(* enum_to_const can make a switch to const *)
if block_type=bt_type then
writeln(outfile,';');
writeln(outfile);
flush(outfile);
popshift;
if must_write_packed_field then
write_packed_fields_info(outfile,hp,TN);
if assigned(hp) then
dispose(hp,done)
(* write new type name *)
TN:=TypeName($1^.p2^.p);
PN:=PointerName($1^.p2^.p);
(* define a Pointer type also for structs *)
if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
assigned($1) and ($1^.typ in [t_uniondef,t_structdef]) then
writeln(outfile,aktspace,PN,' = ^',TN,';');
write(outfile,aktspace,TN,' = ');
shift(2);
hp:=$1;
write_type_specifier(outfile,hp);
popshift;
(* enum_to_const can make a switch to const *)
if block_type=bt_type then
writeln(outfile,';');
writeln(outfile);
flush(outfile);
popshift;
if must_write_packed_field then
write_packed_fields_info(outfile,hp,TN);
if assigned(hp) then
dispose(hp,done)
end
else
begin
TN:=TypeName(yyv[yysp-1]^.str);
PN:=PointerName(yyv[yysp-1]^.str);
if UsePPointers then writeln(outfile,aktspace,PN,' = ^',TN,';');
if PackRecords then
writeln(outfile, aktspace, TN, ' = packed record')
else
writeln(outfile, aktspace, TN, ' = record');
writeln(outfile, aktspace, ' {undefined structure}');
writeln(outfile, aktspace, ' end;');
writeln(outfile);
popshift;
TN:=TypeName(yyv[yysp-1]^.str);
PN:=PointerName(yyv[yysp-1]^.str);
if UsePPointers then writeln(outfile,aktspace,PN,' = ^',TN,';');
if PackRecords then
writeln(outfile, aktspace, TN, ' = packed record')
else
writeln(outfile, aktspace, TN, ' = record');
writeln(outfile, aktspace, ' {undefined structure}');
writeln(outfile, aktspace, ' end;');
writeln(outfile);
popshift;
end;
} |
TYPEDEF STRUCT dname dname SEMICOLON
@ -1887,7 +1887,9 @@ declaration :
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
end;
end
else
writeln(outfile);
no_pop:=assigned($3) and ($3^.str='no_pop');
shift(3);
(* Get the name to write the type definition for, try
@ -1904,7 +1906,6 @@ declaration :
end;
(* write type definition *)
is_procvar:=false;
writeln(outfile);
TN:=TypeName(ph^.p);
PN:=PointerName(ph^.p);
if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
@ -1913,7 +1914,7 @@ declaration :
(* write new type name *)
write(outfile,aktspace,TN,' = ');
shift(2);
write_type_specifier(outfile,$2);
write_p_a_def(outfile,$4^.p1^.p1,$2);
popshift;
(* if no_pop it is normal fpc calling convention *)
if is_procvar and
@ -1963,10 +1964,11 @@ declaration :
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
end;
end
else
writeln(outfile);
shift(3);
(* write as pointer *)
writeln(outfile);
writeln(outfile,'(* generic typedef *)');
writeln(outfile,aktspace,$2^.p,' = pointer;');
flush(outfile);