12 byval proc as FBSYMBOL
ptr, _
13 byval procmode
as integer, _
14 byval isproto
as integer _
19 byval parent as FBSYMBOL
ptr, _
20 byval proc as FBSYMBOL
ptr _
28 byval parent as FBSYMBOL
ptr, _
29 byval proc as FBSYMBOL
ptr, _
30 byval procmode
as integer, _
31 byval isproto
as integer _
34 dim as longint length =
any
40 if( symbIsMethod(
proc ) )
then
42 length += env.pointersize
60 if( param = NULL )
then
64 length += symbGetLen( param )
67 if( param->param.mode = FB_PARAMMODE_VARARG )
then
89 if( length > (env.pointersize * 64) )
then
97 byval proc as FBSYMBOL
ptr, _
98 byval pid
as zstring ptr, _
100 byval delta
as integer = 1 _
113 byval proc as FBSYMBOL
ptr, _
114 byval pid
as zstring ptr, _
115 byval msgnum
as FB_ERRMSG, _
116 byval delta
as integer = 1 _
127 byval proc as FBSYMBOL
ptr, _
128 byval pid
as zstring ptr, _
129 byval param
as FBSYMBOL
ptr _
132 dim as ASTNODE
ptr expr =
any
133 dim as integer inioptions =
any
139 if( symbGetParamMode( param ) <> FB_PARAMMODE_BYVAL )
then
140 if( symbGetParamMode( param ) <> FB_PARAMMODE_BYREF )
then
147 select case( symbGetType( param ) )
148 case FB_DATATYPE_VOID, FB_DATATYPE_FWDREF
155 if( expr = NULL )
then
160 assert( astDtorListIsEmpty( ) )
179 byval proc as FBSYMBOL
ptr, _
180 byval pmode
as integer =
INVALID _
183 dim as integer dtype =
any
186 pmode = env.opt.parammode
189 if( pmode = FB_PARAMMODE_VARARG )
then
190 dtype = FB_DATATYPE_INVALID
192 dtype = FB_DATATYPE_INTEGER
203 byval proc as FBSYMBOL
ptr, _
204 byval proc_mode
as integer, _
205 byval isproto
as integer _
208 static as zstring * FB_MAXNAMELEN+1 idTB(0
to FB_MAXARGRECLEVEL-1)
209 static as integer reclevel = 0
210 dim as zstring ptr id =
any
211 dim as ASTNODE
ptr optexpr =
any
212 dim as integer dtype =
any, mode =
any
213 dim as integer attrib =
any
214 dim as integer readid =
any, dotpos =
any, doskip =
any, dontinit =
any, use_default =
any
215 dim as FBSYMBOL
ptr subtype =
any, param =
any
237 if( symbGetProcParams(
proc ) = 0 )
then
243 if( proc_mode <> FB_FUNCMODE_CDECL )
then
249 FB_PARAMMODE_VARARG, 0 )
263 mode = FB_PARAMMODE_BYVAL
266 mode = FB_PARAMMODE_BYREF
278 case FB_TKCLASS_IDENTIFIER
282 case FB_TKCLASS_KEYWORD, FB_TKCLASS_QUIRKWD
286 if( isproto = FALSE )
then
300 if( (
lexGetToken( ) <> CHAR_LPRNT)
or (isproto = FALSE) )
then
312 if( reclevel >= FB_MAXARGRECLEVEL )
then
325 dotpos = lexGetPeriodPos( )
327 dtype = lexGetType( )
328 hCheckSuffix( dtype )
333 dtype = FB_DATATYPE_INVALID
341 if( (mode <>
INVALID)
or (
hMatch( CHAR_RPRNT ) = FALSE) )
then
344 mode = FB_PARAMMODE_BYDESC
349 mode = env.opt.parammode
351 if( fbPdCheckIsSet( FB_PDCHECK_PARAMMODE ) )
then
360 if( dtype <> FB_DATATYPE_INVALID )
then
368 dim as integer options = FB_SYMBTYPEOPT_DEFAULT
370 if( mode = FB_PARAMMODE_BYREF )
then
372 options
or= FB_SYMBTYPEOPT_ALLOWFORWARD
374 options
and=
not FB_SYMBTYPEOPT_CHECKSTRPTR
377 if(
cSymbolType( dtype, subtype, 0, options ) = FALSE )
then
380 dtype = FB_DATATYPE_INTEGER
385 if( mode = FB_PARAMMODE_BYVAL )
then
392 if( fbLangOptIsSet( FB_LANG_OPT_DEFTYPE ) = FALSE )
then
396 if( readid = FALSE )
then
403 attrib
or= FB_SYMBATTRIB_SUFFIXED
407 if( fbLangIsSet( FB_LANG_FB ) )
then
410 if( use_default )
then
416 if( dtype = FB_DATATYPE_INVALID )
then
425 select case as const typeGet( dtype )
427 case FB_DATATYPE_FIXSTR, FB_DATATYPE_CHAR, FB_DATATYPE_WCHAR
428 if( mode = FB_PARAMMODE_BYVAL
or typeGet( dtype ) = FB_DATATYPE_FIXSTR )
then
431 dtype = typeAddrOf( dtype )
435 case FB_DATATYPE_VOID
436 if( isproto = FALSE )
then
439 dtype = typeAddrOf( dtype )
441 if( mode = FB_PARAMMODE_BYVAL )
then
444 dtype = typeAddrOf( dtype )
448 case FB_DATATYPE_STRUCT
449 if( isproto = FALSE )
then
451 if( dotpos > 0 )
then
456 case FB_DATATYPE_STRING
457 if( mode = FB_PARAMMODE_BYVAL )
then
458 if( fbPdCheckIsSet( FB_PDCHECK_PARAMMODE ) )
then
471 dtype, subtype, mode, attrib )
472 if( param = NULL )
then
476 if( isproto = FALSE )
then
477 if( symbGetLen( param ) > (env.pointersize * 4) )
then
478 if( fbPdCheckIsSet( FB_PDCHECK_PARAMSIZE ) )
then
486 if( mode = FB_PARAMMODE_BYDESC )
then
498 if( optexpr = NULL )
then
507 symbSetDontInit( param )