ic_code.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 583 行 · 第 1/2 页
ERL
583 行
type_expand_all(_G,_N,_X,_Fd,_Tabs,[]) -> ok;type_expand_all(G,N,X,Fd,Tabs,[{ArgName,Type}|Rest]) -> type_expand(G,N,X,Fd,Tabs,ArgName,Type), type_expand_all(G,N,X,Fd,Tabs,Rest);type_expand_all(G,N,X,Fd,Tabs,[{default,_ArgName,Type}|Rest]) -> type_expand(G,N,X,Fd,Tabs,"Def",Type), type_expand_all(G,N,X,Fd,Tabs,Rest);type_expand_all(G,N,X,Fd,Tabs,[{LabelNr,_ArgName,Type}|Rest]) when integer(LabelNr) -> type_expand(G,N,X,Fd,Tabs,"V" ++ integer_to_list(LabelNr),Type), type_expand_all(G,N,X,Fd,Tabs,Rest);type_expand_all(G,N,X,Fd,Tabs,[{Label,_ArgName,Type}|Rest]) -> type_expand(G,N,X,Fd,Tabs,Label,Type), type_expand_all(G,N,X,Fd,Tabs,Rest).type_expand(_G,_N,_X,Fd,Tabs,Name,tk_null) -> type_expand_null(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_void) -> type_expand_void(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_float) -> type_expand_float(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_double) -> type_expand_double(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_longdouble) -> type_expand_longdouble(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_short) -> type_expand_short(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_ushort) -> type_expand_ushort(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_long) -> type_expand_long(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_longlong) -> type_expand_longlong(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_ulong) -> type_expand_ulong(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_ulonglong) -> type_expand_ulonglong(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_char) -> type_expand_char(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_wchar) -> type_expand_wchar(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_boolean) -> type_expand_boolean(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_octet) -> type_expand_octet(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_any) -> type_expand_any(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_TypeCode) -> type_expand_typecode(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,tk_Principal) -> type_expand_principal(Fd,Tabs,Name);type_expand(G, N, X,Fd,Tabs,Name, {tk_except, Id, ExcName, ElementList}) -> type_expand_exception(G, N, X, Fd,Tabs,Name, {tk_except, Id, ExcName, ElementList});type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_fixed, _Digits, _Scale}) -> type_expand_fixed(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_objref, _IFRId, _ObjTabs, _ObjName}) -> type_expand_object(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_objref, _IFRId, _ObjName}) -> type_expand_object(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_string, _Length}) -> type_expand_string(Fd,Tabs,Name);type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_wstring, _Length}) -> type_expand_wstring(Fd,Tabs,Name);type_expand(G,N,X,Fd,Tabs,Name,{tk_union, IFRId, UnionName, DTC, DNr, LblList}) -> type_expand_union(G,N,X,Fd,Tabs,Name,{tk_union, IFRId, UnionName, DTC, DNr, LblList});type_expand(_G,_N,_X,Fd,Tabs,Name,{tk_enum, IFRId, EnumName, ElemNameList}) -> type_expand_enum(Fd,Tabs,Name,{tk_enum, IFRId, EnumName, ElemNameList});type_expand(G,N,X,Fd,Tabs,Name,{tk_sequence, ElemTC, Length}) -> type_expand_sequence(G,N,X,Fd,Tabs,Name,{tk_sequence, ElemTC, Length});type_expand(G,N,X,Fd,Tabs,Name,{tk_array, ElemTC, Length}) -> type_expand_array(G,N,X,Fd,Tabs,Name,{tk_array, ElemTC, Length});type_expand(G,N,X,Fd,Tabs,Name,{tk_struct, IFRId, StructName, TcList}) -> type_expand_struct(G,N,X,Fd,Tabs,Name,{tk_struct, IFRId, StructName, TcList});type_expand(_G,_N,_X,Fd,Tabs,Name,_) -> type_expand_error(Fd,Tabs,Name).%% Basic OMG IDL typestype_expand_null(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = null()~n",[Tabs,Name]).type_expand_void(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = void()~n",[Tabs,Name]).type_expand_float(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = float()~n",[Tabs,Name]).type_expand_double(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = double()~n",[Tabs,Name]).type_expand_longdouble(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = long_double()~n",[Tabs,Name]).type_expand_short(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = short()~n",[Tabs,Name]).type_expand_ushort(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = unsigned_Short()~n",[Tabs,Name]).type_expand_long(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = long()~n",[Tabs,Name]).type_expand_longlong(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = long_Long()~n",[Tabs,Name]).type_expand_ulong(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = unsigned_Long()~n",[Tabs,Name]).type_expand_ulonglong(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = unsigned_Long_Long()~n",[Tabs,Name]).type_expand_char(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = char()~n",[Tabs,Name]).type_expand_wchar(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = wchar()~n",[Tabs,Name]).type_expand_boolean(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = boolean()~n",[Tabs,Name]).type_expand_octet(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = octet()~n",[Tabs,Name]).type_expand_any(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = any()~n",[Tabs,Name]).type_expand_typecode(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = TypeCode()~n",[Tabs,Name]).type_expand_principal(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = principal()~n",[Tabs,Name]).type_expand_fixed(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = fixed()~n",[Tabs,Name]).type_expand_object(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = Object_Ref()~n",[Tabs,Name]).%% Constructed OMG IDL typestype_expand_string(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = String()~n",[Tabs,Name]).type_expand_wstring(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = WString()~n",[Tabs,Name]).type_expand_exception(G, N, X, Fd, Tabs, Name, {tk_except, Id, ExcName, ElementList}) -> ScopedStructName = getScopedName(G, N, ExcName, Id), ic_codegen:emit(Fd,"%%~s ~s = ",[Tabs, Name]), type_expand_exception_rule(Fd, ScopedStructName, ElementList), type_expand_all(G, N, X, Fd, Tabs, ElementList).type_expand_struct(G,N,X,Fd,Tabs,Name,{tk_struct, IFRId, StructName, TcList}) -> ScopedStructName = getScopedName(G,N,StructName,IFRId), ic_codegen:emit(Fd,"%%~s ~s = ",[Tabs,Name]), type_expand_struct_rule(Fd,ScopedStructName,TcList), type_expand_all(G,N,X,Fd,Tabs,TcList).type_expand_union(G,N,X,Fd,Tabs,Name,{tk_union, IFRId, UnionName, DTC, _DNr, LblList}) -> ScopedUnionName = getScopedName(G,N,UnionName,IFRId), ic_codegen:emit(Fd,"%%~s ~s = #'~s'{label, value}\n",[Tabs,Name,ScopedUnionName]), type_expand(G,N,X,Fd,Tabs,"label",DTC), ic_codegen:emit(Fd,"%%~s value = ",[Tabs]), type_expand_union_rule(Fd,LblList), type_expand_all(G,N,X,Fd,Tabs,LblList).type_expand_enum(Fd,Tabs,Name,{tk_enum, _IFRId, EnumName, ElemNameList}) -> ic_codegen:emit(Fd,"%%~s ~s = ~s~n",[Tabs,Name,EnumName]), type_expand_enum_rule(Fd,Tabs,EnumName,ElemNameList).type_expand_sequence(G,N,X,Fd,Tabs,Name,{tk_sequence, ElemTC, _Length}) -> ic_codegen:emit(Fd,"%%~s ~s = [ ~sElem ]~n",[Tabs,Name,Name]), type_expand(G,N,X,Fd,Tabs,Name++"Elem",ElemTC).type_expand_array(G,N,X,Fd,Tabs,Name,{tk_array, ElemTC, _Length}) -> ic_codegen:emit(Fd,"%%~s ~s = { ~sElem[,..~sElem] }~n",[Tabs,Name,Name,Name]), type_expand(G,N,X,Fd,Tabs,Name++"Elem",ElemTC).type_expand_error(Fd,Tabs,Name) -> ic_codegen:emit(Fd,"%%~s ~s = ????~n",[Tabs,Name]).type_expand_exception_rule(Fd,_Name,[]) -> ic_codegen:emit(Fd," ???? ");type_expand_exception_rule(Fd,Name,TcList) -> ic_codegen:emit(Fd,"#'~s'{",[Name]), type_expand_exception_rule(Fd,TcList).type_expand_exception_rule(Fd,[{Name,_TC}]) -> ic_codegen:emit(Fd,"~s}~n",[Name]);type_expand_exception_rule(Fd,[{Name,_TC}|Rest]) -> ic_codegen:emit(Fd,"~s,",[Name]), type_expand_exception_rule(Fd,Rest).type_expand_struct_rule(Fd,_Name,[]) -> ic_codegen:emit(Fd," ???? ");type_expand_struct_rule(Fd,Name,TcList) -> ic_codegen:emit(Fd,"#'~s'{",[Name]), type_expand_struct_rule(Fd,TcList).type_expand_struct_rule(Fd,[{Name,_TC}]) -> ic_codegen:emit(Fd,"~s}~n",[Name]);type_expand_struct_rule(Fd,[{Name,_TC}|Rest]) -> ic_codegen:emit(Fd,"~s,",[Name]), type_expand_struct_rule(Fd,Rest).type_expand_union_rule(Fd,[]) -> ic_codegen:emit(Fd," ????");type_expand_union_rule(Fd,[{default,_Name,_TC}]) -> ic_codegen:emit(Fd,"Def~n",[]);type_expand_union_rule(Fd,[{LNr,_Name,_TC}]) when integer(LNr)-> ic_codegen:emit(Fd,"V~p~n",[LNr]);type_expand_union_rule(Fd,[{Label,_Name,_TC}]) -> ic_codegen:emit(Fd,"~s~n",[Label]);type_expand_union_rule(Fd,[{default,_Name,_TC}|Rest]) -> ic_codegen:emit(Fd,"Default | "), type_expand_union_rule(Fd,Rest);type_expand_union_rule(Fd,[{LNr,_Name,_TC}|Rest]) when integer(LNr) -> ic_codegen:emit(Fd,"V~p | ",[LNr]), type_expand_union_rule(Fd,Rest);type_expand_union_rule(Fd,[{Label,_Name,_TC}|Rest]) -> ic_codegen:emit(Fd,"~s | ",[Label]), type_expand_union_rule(Fd,Rest).type_expand_enum_rule(Fd,Tabs,Name,[]) -> ic_codegen:emit(Fd,"%%~s ~s = ????",[Tabs,Name]);type_expand_enum_rule(Fd,Tabs,Name,ElList) -> ic_codegen:emit(Fd,"%%~s ~s = ",[Tabs,Name]), type_expand_enum_rule(Fd,ElList).type_expand_enum_rule(Fd,[ElName]) -> ic_codegen:emit(Fd,"'~s' ~n",[ElName]);type_expand_enum_rule(Fd,[First|Rest]) -> ic_codegen:emit(Fd,"'~s' | ",[First]), type_expand_enum_rule(Fd,Rest).type_expand_enum_elements(_Fd,_Tabs,[]) -> ok;type_expand_enum_elements(Fd,Tabs,[Elem|Elems]) -> ic_codegen:emit(Fd,"%%~s ~s = Atom()~n",[Tabs,Elem]), type_expand_enum_elements(Fd,Tabs,Elems).%% Returns the right scoped name to be used%% along with the expansion comments getScopedName(G,N,Name,IfrId) -> PTab = ic_genobj:pragmatab(G), case ets:match(PTab,{alias,'$0',IfrId}) of [] -> %% No Alias - should never happen ic_util:to_undersc(ic_pragma:mk_scope(IfrId)); [[[_S|N]]] -> %% An alias ic_util:to_undersc([Name|N]); [[[S|FoundScope]]] -> %% Maybe inherited case ic_pragma:is_inherited_by(FoundScope,N,PTab) of false -> %% Not inherited ic_util:to_undersc([S|FoundScope]); true -> %% inherited ic_util:to_undersc([Name|N]) end end.%% mk_list produces a nice comma separated %% string of variable namesmk_list([]) -> [];mk_list([Arg | Args]) -> Arg ++ mk_list2(Args).mk_list2([Arg | Args]) -> ", " ++ Arg ++ mk_list2(Args);mk_list2([]) -> [].%%-----------------------------------------------------------------%% Internal functions%%-----------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?