From 15958fec9f488cfe17db310b07b71f7ab290c289 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Aug 2003 12:43:02 +0000 Subject: [PATCH] * methodpointer fixes --- compiler/cgbase.pas | 16 +++++++++++++--- compiler/ncgcnv.pas | 8 ++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/compiler/cgbase.pas b/compiler/cgbase.pas index 7adcb3c8cf..8825771bb8 100644 --- a/compiler/cgbase.pas +++ b/compiler/cgbase.pas @@ -490,9 +490,16 @@ implementation result := tcgsize(ord(result)+(ord(OS_S8)-ord(OS_8))); end; classrefdef, - pointerdef, - procvardef: + pointerdef: result := OS_ADDR; + procvardef: + begin + if tprocvardef(def).is_methodpointer and + (not tprocvardef(def).is_addressonly) then + result := OS_64 + else + result := OS_ADDR; + end; stringdef : begin if is_ansistring(def) or is_widestring(def) then @@ -574,7 +581,10 @@ implementation end. { $Log$ - Revision 1.59 2003-08-20 17:48:49 peter + Revision 1.60 2003-08-26 12:43:02 peter + * methodpointer fixes + + Revision 1.59 2003/08/20 17:48:49 peter * fixed stackalloc to not allocate localst.datasize twice * order of stackalloc code fixed for implicit init/final diff --git a/compiler/ncgcnv.pas b/compiler/ncgcnv.pas index b3e96c2e76..7516608db6 100644 --- a/compiler/ncgcnv.pas +++ b/compiler/ncgcnv.pas @@ -302,7 +302,8 @@ interface begin { method pointer ? } - if assigned(tunarynode(left).left) then + if tabstractprocdef(left.resulttype.def).is_methodpointer and + not(tabstractprocdef(left.resulttype.def).is_addressonly) then begin location_copy(location,left.location); end @@ -510,7 +511,10 @@ end. { $Log$ - Revision 1.44 2003-06-03 21:11:09 peter + Revision 1.45 2003-08-26 12:43:02 peter + * methodpointer fixes + + Revision 1.44 2003/06/03 21:11:09 peter * cg.a_load_* get a from and to size specifier * makeregsize only accepts newregister * i386 uses generic tcgnotnode,tcgunaryminus