16 byval proc as FBSYMBOL
ptr,
_
17 byval dtype
as integer,
_
18 byval subtype
as FBSYMBOL
ptr,
_
19 byval attrib
as integer,
_
20 byval mode
as integer _
30 symb.globctorlist.head = NULL
31 symb.globctorlist.tail = NULL
32 listInit( @symb.globctorlist.
list, 8,
len( FB_GLOBCTORLIST_ITEM ), LIST_FLAGS_NOCLEAR )
34 symb.globdtorlist.head = NULL
35 symb.globdtorlist.tail = NULL
36 listInit( @symb.globdtorlist.
list, 8,
len( FB_GLOBCTORLIST_ITEM ), LIST_FLAGS_NOCLEAR )
53 assert( symbIsProc(
proc ) )
67 assert( symbIsProc(
proc ) )
71 if( symbProcReturnsByref(
proc ) )
then
76 if( symbGetType(
proc ) = FB_DATATYPE_STRUCT )
then
79 function = (typeGetDtAndPtrOnly( symbGetProcRealType(
proc ) ) = typeAddrOf( FB_DATATYPE_STRUCT ))
85 byval value
as longint,
_
86 byval align
as integer _
88 function = (value + (align-1))
and (
not (align-1))
93 byval dtype
as integer,
_
94 byval subtype
as FBSYMBOL
ptr,
_
95 byval mode
as integer _
99 case FB_PARAMMODE_BYREF, FB_PARAMMODE_BYDESC
100 return env.pointersize
105 select case( typeGetDtAndPtrOnly( dtype ) )
106 case FB_DATATYPE_STRING
108 return env.pointersize
109 case FB_DATATYPE_STRUCT
112 return env.pointersize
121 byval dtype
as integer,
_
122 byval subtype
as FBSYMBOL
ptr,
_
123 byval mode
as FB_PARAMMODE
_
128 if( mode = FB_PARAMMODE_VARARG )
then
137 dim as longint length =
any
138 dim as FBSYMBOL
ptr param =
any
146 param = symbGetProcHeadParam(
proc )
152 assert(
iif( symbGetParamMode( param ) = FB_PARAMMODE_VARARG, symbGetLen( param ) = 0, TRUE ) )
154 length += symbGetLen( param )
165 byval proc as FBSYMBOL
ptr,
_
166 byval id
as zstring ptr,
_
167 byval dtype
as integer,
_
168 byval subtype
as FBSYMBOL
ptr,
_
169 byval mode
as integer,
_
170 byval attrib
as FB_SYMBATTRIB
_
173 dim as FBSYMBOL
ptr param =
any
179 FB_SYMBCLASS_PARAM,
_
180 id, NULL, dtype, subtype, attrib )
181 if( param = NULL )
then
188 param->param.mode = mode
189 param->param.optexpr = NULL
192 if( typeGet( dtype ) = FB_DATATYPE_STRUCT )
then
193 if( mode = FB_PARAMMODE_BYVAL )
then
194 if( subtype = symbGetCurrentNamespc( ) )
then
195 symbSetUdtHasRecByvalParam( subtype )
205 byval proc as FBSYMBOL
ptr,
_
206 byval param
as FBSYMBOL
ptr,
_
207 byval optexpr
as ASTNODE
ptr _
210 assert( symbIsProc(
proc ) )
211 assert( param->
class = FB_SYMBCLASS_PARAM )
213 if( optexpr = NULL )
then
217 param->attrib
or= FB_SYMBATTRIB_OPTIONAL
218 param->param.optexpr = optexpr
226 byval proc as FBSYMBOL
ptr,
_
227 byval head_proc
as FBSYMBOL
ptr _
230 dim as FBSYMBOL
ptr f =
any
233 if( head_proc = NULL )
then
238 if(
proc = head_proc )
then
243 if( symbIsOverloaded( head_proc ) = FALSE )
then
248 f = symbGetProcOvlNext( head_proc )
249 do while( f <> NULL )
256 f = symbGetProcOvlNext( f )
265 dim as integer dtype =
any
266 dim as FBSYMBOL
ptr subtype =
any
268 dtype = symbGetFullType(
proc )
269 subtype = symbGetSubtype(
proc )
271 if( symbProcReturnsByref(
proc ) )
then
272 dtype = typeAddrOf( dtype )
275 select case( typeGetDtAndPtrOnly( dtype ) )
277 case FB_DATATYPE_STRING, FB_DATATYPE_WCHAR
280 dtype = typeAddrOf( dtype )
283 case FB_DATATYPE_STRUCT
285 if( subtype = symbGetCurrentNamespc( ) )
then
286 symbSetUdtHasRecByvalRes( subtype )
288 dtype = symbGetUDTRetType( subtype )
292 if( typeGetDtOnly( dtype ) <> FB_DATATYPE_STRUCT )
then
306 byval proc as FBSYMBOL
ptr _
309 dim as FBSYMBOL
ptr pparam =
any
312 if( symbGetProcParams(
proc ) = 0 )
then
317 pparam = symbGetProcTailParam(
proc )
318 if( pparam->param.mode = FB_PARAMMODE_VARARG )
then
323 do while( pparam <> NULL )
324 if( pparam->typ = FB_DATATYPE_VOID )
then
328 pparam = pparam->prev
338 byval proc as FBSYMBOL
ptr,
_
339 byval ovl_head_proc
as FBSYMBOL
ptr,
_
340 byval symtb
as FBSYMBOLTB
ptr,
_
341 byval hashtb
as FBHASHTB
ptr,
_
342 byval id
as const zstring ptr,
_
343 byval id_alias
as const zstring ptr,
_
344 byval dtype
as integer,
_
345 byval subtype
as FBSYMBOL
ptr,
_
346 byval attrib
as FB_SYMBATTRIB,
_
347 byval preservecase
as integer _
350 dim as FBSYMBOL
ptr ovl =
any, ovl_param =
any, param =
any
351 dim as integer ovl_params =
any, params =
any
355 if( ovl_head_proc = NULL )
then
360 if( ((attrib
and FB_SYMBATTRIB_PROPERTY) <> 0) <> symbIsProperty( ovl_head_proc ) )
then
365 params = symbGetProcParams(
proc )
366 if( (attrib
and FB_SYMBATTRIB_METHOD) <> 0 )
then
370 if( params > 0 )
then
372 param = symbGetProcTailParam(
proc )
373 if( param->param.mode = FB_PARAMMODE_VARARG )
then
378 do while( param <> NULL )
379 if( param->typ = FB_DATATYPE_VOID )
then
390 ovl_params = ovl->
proc.params
391 if( symbIsMethod( ovl ) )
then
396 if( (attrib
and FB_SYMBATTRIB_PROPERTY) <> 0 )
then
398 if( dtype <> FB_DATATYPE_VOID )
then
400 if( symbGetType( ovl ) = FB_DATATYPE_VOID )
then
406 if( symbGetType( ovl ) <> FB_DATATYPE_VOID )
then
413 if( ovl_params = params )
then
415 if( params = 0 )
then
423 param = symbGetProcTailParam(
proc )
424 ovl_param = symbGetProcTailParam( ovl )
428 if( param->param.mode <> ovl_param->param.mode )
then
431 if( param->param.mode = FB_PARAMMODE_BYDESC )
then
433 elseif( ovl_param->param.mode = FB_PARAMMODE_BYDESC )
then
438 dim as integer pdtype = param->typ
439 dim as integer odtype = ovl_param->typ
442 if( (typeGetConstMask( pdtype )
or _
443 typeGetConstMask( odtype )) <> 0 )
then
446 if( (param->param.mode = FB_PARAMMODE_BYREF )
_
447 and (ovl_param->param.mode = FB_PARAMMODE_BYREF ))
then
449 if( typeGetConstMask( pdtype ) <>
_
450 typeGetConstMask( odtype ) )
then
457 if( typeGetPtrConstMask( pdtype ) <>
_
458 typeGetPtrConstMask( odtype ) )
then
462 pdtype = typeGetDtAndPtrOnly( pdtype )
463 odtype = typeGetDtAndPtrOnly( odtype )
467 if( pdtype <> odtype )
then
471 case typeAddrOf( FB_DATATYPE_CHAR )
472 if( odtype <> FB_DATATYPE_STRING )
then
476 case FB_DATATYPE_STRING
477 if( odtype <> typeAddrOf( FB_DATATYPE_CHAR ) )
then
486 if( param->subtype <> ovl_param->subtype )
then
491 ovl_param = ovl_param->prev
494 loop while( ovl_params > 0 )
497 if( ovl_params = 0 )
then
502 ovl = symbGetProcOvlNext( ovl )
503 loop while( ovl <> NULL )
506 proc =
symbNewSymbol(
iif( preservecase, FB_SYMBOPT_PRESERVECASE, FB_SYMBOPT_NONE ),
_
507 proc, symtb, hashtb, FB_SYMBCLASS_PROC, id, id_alias, dtype, subtype, attrib )
508 if(
proc = NULL )
then
513 if( id <> NULL )
then
514 dim as FBSYMBOL
ptr nxt =
any
516 proc->hash.index = ovl_head_proc->hash.index
517 proc->hash.item = ovl_head_proc->hash.item
519 nxt = ovl_head_proc->hash.
next
520 ovl_head_proc->hash.
next =
proc
522 proc->hash.prev = ovl_head_proc
523 proc->hash.
next = nxt
524 if( nxt <> NULL )
then
525 nxt->hash.prev =
proc
536 byval proc as FBSYMBOL
ptr,
_
537 byval ovl_head_proc
as FBSYMBOL
ptr,
_
538 byval symtb
as FBSYMBOLTB
ptr,
_
539 byval hashtb
as FBHASHTB
ptr,
_
540 byval op as AST_OP,
_
541 byval id_alias
as const zstring ptr,
_
542 byval dtype
as integer,
_
543 byval subtype
as FBSYMBOL
ptr,
_
544 byval attrib
as FB_SYMBATTRIB
_
547 dim as FBSYMBOL
ptr ovl =
any
550 if(
op <> AST_OP_CAST )
then
552 dtype, subtype, attrib, FALSE )
559 do while( ovl <> NULL )
562 if(
proc->typ = ovl->typ )
then
564 if(
proc->subtype = ovl->subtype )
then
571 ovl = symbGetProcOvlNext( ovl )
576 FB_SYMBCLASS_PROC, NULL, id_alias, dtype, subtype, attrib )
586 byval sym
as FBSYMBOL
ptr,
_
587 byval parent as FBSYMBOL
ptr,
_
588 byval symtb
as FBSYMBOLTB
ptr,
_
589 byval hashtb
as FBHASHTB
ptr,
_
590 byval id
as const zstring ptr,
_
591 byval id_alias
as const zstring ptr,
_
592 byval dtype
as integer,
_
593 byval subtype
as FBSYMBOL
ptr,
_
594 byval attrib
as integer,
_
595 byval mode
as integer,
_
596 byval options
as FB_SYMBOPT
_
599 dim as integer stats =
any, preserve_case =
any, lookupoptions =
any
600 dim as FBSYMBOL
ptr proc =
any, head_proc =
any, overridden =
any
610 if( attrib
and FB_SYMBATTRIB_METHOD )
then
611 assert( (attrib
and FB_SYMBATTRIB_STATIC) = 0 )
612 assert( symbIsStruct(
parent ) )
613 elseif( attrib
and FB_SYMBATTRIB_STATIC )
then
614 assert( (attrib
and FB_SYMBATTRIB_METHOD) = 0 )
615 assert( symbIsStruct(
parent ) )
620 if( dtype = FB_DATATYPE_INVALID )
then
626 if( id_alias = NULL )
then
628 if( parser.mangling <> FB_MANGLING_BASIC )
then
633 stats = FB_SYMBSTATS_HASALIAS
639 if( (attrib
and (FB_SYMBATTRIB_CONSTRUCTOR
or _
640 FB_SYMBATTRIB_DESTRUCTOR)) <> 0 )
then
642 assert( attrib
and FB_SYMBATTRIB_METHOD )
645 if( (attrib
and FB_SYMBATTRIB_CONSTRUCTOR) <> 0 )
then
652 if( head_proc = NULL )
then
654 FB_SYMBCLASS_PROC, NULL, id_alias,
_
655 FB_DATATYPE_VOID, NULL, attrib )
658 if( (attrib
and FB_SYMBATTRIB_CONSTRUCTOR) <> 0 )
then
666 if( (attrib
and FB_SYMBATTRIB_DESTRUCTOR) <> 0 )
then
672 FB_DATATYPE_VOID, NULL, attrib, FALSE )
673 if(
proc = NULL )
then
679 if( (attrib
and FB_SYMBATTRIB_CONSTRUCTOR) <> 0 )
then
684 elseif( (attrib
and FB_SYMBATTRIB_OPERATOR) <> 0 )
then
687 if( sym->
proc.ext = NULL )
then
693 op = symbGetProcOpOvl( sym )
698 if( head_proc = NULL )
then
700 FB_SYMBCLASS_PROC, NULL, id_alias,
_
701 dtype, subtype, attrib )
708 dtype, subtype, attrib )
709 if(
proc = NULL )
then
714 if(
op = AST_OP_ASSIGN )
then
723 preserve_case = (options
and FB_SYMBOPT_PRESERVECASE) <> 0
726 FB_SYMBCLASS_PROC, id, id_alias, dtype, subtype, attrib )
729 if(
proc = NULL )
then
732 if( head_proc = NULL )
then
737 if( symbIsOverloaded( head_proc ) = FALSE )
then
738 if( fbLangOptIsSet( FB_LANG_OPT_ALWAYSOVL ) = FALSE )
then
745 dtype, subtype, attrib, preserve_case )
746 if(
proc = NULL )
then
750 proc->attrib
or= FB_SYMBATTRIB_OVERLOADED
754 if( (options
and FB_SYMBOPT_RTL) = 0 )
then
756 if( (attrib
and FB_SYMBATTRIB_OVERLOADED) <> 0 )
then
761 elseif( fbLangOptIsSet( FB_LANG_OPT_ALWAYSOVL ) )
then
763 proc->attrib
or= FB_SYMBATTRIB_OVERLOADED
771 if( (options
and FB_SYMBOPT_RTL) <> 0 )
then
772 stats
or= FB_SYMBSTATS_RTL
779 if( fbGetCompStmtId( ) = FB_TK_EXTERN )
then
782 if( parser.mangling <> FB_MANGLING_CPP )
then
783 stats
or= FB_SYMBSTATS_EXCLPARENT
789 if( (options
and FB_SYMBOPT_DECLARING) <> 0 )
then
790 stats
or= FB_SYMBSTATS_DECLARED
796 if( symbIsOverloaded(
proc ) )
then
797 dim as integer params = symbGetProcParams(
proc )
800 if( symbIsMethod(
proc ) )
then
804 if( head_proc <> NULL )
then
808 if( params < symGetProcOvlMinParams( head_proc ) )
then
809 symGetProcOvlMinParams( head_proc ) = params
812 if( params > symGetProcOvlMaxParams( head_proc ) )
then
813 symGetProcOvlMaxParams( head_proc ) = params
818 symGetProcOvlMinParams(
proc ) = params
819 symGetProcOvlMaxParams(
proc ) = params
823 proc->stats
or= stats
826 if( symbIsMethod(
proc ) )
then
827 assert( symbIsStruct(
parent ) )
830 if( symbIsAbstract(
proc ) )
then
831 parent->udt.ext->abstractcount += 1
836 if(
parent->udt.
base )
then
838 if( symbIsDestructor(
proc ) )
then
842 elseif( symbIsOperator(
proc ) )
then
846 symbGetProcOpOvl(
proc ) )
858 id, FB_SYMBCLASS_PROC,
_
859 ((options
and FB_SYMBOPT_PRESERVECASE) <> 0),
_
864 if( symbIsProperty(
proc ) )
then
866 if( symbGetType(
proc ) <> FB_DATATYPE_VOID )
then
868 lookupoptions = FB_SYMBLOOKUPOPT_PROPGET
877 if( overridden )
then
879 if( symbIsVirtual( overridden ) = FALSE )
then
885 if( overridden )
then
887 if( symbIsAbstract( overridden ) )
then
888 parent->udt.ext->abstractcount -= 1
893 proc->
proc.ext->overridden = overridden
897 if( symbIsVirtual(
proc ) )
then
908 byval proc as FBSYMBOL
ptr,
_
909 byval id
as const zstring ptr,
_
910 byval id_alias
as const zstring ptr,
_
911 byval dtype
as integer,
_
912 byval subtype
as FBSYMBOL
ptr,
_
913 byval attrib
as integer,
_
914 byval mode
as integer,
_
915 byval options
as FB_SYMBOPT
_
918 dim as FBSYMBOL
ptr parent =
any
919 dim as FBSYMBOLTB
ptr symtb =
any
920 dim as FBHASHTB
ptr hashtb =
any
925 parent = symbGetCurrentNamespc( )
926 symtb = @symbGetCompSymbTb(
parent )
927 hashtb = @symbGetCompHashTb(
parent )
931 attrib
or= FB_SYMBATTRIB_SHARED
932 assert( (
proc->attrib
and FB_SYMBATTRIB_LOCAL) = 0 )
933 assert( (attrib
and FB_SYMBATTRIB_LOCAL) = 0 )
936 dtype, subtype, attrib, mode, options )
942 byval proc as FBSYMBOL
ptr,
_
943 byval op as AST_OP,
_
944 byval id_alias
as zstring ptr,
_
945 byval dtype
as integer,
_
946 byval subtype
as FBSYMBOL
ptr,
_
947 byval attrib
as integer,
_
948 byval mode
as integer,
_
949 byval options
as FB_SYMBOPT
_
952 dim as FBSYMBOL
ptr sym =
any
957 sym =
symbAddProc(
proc, NULL, id_alias, dtype, subtype, attrib, mode, options )
958 if( sym = NULL )
then
968 byval proc as FBSYMBOL
ptr,
_
969 byval id_alias
as zstring ptr,
_
970 byval attrib
as integer,
_
971 byval mode
as integer,
_
972 byval options
as FB_SYMBOPT
_
974 function =
symbAddProc(
proc, NULL, id_alias, FB_DATATYPE_VOID, NULL, attrib, mode, options )
979 byval proc as FBSYMBOL
ptr,
_
980 byval dtype
as integer,
_
981 byval subtype
as FBSYMBOL
ptr,
_
982 byval attrib
as integer,
_
983 byval mode
as integer _
986 dim as zstring ptr id =
any
987 dim as FBSYMCHAIN
ptr chain_ =
any
988 dim as FBSYMBOL
ptr sym =
any,
parent =
any
989 dim as FBSYMBOLTB
ptr symtb =
any
990 dim as FBHASHTB
ptr hashtb =
any
1015 if( parser.
scope = FB_MAINSCOPE )
then
1019 parent = @symbGetGlobalNamespc( )
1020 symtb = @symbGetCompSymbTb(
parent )
1021 hashtb = @symbGetCompHashTb(
parent )
1023 attrib
or= FB_SYMBATTRIB_SHARED
1024 assert( (
proc->attrib
and FB_SYMBATTRIB_LOCAL) = 0 )
1025 assert( (attrib
and FB_SYMBATTRIB_LOCAL) = 0 )
1031 parent = symbGetCurrentNamespc( )
1033 hashtb = @symbGetCompHashTb(
parent )
1034 assert( hashtb = symb.hashtb )
1036 attrib
or= FB_SYMBATTRIB_LOCAL
1037 assert( (
proc->attrib
and FB_SYMBATTRIB_SHARED) = 0 )
1038 assert( (attrib
and FB_SYMBATTRIB_SHARED) = 0 )
1044 if( chain_ <> NULL )
then
1050 dtype, subtype, attrib, mode,
_
1051 FB_SYMBOPT_DECLARING
or FB_SYMBOPT_PRESERVECASE )
1053 if( sym <> NULL )
then
1054 symbSetIsFuncPtr( sym )
1063 byval base_proc
as FBSYMBOL
ptr _
1071 var param = symbGetProcHeadParam( base_proc )
1072 do while( param <> NULL )
1074 symbGetFullType( param ),
_
1075 symbGetSubtype( param ),
_
1076 symbGetParamMode( param ),
_
1077 symbGetAttrib( param ) )
1079 if( symbGetDontInit( param ) )
then
1080 symbSetDontInit( p )
1089 symbGetFullType( base_proc ), symbGetSubtype( base_proc ),
_
1090 base_proc->attrib
and FB_SYMBATTRIB_RETURNSBYREF,
_
1091 symbGetProcMode( base_proc ) )
1096 dim as FBSYMBOL
ptr proc =
any
1100 proc->
class = FB_SYMBCLASS_PROC
1103 proc->id.
name = symbol
1104 proc->id.
alias = NULL
1105 proc->id.mangled = NULL
1106 proc->typ = FB_DATATYPE_INVALID
1107 proc->subtype = NULL
1109 proc->mangling = FB_MANGLING_BASIC
1116 proc->
proc.mode = env.target.fbcall
1117 proc->
proc.realdtype = FB_DATATYPE_INVALID
1119 proc->
proc.returnMethod = FB_RETURN_FPU
1127 proc->symtb = @symbGetCompSymbTb( symbGetCurrentNamespc( ) )
1128 proc->hash.tb = @symbGetCompHashTb( symbGetCurrentNamespc( ) )
1129 proc->hash.item = NULL
1130 proc->hash.index = 0
1131 proc->hash.prev = NULL
1132 proc->hash.
next = NULL
1143 byval parammode
as integer,
_
1144 byref dtype
as integer,
_
1145 byref subtype
as FBSYMBOL
ptr _
1148 select case( parammode )
1149 case FB_PARAMMODE_BYVAL
1150 select case( dtype )
1152 case FB_DATATYPE_STRING
1153 dtype = typeAddrOf( FB_DATATYPE_CHAR )
1155 case FB_DATATYPE_STRUCT
1158 dtype = typeAddrOf( dtype )
1162 case FB_PARAMMODE_BYREF
1163 dtype = typeAddrOf( dtype )
1165 case FB_PARAMMODE_BYDESC
1166 dtype = typeAddrOf( FB_DATATYPE_STRUCT )
1167 subtype = symb.fbarray
1173 dim as FBARRAYDIM dTB(0) =
any
1174 dim as FBSYMBOL
ptr s =
any
1175 dim as integer attrib =
any, dtype =
any
1179 dtype = symbGetFullType( param )
1181 select case as const param->param.mode
1182 case FB_PARAMMODE_BYVAL
1183 attrib = FB_SYMBATTRIB_PARAMBYVAL
1185 select case( symbGetType( param ) )
1187 case FB_DATATYPE_STRING
1188 attrib = FB_SYMBATTRIB_PARAMBYREF
1189 dtype = typeJoin( dtype, FB_DATATYPE_CHAR )
1191 case FB_DATATYPE_STRUCT
1194 attrib = FB_SYMBATTRIB_PARAMBYREF
1198 case FB_PARAMMODE_BYREF
1199 attrib = FB_SYMBATTRIB_PARAMBYREF
1201 case FB_PARAMMODE_BYDESC
1202 attrib = FB_SYMBATTRIB_PARAMBYDESC
1209 if( symbIsParamInstance( param ) )
then
1210 attrib
or= FB_SYMBATTRIB_PARAMINSTANCE
1214 if( symbIsSuffixed( param ) )
then
1215 attrib
or= FB_SYMBATTRIB_SUFFIXED
1218 s =
symbAddVar( symbGetName( param ), NULL, dtype, param->subtype, 0, 0, dTB(), attrib )
1224 symbSetIsDeclared( s )
1226 if( symbGetDontInit( param ) )
then
1227 symbSetDontInit( s )
1234 dim as FBARRAYDIM dTB(0) =
any
1235 dim as FBSYMBOL
ptr s =
any
1244 0, dTB(), FB_SYMBATTRIB_PARAMBYREF, FB_SYMBOPT_PRESERVECASE )
1249 symbSetIsDeclared( s )
1250 symbSetIsImplicit( s )
1256 dim as FBARRAYDIM dTB(0) =
any
1257 dim as FBSYMBOL
ptr res =
any
1258 dim as integer dtype =
any
1259 dim as const zstring ptr id =
any
1270 if( symbProcReturnsByref(
proc ) )
then
1271 dtype = typeAddrOf( dtype )
1275 0, dTB(), FB_SYMBATTRIB_FUNCRESULT, FB_SYMBOPT_PRESERVECASE )
1284 symbSetIsDeclared( res )
1285 symbSetIsImplicit( res )
1293 byval parent as FBSYMBOL
ptr,
_
1294 byval proc as FBSYMBOL
ptr _
1297 dim as integer dtype =
any
1298 select case symbGetClass(
parent )
1299 case FB_SYMBCLASS_STRUCT
1300 dtype = FB_DATATYPE_STRUCT
1301 case FB_SYMBCLASS_CLASS
1305 if( symbIsConstant(
proc ) )
then
1306 dtype = typeSetIsConst( dtype )
1310 FB_PARAMMODE_BYREF, FB_SYMBATTRIB_PARAMINSTANCE )
1320 byval ovl_head_proc
as FBSYMBOL
ptr,
_
1321 byval proc as FBSYMBOL
ptr,
_
1322 byval options
as FB_SYMBLOOKUPOPT
_
1325 dim as FBSYMBOL
ptr ovl =
any, ovl_param =
any, param =
any
1326 dim as FBSYMBOL
ptr ovl_subtype =
any, subtype =
any
1327 dim as integer ovl_params =
any, params =
any, i =
any
1330 if( (ovl_head_proc = NULL)
or (
proc = NULL) )
then
1335 if( (symbGetClass( ovl_head_proc ) <> FB_SYMBCLASS_PROC)
or _
1336 (symbGetClass(
proc ) <> FB_SYMBCLASS_PROC) )
then
1340 params = symbGetProcParams(
proc )
1341 if( symbIsMethod(
proc ) )
then
1345 dim as integer is_property = symbIsProperty( ovl_head_proc )
1351 ovl_params = ovl->
proc.params
1352 if( symbIsMethod( ovl ) )
then
1357 if( is_property )
then
1359 if( (options
and FB_SYMBLOOKUPOPT_PROPGET) <> 0 )
then
1361 if( symbGetType( ovl ) = FB_DATATYPE_VOID )
then
1367 if( symbGetType( ovl ) <> FB_DATATYPE_VOID )
then
1373 if( params = ovl_params )
then
1376 if( params = 0 )
then
1382 ovl_param = symbGetProcTailParam( ovl )
1383 param = symbGetProcTailParam(
proc )
1386 if( param->param.mode <> ovl_param->param.mode )
then
1388 if( param->param.mode = FB_PARAMMODE_BYDESC )
then
1390 elseif( ovl_param->param.mode = FB_PARAMMODE_BYDESC )
then
1396 if( param->typ <> ovl_param->typ )
then
1400 if( param->subtype <> ovl_param->subtype )
then
1405 ovl_param = ovl_param->prev
1408 loop while( ovl_params > 0 )
1411 if( ovl_params = 0 )
then
1416 ovl = symbGetProcOvlNext( ovl )
1417 loop while( ovl <> NULL )
1426 byval op as AST_OP,
_
1427 byval ovl_head_proc
as FBSYMBOL
ptr,
_
1428 byval proc as FBSYMBOL
ptr _
1431 dim as FBSYMBOL
ptr ovl =
any
1434 if(
op <> AST_OP_CAST )
then
1440 do while( ovl <> NULL )
1443 if(
proc->typ = ovl->typ )
then
1444 if(
proc->subtype = ovl->subtype )
then
1449 ovl = symbGetProcOvlNext( ovl )
1459 byval ovl_head_proc
as FBSYMBOL
ptr,
_
1460 byval proc as FBSYMBOL
ptr _
1464 if( symbIsDestructor( ovl_head_proc ) )
then
1465 return ovl_head_proc
1477 #macro hCheckCtorOvl
_
1486 dim as integer err_num =
any
1487 dim as FBSYMBOL
ptr proc =
any
1493 if(
proc <> NULL )
then
1508 dim as integer err_num =
any
1509 dim as FBSYMBOL
ptr proc =
any
1518 if(
proc <> NULL )
then
1529 byval param_ptrcnt
as integer,
_
1530 byval arg_dtype
as integer,
_
1531 byval arg_subtype
as FBSYMBOL
ptr,
_
1533 byval mode
as FB_PARAMMODE = 0
_
1536 dim as integer arg_dclass =
any
1542 arg_dtype = typeGetDtAndPtrOnly( arg_dtype )
1544 arg_dclass = typeGetClass( arg_dtype )
1549 case FB_DATACLASS_INTEGER
1551 select case as const arg_dclass
1553 case FB_DATACLASS_INTEGER
1561 case FB_DATATYPE_CHAR
1562 select case( arg_dtype )
1563 case FB_DATATYPE_CHAR
1565 case FB_DATATYPE_WCHAR
1569 case FB_DATATYPE_WCHAR
1570 select case( arg_dtype )
1571 case FB_DATATYPE_CHAR
1573 case FB_DATATYPE_WCHAR
1582 case typeAddrOf( FB_DATATYPE_CHAR )
1583 select case( arg_dtype )
1584 case FB_DATATYPE_CHAR
1586 case FB_DATATYPE_WCHAR
1589 case typeAddrOf( FB_DATATYPE_WCHAR )
1590 select case( arg_dtype )
1591 case FB_DATATYPE_CHAR
1593 case FB_DATATYPE_WCHAR
1601 select case( arg_dtype )
1602 case FB_DATATYPE_CHAR, FB_DATATYPE_WCHAR
1607 if( astIsDEREF(
arg_expr ) = FALSE )
then
1614 select case( arg_dtype )
1615 case FB_DATATYPE_BITFIELD, FB_DATATYPE_ENUM
1617 arg_dtype =
typeRemap( arg_dtype, arg_subtype )
1623 if( typeIsPtr( arg_dtype ) = FALSE )
then
1630 if( astIsCONST(
arg_expr ) = FALSE )
then
1640 if( typeGetSize( arg_dtype ) <> env.pointersize )
then
1655 if( (
param_dtype = typeAddrOf( FB_DATATYPE_VOID ))
or _
1656 (arg_dtype = typeAddrOf( FB_DATATYPE_VOID )) )
then
1664 elseif( typeIsPtr( arg_dtype ) )
then
1673 case FB_DATACLASS_FPOINT
1683 case FB_DATACLASS_STRING
1685 case FB_DATATYPE_CHAR, typeAddrOf( FB_DATATYPE_CHAR )
1687 case FB_DATATYPE_WCHAR, typeAddrOf( FB_DATATYPE_WCHAR )
1694 case FB_DATACLASS_FPOINT
1696 select case as const arg_dclass
1698 case FB_DATACLASS_INTEGER
1699 if( typeIsPtr( arg_dtype ) )
then
1704 select case arg_dtype
1705 case FB_DATATYPE_BITFIELD, FB_DATATYPE_ENUM
1707 arg_dtype =
typeRemap( arg_dtype, arg_subtype )
1713 case FB_DATACLASS_FPOINT
1719 case FB_DATACLASS_STRING
1721 select case arg_dclass
1723 case FB_DATACLASS_STRING
1728 case FB_DATACLASS_INTEGER
1729 select case arg_dtype
1730 case FB_DATATYPE_CHAR
1732 case FB_DATATYPE_WCHAR
1745 byval parent as FBSYMBOL
ptr,
_
1746 byval param
as FBSYMBOL
ptr,
_
1748 byval arg_mode
as integer,
_
1749 byref constonly_diff
as integer _
1752 dim as integer param_dtype =
any, arg_dtype =
any, param_ptrcnt =
any
1755 constonly_diff = FALSE
1760 if( symbGetIsOptional( param ) )
then
1769 param_ptrcnt = symbGetPtrCnt( param )
1771 arg_dtype = astGetFullType(
arg_expr )
1772 arg_subtype = astGetSubType(
arg_expr )
1774 select case symbGetParamMode( param )
1776 case FB_PARAMMODE_BYDESC
1778 if( arg_mode <> FB_PARAMMODE_BYDESC )
then
1794 case FB_PARAMMODE_BYREF
1796 if( arg_mode = FB_PARAMMODE_BYVAL )
then
1798 if( (typeGetClass( arg_dtype ) <> FB_DATACLASS_INTEGER)
or _
1799 (typeGetSize( arg_dtype ) <> env.pointersize) )
then
1810 if( arg_mode = FB_PARAMMODE_BYDESC )
then
1814 static as integer cast_rec_cnt = 0, ctor_rec_cnt = 0
1817 if( typeGetDtAndPtrOnly(
param_dtype ) = typeGetDtAndPtrOnly( arg_dtype ) )
then
1818 if( typeGetConstMask(
param_dtype ) = typeGetConstMask( arg_dtype ) )
then
1826 case FB_DATATYPE_STRUCT
1828 if( level > 0 )
then
1839 constonly_diff = TRUE
1846 if( (symbGetIsRTL(
parent ) = FALSE)
or (symbGetIsRTLConst( param )) )
then
1847 dim as integer const_matches =
any
1851 if( const_matches )
then
1852 dim as integer ptrcnt = typeGetPtrCnt( arg_dtype )
1875 case FB_DATATYPE_STRUCT
1884 case FB_DATATYPE_ENUM
1888 select case arg_dtype
1890 case FB_DATATYPE_STRUCT
1903 symbGetParamMode( param ) )
1910 byval ovl_head_proc
as FBSYMBOL
ptr,
_
1911 byval args
as integer,
_
1912 byval arg_head
as FB_CALL_ARG
ptr,
_
1913 byval err_num
as FB_ERRMSG
ptr,
_
1914 byval options
as FB_SYMBLOOKUPOPT
_
1917 dim as FBSYMBOL
ptr ovl =
any, closest_proc =
any, param =
any
1918 dim as integer arg_matches =
any, matches =
any
1919 dim as integer max_matches =
any, exact_matches =
any
1920 dim as integer matchcount =
any
1921 dim as integer constonly_diff =
any
1922 dim as FB_CALL_ARG
ptr arg =
any
1924 *err_num = FB_ERRMSG_OK
1926 if( ovl_head_proc = NULL )
then
1934 dim as integer is_property = symbIsProperty( ovl_head_proc )
1939 dim as integer params = symbGetProcParams( ovl )
1940 if( symbIsMethod( ovl ) )
then
1945 if( is_property )
then
1947 if( (options
and FB_SYMBLOOKUPOPT_PROPGET) <> 0 )
then
1949 if( symbGetType( ovl ) = FB_DATATYPE_VOID )
then
1955 if( symbGetType( ovl ) <> FB_DATATYPE_VOID )
then
1962 if( args <= params )
then
1963 param = symbGetProcHeadParam( ovl )
1964 if( symbIsMethod( ovl ) )
then
1973 for i
as integer = 0
to args-1
1974 arg_matches =
hCheckOvlParam( ovl, param, arg->expr, arg->mode, constonly_diff )
1975 if( arg_matches = 0 )
then
1981 if( options
and FB_SYMBLOOKUPOPT_BOP_OVL )
then
1987 matches += arg_matches
1996 var is_match = (args = 0)
or (matches > 0)
1999 for i
as integer = args
to params-1
2001 if( symbGetIsOptional( param ) = FALSE )
then
2013 if( (matchcount = 0)
or (matches > max_matches) )
then
2014 dim as integer eligible = TRUE
2018 if( options
and FB_SYMBLOOKUPOPT_BOP_OVL )
then
2019 if( exact_matches = 0
and constonly_diff = FALSE )
then
2027 max_matches = matches
2032 elseif( matches = max_matches )
then
2039 ovl = symbGetProcOvlNext( ovl )
2040 loop while( ovl <> NULL )
2043 if( matchcount > 1 )
then
2044 *err_num = FB_ERRMSG_AMBIGUOUSCALLTOPROC
2047 function = closest_proc
2055 byval op as AST_OP,
_
2056 byval l as ASTNODE
ptr,
_
2057 byval r
as ASTNODE
ptr,
_
2058 byval err_num
as FB_ERRMSG
ptr _
2061 dim as FB_CALL_ARG arg1 =
any, arg2 =
any
2062 dim as FBSYMBOL
ptr proc =
any
2064 *err_num = FB_ERRMSG_OK
2067 select case astGetDataType(
l )
2068 case FB_DATATYPE_STRUCT, FB_DATATYPE_ENUM
2072 select case astGetDataType( r )
2073 case FB_DATATYPE_STRUCT, FB_DATATYPE_ENUM
2091 if(
proc = NULL )
then
2092 if( *err_num <> FB_ERRMSG_OK )
then
2104 byval op as AST_OP,
_
2105 byval l as ASTNODE
ptr,
_
2106 byval r
as ASTNODE
ptr,
_
2107 byval err_num
as FB_ERRMSG
ptr _
2110 dim as FB_CALL_ARG arg1 =
any
2111 dim as FBSYMBOL
ptr proc =
any, head_proc =
any
2113 *err_num = FB_ERRMSG_OK
2116 select case astGetDataType(
l )
2117 case FB_DATATYPE_STRUCT
2118 dim as FBSYMBOL
ptr subtype = astGetSubType(
l )
2120 if( subtype->udt.ext = NULL )
then
2124 head_proc = symbGetUDTOpOvlTb( subtype )(
op - AST_OP_SELFBASE)
2132 if( head_proc = NULL )
then
2143 if(
proc = NULL )
then
2144 if( *err_num <> FB_ERRMSG_OK )
then
2150 *err_num = FB_ERRMSG_ILLEGALMEMBERACCESS
2165 byval op as AST_OP,
_
2166 byval l as ASTNODE
ptr,
_
2167 byval err_num
as FB_ERRMSG
ptr _
2170 dim as FB_CALL_ARG arg1 =
any
2171 dim as FBSYMBOL
ptr proc =
any
2173 *err_num = FB_ERRMSG_OK
2176 select case astGetDataType(
l )
2177 case FB_DATATYPE_STRUCT, FB_DATATYPE_ENUM
2190 if(
proc = NULL )
then
2191 if( *err_num <> FB_ERRMSG_OK )
then
2203 byval op as AST_OP,
_
2204 byval l as ASTNODE
ptr,
_
2205 byval err_num
as FB_ERRMSG
ptr _
2208 dim as FBSYMBOL
ptr proc =
any, head_proc =
any
2210 *err_num = FB_ERRMSG_OK
2213 select case astGetDataType(
l )
2214 case FB_DATATYPE_STRUCT
2215 dim as FBSYMBOL
ptr subtype = astGetSubType(
l )
2217 if( subtype->udt.ext = NULL )
then
2221 head_proc = symbGetUDTOpOvlTb( subtype )(
op - AST_OP_SELFBASE)
2229 if( head_proc = NULL )
then
2237 if(
proc = NULL )
then
2238 if( *err_num <> FB_ERRMSG_OK )
then
2245 *err_num = FB_ERRMSG_ILLEGALMEMBERACCESS
2260 byval proc as FBSYMBOL
ptr,
_
2261 byval to_dtype
as integer,
_
2262 byval to_subtype
as FBSYMBOL
ptr _
2265 dim as integer proc_dtype =
any
2266 dim as FBSYMBOL
ptr proc_subtype =
any
2268 proc_dtype = symbGetFullType(
proc )
2269 proc_subtype = symbGetSubType(
proc )
2272 if( typeGetDtAndPtrOnly( proc_dtype ) = typeGetDtAndPtrOnly( to_dtype ) )
then
2274 if( proc_subtype = to_subtype )
then
2278 if( typeIsPtr( proc_dtype ) )
then
2285 select case typeGet( proc_dtype )
2288 case FB_DATATYPE_STRUCT, FB_DATATYPE_ENUM
2292 select case typeGet( to_dtype )
2294 case FB_DATATYPE_STRUCT
2303 symbGetPtrCnt(
proc ),
_
2313 byval to_dtype
as integer,
_
2314 byval to_subtype
as FBSYMBOL
ptr,
_
2315 byval l as ASTNODE
ptr,
_
2316 byval err_num
as FB_ERRMSG
ptr _
2319 dim as FBSYMBOL
ptr proc_head =
any
2321 *err_num = FB_ERRMSG_OK
2324 select case astGetDataType(
l )
2325 case FB_DATATYPE_STRUCT
2326 dim as FBSYMBOL
ptr subtype = astGetSubType(
l )
2327 if( subtype = NULL )
then
2331 if( subtype->udt.ext = NULL )
then
2335 proc_head = symbGetUDTOpOvlTb( subtype )(AST_OP_CAST - AST_OP_SELFBASE)
2341 if( proc_head = NULL )
then
2345 dim as FBSYMBOL
ptr p =
any,
proc =
any, closest_proc =
any
2346 dim as integer matches =
any, max_matches =
any, matchcount =
any
2353 if( typeGet( to_dtype ) <> FB_DATATYPE_VOID )
then
2356 do while(
proc <> NULL )
2359 if( matches > max_matches )
then
2361 max_matches = matches
2365 elseif( matches = max_matches )
then
2366 if( max_matches > 0 )
then
2379 do while(
proc <> NULL )
2382 if( symbGetSubType(
proc ) = NULL )
then
2383 if( symbGetType(
proc ) <= FB_DATATYPE_DOUBLE )
then
2385 if( symbGetType(
proc ) > to_dtype )
then
2387 to_dtype = symbGetType(
proc )
2399 if( matchcount > 1 )
then
2400 *err_num = FB_ERRMSG_AMBIGUOUSCALLTOPROC
2401 errReportParam( proc_head, 0, NULL, FB_ERRMSG_AMBIGUOUSCALLTOPROC )
2404 if( closest_proc <> NULL )
then
2407 *err_num = FB_ERRMSG_ILLEGALMEMBERACCESS
2415 function = closest_proc
2422 byval sym
as FBSYMBOL
ptr,
_
2423 byval expr
as ASTNODE
ptr,
_
2424 byval arg_mode
as FB_PARAMMODE,
_
2425 byval err_num
as FB_ERRMSG
ptr _
2428 dim as FB_CALL_ARG arg1 =
any
2432 arg1.mode = arg_mode
2447 dim as FBSYMBOL
ptr param =
any, nxt =
any
2462 if( s->
proc.params > 0 )
then
2482 byval list as FB_GLOBCTORLIST
ptr,
_
2483 byval proc as FBSYMBOL
ptr _
2484 )
as FB_GLOBCTORLIST_ITEM
ptr
2486 dim as FB_GLOBCTORLIST_ITEM
ptr n =
any
2491 if(
list->tail <> NULL )
then
2492 list->tail->
next = n
2508 symbSetIsGlobalCtor(
proc )
2513 symbSetIsGlobalDtor(
proc )
2523 byval v
as FBSYMBOL
ptr,
_
2524 byval o as FBSYMBOL
ptr _
2527 dim as FBSYMBOL
ptr vparam =
any, oparam =
any
2529 assert( symbIsProc( v )
and symbIsMethod( v ) )
2530 assert( symbIsProc(
o )
and symbIsMethod(
o ) )
2533 if( (symbGetType ( v ) <> symbGetType (
o ))
or _
2534 (symbGetSubtype( v ) <> symbGetSubtype(
o )) )
then
2535 return FB_ERRMSG_OVERRIDERETTYPEDIFFERS
2539 if( symbProcReturnsByref( v ) <> symbProcReturnsByref(
o ) )
then
2540 return FB_ERRMSG_OVERRIDERETTYPEDIFFERS
2545 return FB_ERRMSG_OVERRIDECALLCONVDIFFERS
2549 if( symbGetProcParams( v ) <> symbGetProcParams(
o ) )
then
2550 return FB_ERRMSG_OVERRIDEPARAMSDIFFER
2554 vparam = symbGetProcLastParam( v )
2555 oparam = symbGetProcLastParam(
o )
2561 assert( symbIsParamInstance( vparam ) )
2562 assert( symbIsParamInstance( oparam ) )
2563 vparam = vparam->
next
2564 oparam = oparam->
next
2567 if( (symbGetParamMode( vparam ) <> symbGetParamMode( oparam ))
or _
2568 (symbGetFullType ( vparam ) <> symbGetFullType ( oparam ))
or _
2569 (symbGetSubtype ( vparam ) <> symbGetSubtype ( oparam )) )
then
2570 return FB_ERRMSG_OVERRIDEPARAMSDIFFER
2572 vparam = vparam->
next
2573 oparam = oparam->
next
2576 function = FB_ERRMSG_OK
2581 byval proc as FBSYMBOL
ptr,
_
2582 byval is_implicit
as integer _
2585 dim as FBSYMBOL
ptr overridden =
any
2586 dim as integer errmsg =
any
2591 if( overridden )
then
2599 if( errmsg <> FB_ERRMSG_OK )
then
2600 if( is_implicit
and _
2601 (errmsg = FB_ERRMSG_OVERRIDECALLCONVDIFFERS) )
then
2606 if( symbIsDestructor(
proc ) )
then
2607 errmsg = FB_ERRMSG_IMPLICITDTOROVERRIDECALLCONVDIFFERS
2609 errmsg = FB_ERRMSG_IMPLICITLETOVERRIDECALLCONVDIFFERS
2627 function =
proc->
proc.ext->vtableindex
2633 function =
proc->
proc.ext->overridden
2646 byval proc as FBSYMBOL
ptr,
_
2647 byval dtype
as integer,
_
2648 byval subtype
as FBSYMBOL
ptr,
_
2649 byval attrib
as integer,
_
2650 byval mode
as integer _
2654 dim as integer i =
any
2655 dim as FBSYMBOL
ptr param =
any
2663 param = symbGetProcHeadParam(
proc )
2664 for i = 0
to symbGetProcParams(
proc )-1
2670 if( param->subtype = NULL )
then
2671 id +=
hex( param->typ ) +
"M" +
hex(
cint(param->param.mode) )
2681 param = symbGetParamNext( param )
2686 if( subtype = NULL )
then
2698 if( attrib
and FB_SYMBATTRIB_RETURNSBYREF )
then
2707 function =
strptr( id )
2711 if( symbGetType(
proc ) = FB_DATATYPE_VOID )
then
2721 if( symbIsConstructor(
proc )
or symbIsDestructor(
proc ) )
then
2722 select case( symbGetProcMode(
proc ) )
2723 case FB_FUNCMODE_STDCALL, FB_FUNCMODE_STDCALL_MS
2725 case FB_FUNCMODE_PASCAL
2730 select case( symbGetProcMode(
proc ) )
2731 case FB_FUNCMODE_STDCALL, FB_FUNCMODE_STDCALL_MS
2732 select case( env.target.fbcall )
2733 case FB_FUNCMODE_STDCALL, FB_FUNCMODE_STDCALL_MS
2738 case FB_FUNCMODE_PASCAL
2739 if( env.target.fbcall <> FB_FUNCMODE_PASCAL )
then
2742 case FB_FUNCMODE_CDECL
2743 if( env.target.fbcall <> FB_FUNCMODE_CDECL )
then
2753 var param = symbGetProcHeadParam(
proc )
2756 if( (param <> NULL)
and symbIsMethod(
proc ) )
then
2757 param = symbGetParamNext( param )
2761 var parammode = symbGetParamMode( param )
2762 select case( parammode )
2763 case FB_PARAMMODE_BYVAL, FB_PARAMMODE_BYREF
2768 if( fbLangIsSet( FB_LANG_FB )
and _
2770 if( parammode = FB_PARAMMODE_BYVAL )
then
2777 case FB_PARAMMODE_BYDESC
2778 case FB_PARAMMODE_VARARG
2781 if( parammode = FB_PARAMMODE_VARARG )
then
2785 if( parammode = FB_PARAMMODE_BYDESC )
then
2793 param = symbGetParamNext( param )
2804 if( symbGetType(
proc ) <> FB_DATATYPE_VOID )
then
2805 if( symbProcReturnsByref(
proc ) )
then
2824 static as string res
2828 dim as FBSYMBOL
ptr ns = symbGetNamespace(
proc )
2830 do while( ns <> @symbGetGlobalNamespc( ) )
2831 res = *symbGetName( ns ) +
"." + res
2832 ns = symbGetNamespace( ns )
2835 if( symbIsConstructor(
proc ) )
then
2836 res +=
"constructor"
2837 elseif( symbIsDestructor(
proc ) )
then
2839 elseif( symbIsOperator(
proc ) )
then
2842 res += *astGetOpId( symbGetProcOpOvl(
proc ) )
2844 elseif( symbIsProperty(
proc ) )
then
2845 res += *symbGetName(
proc )
2847 if( symbGetType(
proc ) <> FB_DATATYPE_VOID )
then
2853 res += *symbGetName(
proc )
2856 function =
strptr( res )
2870 byval dtype
as integer,
_
2871 byval subtype
as FBSYMBOL
ptr _
2876 select case as const dtype
2877 case FB_DATATYPE_FWDREF,
_
2878 FB_DATATYPE_FIXSTR, FB_DATATYPE_STRING,
_
2879 FB_DATATYPE_CHAR, FB_DATATYPE_WCHAR,
_
2882 return FB_PARAMMODE_BYREF
2885 return FB_PARAMMODE_BYVAL
2895 byval proca
as FBSYMBOL
ptr,
_
2896 byval procb
as FBSYMBOL
ptr _
2899 dim as integer a =
any, b =
any
2901 a = symbGetProcMode( proca )
2902 b = symbGetProcMode( procb )
2907 case FB_FUNCMODE_STDCALL, FB_FUNCMODE_STDCALL_MS
2909 case FB_FUNCMODE_STDCALL, FB_FUNCMODE_STDCALL_MS
2920 byval list as TLIST
ptr,
_
2921 byval arg_list
as FB_CALL_ARG_LIST
ptr,
_
2922 byval to_head
as integer _
2923 )
as FB_CALL_ARG
ptr
2927 if( to_head = FALSE )
then
2928 if( arg_list->head = NULL )
then
2929 arg_list->head = arg
2931 arg_list->tail->
next = arg
2935 arg_list->tail = arg
2938 if( arg_list->tail = NULL )
then
2939 arg_list->tail = arg
2942 arg->
next = arg_list->head
2943 arg_list->head = arg
2955 byval list as TLIST
ptr,
_
2956 byval arg_list
as FB_CALL_ARG_LIST
ptr _
2959 dim as FB_CALL_ARG
ptr arg, nxt
2961 arg = arg_list->head
2962 do while( arg <> NULL )
2964 symbFreeOvlCallArg(
list, arg )