Skip to content

Commit e3793b8

Browse files
authored
Merge pull request #124 from manopapad/prepare19
Code changes in preparation for Erlang/OTP 19.0
2 parents 6b562a2 + 124c1aa commit e3793b8

11 files changed

+134
-74
lines changed

configure

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#! /bin/sh
22
# --------------------------------------------------------------------
3-
# Copyright 2010-2013 Manolis Papadakis <[email protected]>,
3+
# Copyright 2010-2016 Manolis Papadakis <[email protected]>,
44
# Eirini Arvaniti <[email protected]>
55
# and Kostis Sagonas <[email protected]>
66
#
@@ -43,7 +43,7 @@ DONE
4343

4444
random()
4545
{
46-
echo "Using Erlang's random module"
46+
echo "Using Erlang's 'random' ('rand' in 19.0 and later) module"
4747
grep -q USE_SFMT rebar.config && \
4848
sed -i "s/debug_info, {d, 'USE_SFMT'}/debug_info/" rebar.config
4949
grep -q sfmt rebar.config && sed -i '/^{deps/,$d' rebar.config

include/proper_internal.hrl

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
%%% Copyright 2010-2013 Manolis Papadakis <[email protected]>,
1+
%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
22
%%% Eirini Arvaniti <[email protected]>
33
%%% and Kostis Sagonas <[email protected]>
44
%%%
@@ -17,7 +17,7 @@
1717
%%% You should have received a copy of the GNU General Public License
1818
%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
1919

20-
%%% @copyright 2010-2013 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
20+
%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
2121
%%% @version {@version}
2222
%%% @author Manolis Papadakis
2323
%%% @doc Internal header file: This header is included in all PropEr source
@@ -35,17 +35,37 @@
3535
-compile({parse_transform, strip_types}).
3636
-endif.
3737

38+
3839
%%------------------------------------------------------------------------------
3940
%% Random generator selection
4041
%%------------------------------------------------------------------------------
4142

4243
-ifdef(USE_SFMT).
4344
-define(RANDOM_MOD, sfmt).
4445
-define(SEED_NAME, sfmt_seed).
46+
47+
-else.
48+
49+
-ifdef(AT_LEAST_19).
50+
-define(RANDOM_MOD, rand). %% for 19.x use the 'rand' module
51+
-define(SEED_NAME, rand_seed).
4552
-else.
4653
-define(RANDOM_MOD, random).
4754
-define(SEED_NAME, random_seed).
4855
-endif.
56+
-endif.
57+
58+
59+
%%------------------------------------------------------------------------------
60+
%% Line annotations
61+
%%------------------------------------------------------------------------------
62+
63+
-ifdef(AT_LEAST_19).
64+
-define(anno(L), erl_anno:new(L)).
65+
-else.
66+
-define(anno(L), L).
67+
-endif.
68+
4969

5070
%%------------------------------------------------------------------------------
5171
%% Macros
@@ -84,9 +104,13 @@
84104
-type abs_expr() :: erl_parse:abstract_expr().
85105
-type abs_clause() :: erl_parse:abstract_clause().
86106

87-
%% TODO: Replace these with the appropriate types from stdlib.
107+
-ifdef(AT_LEAST_19).
108+
-type abs_type() :: erl_parse:abstract_type().
109+
-else.
88110
-type abs_type() :: term().
89-
-type abs_rec_field() :: term().
111+
-endif.
112+
%% TODO: Replace abs_rec_field with its proper type once it is exported.
113+
-type abs_rec_field() :: term(). % erl_parse:af_field_decl().
90114

91115
-type loose_tuple(T) :: {} | {T} | {T,T} | {T,T,T} | {T,T,T,T} | {T,T,T,T,T}
92116
| {T,T,T,T,T,T} | {T,T,T,T,T,T,T} | {T,T,T,T,T,T,T,T}

src/proper_arith.erl

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
%%% Copyright 2010-2015 Manolis Papadakis <[email protected]>,
1+
%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
22
%%% Eirini Arvaniti <[email protected]>
33
%%% and Kostis Sagonas <[email protected]>
44
%%%
@@ -17,7 +17,7 @@
1717
%%% You should have received a copy of the GNU General Public License
1818
%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
1919

20-
%%% @copyright 2010-2015 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
20+
%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
2121
%%% @version {@version}
2222
%%% @author Manolis Papadakis
2323
%%% @doc This module contains helper arithmetic, list handling and random
@@ -37,7 +37,6 @@
3737

3838
-include("proper_internal.hrl").
3939

40-
4140
%%-----------------------------------------------------------------------------
4241
%% List handling functions
4342
%%-----------------------------------------------------------------------------
@@ -212,13 +211,19 @@ remove_n(N, {List,Acc}) ->
212211
%% @doc Seeds the random number generator. This function should be run before
213212
%% calling any random function from this module.
214213
-spec rand_start(seed()) -> 'ok'.
214+
-ifdef(AT_LEAST_19).
215+
rand_start(Seed) ->
216+
_ = rand:seed(exsplus, Seed),
217+
ok.
218+
-else.
215219
rand_start(Seed) ->
216220
_ = ?RANDOM_MOD:seed(Seed),
217221
%% TODO: read option for RNG bijections here
218222
ok.
223+
-endif.
219224

220-
%% @doc Conditionally seeds the random number generator. This function should be run before
221-
%% calling any random function from this module.
225+
%% @doc Conditionally seeds the random number generator. This function should
226+
%% be run before calling any random function from this module.
222227
-spec rand_restart(seed()) -> 'ok'.
223228
rand_restart(Seed) ->
224229
case get(?SEED_NAME) of
@@ -229,11 +234,17 @@ rand_restart(Seed) ->
229234
end.
230235

231236
-spec rand_reseed() -> 'ok'.
237+
-ifdef(AT_LEAST_19).
238+
rand_reseed() ->
239+
_ = rand:seed(exsplus, os:timestamp()),
240+
ok.
241+
-else.
232242
rand_reseed() ->
233243
%% TODO: This should use the pid of the process somehow, in case two
234244
%% spawned functions call it simultaneously?
235245
_ = ?RANDOM_MOD:seed(os:timestamp()),
236246
ok.
247+
-endif.
237248

238249
-spec rand_stop() -> 'ok'.
239250
rand_stop() ->

src/proper_gen.erl

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
%%% Copyright 2010-2015 Manolis Papadakis <[email protected]>,
1+
%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
22
%%% Eirini Arvaniti <[email protected]>
33
%%% and Kostis Sagonas <[email protected]>
44
%%%
@@ -17,7 +17,7 @@
1717
%%% You should have received a copy of the GNU General Public License
1818
%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
1919

20-
%%% @copyright 2010-2015 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
20+
%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
2121
%%% @version {@version}
2222
%%% @author Manolis Papadakis
2323

@@ -631,8 +631,15 @@ function_body(Args, RetType, {Seed1,Seed2}) ->
631631

632632
-ifdef(USE_SFMT).
633633
update_seed(Seed) ->
634-
sfmt:seed(Seed).
634+
_ = sfmt:seed(Seed),
635+
ok.
635636
-else.
637+
-ifdef(AT_LEAST_19).
636638
update_seed(Seed) ->
637-
put(random_seed, Seed).
639+
_ = rand:seed(exsplus, Seed),
640+
ok.
641+
-else.
642+
update_seed(Seed) ->
643+
put(?SEED_NAME, Seed).
644+
-endif.
638645
-endif.

src/proper_queue.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ liat(Queue) ->
163163
queue:liat(Queue).
164164

165165
-spec lait(queue(T)) -> queue(T).
166-
lait(Queue) ->
167-
queue:lait(Queue).
166+
lait(Queue) -> %% XXX: deprecated in 19.0
167+
queue:liat(Queue).
168168

169169
-spec init(queue(T)) -> queue(T).
170170
init(Queue) ->

src/proper_symb.erl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
%%% Copyright 2010-2013 Manolis Papadakis <[email protected]>,
1+
%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
22
%%% Eirini Arvaniti <[email protected]>
33
%%% and Kostis Sagonas <[email protected]>
44
%%%
@@ -17,7 +17,7 @@
1717
%%% You should have received a copy of the GNU General Public License
1818
%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
1919

20-
%%% @copyright 2010-2013 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
20+
%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
2121
%%% @version {@version}
2222
%%% @author Manolis Papadakis
2323

@@ -244,7 +244,8 @@ pretty_print(VarValues, SymbTerm) ->
244244

245245
-spec parse_fun(mod_name(), fun_name(), [abs_expr()]) -> abs_expr().
246246
parse_fun(Module, Function, ArgTreeList) ->
247-
{call,0,{remote,0,{atom,0,Module},{atom,0,Function}},ArgTreeList}.
247+
L = ?anno(0),
248+
{call,L,{remote,L,{atom,L,Module},{atom,L,Function}},ArgTreeList}.
248249

249250
-spec parse_term(term()) -> abs_expr().
250251
parse_term(TreeList) when is_list(TreeList) ->

src/proper_transformer.erl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
%%% Copyright 2010-2015 Manolis Papadakis <[email protected]>,
1+
%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
22
%%% Eirini Arvaniti <[email protected]>
33
%%% and Kostis Sagonas <[email protected]>
44
%%%
@@ -17,7 +17,7 @@
1717
%%% You should have received a copy of the GNU General Public License
1818
%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
1919

20-
%%% @copyright 2010-2015 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
20+
%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
2121
%%% @version {@version}
2222
%%% @author Manolis Papadakis
2323

@@ -222,6 +222,8 @@ rewrite_form(Form, _ModInfo) ->
222222
Form.
223223

224224
-spec rewrite_field_init(abs_rec_field(), mod_info()) -> abs_rec_field().
225+
rewrite_field_init({typed_record_field,RecField,Type}, ModInfo) ->
226+
{typed_record_field,rewrite_field_init(RecField, ModInfo),Type};
225227
rewrite_field_init({record_field,_Line,_FieldName} = FieldInit, _ModInfo) ->
226228
FieldInit;
227229
rewrite_field_init({record_field,Line,FieldName,InitExpr}, ModInfo) ->
@@ -386,7 +388,8 @@ rewrite_type(Expr, _ModInfo) ->
386388

387389
-spec native_type_call(mod_name(), abs_expr()) -> abs_expr().
388390
native_type_call(ModName, Expr) ->
389-
AbsModName = {atom,0,ModName},
390-
AbsTypeStr = {string,0,lists:flatten(erl_pp:expr(Expr))},
391-
FunRef = {remote,0,{atom,0,proper_types},{atom,0,native_type}},
392-
{call,0,FunRef,[AbsModName,AbsTypeStr]}.
391+
L = ?anno(0),
392+
AbsModName = {atom,L,ModName},
393+
AbsTypeStr = {string,L,lists:flatten(erl_pp:expr(Expr))},
394+
FunRef = {remote,L,{atom,L,proper_types},{atom,L,native_type}},
395+
{call,L,FunRef,[AbsModName,AbsTypeStr]}.

0 commit comments

Comments
 (0)