~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to lib/ic/src/ic_cserver.erl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
%%------------------------------------------------------------
33
33
 
34
34
-import(lists, [foreach/2, foldl/3, foldr/3, map/2]).
35
 
-import(ic_codegen, [emit/2, emit/3]).
 
35
-import(ic_codegen, [emit/2, emit/3, emit/4, emit_c_enc_rpt/4, emit_c_dec_rpt/4]).
36
36
 
37
37
-include("icforms.hrl").
38
38
-include("ic.hrl").
165
165
        true ->
166
166
            HFd = ic_genobj:hrlfiled(G), 
167
167
            emit(HFd, "#include <stdlib.h>\n"), 
 
168
            case ic_options:get_opt(G, c_report) of 
 
169
                true ->
 
170
                    emit(HFd, "#ifndef OE_C_REPORT\n"), 
 
171
                    emit(HFd, "#define OE_C_REPORT\n"), 
 
172
                    emit(HFd, "#include <stdio.h>\n"), 
 
173
                    emit(HFd, "#endif\n");
 
174
                _  ->
 
175
                    ok
 
176
            end,
168
177
            emit(HFd, "#include \"~s\"\n", [?IC_HEADER]), 
169
178
            emit(HFd, "#include \"~s\"\n", [?ERL_INTERFACEHEADER]), 
170
179
            emit(HFd, "#include \"~s\"\n", [?EICONVHEADER]), 
595
604
%% Emit switch 
596
605
%%------------------------------------------------------------
597
606
 
598
 
emit_switch(_G, Fd, N, _X) ->
 
607
emit_switch(G, Fd, N, _X) ->
 
608
    emit(Fd, "#include <string.h>\n"),
 
609
    case ic_options:get_opt(G, c_report) of 
 
610
        true ->
 
611
            emit(Fd, "#ifndef OE_C_REPORT\n"), 
 
612
            emit(Fd, "#define OE_C_REPORT\n"), 
 
613
            emit(Fd, "#include <stdio.h>\n"), 
 
614
            emit(Fd, "#endif\n");
 
615
        _  ->
 
616
            ok
 
617
    end,
599
618
    StartCode =
600
 
        "#include <string.h>\n" 
601
619
        "#include \"ic.h\"\n"
602
620
        "#include \"erl_interface.h\"\n"
603
621
        "#include \"ei.h\"\n"
724
742
    emit(Fd, "  if (oe_env->_received != ~p) {\n", [length(InTypeAttrArgs)]), 
725
743
    emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, BAD_PARAM, "
726
744
         "\"Wrong number of operation parameters\");\n"), 
 
745
    emit_c_dec_rpt(Fd, "    ", "wrong number of parameters", []),
 
746
    emit_c_dec_rpt(Fd, "    ", "server exec ~s\\n====\\n", [Name]),
727
747
    emit(Fd, "    return -1;\n", []), 
728
748
    emit(Fd, "  }\n"), 
729
749
    emit(Fd, "  else {\n", []), 
983
1003
                 "    /* Decode parameters */\n" 
984
1004
                 "    if((oe_error_code = ~s(oe_obj, ~s, oe_env)) < 0) {\n", 
985
1005
                 [ParDecName, PLFDC]), 
 
1006
            emit_c_dec_rpt(Fd, "    ", "parmeters", []),
986
1007
            emit(Fd, 
987
1008
                 "      if(oe_env->_major == CORBA_NO_EXCEPTION)\n"
988
1009
                 "        CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1689
1710
    case mk_c_type(G, N, T, evaluate_not) of
1690
1711
        "erlang_pid" ->
1691
1712
            emit(Fd, "  if ((oe_error_code = "
1692
 
                 "oe_ei_encode_pid(oe_env, ~s)) < 0)\n", 
 
1713
                 "oe_ei_encode_pid(oe_env, ~s)) < 0) {\n", 
1693
1714
                 [LName]), 
1694
 
            emit(Fd, "    return oe_error_code;\n\n");
 
1715
            emit_c_enc_rpt(Fd, "    ", "oe_ei_encode_pid", []),
 
1716
            emit(Fd, "    return oe_error_code;\n  }\n");
1695
1717
        "erlang_port" ->
1696
1718
            emit(Fd, "  if ((oe_error_code = "
1697
 
                 "oe_ei_encode_port(oe_env, ~s)) < 0)\n", 
 
1719
                 "oe_ei_encode_port(oe_env, ~s)) < 0) {\n", 
1698
1720
                 [LName]), 
1699
 
            emit(Fd, "    return oe_error_code;\n\n");
 
1721
            emit_c_enc_rpt(Fd, "    ", "oe_ei_encode_port", []),
 
1722
            emit(Fd, "    return oe_error_code;\n  }\n");
1700
1723
        "erlang_ref" ->
1701
1724
            emit(Fd, "  if ((oe_error_code = "
1702
 
                 "oe_ei_encode_ref(oe_env, ~s)) < 0)\n", 
 
1725
                 "oe_ei_encode_ref(oe_env, ~s)) < 0) {\n", 
1703
1726
                 [LName]), 
1704
 
            emit(Fd, "    return oe_error_code;\n\n");
 
1727
            emit_c_enc_rpt(Fd, "    ", "oe_ei_encode_ref", []),
 
1728
            emit(Fd, "    return oe_error_code;\n  }\n");
1705
1729
        "ETERM*" ->
1706
1730
            emit(Fd, "  if ((oe_error_code = "
1707
 
                 "oe_ei_encode_term(oe_env, ~s)) < 0)\n", 
 
1731
                 "oe_ei_encode_term(oe_env, ~s)) < 0) {\n", 
1708
1732
                 [LName]), 
1709
 
            emit(Fd, "    return oe_error_code;\n\n");
 
1733
            emit_c_enc_rpt(Fd, "    ", "oe_ei_encode_term", []),
 
1734
            emit(Fd, "    return oe_error_code;\n  }\n");
1710
1735
        {enum, FSN} ->
1711
1736
            emit_encoding_stmt(G, N, X, Fd, FSN, LName);
1712
1737
        FSN ->
1713
1738
            emit_encoding_stmt(G, N, X, Fd, FSN, LName)
1714
1739
    end;
1715
 
emit_encoding_stmt(G, _N, X, Fd, T, LName) when list(T) -> 
 
1740
emit_encoding_stmt(G, N, X, Fd, T, LName) when list(T) -> 
1716
1741
    %% Already a fullscoped name
1717
1742
    case get_param_tk(LName, X) of
1718
1743
        error ->
1728
1753
                         "CORBA_SYSTEM_EXCEPTION, "
1729
1754
                         "BAD_PARAM, \"Bad operation parameter on encode\");"
1730
1755
                         "\n"), 
 
1756
                    ?emit_c_enc_rpt(Fd, "    ", "", []),
1731
1757
                    emit(Fd, "    return oe_error_code;\n  }\n\n");
1732
1758
                false ->
1733
1759
                    if atom(ParamTK) ->
1741
1767
                                         "CORBA_SYSTEM_EXCEPTION, "
1742
1768
                                         "BAD_PARAM, \"Bad operation "
1743
1769
                                         "parameter on encode\");\n"), 
 
1770
                                    ?emit_c_enc_rpt(Fd, "    ", "ushort", []),
1744
1771
                                    emit(Fd, "    return "
1745
1772
                                         "oe_error_code;\n  }\n\n");
1746
1773
                                tk_ulong -> 
1751
1778
                                         "CORBA_SYSTEM_EXCEPTION, "
1752
1779
                                         "BAD_PARAM, \"Bad operation "
1753
1780
                                         "parameter on encode\");\n"), 
 
1781
                                    ?emit_c_enc_rpt(Fd, "    ", "ulong", []),
1754
1782
                                    emit(Fd, "    return "
1755
1783
                                         "oe_error_code;\n  }\n\n");
1756
1784
                                tk_ulonglong -> 
1761
1789
                                         "CORBA_SYSTEM_EXCEPTION, "
1762
1790
                                         "BAD_PARAM, \"Bad operation "
1763
1791
                                         "parameter on encode\");\n"), 
 
1792
                                    ?emit_c_enc_rpt(Fd, "    ", "ulonglong", []),
1764
1793
                                    emit(Fd, "    return "
1765
1794
                                         "oe_error_code;\n  }\n\n");
1766
1795
                                tk_short ->
1771
1800
                                         "CORBA_SYSTEM_EXCEPTION, "
1772
1801
                                         "BAD_PARAM, \"Bad operation "
1773
1802
                                         "parameter on encode\");\n"), 
 
1803
                                    ?emit_c_enc_rpt(Fd, "    ", "short", []),
1774
1804
                                    emit(Fd, "    return "
1775
1805
                                         "oe_error_code;\n  }\n\n");
1776
1806
                                tk_long ->
1781
1811
                                         "CORBA_SYSTEM_EXCEPTION, "
1782
1812
                                         "BAD_PARAM, \"Bad operation "
1783
1813
                                         "parameter on encode\");\n"), 
 
1814
                                    ?emit_c_enc_rpt(Fd, "    ", "long", []),
1784
1815
                                    emit(Fd, "    return "
1785
1816
                                         "oe_error_code;\n  }\n\n");
1786
1817
                                tk_longlong ->
1791
1822
                                         "CORBA_SYSTEM_EXCEPTION, "
1792
1823
                                         "BAD_PARAM, \"Bad operation "
1793
1824
                                         "parameter on encode\");\n"), 
 
1825
                                    ?emit_c_enc_rpt(Fd, "    ", "longlong", []),
1794
1826
                                    emit(Fd, "    return "
1795
1827
                                         "oe_error_code;\n  }\n\n");
1796
1828
                                tk_float ->
1801
1833
                                         "CORBA_SYSTEM_EXCEPTION, "
1802
1834
                                         "BAD_PARAM, \"Bad operation "
1803
1835
                                         "parameter on encode\");\n"), 
 
1836
                                    ?emit_c_enc_rpt(Fd, "    ", "float", []),
1804
1837
                                    emit(Fd, "    return "
1805
1838
                                         "oe_error_code;\n  }\n\n");
1806
1839
                                tk_double ->
1811
1844
                                         "CORBA_SYSTEM_EXCEPTION, "
1812
1845
                                         "BAD_PARAM, \"Bad operation "
1813
1846
                                         "parameter on encode\");\n"), 
 
1847
                                    ?emit_c_enc_rpt(Fd, "    ", "double", []),
1814
1848
                                    emit(Fd, "    return "
1815
1849
                                         "oe_error_code;\n  }\n\n");
1816
1850
                                tk_boolean ->
1823
1857
                                         "CORBA_SYSTEM_EXCEPTION, "
1824
1858
                                         "BAD_PARAM, \"Bad operation "
1825
1859
                                         "parameter on encode\");\n"), 
 
1860
                                    ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
1826
1861
                                    emit(Fd, "        return "
1827
1862
                                         "oe_error_code;\n      }\n"), 
1828
1863
                                    emit(Fd, "      break;\n"), 
1834
1869
                                         "CORBA_SYSTEM_EXCEPTION, "
1835
1870
                                         "BAD_PARAM, \"Bad operation "
1836
1871
                                         "parameter on encode\");\n"), 
 
1872
                                    ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
1837
1873
                                    emit(Fd, "        return "
1838
1874
                                         "oe_error_code;\n      }\n"), 
1839
1875
                                    emit(Fd, "      break;\n"), 
1842
1878
                                         "CORBA_SYSTEM_EXCEPTION, "
1843
1879
                                         "BAD_PARAM, \"Bad operation "
1844
1880
                                         "parameter on encode\");\n"), 
 
1881
                                    ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
1845
1882
                                    emit(Fd, "      return -1;\n"), 
1846
1883
                                    emit(Fd, "  }\n\n");
1847
1884
                                tk_char ->
1852
1889
                                         "CORBA_SYSTEM_EXCEPTION, "
1853
1890
                                         "BAD_PARAM, \"Bad operation "
1854
1891
                                         "parameter on encode\");\n"), 
 
1892
                                    ?emit_c_enc_rpt(Fd, "    ", "char", []),
1855
1893
                                    emit(Fd, "    return "
1856
1894
                                         "oe_error_code;\n  }\n\n");
1857
1895
                                tk_wchar ->  %% WCHAR
1862
1900
                                         "CORBA_SYSTEM_EXCEPTION, "
1863
1901
                                         "BAD_PARAM, \"Bad operation "
1864
1902
                                         "parameter on encode\");\n"), 
 
1903
                                    ?emit_c_enc_rpt(Fd, "    ", "wchar", []),
1865
1904
                                    emit(Fd, "    return "
1866
1905
                                         "oe_error_code;\n  }\n\n");
1867
1906
                                tk_octet ->
1872
1911
                                         "CORBA_SYSTEM_EXCEPTION, "
1873
1912
                                         "BAD_PARAM, \"Bad operation "
1874
1913
                                         "parameter on encode\");\n"), 
 
1914
                                    ?emit_c_enc_rpt(Fd, "    ", "octet", []),
1875
1915
                                    emit(Fd, "    return "
1876
1916
                                         "oe_error_code;\n  }\n\n");
1877
1917
                                tk_any ->
1882
1922
                                         "CORBA_SYSTEM_EXCEPTION, "
1883
1923
                                         "BAD_PARAM, \"Bad operation "
1884
1924
                                         "parameter on encode\");\n"), 
 
1925
                                    ?emit_c_enc_rpt(Fd, "    ", "any", []),
1885
1926
                                    emit(Fd, "    return "
1886
1927
                                         "oe_error_code;\n  }\n\n");
1887
1928
                                _ ->
1889
1930
                                         "CORBA_SYSTEM_EXCEPTION, "
1890
1931
                                         "BAD_PARAM, \"Bad operation "
1891
1932
                                         "parameter on encode\");\n"), 
 
1933
                                    ?emit_c_enc_rpt(Fd, "    ", "tk_unknown", []),
1892
1934
                                    emit(Fd, "    return "
1893
1935
                                         "oe_error_code;\n  }\n\n"), 
1894
1936
                                    ok
1899
1941
                                    emit(Fd, "  if ((oe_error_code = "
1900
1942
                                         "~s~s(oe_env, ~s)) < 0) {\n", 
1901
1943
                                         [ic_util:mk_oe_name(G, "encode_"), 
1902
 
                                          T, LName]);
 
1944
                                          T, LName]),
 
1945
                                    ?emit_c_enc_rpt(Fd, "    ", "enum", []);
1903
1946
                                tk_array ->
1904
1947
                                    emit(Fd, "  if ((oe_error_code = "
1905
1948
                                         "~s~s(oe_env, ~s)) < 0) {\n", 
1906
1949
                                         [ic_util:mk_oe_name(G, "encode_"), 
1907
 
                                          T, LName]);
 
1950
                                          T, LName]),
 
1951
                                    ?emit_c_enc_rpt(Fd, "    ", "array", []);
1908
1952
                                _ ->
1909
1953
                                    emit(Fd, "  if ((oe_error_code = "
1910
1954
                                         "~s~s(oe_env, &~s)) < 0) {\n", 
1911
1955
                                         [ic_util:mk_oe_name(G, "encode_"), 
1912
 
                                          T, LName])
 
1956
                                          T, LName]),
 
1957
                                    ?emit_c_enc_rpt(Fd, "    ", "", [])
1913
1958
                            end, 
1914
1959
                            emit(Fd, "    CORBA_exc_set(oe_env, "
1915
1960
                                 "CORBA_SYSTEM_EXCEPTION, "
1919
1964
                    end
1920
1965
            end
1921
1966
    end;
1922
 
emit_encoding_stmt(_G, _N, _X, Fd, T, LName)  when record(T, string) ->
 
1967
emit_encoding_stmt(G, N, _X, Fd, T, LName)  when record(T, string) ->
1923
1968
    emit(Fd, "  if ((oe_error_code = "
1924
1969
         "oe_ei_encode_string(oe_env, (const char*) ~s)) < 0) {\n", 
1925
1970
         [LName]), 
1926
1971
    emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1927
1972
         "BAD_PARAM, \"Cannot encode string\");\n"), 
 
1973
    ?emit_c_enc_rpt(Fd, "    ", "string", []),
1928
1974
    emit(Fd, "    return oe_error_code;\n  }\n\n");
1929
 
emit_encoding_stmt(_G, _N, _X, Fd, T, LName) when record(T, wstring) ->
 
1975
emit_encoding_stmt(G, N, _X, Fd, T, LName) when record(T, wstring) ->
1930
1976
    emit(Fd, "  if ((oe_error_code = "
1931
1977
         "oe_ei_encode_wstring(oe_env, ~s)) < 0) {\n", 
1932
1978
         [LName]), 
 
1979
    ?emit_c_enc_rpt(Fd, "    ", "wstring", []),
1933
1980
    emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1934
1981
         "BAD_PARAM, \"Cannot encode string\");\n"), 
1935
1982
    emit(Fd, "    return oe_error_code;\n  }\n\n");
1939
1986
            emit(Fd, "  if ((oe_error_code = "
1940
1987
                 "oe_ei_encode_ulong(oe_env, (unsigned long) ~s)) < 0) {\n", 
1941
1988
                 [LName]), 
 
1989
            ?emit_c_enc_rpt(Fd, "    ", "ushort", []),
1942
1990
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1943
1991
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1944
1992
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1946
1994
            emit(Fd, "  if ((oe_error_code = "
1947
1995
                 "oe_ei_encode_ulong(oe_env, ~s)) < 0) {\n", 
1948
1996
                 [LName]), 
 
1997
            ?emit_c_enc_rpt(Fd, "    ", "ulong", []),
1949
1998
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1950
1999
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1951
2000
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1953
2002
            emit(Fd, "  if ((oe_error_code = "
1954
2003
                 "oe_ei_encode_ulonglong(oe_env, ~s)) < 0) {\n", 
1955
2004
                 [LName]), 
 
2005
            ?emit_c_enc_rpt(Fd, "    ", "ulonglong", []),
1956
2006
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1957
2007
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1958
2008
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1960
2010
            emit(Fd, "  if ((oe_error_code = "
1961
2011
                 "oe_ei_encode_long(oe_env, (long) ~s)) < 0) {\n", 
1962
2012
                 [LName]), 
 
2013
            ?emit_c_enc_rpt(Fd, "    ", "short", []),
1963
2014
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1964
2015
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1965
2016
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1967
2018
            emit(Fd, "  if ((oe_error_code = "
1968
2019
                 "oe_ei_encode_long(oe_env, ~s)) < 0) {\n", 
1969
2020
                 [LName]), 
 
2021
            ?emit_c_enc_rpt(Fd, "    ", "long", []),
1970
2022
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1971
2023
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1972
2024
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1974
2026
            emit(Fd, "  if ((oe_error_code = "
1975
2027
                 "oe_ei_encode_longlong(oe_env, ~s)) < 0) {\n", 
1976
2028
                 [LName]), 
 
2029
            ?emit_c_enc_rpt(Fd, "    ", "longlong", []),
1977
2030
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1978
2031
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1979
2032
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1981
2034
            emit(Fd, "    if ((oe_error_code = "
1982
2035
                 "oe_ei_encode_double(oe_env, (double) ~s)) < 0) {\n", 
1983
2036
                 [LName]), 
 
2037
            ?emit_c_enc_rpt(Fd, "    ", "float", []),
1984
2038
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1985
2039
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1986
2040
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1988
2042
            emit(Fd, "  if ((oe_error_code = "
1989
2043
                 "oe_ei_encode_double(oe_env, ~s)) < 0) {\n", 
1990
2044
                 [LName]), 
 
2045
            ?emit_c_enc_rpt(Fd, "    ", "double", []),
1991
2046
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
1992
2047
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
1993
2048
            emit(Fd, "    return oe_error_code;\n  }\n\n");
1996
2051
            emit(Fd, "    case 0 :\n"), 
1997
2052
            emit(Fd, "      if ((oe_error_code = "
1998
2053
                 "oe_ei_encode_atom(oe_env, \"false\")) < 0) {\n"), 
 
2054
            ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
1999
2055
            emit(Fd, "        CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2000
2056
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2001
2057
            emit(Fd, "        return oe_error_code;\n      }\n"), 
2003
2059
            emit(Fd, "    case 1 :\n"), 
2004
2060
            emit(Fd, "      if ((oe_error_code = "
2005
2061
                 "oe_ei_encode_atom(oe_env, \"true\")) < 0) {\n"), 
 
2062
            ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
2006
2063
            emit(Fd, "        CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2007
2064
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2008
2065
            emit(Fd, "        return oe_error_code;\n      }\n"), 
2009
2066
            emit(Fd, "      break;\n"), 
2010
2067
            emit(Fd, "    default :\n"), 
 
2068
            ?emit_c_enc_rpt(Fd, "    ", "boolean", []),
2011
2069
            emit(Fd, "      CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2012
2070
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2013
2071
            emit(Fd, "      return -1;\n"), 
2016
2074
            emit(Fd, "  if ((oe_error_code = "
2017
2075
                 "oe_ei_encode_char(oe_env, ~s)) < 0) {\n", 
2018
2076
                 [LName]), 
 
2077
            ?emit_c_enc_rpt(Fd, "    ", "char", []),
2019
2078
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2020
2079
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2021
2080
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2023
2082
            emit(Fd, "  if ((oe_error_code = "
2024
2083
                 "oe_ei_encode_wchar(oe_env, ~s)) < 0) {\n", 
2025
2084
                 [LName]), 
 
2085
            ?emit_c_enc_rpt(Fd, "    ", "wchar", []),
2026
2086
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2027
2087
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2028
2088
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2030
2090
            emit(Fd, "  if ((oe_error_code = "
2031
2091
                 "oe_ei_encode_char(oe_env, ~s)) < 0) {\n", 
2032
2092
                 [LName]), 
 
2093
            ?emit_c_enc_rpt(Fd, "    ", "octet", []),
2033
2094
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2034
2095
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2035
2096
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2036
2097
        {void, _} ->
2037
2098
            emit(Fd, "  if ((oe_error_code = "
2038
2099
                 "oe_ei_encode_atom(oe_env, \"void\")) < 0) {\n"), 
 
2100
            ?emit_c_enc_rpt(Fd, "    ", "void", []),
2039
2101
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2040
2102
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2041
2103
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2042
2104
        {sequence, _, _} ->
 
2105
            ?emit_c_enc_rpt(Fd, "    ", "sequence", []),
2043
2106
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2044
2107
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2045
2108
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2047
2110
            emit(Fd, "  if ((oe_error_code = "
2048
2111
                 "oe_ei_encode_long(oe_env, ~s)) < 0) {\n", 
2049
2112
                 [LName]), 
 
2113
            ?emit_c_enc_rpt(Fd, "    ", "any", []),
2050
2114
            emit(Fd, "    CORBA_exc_set(oe_env, CORBA_SYSTEM_EXCEPTION, "
2051
2115
                 "BAD_PARAM, \"Bad operation parameter on encode\");\n"), 
2052
2116
            emit(Fd, "    return oe_error_code;\n  }\n\n");
2100
2164
                 "&oe_env->_iin, ~s~s)) < 0) {\n", 
2101
2165
                 [InBuffer, IndOp, LName]), 
2102
2166
            ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2167
            ?emit_c_dec_rpt(Fd, "    ", "", []),
2103
2168
            emit(Fd, "    return oe_error_code;\n"),
2104
2169
            emit(Fd, "  }\n\n");
2105
2170
        "erlang_port" ->
2107
2172
                 "&oe_env->_iin, ~s~s)) < 0) {\n", 
2108
2173
                 [InBuffer, IndOp, LName]), 
2109
2174
            ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2175
            ?emit_c_dec_rpt(Fd, "    ", "", []),
2110
2176
            emit(Fd, "    return oe_error_code;\n"),
2111
2177
            emit(Fd, "  }\n\n");
2112
2178
        "erlang_ref" ->
2114
2180
                 "&oe_env->_iin, ~s~s)) < 0) {\n", 
2115
2181
                 [InBuffer, IndOp, LName]), 
2116
2182
            ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2183
            ?emit_c_dec_rpt(Fd, "    ", "", []),
2117
2184
            emit(Fd, "    return oe_error_code;\n"),
2118
2185
            emit(Fd, "  }\n\n");
2119
2186
        "ETERM*" ->
2121
2188
                 "&oe_env->_iin, (void**)~s~s)) < 0) {\n", 
2122
2189
                 [InBuffer, IndOp, LName]), 
2123
2190
            ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2191
            ?emit_c_dec_rpt(Fd, "    ", "", []),
2124
2192
            emit(Fd, "    return oe_error_code;\n"),
2125
2193
            emit(Fd, "  }\n\n");
2126
2194
        {enum, FSN} ->
2130
2198
            emit_decoding_stmt(G, N, Fd, FSN, LName, IndOp, 
2131
2199
                               InBuffer, Align, NextPos, DecType, AllocedPars) 
2132
2200
    end;
2133
 
emit_decoding_stmt(G, _N, Fd, T, LName, IndOp, InBuffer, _Align, NextPos, 
 
2201
emit_decoding_stmt(G, N, Fd, T, LName, IndOp, InBuffer, _Align, NextPos, 
2134
2202
                   DecType, AllocedPars)  when list(T) ->
2135
2203
    %% Already a fullscoped name
2136
2204
    Type = ictype:name2type(G, T), 
2157
2225
                 [ic_util:mk_oe_name(G, "decode_"), 
2158
2226
                  T, NextPos, LName]), 
2159
2227
            ic_cbe:emit_dealloc_stmts(Fd, "        ", AllocedPars),
 
2228
            ?emit_c_dec_rpt(Fd, "    ", "", []),
2160
2229
            emit(Fd, "        return oe_error_code;\n"), 
2161
2230
            emit(Fd, "      }\n"),
2162
2231
            emit(Fd, "    }\n")
2163
2232
    end;
2164
 
emit_decoding_stmt(_G, _N, Fd, T, LName, IndOp, InBuffer, _Align, _NextPos, 
 
2233
emit_decoding_stmt(G, N, Fd, T, LName, IndOp, InBuffer, _Align, _NextPos, 
2165
2234
                   _DecType, AllocedPars)  when record(T, string) ->
2166
2235
    emit(Fd, "    if ((oe_error_code = ei_decode_string(~s, "
2167
2236
         "&oe_env->_iin, ~s~s)) < 0) {\n", 
2168
2237
         [InBuffer, IndOp, LName]), 
2169
2238
    ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2239
    ?emit_c_dec_rpt(Fd, "    ", "", []),
2170
2240
    emit(Fd, "      return oe_error_code;\n"),
2171
2241
    emit(Fd, "    }\n");
2172
 
emit_decoding_stmt(_G, _N, Fd, T, LName, IndOp, InBuffer, _Align, _NextPos, 
 
2242
emit_decoding_stmt(G, N, Fd, T, LName, IndOp, InBuffer, _Align, _NextPos, 
2173
2243
                   _DecType, AllocedPars)  when record(T, wstring) ->  
2174
2244
    %% WSTRING
2175
2245
    emit(Fd, "    if ((oe_error_code = "
2177
2247
         "&oe_env->_iin, ~s~s)) < 0) {\n", 
2178
2248
         [InBuffer, IndOp, LName]), 
2179
2249
    ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2250
    ?emit_c_dec_rpt(Fd, "    ", "", []),
2180
2251
    emit(Fd, "      return oe_error_code;\n\n"),
2181
2252
    emit(Fd, "    }\n");
2182
2253
emit_decoding_stmt(G, N, Fd, T, LName, IndOp, InBuffer, _Align, _NextPos, 
2193
2264
                         "&oe_env->_iin, 0)) < 0) {\n", 
2194
2265
                         [InBuffer]), 
2195
2266
                    ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2267
                    ?emit_c_dec_rpt(Fd, "    ", "", []),
2196
2268
                    emit(Fd, "    return oe_error_code;\n"),
2197
2269
                    emit(Fd, "  }\n");
2198
2270
                {sequence, _, _} ->
2199
2271
                    %% XXX XXX Why?
 
2272
                    ?emit_c_dec_rpt(Fd, "    ", "", []),
2200
2273
                    emit(Fd, "    return oe_error_code;\n\n");
2201
2274
                {any, _} -> %% Fix for any type
2202
2275
                    emit(Fd, 
2204
2277
                         "&oe_env->_iin, ~s~s)) < 0) {\n", 
2205
2278
                         [InBuffer, IndOp, LName]), 
2206
2279
                    ic_cbe:emit_dealloc_stmts(Fd, "    ", AllocedPars),
 
2280
                    ?emit_c_dec_rpt(Fd, "    ", "", []),
2207
2281
                    emit(Fd, "    return oe_error_code;\n\n"),
2208
2282
                    emit(Fd, "  }\n");
2209
2283
                _ ->
2243
2317
            emit(Fd, "    if ((oe_error_code = ei_decode_ulong(~s, "
2244
2318
                 "&oe_env->_iin, &oe_ulong)) < 0) {\n", [InBuffer]), 
2245
2319
            ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2320
            emit_c_dec_rpt(Fd, "    ", "ushort", []),
2246
2321
            emit(Fd, "      return oe_error_code;\n"), 
2247
2322
            emit(Fd, "    }\n"), 
2248
2323
            emit(Fd, "    *~s = (unsigned short) oe_ulong;\n", [LName]), 
2253
2328
            emit(Fd, "    if ((oe_error_code = ei_decode_long(~s, "
2254
2329
                 "&oe_env->_iin, &oe_long)) < 0) {\n", [InBuffer]), 
2255
2330
            ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2331
            emit_c_dec_rpt(Fd, "    ", "short", []),
2256
2332
            emit(Fd, "      return oe_error_code;\n"), 
2257
2333
            emit(Fd, "    }\n"), 
2258
2334
            emit(Fd, "    *~s = (short) oe_long;\n", [LName]), 
2263
2339
            emit(Fd, "    if ((oe_error_code = ei_decode_double(~s, "
2264
2340
                 "&oe_env->_iin, &oe_double)) < 0) {\n", [InBuffer]), 
2265
2341
            ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2342
            emit_c_dec_rpt(Fd, "    ", "float", []),
2266
2343
            emit(Fd, "      return oe_error_code;\n"), 
2267
2344
            emit(Fd, "    }\n"), 
2268
2345
            emit(Fd, "    *~s = (float) oe_double;\n", [LName]), 
2273
2350
            emit(Fd, "    if ((oe_error_code = ei_decode_atom(~s, "
2274
2351
                 "&oe_env->_iin, oe_bool)) < 0) {\n", [InBuffer]), 
2275
2352
            ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2353
            emit_c_dec_rpt(Fd, "    ", "boolean", []),
2276
2354
            emit(Fd, "      return oe_error_code;\n"), 
2277
2355
            emit(Fd, "    }\n"), 
2278
2356
            emit(Fd, "    if (strcmp(oe_bool, \"false\") == 0) {\n"), 
2282
2360
            emit(Fd, "      *(~s) = 1;\n", [LName]), 
2283
2361
            emit(Fd, "    } else {\n"), 
2284
2362
            ic_cbe:emit_dealloc_stmts(Fd, "      ", AllocedPars),
 
2363
            emit_c_dec_rpt(Fd, "    ", "boolean", []),
2285
2364
            emit(Fd, "      return -1;\n"), 
2286
2365
            emit(Fd, "    }\n"), 
2287
2366
            emit(Fd, "  }\n\n");