14 byval expr
as ASTNODE
ptr, _
15 byval defaultvalue
as longint _
18 if( expr = NULL )
then
23 if( astIsCONST( expr ) = FALSE )
then
33 dim as integer dtype =
any, mode =
any, attrib =
any
34 dim as FBSYMBOL
ptr proc =
any, subtype =
any
57 if( is_func = FALSE )
then
59 dtype = FB_DATATYPE_VOID
68 dtype = FB_DATATYPE_INTEGER
70 dtype = FB_DATATYPE_VOID
79 byval is_len
as integer, _
80 byref dtype
as integer, _
81 byref subtype
as FBSYMBOL
ptr, _
82 byref lgt
as longint _
85 dim as ASTNODE
ptr expr =
any
86 dim as integer maybe_type =
any, check_array =
any
116 case FB_TK_TYPEOF, FB_TK_SUB, FB_TK_FUNCTION
125 if( maybe_type
and is_len
and fbLangIsSet( FB_LANG_QB ) )
then
129 if( maybe_type )
then
131 if(
cSymbolType( dtype, subtype, lgt, FB_SYMBTYPEOPT_NONE ) )
then
138 check_array = fbGetCheckArray( )
139 fbSetCheckArray( FALSE )
141 fbSetCheckArray( check_array )
142 if( expr = NULL )
then
143 errReport( FB_ERRMSG_EXPECTEDEXPRESSION )
153 byref dtype
as integer, _
154 byref subtype
as FBSYMBOL
ptr, _
155 byref lgt
as longint _
158 dim as ASTNODE
ptr expr =
any
164 if( expr = NULL )
then
169 if( astIsNIDXARRAY( expr ) )
then
170 dim as ASTNODE
ptr temp_node = expr
171 expr = astGetLeft( expr )
175 dtype = astGetFullType( expr )
176 subtype = astGetSubtype( expr )
184 byval bitsize
as longint, _
185 byval is_unsigned
as integer _
188 dim as FB_DATATYPE dtype
192 dtype = FB_DATATYPE_BYTE
194 dtype = FB_DATATYPE_SHORT
196 dtype = FB_DATATYPE_LONG
198 dtype = FB_DATATYPE_LONGINT
201 dtype = FB_DATATYPE_INTEGER
204 if( is_unsigned )
then
227 byref dtype
as integer, _
228 byref subtype
as FBSYMBOL
ptr, _
229 byref lgt
as longint, _
230 byval options
as FB_SYMBTYPEOPT _
233 dim as integer isunsigned =
any, isfunction =
any
238 dtype = FB_DATATYPE_INVALID
241 dim as integer is_const = FALSE
242 dim as integer ptr_cnt = 0
249 if(
hMatch( CHAR_LPRNT ) = FALSE )
then
259 if(
hMatch( CHAR_RPRNT ) = FALSE )
then
272 isunsigned =
hMatch( FB_TK_UNSIGNED )
278 dtype = FB_DATATYPE_VOID
282 dtype = FB_DATATYPE_BYTE
286 dtype = FB_DATATYPE_UBYTE
290 dtype = FB_DATATYPE_SHORT
294 dtype = FB_DATATYPE_USHORT
300 if(
hMatch( FB_TK_LT ) )
then
307 if(
hMatch( FB_TK_GT ) = FALSE )
then
312 dtype = env.lang.integerkeyworddtype
320 if(
hMatch( FB_TK_LT ) )
then
327 if(
hMatch( FB_TK_GT ) = FALSE )
then
333 dtype = FB_DATATYPE_UINT
339 dtype = FB_DATATYPE_LONG
343 dtype = FB_DATATYPE_ULONG
347 dtype = FB_DATATYPE_LONGINT
351 dtype = FB_DATATYPE_ULONGINT
355 dtype = FB_DATATYPE_SINGLE
359 dtype = FB_DATATYPE_DOUBLE
365 dtype = FB_DATATYPE_STRING
371 dtype = FB_DATATYPE_CHAR
377 dtype = FB_DATATYPE_WCHAR
379 case FB_TK_FUNCTION, FB_TK_SUB
383 dtype = typeAddrOf( FB_DATATYPE_FUNCTION )
387 if( subtype = NULL )
then
393 if( dtype <> FB_DATATYPE_INVALID )
then
394 lgt = typeGetSize( dtype )
396 dim as FBSYMCHAIN
ptr chain_ = NULL
397 dim as FBSYMBOL
ptr base_parent =
any
398 dim as integer check_id = TRUE
400 if( parser.stmt.
with.sym <> NULL )
then
408 chain_ =
cIdentifier( base_parent, FB_IDOPT_DEFAULT
or FB_IDOPT_ALLOWSTRUCT )
413 dim as FBSYMBOL
ptr sym = chain_->sym
415 select case symbGetClass( sym )
416 case FB_SYMBCLASS_STRUCT
418 dtype = FB_DATATYPE_STRUCT
420 lgt = symbGetLen( sym )
423 case FB_SYMBCLASS_ENUM
425 dtype = FB_DATATYPE_ENUM
427 lgt = typeGetSize( FB_DATATYPE_ENUM )
430 case FB_SYMBCLASS_TYPEDEF
432 dtype = symbGetFullType( sym )
433 subtype = symbGetSubtype( sym )
434 lgt = symbGetLen( sym )
435 ptr_cnt += typeGetPtrCnt( dtype )
440 loop while( sym <> NULL )
442 chain_ = symbChainGetNext( chain_ )
443 loop while( chain_ <> NULL )
448 if( dtype = FB_DATATYPE_INVALID )
then
449 if( isunsigned )
then
454 dtype = typeSetIsConst( FB_DATATYPE_VOID )
461 if( isunsigned )
then
463 select case as const typeGet( dtype )
464 case FB_DATATYPE_BYTE
465 dtype = FB_DATATYPE_UBYTE
467 case FB_DATATYPE_SHORT
468 dtype = FB_DATATYPE_USHORT
470 case FB_DATATYPE_INTEGER
471 dtype = FB_DATATYPE_UINT
473 case FB_DATATYPE_LONG
474 dtype = FB_DATATYPE_ULONG
476 case FB_DATATYPE_LONGINT
477 dtype = FB_DATATYPE_ULONGINT
492 select case as const typeGet( dtype )
493 case FB_DATATYPE_STRING
505 dtype = FB_DATATYPE_FIXSTR
507 case FB_DATATYPE_CHAR, FB_DATATYPE_WCHAR
519 if( typeGet( dtype ) = FB_DATATYPE_WCHAR )
then
520 lgt *= typeGetSize( FB_DATATYPE_WCHAR )
530 dtype = typeSetIsConst( dtype )
535 dtype = typeSetIsConst( dtype )
546 case FB_TK_PTR, FB_TK_POINTER
547 if( ptr_cnt >= FB_DT_PTRLEVELS )
then
548 errReport( FB_ERRMSG_TOOMANYPTRINDIRECTIONS )
550 dtype = typeSetIsConst( typeAddrOf( dtype ) )
557 errReport( FB_ERRMSG_EXPECTEDPTRORPOINTER )
562 case FB_TK_PTR, FB_TK_POINTER
563 if( ptr_cnt >= FB_DT_PTRLEVELS )
then
564 errReport( FB_ERRMSG_TOOMANYPTRINDIRECTIONS )
566 dtype = typeAddrOf( dtype )
578 if( ptr_cnt > 0 )
then
579 lgt = typeGetSize( dtype )
582 if( typeGet( dtype ) = FB_DATATYPE_FWDREF )
then
584 if( (options
and FB_SYMBTYPEOPT_ALLOWFORWARD) = 0 )
then
585 errReport( FB_ERRMSG_INCOMPLETETYPE, TRUE )
587 dtype = typeAddrOf( FB_DATATYPE_VOID )
591 elseif( lgt <= 0 )
then
592 select case as const typeGet( dtype )
593 case FB_DATATYPE_CHAR, FB_DATATYPE_WCHAR
596 if( (options
and FB_SYMBTYPEOPT_CHECKSTRPTR) <> 0 )
then
599 dtype = typeAddrOf( dtype )
601 lgt = typeGetSize( dtype )