diff options
author | Björn-Egil Dahlberg <[email protected]> | 2013-12-12 10:58:59 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-01-29 11:08:41 +0100 |
commit | 76b8ea8ab1eb4ce099f88ccb8d1721c438d0ada4 (patch) | |
tree | eb511b92e2259dd6239617d22c0540bad2e7b0c1 | |
parent | d5c238473b9cec819d93faaef4ccc00ddb60465f (diff) | |
download | otp-76b8ea8ab1eb4ce099f88ccb8d1721c438d0ada4.tar.gz otp-76b8ea8ab1eb4ce099f88ccb8d1721c438d0ada4.tar.bz2 otp-76b8ea8ab1eb4ce099f88ccb8d1721c438d0ada4.zip |
erts: Add BIF erts_internal:cmp_term/2
Compares terms where integer() < float().
-rw-r--r-- | erts/emulator/beam/bif.c | 11 | ||||
-rw-r--r-- | erts/emulator/beam/bif.tab | 2 | ||||
-rw-r--r-- | erts/preloaded/src/erts_internal.erl | 10 |
3 files changed, 23 insertions, 0 deletions
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index 61c1abedb5..9c4801041f 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -4615,6 +4615,17 @@ BIF_RETTYPE bump_reductions_1(BIF_ALIST_1) BIF_RET2(am_true, reds); } +BIF_RETTYPE erts_internal_cmp_term_2(BIF_ALIST_2) { + int res = CMP_TERM(BIF_ARG_1,BIF_ARG_2); + + /* ensure -1, 0, 1 result */ + if (res < 0) { + BIF_RET(make_small(-1)); + } else if (res > 0) { + BIF_RET(make_small(1)); + } + BIF_RET(make_small(0)); +} /* * Processes doing yield on return in a bif ends up in bif_return_trap(). */ diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab index b623e47b9a..2d888862bf 100644 --- a/erts/emulator/beam/bif.tab +++ b/erts/emulator/beam/bif.tab @@ -593,6 +593,8 @@ bif maps:remove/2 bif maps:update/3 bif maps:values/1 +bif erts_internal:cmp_term/2 + # # Obsolete # diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl index d6a185482e..88eb317f1d 100644 --- a/erts/preloaded/src/erts_internal.erl +++ b/erts/preloaded/src/erts_internal.erl @@ -170,3 +170,13 @@ binary_to_term(_Binary) -> Opts :: [safe]. binary_to_term(_Binary, _Opts) -> erlang:nif_error(undefined). + +%% term compare where integer() < float() = true + +-spec cmp_term(A,B) -> Result when + A :: term(), + B :: term(), + Result :: -1 | 0 | 1. + +cmp_term(_A,_B) -> + erlang:nif_error(undefined). |