360
360
tktab_add(G, S, N, X),
361
361
N2 = [ic_forms:get_id2(X) | N],
362
362
Ps = lists:map(fun(P) ->
363
tktab_add(G, S, N2, P),
364
P#param{tk=tk_base(G, S, N, ic_forms:get_type(P))} end,
363
tktab_add(G, S, N2, P),
364
P#param{tk=tk_base(G, S, N, ic_forms:get_type(P))} end,
366
366
%% Check for exception defs.
367
367
Raises = lists:map(fun(E) -> name_lookup(G, S, N, E) end,
369
369
case ic_forms:is_oneway(X) of
371
371
if TK /= tk_void ->
593
593
case scoped_lookup(G, S, N, {scoped_id,V1,V2,["TypeCode","CORBA"]}) of
594
594
T when element(1, T) == error -> T;
595
T when tuple(T) -> element(3, T);
595
T when tuple(T) -> element(3, T)
600
599
tk_base(G, S, N, X) when element(1, X) == scoped_id ->
601
600
case scoped_lookup(G, S, N, X) of
602
601
T when element(1, T) == error -> T;
603
T when tuple(T) -> element(3, T);
602
T when tuple(T) -> element(3, T)
606
604
tk_base(_G, _S, _N, {long, _}) -> tk_long;
607
605
tk_base(_G, _S, _N, {'long long', _}) -> tk_longlong; %% LLONG
631
629
tk_memberlist(G, S, N, [X | Xs]) ->
632
630
BaseTK = tk(G, S, N, ic_forms:get_type(X)),
634
632
XX = #id_of{type=X},
635
633
lists:foldr(fun(Id, Acc) ->
636
[tk_member(G, S, N, XX#id_of{id=Id}, BaseTK) | Acc] end,
637
tk_memberlist(G, S, N, Xs),
638
ic_forms:get_idlist(X));
634
[tk_member(G, S, N, XX#id_of{id=Id}, BaseTK) | Acc] end,
635
tk_memberlist(G, S, N, Xs),
636
ic_forms:get_idlist(X));
639
637
tk_memberlist(_G, _S, _N, []) -> [].
641
639
%% same as above but for case dcls
642
640
tk_caselist(G, S, N, DiscrTK, Xs) ->
643
641
lists:foldl(fun(Case, Acc) ->
644
BaseTK = tk(G, S, N, ic_forms:get_type(Case)),
645
%% tktab_add for the uniqueness check of the declarator
646
tktab_add(G, S, N, Case),
647
lists:foldl(fun(Id, Acc2) ->
648
case tk_case(G, S, N, Case, BaseTK,
650
Err when element(1, Err)==error ->
653
unique_add_case_label(G, S, N, Id,
658
ic_forms:get_idlist(Case))
642
BaseTK = tk(G, S, N, ic_forms:get_type(Case)),
643
%% tktab_add for the uniqueness check of the declarator
644
tktab_add(G, S, N, Case),
645
lists:foldl(fun(Id, Acc2) ->
646
case tk_case(G, S, N, Case, BaseTK,
648
Err when element(1, Err)==error ->
651
unique_add_case_label(G, S, N, Id,
656
ic_forms:get_idlist(Case))
664
662
%% Handling of the things that can be in an idlist or caselist
717
715
UName = mk_uppercase(Name),
718
716
case ets:lookup(S, Name) of
719
[{_, forward, _, _}] when record(X, interface) -> ok;
720
[XX] when record(X, forward), element(2, XX)==interface -> ok;
721
717
[_] -> ic_error:error(G, {multiply_defined, X});
723
719
case ets:lookup(S, UName) of
782
778
UName = mk_uppercase(Name),
783
779
case ets:lookup(S, Name) of
784
[{_, forward, _, _}] when record(X, interface) -> ok;
785
[XX] when record(X, forward), element(2, XX)==interface -> ok;
786
780
[_] -> ic_error:error(G, {multiply_defined, X});
788
782
case ets:lookup(S, UName) of
824
818
enum_body(G, S, N, [Enum | EnumList]) ->
825
819
tktab_add(G, S, N, Enum), %%%, enum_val, Enum),
826
%% tktab_add(G, S, N, X, TK, V),
820
%% tktab_add(G, S, N, X, TK, V),
827
821
[ic_forms:get_id2(Enum) | enum_body(G, S, N, EnumList)];
828
822
enum_body(_G, _S, _N, []) -> [].
865
859
case_eval(G, S, N, DiscrTK, X) when element(1, DiscrTK) == tk_enum,
866
element(1, X) == scoped_id ->
860
element(1, X) == scoped_id ->
867
861
{tk_enum, _, _, Cases} = DiscrTK,
868
862
Id = get_case_id_and_check(G, S, N, X, X),
869
863
%%io:format("Matching: ~p to ~p~n", [Id, Cases]),
888
882
unique_add_case_label(G, _S, _N, Id, TK, TKList) ->
889
%%%io:format("check_case_labels: TK:~p TKLIST:~p ~n", [TK, TKList]),
883
%%%io:format("check_case_labels: TK:~p TKLIST:~p ~n", [TK, TKList]),
890
884
if element(1, TK) == error ->
956
950
check_switch_tk(_G, _S, _N, _X, tk_wchar) -> true; %% WCHAR
957
951
check_switch_tk(_G, _S, _N, _X, TK) when element(1, TK) == tk_enum -> true;
958
952
check_switch_tk(G, _S, _N, X, TK) -> ic_error:error(G, {illegal_switch_t, X, TK}),
964
958
name_lookup(G, S, N, X) ->
965
959
case scoped_lookup(G, S, N, X) of
966
T when tuple(T) -> element(1, T);
960
T when tuple(T) -> element(1, T)
976
969
case look_for_interface(G, S, [hd(N2)], tl(N2)) of
978
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% First attempt: filtering inherited members !
971
%% First attempt: filtering inherited members !
979
972
[{_, member, _, _}] ->
980
973
case look_for_interface(G, S, [hd(N)], tl(N2)) of
982
975
?DBG(" -- found ~p~n", [T]),
986
ic_error:error(G, {tk_not_found, X});
988
lookup(G, S, tl(N), X, Id)
978
lookup(G, S, tl(N), X, Id)
991
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
994
983
?DBG(" -- found ~p~n", [T]),
1175
1163
%% Y and Y shadows X.
1176
1164
collision(G, XPath, X, YPath, Y) ->
1177
1165
I1 = get_beef(X),
1179
1167
if record(I1, op) -> %%, record(I2, op) ->
1180
1168
ic_error:error(G, {inherit_name_collision,
1181
{YPath, Y}, {XPath, X}});
1169
{YPath, Y}, {XPath, X}});
1182
1170
record(I1, attr) -> %%, record(I2, attr) ->
1183
1171
ic_error:error(G, {inherit_name_collision,
1184
{YPath, Y}, {XPath, X}});
1172
{YPath, Y}, {XPath, X}});
1186
1174
?ifopt(G, warn_name_shadow,
1187
1175
ic_error:warn(G, {inherit_name_shadow,
1188
{YPath, Y}, {XPath, X}}))
1176
{YPath, Y}, {XPath, X}}))
1191
1179
has_idlist(X) when record(X, typedef) -> true;