+ "compilerproc" directive support, which turns both the public and mangled

name to lowercase(declaration_name). This prevents a normal user from
    accessing the routine, but they can still be easily looked up within
    the compiler. This is used for helper procedures and should facilitate
    the writing of more processor independent code in the code generator
    itself (mostly written by Peter)
  + new "createintern" constructor for tcal nodes to create a call to
    helper exported using the "compilerproc" directive
  + support for high(dynamic_array) using the the above new things
  + definition of 'HASCOMPILERPROC' symbol (to be able to check in the
    compiler and rtl whether the "compilerproc" directive is supported)
This commit is contained in:
Jonas Maebe 2001-08-01 15:07:29 +00:00
parent b9f6efc85b
commit 367f7a0362
6 changed files with 132 additions and 17 deletions

View File

@ -44,6 +44,9 @@ interface
{ only the processor specific nodes need to override this }
{ constructor }
constructor create(l:tnode; v : tprocsym;st : tsymtable; mp : tnode);virtual;
{$ifdef hascompilerproc}
constructor createintern(const name: string; params: tnode);
{$endif hascompilerproc}
destructor destroy;override;
function getcopy : tnode;override;
procedure insertintolist(l : tnodelist);override;
@ -537,6 +540,18 @@ implementation
procdefinition:=nil;
end;
{$ifdef hascompilerproc}
constructor tcallnode.createintern(const name: string; params: tnode);
var
srsym: tsym;
begin
srsym := searchsymonlyin(systemunit,name);
if not assigned(srsym) or
(srsym.typ <> procsym) then
internalerror(200107271);
self.create(params,tprocsym(srsym),systemunit,nil);
end;
{$endif hascompilerproc}
destructor tcallnode.destroy;
begin
@ -1666,7 +1681,20 @@ begin
end.
{
$Log$
Revision 1.38 2001-07-30 20:52:25 peter
Revision 1.39 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.38 2001/07/30 20:52:25 peter
* fixed array constructor passing with type conversions
Revision 1.37 2001/07/09 21:15:40 peter

View File

@ -1280,6 +1280,7 @@ begin
def_symbol('PACKENUMFIXED');
def_symbol('HAS_ADDR_STACK_ON_STACK');
def_symbol('NOBOUNDCHECK');
def_symbol('HASCOMPILERPROC');
{ some stuff for TP compatibility }
{$ifdef i386}
@ -1563,7 +1564,20 @@ finalization
end.
{
$Log$
Revision 1.51 2001-07-31 19:38:46 peter
Revision 1.52 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.51 2001/07/31 19:38:46 peter
* removed fpu_in_rtl define (merged)
Revision 1.50 2001/07/30 21:39:26 peter

View File

@ -1105,6 +1105,7 @@ begin
end;
end;
type
pd_handler=procedure;
proc_dir_rec=record
@ -1119,7 +1120,7 @@ type
end;
const
{Should contain the number of procedure directives we support.}
num_proc_directives=33;
num_proc_directives=34;
proc_direcdata:array[1..num_proc_directives] of proc_dir_rec=
(
(
@ -1428,6 +1429,15 @@ const
pocall_leftright,pocall_inline];
mutexclpotype : [];
mutexclpo : [po_assembler,po_interrupt]
),(
idtok:_COMPILERPROC;
pd_flags : pd_interface+pd_implemen+pd_body+pd_notobjintf;
handler : nil;
pocall : [pocall_compilerproc];
pooption : [];
mutexclpocall : [];
mutexclpotype : [];
mutexclpo : [po_interrupt]
)
);
@ -1811,6 +1821,17 @@ const
else
p:=pd;
aktprocsym.definition:=hd;
{ for compilerproc defines we need to rename and update the
mangledname }
if (pocall_compilerproc in aktprocsym.definition.proccalloptions) then
begin
{ rename to lowercase so users can't access it }
aktprocsym.owner.rename(aktprocsym.name,lower(aktprocsym.name));
{ also update the realname that is stored in the ppu }
stringdispose(aktprocsym._realname);
aktprocsym._realname:=stringdup('$'+aktprocsym.name);
aktprocsym.definition.setmangledname(aktprocsym.name);
end;
check_identical_proc:=true;
break;
end
@ -1886,7 +1907,20 @@ const
end.
{
$Log$
Revision 1.29 2001-07-09 21:11:14 peter
Revision 1.30 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.29 2001/07/09 21:11:14 peter
* fixed overload checking for delphi. Empty parameters are only
allowed in implementation and not when the forward declaration
contains overload directive

View File

@ -1044,15 +1044,13 @@ implementation
if (Errorcount=0) then
tppumodule(current_module).writeppu;
if not(cs_compilesystem in aktmoduleswitches) then
if store_interface_crc<>current_module.interface_crc then
Comment(V_Warning,current_module.ppufilename^+' Interface CRC changed '+
hexstr(store_crc,8)+'<>'+hexstr(current_module.interface_crc,8));
{$ifdef EXTDEBUG}
if not(cs_compilesystem in aktmoduleswitches) then
if (store_crc<>current_module.crc) and simplify_ppu then
Comment(V_Warning,current_module.ppufilename^+' implementation CRC changed '+
hexstr(store_crc,8)+'<>'+hexstr(current_module.interface_crc,8));
if store_interface_crc<>current_module.interface_crc then
Comment(V_Warning,current_module.ppufilename^+' Interface CRC changed '+
hexstr(store_crc,8)+'<>'+hexstr(current_module.interface_crc,8));
if (store_crc<>current_module.crc) and simplify_ppu then
Comment(V_Warning,current_module.ppufilename^+' implementation CRC changed '+
hexstr(store_crc,8)+'<>'+hexstr(current_module.interface_crc,8));
{$endif EXTDEBUG}
{ remove static symtable (=refsymtable) here to save some mem }
@ -1335,7 +1333,20 @@ implementation
end.
{
$Log$
Revision 1.38 2001-07-30 20:59:27 peter
Revision 1.39 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.38 2001/07/30 20:59:27 peter
* m68k updates from v10 merged
Revision 1.37 2001/06/18 20:36:25 peter

View File

@ -199,8 +199,8 @@ type
pocall_inline, { Procedure is an assembler macro }
pocall_internproc, { Procedure has compiler magic}
pocall_internconst, { procedure has constant evaluator intern }
pocall_cppdecl { C++ calling conventions }
,pocall_13
pocall_cppdecl, { C++ calling conventions }
pocall_compilerproc { Procedure is used for internal compiler calls }
,pocall_14
,pocall_15
,pocall_16
@ -450,7 +450,20 @@ implementation
end.
{
$Log$
Revision 1.20 2001-06-04 18:14:54 peter
Revision 1.21 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.20 2001/06/04 18:14:54 peter
* varargs added for proc to procvar comparison
Revision 1.19 2001/06/04 11:53:13 peter

View File

@ -214,6 +214,7 @@ type
_INTERNCONST,
_REINTRODUCE,
_SHORTSTRING,
_COMPILERPROC,
_FINALIZATION,
_DISPINTERFACE,
_SAVEREGISTERS,
@ -436,6 +437,7 @@ const
(str:'INTERNCONST' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'REINTRODUCE' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'SHORTSTRING' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'COMPILERPROC' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'FINALIZATION' ;special:false;keyword:m_initfinal;op:NOTOKEN),
(str:'DISPINTERFACE' ;special:false;keyword:m_class;op:NOTOKEN),
(str:'SAVEREGISTERS' ;special:false;keyword:m_none;op:NOTOKEN),
@ -495,7 +497,20 @@ end;
end.
{
$Log$
Revision 1.12 2001-07-30 20:59:28 peter
Revision 1.13 2001-08-01 15:07:29 jonas
+ "compilerproc" directive support, which turns both the public and mangled
name to lowercase(declaration_name). This prevents a normal user from
accessing the routine, but they can still be easily looked up within
the compiler. This is used for helper procedures and should facilitate
the writing of more processor independent code in the code generator
itself (mostly written by Peter)
+ new "createintern" constructor for tcal nodes to create a call to
helper exported using the "compilerproc" directive
+ support for high(dynamic_array) using the the above new things
+ definition of 'HASCOMPILERPROC' symbol (to be able to check in the
compiler and rtl whether the "compilerproc" directive is supported)
Revision 1.12 2001/07/30 20:59:28 peter
* m68k updates from v10 merged
Revision 1.11 2001/06/03 21:57:38 peter