Tests for unapplied builtins
This commit is contained in:
parent
b9d141e035
commit
d8adfce465
@ -66,6 +66,10 @@ format({unapplied_contract_call, Contract}) ->
|
|||||||
"~s\n", [pp_expr(2, Contract)]),
|
"~s\n", [pp_expr(2, Contract)]),
|
||||||
Cxt = "Use FATE if you need this.\n",
|
Cxt = "Use FATE if you need this.\n",
|
||||||
mk_err(pos(Contract), Msg, Cxt);
|
mk_err(pos(Contract), Msg, Cxt);
|
||||||
|
format({unapplied_builtin, Id}) ->
|
||||||
|
Msg = io_lib:format("The AEVM does not support unapplied use of ~s.\n", [pp_expr(0, Id)]),
|
||||||
|
Cxt = "Use FATE if you need this.\n",
|
||||||
|
mk_err(pos(Id), Msg, Cxt);
|
||||||
format({invalid_map_key_type, Why, Ann, Type}) ->
|
format({invalid_map_key_type, Why, Ann, Type}) ->
|
||||||
Msg = io_lib:format("Invalid map key type\n~s\n", [pp_type(2, Type)]),
|
Msg = io_lib:format("Invalid map key type\n~s\n", [pp_type(2, Type)]),
|
||||||
Cxt = case Why of
|
Cxt = case Why of
|
||||||
|
@ -144,7 +144,8 @@ compilable_contracts() ->
|
|||||||
"double_include",
|
"double_include",
|
||||||
"manual_stdlib_include",
|
"manual_stdlib_include",
|
||||||
"list_comp",
|
"list_comp",
|
||||||
"payable"
|
"payable",
|
||||||
|
"unapplied_builtins"
|
||||||
].
|
].
|
||||||
|
|
||||||
not_yet_compilable(fate) -> [];
|
not_yet_compilable(fate) -> [];
|
||||||
@ -577,6 +578,9 @@ failing_code_gen_contracts() ->
|
|||||||
"The AEVM does not support unapplied contract call to\n"
|
"The AEVM does not support unapplied contract call to\n"
|
||||||
" r : Remote\n"
|
" r : Remote\n"
|
||||||
"Use FATE if you need this.")
|
"Use FATE if you need this.")
|
||||||
|
, ?AEVM(unapplied_named_arg_builtin, 4, 15,
|
||||||
|
"The AEVM does not support unapplied use of Oracle.register.\n"
|
||||||
|
"Use FATE if you need this.")
|
||||||
, ?AEVM(polymorphic_map_keys, 4, 34,
|
, ?AEVM(polymorphic_map_keys, 4, 34,
|
||||||
"Invalid map key type\n"
|
"Invalid map key type\n"
|
||||||
" 'a\n"
|
" 'a\n"
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
contract UnappliedNamedArgBuiltin =
|
||||||
|
// Allowed in FATE, but not AEVM
|
||||||
|
stateful entrypoint main(s) =
|
||||||
|
let reg = Oracle.register
|
||||||
|
reg(signature = s, Contract.address, 100, RelativeTTL(100)) : oracle(int, int)
|
63
test/contracts/unapplied_builtins.aes
Normal file
63
test/contracts/unapplied_builtins.aes
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Builtins without named arguments can appear unapplied in both AEVM and FATE.
|
||||||
|
// Named argument builtins are:
|
||||||
|
// Oracle.register
|
||||||
|
// Oracle.respond
|
||||||
|
// AENS.preclaim
|
||||||
|
// AENS.claim
|
||||||
|
// AENS.transfer
|
||||||
|
// AENS.revoke
|
||||||
|
// Oracle.extend
|
||||||
|
contract UnappliedBuiltins =
|
||||||
|
entrypoint main() = ()
|
||||||
|
type o = oracle(int, int)
|
||||||
|
type t = list(int * string)
|
||||||
|
type m = map(int, int)
|
||||||
|
datatype event = Event(int)
|
||||||
|
stateful function chain_spend() = Chain.spend
|
||||||
|
function chain_event() = Chain.event
|
||||||
|
function chain_balance() = Chain.balance
|
||||||
|
function chain_block_hash() = Chain.block_hash
|
||||||
|
function call_gas_left() = Call.gas_left
|
||||||
|
function b_abort() = abort
|
||||||
|
function b_require() = require
|
||||||
|
function oracle_query_fee() = Oracle.query_fee
|
||||||
|
stateful function oracle_query() = Oracle.query : (o, _, _, _, _) => _
|
||||||
|
function oracle_get_question() = Oracle.get_question : (o, _) => _
|
||||||
|
function oracle_get_answer() = Oracle.get_answer : (o, _) => _
|
||||||
|
function oracle_check() = Oracle.check : o => _
|
||||||
|
function oracle_check_query() = Oracle.check_query : (o, _) => _
|
||||||
|
function aens_resolve() = AENS.resolve : (_, _) => option(string)
|
||||||
|
function map_lookup() = Map.lookup : (_, m) => _
|
||||||
|
function map_lookup_default() = Map.lookup_default : (_, m, _) => _
|
||||||
|
function map_member() = Map.member : (_, m) => _
|
||||||
|
function map_size() = Map.size : m => _
|
||||||
|
function map_delete() = Map.delete : (_, m) => _
|
||||||
|
function map_from_list() = Map.from_list : _ => m
|
||||||
|
function map_to_list() = Map.to_list : m => _
|
||||||
|
function crypto_verify_sig() = Crypto.verify_sig
|
||||||
|
function crypto_verify_sig_secp256k1() = Crypto.verify_sig_secp256k1
|
||||||
|
function crypto_ecverify_secp256k1() = Crypto.ecverify_secp256k1
|
||||||
|
function crypto_ecrecover_secp256k1() = Crypto.ecrecover_secp256k1
|
||||||
|
function crypto_sha3() = Crypto.sha3 : t => _
|
||||||
|
function crypto_sha256() = Crypto.sha256 : t => _
|
||||||
|
function crypto_blake2b() = Crypto.blake2b : t => _
|
||||||
|
function string_sha256() = String.sha256
|
||||||
|
function string_blake2b() = String.blake2b
|
||||||
|
function string_length() = String.length
|
||||||
|
function string_concat() = String.concat
|
||||||
|
function string_sha3() = String.sha3
|
||||||
|
function bits_test() = Bits.test
|
||||||
|
function bits_set() = Bits.set
|
||||||
|
function bits_clear() = Bits.clear
|
||||||
|
function bits_union() = Bits.union
|
||||||
|
function bits_intersection() = Bits.intersection
|
||||||
|
function bits_difference() = Bits.difference
|
||||||
|
function bits_sum() = Bits.sum
|
||||||
|
function int_to_str() = Int.to_str
|
||||||
|
function address_to_str() = Address.to_str
|
||||||
|
function address_is_oracle() = Address.is_oracle
|
||||||
|
function address_is_contract() = Address.is_contract
|
||||||
|
function address_is_payable() = Address.is_payable
|
||||||
|
function bytes_to_int() = Bytes.to_int : bytes(10) => int
|
||||||
|
function bytes_to_str() = Bytes.to_str : bytes(99) => string
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user