69
69
%% the type, therefore the declarator decides if the array type
70
70
%% kind is added or not.
72
maybe_array(G, S, N, X, TK) when record(X, array) ->
72
maybe_array(G, S, N, X, TK) when is_record(X, array) ->
73
73
mk_array(G, S, N, X#array.size, TK);
74
74
maybe_array(_G, _S, _N, _, TK) -> TK.
85
85
%% This is en overloaded function,
86
86
%% differs in input on unions
87
member2type(_G, X, I) when record(X, union)->
87
member2type(_G, X, I) when is_record(X, union)->
88
88
Name = ic_forms:get_id2(I),
89
89
case lists:keysearch(Name,2,element(6,X#union.tk)) of
185
isString(_G, _N, T) when record(T, string) ->
185
isString(_G, _N, T) when is_record(T, string) ->
187
187
isString(_G, _N, _Other) ->
198
isWString(_G, _N, T) when record(T, wstring) ->
198
isWString(_G, _N, T) when is_record(T, wstring) ->
200
200
isWString(_G, _N, _Other) ->
211
isArray(_G, _N, T) when record(T, array) ->
211
isArray(_G, _N, T) when is_record(T, array) ->
213
213
isArray(_G, _N, _Other) ->
224
isSequence(_G, _N, T) when record(T, sequence) ->
224
isSequence(_G, _N, T) when is_record(T, sequence) ->
226
226
isSequence(_G, _N, _Other) ->
237
isStruct(_G, _N, T) when record(T, struct) ->
237
isStruct(_G, _N, T) when is_record(T, struct) ->
239
239
isStruct(_G, _N, _Other) ->
250
isUnion(_G, _N, T) when record(T, union) ->
250
isUnion(_G, _N, T) when is_record(T, union) ->
252
252
isUnion(_G, _N, _Other) ->
264
isEnum(_G, _N, T) when record(T, enum) ->
264
isEnum(_G, _N, T) when is_record(T, enum) ->
266
266
isEnum(_G, _N, _Other) ->
352
352
%%-----------------------------------------------------------------
353
353
%% Internal functions
354
354
%%-----------------------------------------------------------------
355
check(G, _S, N, X) when record(X, preproc) ->
355
check(G, _S, N, X) when is_record(X, preproc) ->
356
356
handle_preproc(G, N, X#preproc.cat, X),
359
check(G, S, N, X) when record(X, op) ->
359
check(G, S, N, X) when is_record(X, op) ->
361
361
TK = tk_base(G, S, N, ic_forms:get_type(X)),
362
362
tktab_add(G, S, N, X),
390
390
X#op{params=Ps, tk=TK, raises=Raises};
392
check(G, S, N, X) when record(X, interface) ->
392
check(G, S, N, X) when is_record(X, interface) ->
394
394
N2 = [ic_forms:get_id2(X) | N],
395
395
TK = {tk_objref, ictk:get_IR_ID(G, N, X), ic_forms:get_id2(X)},
402
402
ic_symtab:store(G, N, X2),
405
check(G, S, N, X) when record(X, forward) ->
405
check(G, S, N, X) when is_record(X, forward) ->
407
407
tktab_add(G, S, N, X, {tk_objref, ictk:get_IR_ID(G, N, X), ic_forms:get_id2(X)}),
411
check(G, S, N, X) when record(X, const) ->
411
check(G, S, N, X) when is_record(X, const) ->
413
413
case tk_base(G, S, N, ic_forms:get_type(X)) of
414
414
Err when element(1, Err) == error -> X;
430
check(G, S, N, X) when record(X, const) ->
430
check(G, S, N, X) when is_record(X, const) ->
432
432
case tk_base(G, S, N, ic_forms:get_type(X)) of
433
433
Err when element(1, Err) == error -> X;
445
check(G, S, N, X) when record(X, except) ->
445
check(G, S, N, X) when is_record(X, except) ->
447
447
TK = tk(G, S, N, X),
450
check(G, S, N, X) when record(X, struct) ->
450
check(G, S, N, X) when is_record(X, struct) ->
452
452
TK = tk(G, S, N, X),
455
check(G, S, N, X) when record(X, enum) ->
455
check(G, S, N, X) when is_record(X, enum) ->
457
457
TK = tk(G, S, N, X),
460
check(G, S, N, X) when record(X, union) ->
460
check(G, S, N, X) when is_record(X, union) ->
462
462
TK = tk(G, S, N, X),
465
check(G, S, N, X) when record(X, attr) ->
465
check(G, S, N, X) when is_record(X, attr) ->
467
467
TK = tk_base(G, S, N, ic_forms:get_type(X)),
468
468
XX = #id_of{type=X},
470
470
ic_forms:get_idlist(X)),
473
check(G, S, N, X) when record(X, module) ->
473
check(G, S, N, X) when is_record(X, module) ->
475
475
tktab_add(G, S, N, X),
476
476
X#module{body=check_list(G, S, [ic_forms:get_id2(X) | N], ic_forms:get_body(X))};
478
check(G, S, N, X) when record(X, typedef) ->
478
check(G, S, N, X) when is_record(X, typedef) ->
480
480
TKbase = tk(G, S, N, X),
481
481
X#typedef{tk=TKbase};
495
495
%%--------------------------------------------------------------------
497
tk(G, S, N, X) when record(X, union) ->
497
tk(G, S, N, X) when is_record(X, union) ->
498
498
N2 = [ic_forms:get_id2(X) | N],
499
499
DisrcTK = tk(G, S, N, ic_forms:get_type(X)),
500
500
case check_switch_tk(G, S, N, X, DisrcTK) of
512
tk(G, S, N, X) when record(X, enum) ->
512
tk(G, S, N, X) when is_record(X, enum) ->
513
513
N2 = [ic_forms:get_id2(X) | N],
514
514
tktab_add(G, S, N, X,
515
515
{tk_enum, ictk:get_IR_ID(G, N, X), ic_forms:get_id2(X),
519
519
%% Note that the TK returned from this function is the base TK. It
520
520
%% must be modified for each of the identifiers in the idlist (for
521
521
%% array reasons).
522
tk(G, S, N, X) when record(X, typedef) ->
522
tk(G, S, N, X) when is_record(X, typedef) ->
524
524
%% Special case only for term and java backend !
525
525
{typedef,{any,_},[{'<identifier>',_,"term"}],undefined} ->
549
tk(G, S, N, X) when record(X, struct) ->
549
tk(G, S, N, X) when is_record(X, struct) ->
550
550
N2 = [ic_forms:get_id2(X) | N],
551
551
tktab_add(G, S, N, X, {tk_struct, ictk:get_IR_ID(G, N, X), ic_forms:get_id2(X),
552
552
tk_memberlist(G, S, N2, ic_forms:get_body(X))});
554
tk(G, S, N, X) when record(X, except) ->
554
tk(G, S, N, X) when is_record(X, except) ->
555
555
N2 = [ic_forms:get_id2(X) | N],
556
556
tktab_add(G, S, N, X, {tk_except, ictk:get_IR_ID(G, N, X), ic_forms:get_id2(X),
557
557
tk_memberlist(G, S, N2, ic_forms:get_body(X))});
559
559
tk(G, S, N, X) -> tk_base(G, S, N, X).
562
tk_base(G, S, N, X) when record(X, sequence) ->
562
tk_base(G, S, N, X) when is_record(X, sequence) ->
563
563
{tk_sequence, tk(G, S, N, X#sequence.type),
564
564
len_eval(G, S, N, X#sequence.length)};
566
tk_base(G, S, N, X) when record(X, string) ->
566
tk_base(G, S, N, X) when is_record(X, string) ->
567
567
{tk_string, len_eval(G, S, N, X#string.length)};
569
tk_base(G, S, N, X) when record(X, wstring) -> %% WSTRING
569
tk_base(G, S, N, X) when is_record(X, wstring) -> %% WSTRING
570
570
{tk_wstring, len_eval(G, S, N, X#wstring.length)};
572
572
%% Fixed constants can be declared as:
573
573
%% (1) const fixed pi = 3.14D; or
574
574
%% (2) typedef fixed<3,2> f32;
575
575
%% const f32 pi = 3.14D;
576
tk_base(G, S, N, X) when record(X, fixed) ->
576
tk_base(G, S, N, X) when is_record(X, fixed) ->
578
578
{tk_fixed, len_eval(G, S, N, X#fixed.digits), len_eval(G, S, N, X#fixed.scale)};
579
579
tk_base(_G, _S, _N, {fixed, _}) ->
595
595
case scoped_lookup(G, S, N, {scoped_id,V1,V2,["TypeCode","CORBA"]}) of
596
596
T when element(1, T) == error -> T;
597
T when tuple(T) -> element(3, T)
597
T when is_tuple(T) -> element(3, T)
601
601
tk_base(G, S, N, X) when element(1, X) == scoped_id ->
602
602
case scoped_lookup(G, S, N, X) of
603
603
T when element(1, T) == error -> T;
604
T when tuple(T) -> element(3, T)
604
T when is_tuple(T) -> element(3, T)
606
606
tk_base(_G, _S, _N, {long, _}) -> tk_long;
607
607
tk_base(_G, _S, _N, {'long long', _}) -> tk_longlong; %% LLONG
702
702
tktab_add_id(G, S, N, X, ic_forms:get_id2(X), TK, Aux).
705
tktab_add_id(G, S, N, X, Id, TK, Aux) when record(X,enumerator) ->
705
tktab_add_id(G, S, N, X, Id, TK, Aux) when is_record(X,enumerator) ->
707
707
%% Check if the "scl" flag is set to true
708
708
%% if so, allow old semantics ( errornous )
731
731
%% Fixes the multiple file module definition check
732
732
%% but ONLY for Corba backend
734
tktab_add_id(G, S, N, X, Id, TK, Aux) when record(X,module) ->
734
tktab_add_id(G, S, N, X, Id, TK, Aux) when is_record(X,module) ->
735
735
case ic_options:get_opt(G, be) of
796
796
UName = mk_uppercase(Name),
797
797
case ets:lookup(S, Name) of
798
[{_, forward, _, _}] when record(X, interface) -> ok;
799
[XX] when record(X, forward), element(2, XX)==interface -> ok;
798
[{_, forward, _, _}] when is_record(X, interface) -> ok;
799
[XX] when is_record(X, forward) andalso element(2, XX)==interface -> ok;
800
800
[_] -> ic_error:error(G, {multiply_defined, X});
802
802
case ets:lookup(S, UName) of
877
877
%% The enum declarator is in the union scope.
878
do_special_enum(G, S, N, X) when record(X, enum) ->
878
do_special_enum(G, S, N, X) when is_record(X, enum) ->
879
879
tktab_add(G, S, N, #id_of{id=X#enum.id, type=X});
880
880
do_special_enum(_G, _S, _N, _X) ->
960
960
name_lookup(G, S, N, X) ->
961
961
case scoped_lookup(G, S, N, X) of
962
T when tuple(T) -> element(1, T)
962
T when is_tuple(T) -> element(1, T)
1021
1021
[{_, interface, _TK, Inh}] ->
1022
1022
case look_in_inherit(G, S, Hd, Inh) of
1023
1023
%% gather_inherit(G, S, Inh, [])) of
1024
[X] when tuple(X) ->
1024
[X] when is_tuple(X) ->
1027
1027
look_for_interface(G, S, Hd ++ [hd(Tl)], tl(Tl))
1059
1059
calc_inherit_body(G, N, OrigBody, [X|Xs], InhBody) ->
1060
1060
case ic_symtab:retrieve(G, X) of
1061
Intf when record(Intf, interface) ->
1061
Intf when is_record(Intf, interface) ->
1062
1062
Body = filter_body(G, X, ic_forms:get_body(Intf), N, OrigBody, InhBody),
1063
1063
calc_inherit_body(G, N, OrigBody, Xs, [{X, Body} | InhBody]);
1166
1166
collision(G, XPath, X, YPath, Y) ->
1167
1167
I1 = get_beef(X),
1168
1168
% I2 = get_beef(Y),
1169
if record(I1, op) -> %%, record(I2, op) ->
1169
if is_record(I1, op) -> %%, record(I2, op) ->
1170
1170
ic_error:error(G, {inherit_name_collision,
1171
1171
{YPath, Y}, {XPath, X}});
1172
record(I1, attr) -> %%, record(I2, attr) ->
1172
is_record(I1, attr) -> %%, record(I2, attr) ->
1173
1173
ic_error:error(G, {inherit_name_collision,
1174
1174
{YPath, Y}, {XPath, X}});
1178
1178
{YPath, Y}, {XPath, X}}))
1181
has_idlist(X) when record(X, typedef) -> true;
1182
has_idlist(X) when record(X, member) -> true;
1183
has_idlist(X) when record(X, case_dcl) -> true;
1184
has_idlist(X) when record(X, attr) -> true;
1181
has_idlist(X) when is_record(X, typedef) -> true;
1182
has_idlist(X) when is_record(X, member) -> true;
1183
has_idlist(X) when is_record(X, case_dcl) -> true;
1184
has_idlist(X) when is_record(X, attr) -> true;
1185
1185
has_idlist(_) -> false.
1187
replace_idlist(X, IdList) when record(X, typedef) -> X#typedef{id=IdList};
1188
replace_idlist(X, IdList) when record(X, attr) -> X#attr{id=IdList}.
1187
replace_idlist(X, IdList) when is_record(X, typedef) -> X#typedef{id=IdList};
1188
replace_idlist(X, IdList) when is_record(X, attr) -> X#attr{id=IdList}.
1190
get_beef(X) when record(X, id_of) -> X#id_of.type;
1190
get_beef(X) when is_record(X, id_of) -> X#id_of.type;
1191
1191
get_beef(X) -> X.
1401
1401
searchIncludedTk(TK,IR_ID);
1402
1402
searchIncludedTk({tk_sequence,TK,_},IR_ID) ->
1403
1403
searchIncludedTk(TK,IR_ID);
1404
searchIncludedTk(TK, _IR_ID) when atom(TK) ->
1404
searchIncludedTk(TK, _IR_ID) when is_atom(TK) ->
1406
1406
searchIncludedTk(TK,IR_ID) ->
1407
1407
case element(2,TK) == IR_ID of