~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to lib/compiler/src/beam_peep.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%
2
2
%% %CopyrightBegin%
3
 
%% 
4
 
%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
5
 
%% 
 
3
%%
 
4
%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
 
5
%%
6
6
%% The contents of this file are subject to the Erlang Public License,
7
7
%% Version 1.1, (the "License"); you may not use this file except in
8
8
%% compliance with the License. You should have received a copy of the
9
9
%% Erlang Public License along with this software. If not, it can be
10
10
%% retrieved online at http://www.erlang.org/.
11
 
%% 
 
11
%%
12
12
%% Software distributed under the License is distributed on an "AS IS"
13
13
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14
14
%% the License for the specific language governing rights and limitations
15
15
%% under the License.
16
 
%% 
 
16
%%
17
17
%% %CopyrightEnd%
18
18
%%
19
19
 
64
64
%%      InEncoding =:= latin1, OutEncoding =:= unicode; 
65
65
%%      InEncoding =:= latin1, OutEncoding =:= utf8 ->
66
66
%%
67
 
%% (2) Code like
68
 
%%
69
 
%%        is_ne_exact Fail Reg Literal1
70
 
%%        is_ne_exact Fail Reg Literal2
71
 
%%        is_ne_exact Fail Reg Literal3
72
 
%%        is_eq_exact UltimateFail Reg Literal4
73
 
%%      Fail: ....
74
 
%%
75
 
%%     can be rewritten to
76
 
%% 
77
 
%%        select_val Reg UltimateFail   [ Literal1 Fail
78
 
%%                                        Literal2 Fail
79
 
%%                                        Literal3 Fail
80
 
%%                                        Literal4 Fail ]
81
 
%%
82
 
%% (3) A select_val/4 instruction that only verifies that
 
67
%% (2) A select_val/4 instruction that only verifies that
83
68
%%     its argument is either 'true' or 'false' can be
84
69
%%     be replaced with an is_boolean/2 instruction. That is:
85
70
%%
132
117
                false ->
133
118
                    %% Remember that we have seen this test.
134
119
                    SeenTests = gb_sets:insert(Test, SeenTests0),
135
 
                    make_select_val(I, Is, SeenTests, Acc)
 
120
                    peep(Is, SeenTests, [I|Acc])
136
121
            end
137
122
    end;
138
123
peep([{select_val,Src,Fail,
151
136
    peep(Is, gb_sets:empty(), [I|Acc]);
152
137
peep([], _, Acc) -> reverse(Acc).
153
138
 
154
 
make_select_val({test,is_ne_exact,{f,Fail},[Val,Lit]}=I0,
155
 
                Is0, SeenTests, Acc) ->
156
 
    try
157
 
        Type = case Lit of
158
 
                   {atom,_} -> atom;
159
 
                   {integer,_} -> integer;
160
 
                   _ -> throw(impossible)
161
 
               end,
162
 
        {I,Is} = make_select_val_1(Is0, Fail, Val, Type, [Lit,{f,Fail}]),
163
 
        peep([I|Is], SeenTests, Acc)
164
 
    catch
165
 
        impossible ->
166
 
            peep(Is0, SeenTests, [I0|Acc])
167
 
    end;
168
 
make_select_val(I, Is, SeenTests, Acc) ->
169
 
    peep(Is, SeenTests, [I|Acc]).
170
 
 
171
 
make_select_val_1([{test,is_ne_exact,{f,Fail},[Val,{Type,_}=Lit]}|Is],
172
 
                  Fail, Val, Type, Acc) ->
173
 
      make_select_val_1(Is, Fail, Val, Type, [Lit,{f,Fail}|Acc]);
174
 
make_select_val_1([{test,is_eq_exact,{f,UltimateFail},[Val,{Type,_}=Lit]} |
175
 
                   [{label,Fail}|_]=Is], Fail, Val, Type, Acc) ->
176
 
    Choices = [Lit,{f,Fail}|Acc],
177
 
    I = {select_val,Val,{f,UltimateFail},{list,Choices}},
178
 
    {I,Is};
179
 
make_select_val_1(_Is, _Fail, _Val, _Type, _Acc) -> throw(impossible).
180
 
    
181
139
kill_seen(Dst, Seen0) ->
182
140
    gb_sets:from_ordset(kill_seen_1(gb_sets:to_list(Seen0), Dst)).
183
141
 
187
145
        false -> [Test|kill_seen_1(T, Dst)]
188
146
    end;
189
147
kill_seen_1([], _) -> [].
190
 
 
191