From fed62c2f70081ed169e1c9b17997e0dc76fdb5af Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 23 May 2004 20:55:38 +0000 Subject: [PATCH] * Patch from Christian Iversen to support sizeof() in preprocessor --- compiler/scanner.pas | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/compiler/scanner.pas b/compiler/scanner.pas index 4065da6080..1fee455d24 100644 --- a/compiler/scanner.pas +++ b/compiler/scanner.pas @@ -209,7 +209,7 @@ implementation cutils, systems, switches, - symbase,symtable,symtype, + symbase,symtable,symtype,symsym,symconst, fmodule; var @@ -432,6 +432,41 @@ implementation Message(scan_e_error_in_preproc_expr); end else + if preproc_substitutedtoken='SIZEOF' then + begin + preproc_consume(_ID); + current_scanner.skipspace; + if current_scanner.preproc_token =_LKLAMMER then + begin + preproc_consume(_LKLAMMER); + current_scanner.skipspace; + end + else + Message(scan_e_error_in_preproc_expr); + if searchsym(current_scanner.preproc_pattern,srsym,srsymtable) then + begin + l:=0; + case srsym.typ of + varsym : + l:=tvarsym(srsym).getsize; + typedconstsym : + l:=ttypedconstsym(srsym).getsize; + else + Message(scan_e_error_in_preproc_expr); + end; + str(l,read_factor); + preproc_consume(_ID); + current_scanner.skipspace; + end + else + Message1(sym_e_id_not_found,current_scanner.preproc_pattern); + + if current_scanner.preproc_token =_RKLAMMER then + preproc_consume(_RKLAMMER) + else + Message(scan_e_error_in_preproc_expr); + end + else if preproc_substitutedtoken='DECLARED' then begin preproc_consume(_ID); @@ -3110,7 +3145,10 @@ exit_label: end. { $Log$ - Revision 1.78 2004-05-19 23:29:56 peter + Revision 1.79 2004-05-23 20:55:38 peter + * Patch from Christian Iversen to support sizeof() in preprocessor + + Revision 1.78 2004/05/19 23:29:56 peter * $message directive compatible with delphi Revision 1.77 2004/05/16 13:55:26 peter