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

« back to all changes in this revision

Viewing changes to lib/stdlib/src/erl_internal.erl

  • Committer: Bazaar Package Importer
  • Author(s): Sergei Golovan
  • Date: 2009-02-15 16:42:52 UTC
  • mfrom: (1.1.13 upstream)
  • Revision ID: james.westby@ubuntu.com-20090215164252-dxpjjuq108nz4noa
Tags: 1:12.b.5-dfsg-2
Upload to unstable after lenny is released.

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
%%
48
48
 
49
49
-export([bif/2,bif/3,guard_bif/2,
50
 
         type_test/2,new_type_test/2,old_type_test/2,
51
 
         obsolete/3]).
 
50
         type_test/2,new_type_test/2,old_type_test/2]).
52
51
-export([arith_op/2,bool_op/2,comp_op/2,list_op/2,send_op/2,op_type/2]).
53
52
 
54
 
%% -type guard_bif(Name, Arity) -> bool()
55
 
%%      when Name = atom(), Arity = integer().
 
53
%%---------------------------------------------------------------------------
 
54
 
 
55
-type arity() :: 0..255.
 
56
 
 
57
%%---------------------------------------------------------------------------
 
58
 
56
59
%%  Erlang builtin functions allowed in guards.
 
60
-spec guard_bif(Name::atom(), Arity::arity()) -> bool().
57
61
 
58
62
guard_bif(abs, 1) -> true;
59
63
guard_bif(float, 1) -> true;
89
93
guard_bif(is_record, 3) -> true;
90
94
guard_bif(Name, A) when is_atom(Name), is_integer(A) -> false.
91
95
 
92
 
%% -type type_test(Name, Arity) -> bool()
93
 
%%      when Name = atom(), Arity = integer().
94
96
%%  Erlang type tests.
 
97
-spec type_test(Name::atom(), Arity::arity()) -> bool().
95
98
 
96
99
type_test(Name, Arity) ->
97
100
    new_type_test(Name, Arity) orelse old_type_test(Name, Arity).
98
101
 
99
 
%% -type new_type_test(Name, Arity) -> bool()
100
 
%%      when Name = atom(), Arity = integer().
101
102
%%  Erlang new-style type tests.
 
103
-spec new_type_test(Name::atom(), Arity::arity()) -> bool().
102
104
 
103
105
new_type_test(is_atom, 1) -> true;
104
106
new_type_test(is_boolean, 1) -> true;
119
121
new_type_test(is_record, 3) -> true;
120
122
new_type_test(Name, A) when is_atom(Name), is_integer(A) -> false.
121
123
 
122
 
%% -type old_type_test(Name, Arity) -> bool()
123
 
%%      when Name = atom(), Arity = integer().
124
124
%%  Erlang old-style type tests.
 
125
-spec old_type_test(Name::atom(), Arity::arity()) -> bool().
125
126
 
126
127
old_type_test(integer, 1) -> true;
127
128
old_type_test(float, 1) -> true;
138
139
old_type_test(function, 1) -> true;
139
140
old_type_test(Name, A) when is_atom(Name), is_integer(A) -> false.
140
141
 
141
 
%% -type arith_op(Op, Arity) -> bool()
142
 
%%      when Op = atom(), Arity = integer().
 
142
-spec arith_op(Op::atom(), Arity::arity()) -> bool().
143
143
 
144
144
arith_op('+', 1) -> true;
145
145
arith_op('-', 1) -> true;
157
157
arith_op('bsr', 2) -> true;
158
158
arith_op(Op, A) when is_atom(Op), is_integer(A) -> false.
159
159
 
160
 
%% -type bool_op(Op, Arity) -> bool()
161
 
%%      when Op = atom(), Arity = integer().
 
160
-spec bool_op(Op::atom(), Arity::arity()) -> bool().
162
161
 
163
162
bool_op('not', 1) -> true;
164
163
bool_op('and', 2) -> true;
166
165
bool_op('xor', 2) -> true;
167
166
bool_op(Op, A) when is_atom(Op), is_integer(A) -> false.
168
167
 
169
 
%% -type comp_op(Op, Arity) -> bool()
170
 
%%      when Op = atom(), Arity = integer().
 
168
-spec comp_op(Op::atom(), Arity::arity()) -> bool().
171
169
 
172
170
comp_op('==', 2) -> true;
173
171
comp_op('/=', 2) -> true;
179
177
comp_op('=/=', 2) -> true;
180
178
comp_op(Op, A) when is_atom(Op), is_integer(A) -> false.
181
179
 
182
 
%% -type list_op(Op, Arity) -> bool()
183
 
%%      when Op = atom(), Arity = integer().
 
180
-spec list_op(Op::atom(), Arity::arity()) -> bool().
184
181
 
185
182
list_op('++', 2) -> true;
186
183
list_op('--', 2) -> true;
187
184
list_op(Op, A) when is_atom(Op), is_integer(A) -> false.
188
185
 
189
 
%% -type send_op(Op, Arity) -> bool()
190
 
%%      when Op = atom(), Arity = integer().
 
186
-spec send_op(Op::atom(), Arity::arity()) -> bool().
191
187
 
192
188
send_op('!', 2) -> true;
193
189
send_op(Op, A) when is_atom(Op), is_integer(A) -> false.
194
190
 
195
 
%% -type op_type(Op, Arity) -> arith | bool | comp | list | send
196
 
%%      when Op = atom(), Arity = integer().
 
191
-spec op_type(Op::atom(), Arity::arity()) ->
 
192
                'arith' | 'bool' | 'comp' | 'list' | 'send'.
197
193
 
198
194
op_type('+', 1) -> arith;
199
195
op_type('-', 1) -> arith;
225
221
op_type('--', 2) -> list;
226
222
op_type('!', 2) -> send.
227
223
 
 
224
-spec bif(Mod::atom(), Name::atom(), Arity::arity()) -> bool().
 
225
 
228
226
bif(erlang, Name, Arity) -> bif(Name, Arity);
229
227
bif(M, F, A) when is_atom(M), is_atom(F), is_integer(A) -> false.
230
228
 
231
 
%% bif(Name, Arity) -> true|false
 
229
-spec bif(Name::atom(), Arity::arity()) -> bool().
232
230
%%   Returns true if erlang:Name/Arity is an auto-imported BIF, false otherwise.
233
231
%%   Use erlang:is_bultin(Mod, Name, Arity) to find whether a function is a BIF
234
232
%%   (meaning implemented in C) or not.
356
354
bif(unregister, 1) -> true;
357
355
bif(whereis, 1) -> true;
358
356
bif(Name, A) when is_atom(Name), is_integer(A) -> false.
359
 
 
360
 
obsolete(Mod, Fun, Arity) ->
361
 
    %% Just in case.
362
 
    case catch otp_internal:obsolete(Mod, Fun, Arity) of
363
 
        {true,Arg} -> {true,Arg};
364
 
        _Other -> false                         %False, no otp_internal
365
 
    end.