Compare commits

..

5 Commits

Author SHA1 Message Date
Erik Stenman 9e927edc89 Add more ops tests. 2019-08-22 07:34:16 +02:00
Erik Stenman 0d00cbf772 Fix blockhash comment. 2019-07-09 15:34:09 +02:00
Erik Stenman b56d1c83fa New gas costs and test programs. 2019-07-03 07:27:27 +02:00
Erik Stenman 93d5df429c Test files for measurements. 2019-06-30 15:13:16 +02:00
Erik Stenman 5f5444ca9e Provide info for tracing. 2019-06-29 16:30:09 +02:00
99 changed files with 9188 additions and 848 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
GENERATED_SRC = src/aeb_fate_opcodes.erl src/aeb_fate_ops.erl include/aeb_fate_opcodes.hrl src/aeb_fate_asm_scan.xrl src/aeb_fate_pp.erl GENERATED_SRC = src/aeb_fate_opcodes.erl src/aeb_fate_ops.erl include/aeb_fate_opcodes.hrl src/aeb_fate_asm_scan.xrl src/aeb_fate_pp.erl
GENERATOR_DEPS = ebin/aeb_fate_generate_ops.beam src/aeb_fate_asm_scan.template GENERATOR_DEPS = ebin/aeb_fate_generate_ops.beam src/aeb_fate_asm_scan.template
REBAR ?= ./rebar3 REBAR ?= rebar3
all: local all: local
+3 -6
View File
@@ -1,7 +1,7 @@
# aebytecode # aebytecode
A library and stand alone assembler for aeternity bytecode. An library and stand alone assembler for aeternity bytecode.
This version supports AEVM bytecode and FATE bytecode. This version supports Aevm bytecode and Fate bytecode.
## Build ## Build
@@ -19,7 +19,7 @@ Fate code exists in 3 formats:
3. Internal. This is an Erlang representation of fate code 3. Internal. This is an Erlang representation of fate code
Used by this particular engin implementation. Used by this particular engin implementation.
This library handles all three representations. This library handles all tree representations.
The byte code format is described in a separate document. The byte code format is described in a separate document.
The internal format is described in a separate document. The internal format is described in a separate document.
The text representation is described below. The text representation is described below.
@@ -107,9 +107,6 @@ Immediate values can be of 10 types:
10. Bytes: #{base64char}+ 10. Bytes: #{base64char}+
`#AQIDCioLFQ==` `#AQIDCioLFQ==`
11. Contract bytearray (code of another smart contract)
`@cb_+PJGA6A4Fz4T2LHV5knITCldR3rqO7HrXO2zhOAR9JWNbhf8Q8C4xbhx/gx8JckANwAXfQBVACAAAP4vhlvZADcABwECgv5E1kQfADcBBzcACwAWMBReAHMAFjBvJFMAFjBvggOoFAAUABQSggABAz/+tIwWhAA3AAdTAAD+1jB5kAQ3AAcLAAD+6MRetgA3AQc3ABoGggABAz+4TS8GEQx8JclFY2FsbGVyX2lzX2NyZWF0b3IRL4Zb2Q1nZXQRRNZEHxFpbml0EbSMFoQdYmFsYW5jZRHWMHmQFXZhbHVlEejEXrYNc2V0gi8AhTQuMy4wAUqQ8s4=`
Where Where
-20
View File
@@ -5,7 +5,6 @@
-define(FATE_LIST_T, list()). -define(FATE_LIST_T, list()).
-define(FATE_UNIT_T, {tuple, {}}). -define(FATE_UNIT_T, {tuple, {}}).
-define(FATE_MAP_T, #{ fate_type() => fate_type() }). -define(FATE_MAP_T, #{ fate_type() => fate_type() }).
-define(FATE_STORE_MAP_T, {store_map, #{ fate_type() => fate_type() | ?FATE_MAP_TOMBSTONE }, integer()}).
-define(FATE_STRING_T, binary()). -define(FATE_STRING_T, binary()).
-define(FATE_ADDRESS_T, {address, <<_:256>>}). -define(FATE_ADDRESS_T, {address, <<_:256>>}).
-define(FATE_BYTES_T(N), {bytes, binary()}). -define(FATE_BYTES_T(N), {bytes, binary()}).
@@ -17,16 +16,10 @@
-define(FATE_VOID_T, void). -define(FATE_VOID_T, void).
-define(FATE_TUPLE_T, {tuple, tuple()}). -define(FATE_TUPLE_T, {tuple, tuple()}).
-define(FATE_BITS_T, {bits, integer()}). -define(FATE_BITS_T, {bits, integer()}).
-define(FATE_TYPEREP_T, {typerep, fate_type_type()}).
-define(FATE_CONTRACT_BYTEARRAY_T, {contract_bytearray, binary()}).
-define(IS_FATE_INTEGER(X), (is_integer(X))). -define(IS_FATE_INTEGER(X), (is_integer(X))).
-define(IS_FATE_LIST(X), (is_list(X))). -define(IS_FATE_LIST(X), (is_list(X))).
-define(IS_FATE_STRING(X), (is_binary(X))). -define(IS_FATE_STRING(X), (is_binary(X))).
-define(IS_FATE_STORE_MAP(X), (is_tuple(X) andalso tuple_size(X) == 3
andalso store_map == element(1, X)
andalso is_map(element(2, X))
andalso is_integer(element(3, X)))).
-define(IS_FATE_MAP(X), (is_map(X))). -define(IS_FATE_MAP(X), (is_map(X))).
-define(IS_FATE_TUPLE(X), (is_tuple(X) andalso (tuple == element(1, X) andalso is_tuple(element(2, X))))). -define(IS_FATE_TUPLE(X), (is_tuple(X) andalso (tuple == element(1, X) andalso is_tuple(element(2, X))))).
-define(IS_FATE_ADDRESS(X), (is_tuple(X) andalso (address == element(1, X) andalso is_binary(element(2, X))))). -define(IS_FATE_ADDRESS(X), (is_tuple(X) andalso (address == element(1, X) andalso is_binary(element(2, X))))).
@@ -46,8 +39,6 @@
))). ))).
-define(IS_FATE_BOOLEAN(X), is_boolean(X)). -define(IS_FATE_BOOLEAN(X), is_boolean(X)).
-define(IS_FATE_TYPEREP(X), (is_tuple(X) andalso tuple_size(X) =:= 2 andalso element(1, X) =:= typerep)). -define(IS_FATE_TYPEREP(X), (is_tuple(X) andalso tuple_size(X) =:= 2 andalso element(1, X) =:= typerep)).
-define(IS_FATE_CONTRACT_BYTEARRAY(X), (is_tuple(X) andalso tuple_size(X) =:= 2 andalso element(1, X) =:= contract_bytearray
andalso is_binary(element(2, X)))).
-define(FATE_UNIT, {tuple, {}}). -define(FATE_UNIT, {tuple, {}}).
-define(FATE_TUPLE(T), {tuple, T}). -define(FATE_TUPLE(T), {tuple, T}).
@@ -59,8 +50,6 @@
-define(FATE_CHANNEL(X), {channel, X}). -define(FATE_CHANNEL(X), {channel, X}).
-define(FATE_BITS(B), {bits, B}). -define(FATE_BITS(B), {bits, B}).
-define(FATE_TYPEREP(T), {typerep, T}). -define(FATE_TYPEREP(T), {typerep, T}).
-define(FATE_STORE_MAP(Cache, Id), {store_map, Cache, Id}).
-define(FATE_MAP_TOMBSTONE, '__DELETED__').
-define(FATE_INTEGER_VALUE(X), (X)). -define(FATE_INTEGER_VALUE(X), (X)).
-define(FATE_BOOLEAN_VALUE(X), (X)). -define(FATE_BOOLEAN_VALUE(X), (X)).
@@ -74,11 +63,8 @@
-define(FATE_CHANNEL_VALUE(X), (element(2, X))). -define(FATE_CHANNEL_VALUE(X), (element(2, X))).
-define(FATE_BITS_VALUE(X), (element(2, X))). -define(FATE_BITS_VALUE(X), (element(2, X))).
-define(FATE_MAP_VALUE(X), (X)). -define(FATE_MAP_VALUE(X), (X)).
-define(FATE_STORE_MAP_CACHE(X), (element(2, X))).
-define(FATE_STORE_MAP_ID(X), (element(3, X))).
-define(FATE_MAP_SIZE(X), (map_size(X))). -define(FATE_MAP_SIZE(X), (map_size(X))).
-define(FATE_STRING_SIZE(X), (byte_size(X))). -define(FATE_STRING_SIZE(X), (byte_size(X))).
-define(FATE_CONTRACT_BYTEARRAY_SIZE(X), (byte_size(X))).
-define(FATE_TRUE, true). -define(FATE_TRUE, true).
-define(FATE_FALSE, false). -define(FATE_FALSE, false).
-define(FATE_NIL, []). -define(FATE_NIL, []).
@@ -86,14 +72,8 @@
-define(FATE_EMPTY_STRING, <<>>). -define(FATE_EMPTY_STRING, <<>>).
-define(FATE_STRING(S), S). -define(FATE_STRING(S), S).
-define(FATE_VARIANT(Arity, Tag,T), {variant, Arity, Tag, T}). -define(FATE_VARIANT(Arity, Tag,T), {variant, Arity, Tag, T}).
-define(FATE_CONTRACT_BYTEARRAY(B), {contract_bytearray, B}).
% Result of aeb_fate_code:symbol_identifier(<<"init">>).
% Stored here to avoid repeated calls to eblake2
-define(FATE_INIT_ID, <<68,214,68,31>>).
-define(MAKE_FATE_INTEGER(X), X). -define(MAKE_FATE_INTEGER(X), X).
-define(MAKE_FATE_LIST(X), X). -define(MAKE_FATE_LIST(X), X).
-define(MAKE_FATE_MAP(X), X). -define(MAKE_FATE_MAP(X), X).
-define(MAKE_FATE_STRING(X), X). -define(MAKE_FATE_STRING(X), X).
-define(MAKE_FATE_CONTRACT_BYTEARRAY(X), {contract_bytearray, X}).
+7 -10
View File
@@ -186,15 +186,13 @@
-define(PRIM_CALL_MAP_TOLIST, 305). -define(PRIM_CALL_MAP_TOLIST, 305).
-define(PRIM_CALL_IN_CRYPTO_RANGE(__TTYPE__), (((__TTYPE__) > 399) andalso ((__TTYPE__) < 500))). -define(PRIM_CALL_IN_CRYPTO_RANGE(__TTYPE__), (((__TTYPE__) > 399) andalso ((__TTYPE__) < 500))).
-define(PRIM_CALL_CRYPTO_VERIFY_SIG, 400). -define(PRIM_CALL_CRYPTO_ECVERIFY, 400).
-define(PRIM_CALL_CRYPTO_SHA3, 401). -define(PRIM_CALL_CRYPTO_SHA3, 401).
-define(PRIM_CALL_CRYPTO_SHA256, 402). -define(PRIM_CALL_CRYPTO_SHA256, 402).
-define(PRIM_CALL_CRYPTO_BLAKE2B, 403). -define(PRIM_CALL_CRYPTO_BLAKE2B, 403).
-define(PRIM_CALL_CRYPTO_SHA256_STRING, 404). -define(PRIM_CALL_CRYPTO_SHA256_STRING, 404).
-define(PRIM_CALL_CRYPTO_BLAKE2B_STRING, 405). -define(PRIM_CALL_CRYPTO_BLAKE2B_STRING, 405).
-define(PRIM_CALL_CRYPTO_VERIFY_SIG_SECP256K1, 410). -define(PRIM_CALL_CRYPTO_ECVERIFY_SECP256K1, 410).
-define(PRIM_CALL_CRYPTO_ECVERIFY_SECP256K1, 420).
-define(PRIM_CALL_CRYPTO_ECRECOVER_SECP256K1, 421).
-define(PRIM_CALL_IN_AUTH_RANGE(__TTYPE__), (((__TTYPE__) > 499) andalso ((__TTYPE__) < 600))). -define(PRIM_CALL_IN_AUTH_RANGE(__TTYPE__), (((__TTYPE__) > 499) andalso ((__TTYPE__) < 600))).
-define(PRIM_CALL_AUTH_TX_HASH, 500). -define(PRIM_CALL_AUTH_TX_HASH, 500).
@@ -202,4 +200,3 @@
-define(PRIM_CALL_IN_ADDRESS_RANGE(__TTYPE__), (((__TTYPE__) > 599) andalso ((__TTYPE__) < 700))). -define(PRIM_CALL_IN_ADDRESS_RANGE(__TTYPE__), (((__TTYPE__) > 599) andalso ((__TTYPE__) < 700))).
-define(PRIM_CALL_ADDR_IS_ORACLE, 600). -define(PRIM_CALL_ADDR_IS_ORACLE, 600).
-define(PRIM_CALL_ADDR_IS_CONTRACT, 601). -define(PRIM_CALL_ADDR_IS_CONTRACT, 601).
-define(PRIM_CALL_ADDR_IS_PAYABLE, 610).
-1
View File
@@ -9,4 +9,3 @@
-define(TYPEREP_TYPEREP_TAG, 5). -define(TYPEREP_TYPEREP_TAG, 5).
-define(TYPEREP_MAP_TAG, 6). -define(TYPEREP_MAP_TAG, 6).
-define(TYPEREP_FUN_TAG, 7). -define(TYPEREP_FUN_TAG, 7).
-define(TYPEREP_CONTRACT_BYTEARRAY_TAG,8).
-1
View File
@@ -22,6 +22,5 @@ quickcheck_test_() ->
{setup, fun() -> eqc:start() end, {setup, fun() -> eqc:start() end,
[ ?EQC_EUNIT(aefate_type_eqc, prop_roundtrip, 1000), [ ?EQC_EUNIT(aefate_type_eqc, prop_roundtrip, 1000),
?EQC_EUNIT(aefate_eqc, prop_serializes, 1000), ?EQC_EUNIT(aefate_eqc, prop_serializes, 1000),
?EQC_EUNIT(aefate_eqc, prop_no_maps_in_keys, 1000),
?EQC_EUNIT(aefate_eqc, prop_idempotent, 1000) ?EQC_EUNIT(aefate_eqc, prop_idempotent, 1000)
]}. ]}.
+2 -3
View File
@@ -77,7 +77,7 @@ prop_opcodes() ->
valid_opcodes() -> valid_opcodes() ->
[ Op || #{opcode := Op} <- aeb_fate_generate_ops:get_ops() ]. lists:seq(0, 16#75) ++ lists:seq(16#fa, 16#fd).
fate_code(Failure) -> fate_code(Failure) ->
@@ -85,8 +85,7 @@ fate_code(Failure) ->
?LET({FMap, SMap, AMap}, ?LET({FMap, SMap, AMap},
{non_empty(map(if Failure == 1 -> binary(1); {non_empty(map(if Failure == 1 -> binary(1);
true -> binary(4) end, true -> binary(4) end,
{sublist(lists:sort([private, payable])), %% deserialize sorts them {{list(aefate_type_eqc:fate_type(Size div 3)), aefate_type_eqc:fate_type(Size div 3)}, bbs_code(Failure)})),
{list(aefate_type_eqc:fate_type(Size div 3)), aefate_type_eqc:fate_type(Size div 3)}, bbs_code(Failure)})),
small_map(small_fate_data_key(5), small_fate_data(4)), small_map(small_fate_data_key(5), small_fate_data(4)),
small_map(small_fate_data_key(5), small_fate_data(4))}, small_map(small_fate_data_key(5), small_fate_data(4))},
aeb_fate_code:update_annotations( aeb_fate_code:update_annotations(
+10 -52
View File
@@ -10,7 +10,6 @@
-module(aefate_eqc). -module(aefate_eqc).
-include_lib("eqc/include/eqc.hrl"). -include_lib("eqc/include/eqc.hrl").
-include("../include/aeb_fate_data.hrl").
-compile([export_all, nowarn_export_all]). -compile([export_all, nowarn_export_all]).
@@ -24,7 +23,7 @@ prop_roundtrip() ->
end)). end)).
prop_format_scan() -> prop_format_scan() ->
?FORALL(FateData, fate_data([variant, map]), ?FORALL(FateData, fate_data(),
?WHENFAIL(eqc:format("Trying to format ~p failed~n", [FateData]), ?WHENFAIL(eqc:format("Trying to format ~p failed~n", [FateData]),
begin begin
String = aeb_fate_data:format(FateData), String = aeb_fate_data:format(FateData),
@@ -44,18 +43,6 @@ prop_serializes() ->
{size, size(Binary) < 500000}])) {size, size(Binary) < 500000}]))
end)). end)).
prop_no_maps_in_keys() ->
?FORALL(FateData, fate_bad_map(), %% may contain a map in its keys
begin
HasMapInKeys = lists:any(fun(K) -> has_map(K) end, maps:keys(FateData)),
try aeb_fate_encoding:serialize(FateData),
?WHENFAIL(eqc:format("Should not serialize, contains a map in key\n", []),
not HasMapInKeys)
catch error:Reason ->
?WHENFAIL(eqc:format("(~p) Should serialize\n", [Reason]), HasMapInKeys)
end
end).
prop_fuzz() -> prop_fuzz() ->
in_parallel( in_parallel(
?FORALL(Binary, ?LET(FateData, ?SIZED(Size, resize(Size div 4, fate_data())), aeb_fate_encoding:serialize(FateData)), ?FORALL(Binary, ?LET(FateData, ?SIZED(Size, resize(Size div 4, fate_data())), aeb_fate_encoding:serialize(FateData)),
@@ -72,14 +59,13 @@ prop_fuzz() ->
prop_order() -> prop_order() ->
?FORALL(Items, vector(3, fate_data([variant, map])), ?FORALL(Items, vector(3, fate_data()),
begin begin
%% Use lt to take minimum %% Use lt to take minimum
Min = lt_min(Items), Min = lt_min(Items),
Max = lt_max(Items), Max = lt_max(Items),
conjunction([ {minimum, is_empty([ {Min, '>', I} || I<-Items, aeb_fate_data:lt(I, Min)])}, conjunction([ {minimum, is_empty([ {Min, '>', I} || I<-Items, aeb_fate_data:lt(I, Min)])},
{maximum, is_empty([ {Max, '<', I} || I<-Items, aeb_fate_data:lt(Max, I)])}, {maximum, is_empty([ {Max, '<', I} || I<-Items, aeb_fate_data:lt(Max, I)])}])
{asym, aeb_fate_data:lt(Min, Max) orelse Min == Max}])
end). end).
lt_min([X, Y | Rest]) -> lt_min([X, Y | Rest]) ->
@@ -102,24 +88,18 @@ prop_idempotent() ->
aeb_fate_encoding:sort(aeb_fate_encoding:sort(Items)))). aeb_fate_encoding:sort(aeb_fate_encoding:sort(Items)))).
fate_data(Kind) ->
?SIZED(Size, ?LET(Data, fate_data(Size, Kind), eqc_symbolic:eval(Data))).
fate_data() -> fate_data() ->
fate_data([map, variant, store_map]). ?SIZED(Size, ?LET(Data, fate_data(Size, [map, variant]), eqc_symbolic:eval(Data))).
%% keys may contain variants but no maps
fate_data_key() -> fate_data_key() ->
fate_data([variant]). ?SIZED(Size, ?LET(Data, fate_data(Size div 4, [variant]), eqc_symbolic:eval(Data))).
fate_data(0, Options) -> fate_data(0, _Options) ->
?LAZY( ?LAZY(
frequency( frequency(
[{50, oneof([fate_integer(), fate_boolean(), fate_nil(), fate_unit()])}, [{5, oneof([fate_integer(), fate_boolean(), fate_nil(), fate_unit()])},
{10, oneof([fate_string(), fate_address(), fate_bytes(), fate_contract(), {1, oneof([fate_string(), fate_address(), fate_bytes(), fate_contract(),
fate_oracle(), fate_oracle_q(), fate_bits(), fate_channel()])}] ++ fate_oracle(), fate_oracle_q(), fate_bits(), fate_channel()])}]));
[{1, fate_store_map()} || lists:member(store_map, Options)]));
fate_data(Size, Options) -> fate_data(Size, Options) ->
?LAZY( ?LAZY(
oneof([fate_data(0, Options), oneof([fate_data(0, Options),
@@ -168,20 +148,9 @@ fate_list(Size, Options) ->
fate_map(Size, Options) -> fate_map(Size, Options) ->
?LET(N, choose(0, 6), ?LET(N, choose(0, 6),
?LETSHRINK(Values, fate_values(Size, N, Options), ?LETSHRINK(Values, fate_values(Size, N, Options),
?LET(Keys, vector(length(Values), fate_data(Size div max(1, N * 2), Options -- [map, store_map])), ?LET(Keys, vector(length(Values), fate_data(Size div max(1, N * 2), Options -- [map])),
return(aeb_fate_data:make_map(maps:from_list(lists:zip(Keys, Values))))))). return(aeb_fate_data:make_map(maps:from_list(lists:zip(Keys, Values))))))).
fate_store_map() ->
%% only #{} is allowed as cache in serialization
?LET(X, oneof([int(), largeint()]),
return(aeb_fate_data:make_store_map(abs(X)))).
fate_bad_map() ->
?LET(N, choose(0, 6),
?LET(Values, vector(N, ?SIZED(Size, resize(Size div 8, fate_data()))),
?LET(Keys, vector(N, ?SIZED(Size, resize(Size div 4, fate_data()))),
return(aeb_fate_data:make_map(maps:from_list(lists:zip(Keys, Values))))))).
non_quote_string() -> non_quote_string() ->
?SUCHTHAT(S, utf8(), [ quote || <<34>> <= S ] == []). ?SUCHTHAT(S, utf8(), [ quote || <<34>> <= S ] == []).
@@ -198,14 +167,3 @@ injection(Binary) ->
is_empty(L) -> is_empty(L) ->
?WHENFAIL(eqc:format("~p\n", [L]), L == []). ?WHENFAIL(eqc:format("~p\n", [L]), L == []).
has_map(L) when is_list(L) ->
lists:any(fun(V) -> has_map(V) end, L);
has_map(T) when is_tuple(T) ->
has_map(tuple_to_list(T));
has_map(M) when is_map(M) ->
true;
has_map(?FATE_STORE_MAP(_, _)) ->
true;
has_map(_) ->
false.
+2 -2
View File
@@ -6,7 +6,7 @@
{deps, [ {eblake2, "1.0.0"} {deps, [ {eblake2, "1.0.0"}
, {aeserialization, {git, "https://github.com/aeternity/aeserialization.git", , {aeserialization, {git, "https://github.com/aeternity/aeserialization.git",
{ref, "47aaa8f"}}} {ref, "816bf99"}}}
, {getopt, "1.0.1"} , {getopt, "1.0.1"}
]}. ]}.
@@ -40,7 +40,7 @@
{profiles, [{binary, [ {profiles, [{binary, [
{deps, [ {eblake2, "1.0.0"} {deps, [ {eblake2, "1.0.0"}
, {aeserialization, {git, "https://github.com/aeternity/aeserialization.git", , {aeserialization, {git, "https://github.com/aeternity/aeserialization.git",
{ref, "47aaa8f"}}} {ref, "b55c372"}}}
, {getopt, "1.0.1"} , {getopt, "1.0.1"}
]}, ]},
+1 -5
View File
@@ -1,17 +1,13 @@
{"1.1.0", {"1.1.0",
[{<<"aeserialization">>, [{<<"aeserialization">>,
{git,"https://github.com/aeternity/aeserialization.git", {git,"https://github.com/aeternity/aeserialization.git",
{ref,"47aaa8f5434b365c50a35bfd1490340b19241991"}}, {ref,"816bf994ffb5cee218c3f22dc5fea296c9e0882e"}},
0}, 0},
{<<"base58">>, {<<"base58">>,
{git,"https://github.com/aeternity/erl-base58.git", {git,"https://github.com/aeternity/erl-base58.git",
{ref,"60a335668a60328a29f9731b67c4a0e9e3d50ab6"}}, {ref,"60a335668a60328a29f9731b67c4a0e9e3d50ab6"}},
1}, 1},
{<<"eblake2">>,{pkg,<<"eblake2">>,<<"1.0.0">>},0}, {<<"eblake2">>,{pkg,<<"eblake2">>,<<"1.0.0">>},0},
{<<"enacl">>,
{git,"https://github.com/aeternity/enacl.git",
{ref,"26180f42c0b3a450905d2efd8bc7fd5fd9cece75"}},
1},
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}. {<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}.
[ [
{pkg_hash,[ {pkg_hash,[
BIN
View File
Binary file not shown.
+33 -77
View File
@@ -11,16 +11,14 @@
-define(HASH_SIZE, 32). -define(HASH_SIZE, 32).
-export([ create_calldata/4 -export([ create_calldata/4
, check_calldata/3 , check_calldata/2
, function_type_info/4 , function_type_info/3
, function_type_hash/3 , function_type_hash/3
, arg_typerep_from_function/2 , arg_typerep_from_function/2
, type_hash_from_function_name/2 , type_hash_from_function_name/2
, typereps_from_type_hash/2 , typereps_from_type_hash/2
, function_name_from_type_hash/2 , function_name_from_type_hash/2
, get_function_hash_from_calldata/1 , get_function_hash_from_calldata/1
, is_payable/2
, abi_version/0
]). ]).
-type hash() :: <<_:256>>. %% 256 = ?HASH_SIZE * 8. -type hash() :: <<_:256>>. %% 256 = ?HASH_SIZE * 8.
@@ -28,7 +26,6 @@
-type typerep() :: aeb_aevm_data:type(). -type typerep() :: aeb_aevm_data:type().
-type function_type_info() :: { FunctionHash :: hash() -type function_type_info() :: { FunctionHash :: hash()
, FunctionName :: function_name() , FunctionName :: function_name()
, Payable :: boolean()
, ArgType :: binary() %% binary typerep , ArgType :: binary() %% binary typerep
, OutType :: binary() %% binary typerep , OutType :: binary() %% binary typerep
}. }.
@@ -38,11 +35,6 @@
%%% API %%% API
%%%=================================================================== %%%===================================================================
%% Shall match ?ABI_AEVM_SOPHIA_1
-spec abi_version() -> integer().
abi_version() ->
1.
%%%=================================================================== %%%===================================================================
%%% Handle calldata %%% Handle calldata
@@ -53,40 +45,30 @@ create_calldata(FunName, Args, ArgTypes0, RetType) ->
Data = aeb_heap:to_binary({TypeHashInt, list_to_tuple(Args)}), Data = aeb_heap:to_binary({TypeHashInt, list_to_tuple(Args)}),
{ok, Data}. {ok, Data}.
-spec check_calldata(binary(), type_info(), boolean()) -> -spec check_calldata(binary(), type_info()) ->
{'ok', typerep(), typerep()} | {'error', atom()}. {'ok', typerep(), typerep()} | {'error', atom()}.
check_calldata(CallData, TypeInfo, CheckPayable) -> check_calldata(CallData, TypeInfo) ->
%% The first element of the CallData should be the function name %% The first element of the CallData should be the function name
case get_function_hash_from_calldata(CallData) of case get_function_hash_from_calldata(CallData) of
{ok, Hash} -> {ok, Hash} ->
check_calldata(Hash, CallData, TypeInfo, CheckPayable); case typereps_from_type_hash(Hash, TypeInfo) of
{ok, ArgType, OutType} ->
try aeb_heap:from_binary({tuple, [word, ArgType]}, CallData) of
{ok, _Something} ->
{ok, {tuple, [word, ArgType]}, OutType};
{error, _} ->
{error, bad_call_data}
catch
_T:_E ->
{error, bad_call_data}
end;
{error, _} ->
{error, unknown_function}
end;
{error, _What} -> {error, _What} ->
{error, bad_call_data} {error, bad_call_data}
end. end.
check_calldata(Hash, CallData, TypeInfo, true) ->
case is_payable(Hash, TypeInfo) of
{ok, true} -> check_calldata(Hash, CallData, TypeInfo, false);
{ok, false} -> {error, function_is_not_payable};
Err = {error, _} -> Err
end;
check_calldata(Hash, CallData, TypeInfo, false) ->
case typereps_from_type_hash(Hash, TypeInfo) of
{ok, ArgType, OutType} ->
try aeb_heap:from_binary({tuple, [word, ArgType]}, CallData) of
{ok, _Something} ->
{ok, {tuple, [word, ArgType]}, OutType};
{error, _} ->
{error, bad_call_data}
catch
_T:_E ->
{error, bad_call_data}
end;
{error, _} ->
{error, unknown_function}
end.
-spec get_function_hash_from_calldata(CallData::binary()) -> -spec get_function_hash_from_calldata(CallData::binary()) ->
{ok, binary()} | {error, term()}. {ok, binary()} | {error, term()}.
get_function_hash_from_calldata(CallData) -> get_function_hash_from_calldata(CallData) ->
@@ -98,13 +80,12 @@ get_function_hash_from_calldata(CallData) ->
%%%=================================================================== %%%===================================================================
%%% Handle type info from contract meta data %%% Handle type info from contract meta data
-spec function_type_info(function_name(), boolean(), [typerep()], typerep()) -> -spec function_type_info(function_name(), [typerep()], typerep()) ->
function_type_info(). function_type_info().
function_type_info(Name, Payable, ArgTypes, OutType) -> function_type_info(Name, ArgTypes, OutType) ->
ArgType = {tuple, ArgTypes}, ArgType = {tuple, ArgTypes},
{ function_type_hash(Name, ArgType, OutType) { function_type_hash(Name, ArgType, OutType)
, Name , Name
, Payable
, aeb_heap:to_binary(ArgType) , aeb_heap:to_binary(ArgType)
, aeb_heap:to_binary(OutType) , aeb_heap:to_binary(OutType)
}. }.
@@ -123,46 +104,35 @@ function_type_hash(Name, ArgType, OutType) when is_binary(Name) ->
{'ok', typerep()} | {'error', 'bad_type_data' | 'unknown_function'}. {'ok', typerep()} | {'error', 'bad_type_data' | 'unknown_function'}.
arg_typerep_from_function(Function, TypeInfo) -> arg_typerep_from_function(Function, TypeInfo) ->
case lists:keyfind(Function, 2, TypeInfo) of case lists:keyfind(Function, 2, TypeInfo) of
{_TypeHash, Function, ArgTypeBin, _OutTypeBin} -> {_TypeHash, Function, ArgTypeBin,_OutTypeBin} ->
arg_typerep_from_type_binary(ArgTypeBin); case aeb_heap:from_binary(typerep, ArgTypeBin) of
{_TypeHash, Function, _Payable, ArgTypeBin, _OutTypeBin} -> {ok, ArgType} -> {ok, ArgType};
arg_typerep_from_type_binary(ArgTypeBin); {error,_} -> {error, bad_type_data}
end;
false -> false ->
{error, unknown_function} {error, unknown_function}
end. end.
arg_typerep_from_type_binary(ArgTBin) ->
case aeb_heap:from_binary(typerep, ArgTBin) of
{ok, ArgT} -> {ok, ArgT};
{error,_} -> {error, bad_type_data}
end.
-spec typereps_from_type_hash(hash(), type_info()) -> -spec typereps_from_type_hash(hash(), type_info()) ->
{'ok', typerep(), typerep()} | {'error', 'bad_type_data' | 'unknown_function'}. {'ok', typerep(), typerep()} | {'error', 'bad_type_data' | 'unknown_function'}.
typereps_from_type_hash(TypeHash, TypeInfo) -> typereps_from_type_hash(TypeHash, TypeInfo) ->
case lists:keyfind(TypeHash, 1, TypeInfo) of case lists:keyfind(TypeHash, 1, TypeInfo) of
{TypeHash, _Function, ArgTypeBin, OutTypeBin} -> {TypeHash,_Function, ArgTypeBin, OutTypeBin} ->
typereps_from_type_binaries(ArgTypeBin, OutTypeBin); case {aeb_heap:from_binary(typerep, ArgTypeBin),
{TypeHash, _Function, _Payable, ArgTypeBin, OutTypeBin} -> aeb_heap:from_binary(typerep, OutTypeBin)} of
typereps_from_type_binaries(ArgTypeBin, OutTypeBin); {{ok, ArgType}, {ok, OutType}} -> {ok, ArgType, OutType};
{_, _} -> {error, bad_type_data}
end;
false -> false ->
{error, unknown_function} {error, unknown_function}
end. end.
typereps_from_type_binaries(ArgTBin, OutTBin) ->
case {aeb_heap:from_binary(typerep, ArgTBin), aeb_heap:from_binary(typerep, OutTBin)} of
{{ok, ArgT}, {ok, OutT}} -> {ok, ArgT, OutT};
{_, _} -> {error, bad_type_data}
end.
-spec function_name_from_type_hash(hash(), type_info()) -> -spec function_name_from_type_hash(hash(), type_info()) ->
{'ok', function_name()} {'ok', function_name()}
| {'error', 'unknown_function'}. | {'error', 'unknown_function'}.
function_name_from_type_hash(TypeHash, TypeInfo) -> function_name_from_type_hash(TypeHash, TypeInfo) ->
case lists:keyfind(TypeHash, 1, TypeInfo) of case lists:keyfind(TypeHash, 1, TypeInfo) of
{TypeHash, Function, _ArgTypeBin, _OutTypeBin} -> {TypeHash, Function,_ArgTypeBin,_OutTypeBin} ->
{ok, Function};
{TypeHash, Function, _Payable, _ArgTypeBin, _OutTypeBin} ->
{ok, Function}; {ok, Function};
false -> false ->
{error, unknown_function} {error, unknown_function}
@@ -173,22 +143,8 @@ function_name_from_type_hash(TypeHash, TypeInfo) ->
| {'error', 'unknown_function'}. | {'error', 'unknown_function'}.
type_hash_from_function_name(Name, TypeInfo) -> type_hash_from_function_name(Name, TypeInfo) ->
case lists:keyfind(Name, 2, TypeInfo) of case lists:keyfind(Name, 2, TypeInfo) of
{TypeHash, Name, _ArgTypeBin, _OutTypeBin} -> {TypeHash, Name,_ArgTypeBin,_OutTypeBin} ->
{ok, TypeHash};
{TypeHash, Name, _Payable, _ArgTypeBin, _OutTypeBin} ->
{ok, TypeHash}; {ok, TypeHash};
false -> false ->
{error, unknown_function} {error, unknown_function}
end. end.
-spec is_payable(hash(), type_info()) -> {ok, boolean()} | {error, 'unknown_function'}.
is_payable(TypeHash, TypeInfo) ->
case lists:keyfind(TypeHash, 1, TypeInfo) of
{TypeHash, _Function, _ArgTypeBin, _OutTypeBin} ->
{ok, true};
{TypeHash, _Function, Payable, _ArgTypeBin, _OutTypeBin} ->
{ok, Payable};
false ->
{error, unknown_function}
end.
+3 -11
View File
@@ -13,8 +13,7 @@
, decode_calldata/2 , decode_calldata/2
, get_function_hash_from_calldata/1 , get_function_hash_from_calldata/1
, get_function_name_from_function_hash/2 , get_function_name_from_function_hash/2
, get_function_type_from_function_hash/2 , get_function_type_from_function_hash/2 ]).
, abi_version/0 ]).
-include("../include/aeb_fate_data.hrl"). -include("../include/aeb_fate_data.hrl").
@@ -22,11 +21,6 @@
%%% API %%% API
%%%=================================================================== %%%===================================================================
%% Shall match ?ABI_FATE_SOPHIA_1
-spec abi_version() -> integer().
abi_version() ->
3.
-spec create_calldata(list(), [term()]) -> {ok, binary()}. -spec create_calldata(list(), [term()]) -> {ok, binary()}.
create_calldata(FunName, Args) -> create_calldata(FunName, Args) ->
FunctionId = aeb_fate_code:symbol_identifier(list_to_binary(FunName)), FunctionId = aeb_fate_code:symbol_identifier(list_to_binary(FunName)),
@@ -37,11 +31,9 @@ create_calldata(FunName, Args) ->
-spec decode_calldata(list(), binary()) -> {ok, term()} | {error, term()}. -spec decode_calldata(list(), binary()) -> {ok, term()} | {error, term()}.
decode_calldata(FunName, Calldata) -> decode_calldata(FunName, Calldata) ->
FunctionId = aeb_fate_code:symbol_identifier(list_to_binary(FunName)), FunctionId = aeb_fate_code:symbol_identifier(list_to_binary(FunName)),
try ?FATE_TUPLE_ELEMENTS(aeb_fate_encoding:deserialize(Calldata)) of case ?FATE_TUPLE_ELEMENTS(aeb_fate_encoding:deserialize(Calldata)) of
[FunctionId, FateArgs] -> {ok, ?FATE_TUPLE_ELEMENTS(FateArgs)}; [FunctionId, FateArgs] -> {ok, ?FATE_TUPLE_ELEMENTS(FateArgs)};
_ -> {error, decode_error} _ -> {error, decode_error}
catch _:_ ->
{error, decode_error}
end. end.
-spec get_function_name_from_function_hash(binary(), aeb_fate_code:fcode()) -> -spec get_function_name_from_function_hash(binary(), aeb_fate_code:fcode()) ->
@@ -74,6 +66,6 @@ get_function_type_from_function_hash(SymbolHash, FateCode) ->
case maps:get(SymbolHash, Functions, undefined) of case maps:get(SymbolHash, Functions, undefined) of
undefined -> undefined ->
{error, no_function_matching_function_hash}; {error, no_function_matching_function_hash};
{_Attrs, {ArgTypes, RetType}, _Code} -> {{ArgTypes, RetType}, _Code} ->
{ok, ArgTypes, RetType} {ok, ArgTypes, RetType}
end. end.
+2 -6
View File
@@ -153,7 +153,7 @@ format_functions(Functions, Symbols) ->
lists:sort(maps:to_list(CodeMap)), lists:sort(maps:to_list(CodeMap)),
Symbols) Symbols)
|| ||
{Name, {_Attrs, Sig, CodeMap}} <- maps:to_list(Functions)]. {Name, {Sig, CodeMap}} <- maps:to_list(Functions)].
format(Name, Sig, BBs, Symbols) -> format(Name, Sig, BBs, Symbols) ->
@@ -281,10 +281,6 @@ to_bytecode([{bytes,_line, Value}|Rest],
to_bytecode(Rest, Address, Env, to_bytecode(Rest, Address, Env,
[{immediate, aeb_fate_data:make_bytes(Value)}|Code], [{immediate, aeb_fate_data:make_bytes(Value)}|Code],
Opts); Opts);
to_bytecode([{contract_bytearray,_line, FateCode}|Rest], Address, Env, Code, Opts) ->
to_bytecode(Rest, Address, Env,
[{immediate, aeb_fate_data:make_contract_bytearray(FateCode)}|Code],
Opts);
to_bytecode([{id,_line, ID}|Rest], Address, Env, Code, Opts) -> to_bytecode([{id,_line, ID}|Rest], Address, Env, Code, Opts) ->
{Env2, Id} = insert_symbol(list_to_binary(ID), Env), {Env2, Id} = insert_symbol(list_to_binary(ID), Env),
to_bytecode(Rest, Address, Env2, [{immediate, Id}|Code], Opts); to_bytecode(Rest, Address, Env2, [{immediate, Id}|Code], Opts);
@@ -488,7 +484,7 @@ insert_fun({NameString, ArgType, RetType}, Code, #{ fate_code := FateCode
{FateCode1, Id} = aeb_fate_code:insert_symbol(Name, FateCode), {FateCode1, Id} = aeb_fate_code:insert_symbol(Name, FateCode),
BodyByteCode = aeb_fate_code:serialize_code(lists:reverse(Code)), BodyByteCode = aeb_fate_code:serialize_code(lists:reverse(Code)),
SigByteCode = aeb_fate_code:serialize_signature({ArgType, RetType}), SigByteCode = aeb_fate_code:serialize_signature({ArgType, RetType}),
FunByteCode = [?FUNCTION, Id, aeb_fate_encoding:serialize(0), SigByteCode, BodyByteCode], FunByteCode = [?FUNCTION, Id, SigByteCode, BodyByteCode],
Env#{ functions => Funs#{ Id => FunByteCode } Env#{ functions => Funs#{ Id => FunByteCode }
, fate_code => FateCode1}. , fate_code => FateCode1}.
+2 -10
View File
@@ -16,9 +16,7 @@ BASE58 = [123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]
BASE64 = [A-Za-z0-9+/=] BASE64 = [A-Za-z0-9+/=]
INT = {DIGIT}+ INT = {DIGIT}+
HEX = 0x{HEXDIGIT}+ HEX = 0x{HEXDIGIT}+
OBJ_PFX = (ak|ct|ok|oq|ch|sg) OBJECT = @[a-z][a-z]_{BASE58}+
OBJECT = @{OBJ_PFX}_{BASE58}+
CODE = @cb_{BASE64}+
BYTES = #{BASE64}+ BYTES = #{BASE64}+
WS = [\000-\s] WS = [\000-\s]
ID = {LOWER}[a-zA-Z0-9_]* ID = {LOWER}[a-zA-Z0-9_]*
@@ -39,8 +37,6 @@ FUNCTION : {token, {function, TokenLine, 'FUNCTION' }}.
{BYTES} : {BYTES} :
{token, {bytes, TokenLine, parse_hash(TokenChars)}}. {token, {bytes, TokenLine, parse_hash(TokenChars)}}.
{CODE} :
{token, {contract_bytearray, TokenLine, parse_contract_bytearray(TokenChars)}}.
{OBJECT} : {OBJECT} :
{token, {object, TokenLine, parse_object(TokenChars)}}. {token, {object, TokenLine, parse_object(TokenChars)}}.
{ID} : {ID} :
@@ -111,14 +107,10 @@ parse_arg("arg" ++ N) -> list_to_integer(N).
parse_var("var" ++ N) -> list_to_integer(N). parse_var("var" ++ N) -> list_to_integer(N).
parse_hash("#" ++ Chars) -> parse_hash("#" ++ Chars) ->
base64:decode(Chars). base64:decode(Chars).
parse_contract_bytearray("@" ++ Chars) ->
case aeser_api_encoder:decode(unicode:characters_to_binary(Chars)) of
{contract_bytearray, Bin} -> Bin
end.
parse_object([_|Chars]) -> parse_object([_|Chars]) ->
case aeser_api_encoder:decode(unicode:characters_to_binary(Chars)) of case aeser_api_encoder:decode(unicode:characters_to_binary(Chars)) of
{account_pubkey, Bin} -> {address, Bin}; {account_pubkey, Bin} -> {address, Bin};
+45 -50
View File
@@ -11,7 +11,7 @@
, deserialize/1 , deserialize/1
, functions/1 , functions/1
, insert_annotation/4 , insert_annotation/4
, insert_fun/5 , insert_fun/4
, insert_symbol/2 , insert_symbol/2
, new/0 , new/0
, serialize/1 , serialize/1
@@ -19,7 +19,6 @@
, serialize/3 , serialize/3
, serialize_code/1 , serialize_code/1
, serialize_signature/1 , serialize_signature/1
, strip_init_function/1
, symbol_identifier/1 , symbol_identifier/1
, symbols/1 , symbols/1
]). ]).
@@ -40,8 +39,31 @@
-define(HASH_BYTES, 32). -define(HASH_BYTES, 32).
-type fate_arg_spec() :: {'immediate', aeb_fate_data:fate_type()}
| {'arg', integer()}
| {'var', integer()}
| {'stack', 0}.
-type fate_instruction() :: atom()
| {atom(), fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec(), fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec(), fate_arg_spec(), fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec()}
| {atom(), fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec(), fate_arg_spec(), fate_arg_spec(),
fate_arg_spec(), fate_arg_spec()}.
-type fcode() :: #fcode{}. -type fcode() :: #fcode{}.
-export_type([fcode/0]). -export_type([fate_arg_spec/0, fate_instruction/0, fcode/0]).
%%%=================================================================== %%%===================================================================
%%% API %%% API
@@ -73,9 +95,9 @@ symbol_identifier(Bin) ->
{ok, <<X:4/binary,_/binary>> } = eblake2:blake2b(?HASH_BYTES, Bin), {ok, <<X:4/binary,_/binary>> } = eblake2:blake2b(?HASH_BYTES, Bin),
X. X.
insert_fun(Name, Attrs, {ArgType, RetType}, #{} = BBs, FCode) -> insert_fun(Name, {ArgType, RetType}, #{} = BBs, FCode) ->
{F1, ID} = insert_symbol(Name, FCode), {F1, ID} = insert_symbol(Name, FCode),
update_functions(F1, #{ID => {Attrs, {ArgType, RetType}, BBs}}). update_functions(F1, #{ID => {{ArgType, RetType}, BBs}}).
insert_symbol(Name, #fcode{ symbols = Syms } = F) -> insert_symbol(Name, #fcode{ symbols = Syms } = F) ->
ID = symbol_identifier(Name), ID = symbol_identifier(Name),
@@ -93,12 +115,6 @@ insert_annotation(comment =_Type, Line, Comment, FCode) ->
Value = aeb_fate_data:make_string(Comment), Value = aeb_fate_data:make_string(Comment),
update_annotations(FCode, #{ Key => Value }). update_annotations(FCode, #{ Key => Value }).
strip_init_function(#fcode{ functions = Funs,
symbols = Syms } = FCode) ->
Funs1 = maps:remove(?FATE_INIT_ID, Funs),
Syms1 = maps:remove(?FATE_INIT_ID, Syms),
FCode#fcode{ functions = Funs1, symbols = Syms1 }.
%%%=================================================================== %%%===================================================================
%%% Serialization %%% Serialization
%%%=================================================================== %%%===================================================================
@@ -135,17 +151,10 @@ to_hexstring(ByteList) ->
serialize_functions(#fcode{ functions = Functions }) -> serialize_functions(#fcode{ functions = Functions }) ->
%% Sort the functions on name to get a canonical serialisation. %% Sort the functions on name to get a canonical serialisation.
iolist_to_binary( iolist_to_binary(
lists:foldr(fun({Id, {Attrs, Sig, C}}, Acc) -> lists:foldr(fun({Id, {Sig, C}}, Acc) ->
[[?FUNCTION, Id, serialize_attributes(Attrs), serialize_signature(Sig), serialize_bbs(C)] | Acc] [[?FUNCTION, Id, serialize_signature(Sig), serialize_bbs(C)] | Acc]
end, [], lists:sort(maps:to_list(Functions)))). end, [], lists:sort(maps:to_list(Functions)))).
serialize_attributes(Attrs) ->
AttrVal = lists:sum([ attr_value(Attr) || Attr <- Attrs ]),
aeb_fate_encoding:serialize(?MAKE_FATE_INTEGER(AttrVal)).
attr_value(private) -> 1;
attr_value(payable) -> 2.
serialize_signature({Args, RetType}) -> serialize_signature({Args, RetType}) ->
[aeb_fate_encoding:serialize_type({tuple, Args}) | [aeb_fate_encoding:serialize_type({tuple, Args}) |
aeb_fate_encoding:serialize_type(RetType)]. aeb_fate_encoding:serialize_type(RetType)].
@@ -153,7 +162,7 @@ serialize_signature({Args, RetType}) ->
serialize_symbol_table(#fcode{ symbols = Symbols }) -> serialize_symbol_table(#fcode{ symbols = Symbols }) ->
aeb_fate_encoding:serialize(aeb_fate_data:make_map(Symbols)). aeb_fate_encoding:serialize(aeb_fate_data:make_map(Symbols)).
serialize_annotations(#fcode{ annotations = Annotations }) -> serialize_annotations(#fcode{ annotations = Annotations}) ->
aeb_fate_encoding:serialize(aeb_fate_data:make_map(Annotations)). aeb_fate_encoding:serialize(aeb_fate_data:make_map(Annotations)).
serialize_bbs(#{} = BBs) -> serialize_bbs(#{} = BBs) ->
@@ -180,8 +189,8 @@ serialize_op(Op) ->
sanity_check(#fcode{ functions = Funs }) -> sanity_check(#fcode{ functions = Funs }) ->
_ = [ case Def of _ = [ case Def of
{_, _, BBs} when byte_size(Id) == 4 -> sanity_check_bbs(BBs); {_, BBs} when byte_size(Id) == 4 -> sanity_check_bbs(BBs);
_ -> error({illegal_function_id, Id}) _ -> error({illegal_function_id, Id})
end || {Id, Def} <- maps:to_list(Funs) ], end || {Id, Def} <- maps:to_list(Funs) ],
ok. ok.
@@ -317,35 +326,33 @@ deserialize_functions(<<?FUNCTION:8, A, B, C, D, Rest/binary>>,
, bb := 0 , bb := 0
, current_bb_code := [] , current_bb_code := []
} = Env) -> } = Env) ->
{Attrs, Rest2} = deserialize_attributes(Rest), {Sig, Rest2} = deserialize_signature(Rest),
{Sig, Rest3} = deserialize_signature(Rest2), Env2 = Env#{function => {<<A,B,C,D>>, Sig}},
Env2 = Env#{function => {<<A,B,C,D>>, Attrs, Sig}}, deserialize_functions(Rest2, Env2);
deserialize_functions(Rest3, Env2);
deserialize_functions(<<?FUNCTION:8, A, B, C, D, Rest/binary>>, deserialize_functions(<<?FUNCTION:8, A, B, C, D, Rest/binary>>,
#{ function := {F, Attrs, Sig} #{ function := {F, Sig}
, bb := BB , bb := BB
, current_bb_code := Code , current_bb_code := Code
, code := Program , code := Program
, functions := Funs} = Env) -> , functions := Funs} = Env) ->
{NewAttrs, Rest2} = deserialize_attributes(Rest), {NewSig, Rest2} = deserialize_signature(Rest),
{NewSig, Rest3} = deserialize_signature(Rest2),
case Code of case Code of
[] -> [] ->
Env2 = Env#{ bb => 0 Env2 = Env#{ bb => 0
, current_bb_code => [] , current_bb_code => []
, function => {<<A,B,C,D>>, NewAttrs, NewSig} , function => {<<A,B,C,D>>, NewSig}
, code => #{} , code => #{}
, functions => Funs#{F => {Attrs, Sig, Program}}}, , functions => Funs#{F => {Sig, Program}}},
deserialize_functions(Rest3, Env2); deserialize_functions(Rest2, Env2);
_ -> _ ->
Env2 = Env#{ bb => 0 Env2 = Env#{ bb => 0
, current_bb_code => [] , current_bb_code => []
, function => {<<A,B,C,D>>, NewAttrs, NewSig} , function => {<<A,B,C,D>>, NewSig}
, code => #{} , code => #{}
, functions => , functions =>
Funs#{F => {Attrs, Sig, Funs#{F => {Sig,
Program#{ BB => lists:reverse(Code)}}}}, Program#{ BB => lists:reverse(Code)}}}},
deserialize_functions(Rest3, Env2) deserialize_functions(Rest2, Env2)
end; end;
deserialize_functions(<<_Op:8, _Rest/binary>>, deserialize_functions(<<_Op:8, _Rest/binary>>,
#{ function := none }) -> #{ function := none }) ->
@@ -367,7 +374,7 @@ deserialize_functions(<<Op:8, Rest/binary>>,
deserialize_functions(<<>>, #{ function := none deserialize_functions(<<>>, #{ function := none
, functions := Funs}) -> , functions := Funs}) ->
Funs; Funs;
deserialize_functions(<<>>, #{ function := {F, Attrs, Sig} deserialize_functions(<<>>, #{ function := {F, Sig}
, bb := BB , bb := BB
, current_bb_code := Code , current_bb_code := Code
, code := Program , code := Program
@@ -377,7 +384,7 @@ deserialize_functions(<<>>, #{ function := {F, Attrs, Sig}
[] -> Program; [] -> Program;
_ -> Program#{ BB => lists:reverse(Code)} _ -> Program#{ BB => lists:reverse(Code)}
end, end,
Funs#{F => {Attrs, Sig, FunctionCode}}. Funs#{F => {Sig, FunctionCode}}.
deserialize_op(Op, Rest, Code) -> deserialize_op(Op, Rest, Code) ->
OpName = aeb_fate_opcodes:mnemonic(Op), OpName = aeb_fate_opcodes:mnemonic(Op),
@@ -415,18 +422,6 @@ deserialize_n_args(N, <<M7:2, M6:2, M5:2, M4:2, M3:2, M2:2, M1:2, M0:2,
end end
end, Rest, ArgMods). end, Rest, ArgMods).
deserialize_attributes(Binary) ->
{AttrVal, Rest} = aeb_fate_encoding:deserialize_one(Binary),
Attrs = [ attr(AVal) || AVal <- attr_vals(1, AttrVal) ],
{lists:sort(Attrs), Rest}.
attr_vals(_, 0) -> [];
attr_vals(X, N) when N rem 2 == 0 -> attr_vals(X + 1, N div 2);
attr_vals(X, N) -> [X | attr_vals(X + 1, N div 2)].
attr(1) -> private;
attr(2) -> payable.
deserialize_signature(Binary) -> deserialize_signature(Binary) ->
{{tuple, Args}, Rest} = aeb_fate_encoding:deserialize_type(Binary), {{tuple, Args}, Rest} = aeb_fate_encoding:deserialize_type(Binary),
{RetType, Rest2} = aeb_fate_encoding:deserialize_type(Rest), {RetType, Rest2} = aeb_fate_encoding:deserialize_type(Rest),
+23 -57
View File
@@ -10,20 +10,16 @@
-type fate_list() :: ?FATE_LIST_T. -type fate_list() :: ?FATE_LIST_T.
-type fate_unit() :: ?FATE_UNIT_T. -type fate_unit() :: ?FATE_UNIT_T.
-type fate_map() :: ?FATE_MAP_T. -type fate_map() :: ?FATE_MAP_T.
-type fate_store_map() :: ?FATE_STORE_MAP_T.
-type fate_string() :: ?FATE_STRING_T. -type fate_string() :: ?FATE_STRING_T.
-type fate_address() :: ?FATE_ADDRESS_T. -type fate_address() :: ?FATE_ADDRESS_T.
-type fate_hash() :: ?FATE_BYTES_T(32). -type fate_hash() :: ?FATE_BYTES_T(32).
-type fate_signature() :: ?FATE_BYTES_T(64). -type fate_signature() :: ?FATE_BYTES_T(64).
-type fate_contract() :: ?FATE_CONTRACT_T. -type fate_contract() :: ?FATE_CONTRACT_T.
-type fate_oracle() :: ?FATE_ORACLE_T. -type fate_oracle() :: ?FATE_ORACLE_T.
-type fate_oracle_q() :: ?FATE_ORACLE_Q_T.
-type fate_channel() :: ?FATE_CHANNEL_T. -type fate_channel() :: ?FATE_CHANNEL_T.
-type fate_variant() :: ?FATE_VARIANT_T. -type fate_variant() :: ?FATE_VARIANT_T.
-type fate_tuple() :: ?FATE_TUPLE_T. -type fate_tuple() :: ?FATE_TUPLE_T.
-type fate_bits() :: ?FATE_BITS_T. -type fate_bits() :: ?FATE_BITS_T.
-type fate_typerep() :: ?FATE_TYPEREP_T.
-type fate_contract_bytearray() :: ?FATE_CONTRACT_BYTEARRAY_T.
-type fate_type_type() :: integer -type fate_type_type() :: integer
| boolean | boolean
@@ -35,12 +31,10 @@
| signature | signature
| contract | contract
| oracle | oracle
| oracle_query
| channel | channel
| bits | bits
| string | string
| {variant, [fate_type_type()]} | {variant, [fate_type_type()]}.
| contract_bytearray.
-type fate_type() :: -type fate_type() ::
@@ -56,13 +50,10 @@
| fate_signature() | fate_signature()
| fate_contract() | fate_contract()
| fate_oracle() | fate_oracle()
| fate_oracle_q()
| fate_channel() | fate_channel()
| fate_variant() | fate_variant()
| fate_map() | fate_map()
| fate_bits() | fate_bits().
| fate_typerep()
| fate_contract_bytearray().
-export_type([fate_type/0 -export_type([fate_type/0
, fate_boolean/0 , fate_boolean/0
@@ -80,7 +71,6 @@
, fate_channel/0 , fate_channel/0
, fate_variant/0 , fate_variant/0
, fate_map/0 , fate_map/0
, fate_store_map/0
, fate_bits/0 , fate_bits/0
, fate_type_type/0 , fate_type_type/0
]). ]).
@@ -92,8 +82,6 @@
, make_tuple/1 , make_tuple/1
, make_string/1 , make_string/1
, make_map/1 , make_map/1
, make_store_map/1
, make_store_map/2
, make_address/1 , make_address/1
, make_bytes/1 , make_bytes/1
, make_hash/1 , make_hash/1
@@ -105,7 +93,6 @@
, make_bits/1 , make_bits/1
, make_unit/0 , make_unit/0
, make_typerep/1 , make_typerep/1
, make_contract_bytearray/1
]). ]).
-export([ -export([
elt/2 elt/2
@@ -121,8 +108,6 @@ make_list(L) -> ?MAKE_FATE_LIST(L).
make_unit() -> ?FATE_UNIT. make_unit() -> ?FATE_UNIT.
make_tuple(T) -> ?FATE_TUPLE(T). make_tuple(T) -> ?FATE_TUPLE(T).
make_map(M) -> ?MAKE_FATE_MAP(M). make_map(M) -> ?MAKE_FATE_MAP(M).
make_store_map(Id) -> make_store_map(#{}, Id).
make_store_map(Cache, Id) -> ?FATE_STORE_MAP(Cache, Id).
make_address(X) -> ?FATE_ADDRESS(X). make_address(X) -> ?FATE_ADDRESS(X).
make_bytes(X) -> ?FATE_BYTES(X). make_bytes(X) -> ?FATE_BYTES(X).
make_hash(X) -> make_bytes(X). make_hash(X) -> make_bytes(X).
@@ -137,7 +122,6 @@ make_string(S) when is_list(S) ->
?FATE_STRING(iolist_to_binary(S)); ?FATE_STRING(iolist_to_binary(S));
make_string(S) when is_binary(S) -> ?FATE_STRING(S). make_string(S) when is_binary(S) -> ?FATE_STRING(S).
make_typerep(T) -> ?FATE_TYPEREP(T). make_typerep(T) -> ?FATE_TYPEREP(T).
make_contract_bytearray(B) -> ?FATE_CONTRACT_BYTEARRAY(B).
%% Tag points to the selected variant (zero based) %% Tag points to the selected variant (zero based)
%% The arity of this variant is read from the list of provided arities %% The arity of this variant is read from the list of provided arities
@@ -187,14 +171,12 @@ format(?FATE_CONTRACT(X)) ->
["@", aeser_api_encoder:encode(contract_pubkey, X)]; ["@", aeser_api_encoder:encode(contract_pubkey, X)];
format(?FATE_ORACLE(X)) -> format(?FATE_ORACLE(X)) ->
["@", aeser_api_encoder:encode(oracle_pubkey, X)]; ["@", aeser_api_encoder:encode(oracle_pubkey, X)];
format(?FATE_ORACLE_Q(X)) -> format(?FATE_ORACLE_Q(X)) ->
["@", aeser_api_encoder:encode(oracle_query_id, X)]; ["@", aeser_api_encoder:encode(oracle_query_id, X)];
format(?FATE_CHANNEL(X)) -> format(?FATE_CHANNEL(X)) ->
["@", aeser_api_encoder:encode(channel, X)]; ["@", aeser_api_encoder:encode(channel, X)];
format(?FATE_TYPEREP(X)) -> format(?FATE_TYPEREP(X)) ->
["'", io_lib:format("~p", [X])]; ["'", io_lib:format("~p", [X])];
format(?FATE_CONTRACT_BYTEARRAY(B)) ->
["@", aeser_api_encoder:encode(contract_bytearray, B)];
format(V) -> exit({not_a_fate_type, V}). format(V) -> exit({not_a_fate_type, V}).
format_bits(0, Acc) -> Acc; format_bits(0, Acc) -> Acc;
@@ -220,7 +202,6 @@ format_kvs(List) ->
%% Total order of FATE terms. %% Total order of FATE terms.
%% Integers < Booleans < Address < Channel < Contract < Oracle %% Integers < Booleans < Address < Channel < Contract < Oracle
%% < Hash < Signature < Bits < String < Tuple < Map < List < Variant %% < Hash < Signature < Bits < String < Tuple < Map < List < Variant
%% < Oracle query < FATE code
-define(ORD_INTEGER , 0). -define(ORD_INTEGER , 0).
-define(ORD_BOOLEAN , 1). -define(ORD_BOOLEAN , 1).
-define(ORD_ADDRESS , 2). -define(ORD_ADDRESS , 2).
@@ -235,7 +216,6 @@ format_kvs(List) ->
-define(ORD_LIST , 11). -define(ORD_LIST , 11).
-define(ORD_VARIANT , 12). -define(ORD_VARIANT , 12).
-define(ORD_ORACLE_Q , 13). -define(ORD_ORACLE_Q , 13).
-define(ORD_CONTRACT_BYTEARRAY , 14).
-spec ordinal(fate_type()) -> integer(). -spec ordinal(fate_type()) -> integer().
ordinal(T) when ?IS_FATE_INTEGER(T) -> ?ORD_INTEGER; ordinal(T) when ?IS_FATE_INTEGER(T) -> ?ORD_INTEGER;
@@ -251,8 +231,7 @@ ordinal(T) when ?IS_FATE_TUPLE(T) -> ?ORD_TUPLE;
ordinal(T) when ?IS_FATE_MAP(T) -> ?ORD_MAP; ordinal(T) when ?IS_FATE_MAP(T) -> ?ORD_MAP;
ordinal(T) when ?IS_FATE_LIST(T) -> ?ORD_LIST; ordinal(T) when ?IS_FATE_LIST(T) -> ?ORD_LIST;
ordinal(T) when ?IS_FATE_VARIANT(T) -> ?ORD_VARIANT; ordinal(T) when ?IS_FATE_VARIANT(T) -> ?ORD_VARIANT;
ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> ?ORD_ORACLE_Q; ordinal(T) when ?IS_FATE_ORACLE_Q(T) -> ?ORD_ORACLE_Q.
ordinal(T) when ?IS_FATE_CONTRACT_BYTEARRAY(T) -> ?ORD_CONTRACT_BYTEARRAY.
-spec lt(fate_type(), fate_type()) -> boolean(). -spec lt(fate_type(), fate_type()) -> boolean().
@@ -280,9 +259,17 @@ lt(?ORD_BITS, A, B) when ?IS_FATE_BITS(A), ?IS_FATE_BITS(B) ->
true; true;
true -> BitsA < BitsB true -> BitsA < BitsB
end; end;
lt(?ORD_TUPLE, ?FATE_TUPLE(A), ?FATE_TUPLE(B)) -> lt(?ORD_STRING,?FATE_STRING(A), ?FATE_STRING(B)) ->
SizeA = tuple_size(A), SizeA = size(A),
SizeB = tuple_size(B), SizeB = size(B),
case SizeA - SizeB of
0 -> A < B;
N -> N < 0
end;
lt(?ORD_TUPLE,?FATE_TUPLE(A), ?FATE_TUPLE(B)) ->
SizeA = size(A),
SizeB = size(B),
case SizeA - SizeB of case SizeA - SizeB of
0 -> tuple_elements_lt(0, A, B, SizeA); 0 -> tuple_elements_lt(0, A, B, SizeA);
N -> N < 0 N -> N < 0
@@ -297,15 +284,19 @@ lt(?ORD_MAP, ?FATE_MAP_VALUE(A), ?FATE_MAP_VALUE(B)) ->
lt(?ORD_LIST, ?FATE_LIST_VALUE(_), ?FATE_LIST_VALUE([])) -> false; lt(?ORD_LIST, ?FATE_LIST_VALUE(_), ?FATE_LIST_VALUE([])) -> false;
lt(?ORD_LIST, ?FATE_LIST_VALUE([]), ?FATE_LIST_VALUE(_)) -> true; lt(?ORD_LIST, ?FATE_LIST_VALUE([]), ?FATE_LIST_VALUE(_)) -> true;
lt(?ORD_LIST, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) -> lt(?ORD_LIST, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) ->
if A == B -> lt(RA, RB); O1 = ordinal(A),
true -> lt(A, B) O2 = ordinal(B),
if O1 == O2 ->
if A == B -> lt(RA, RB);
true -> A < B
end;
true -> O1 < O2
end; end;
lt(?ORD_VARIANT, ?FATE_VARIANT(AritiesA, TagA, TA), lt(?ORD_VARIANT, ?FATE_VARIANT(AritiesA, TagA, TA),
?FATE_VARIANT(AritiesB, TagB, TB)) -> ?FATE_VARIANT(AritiesB, TagB, TB)) ->
if length(AritiesA) < length(AritiesB) -> true; if length(AritiesA) < length(AritiesB) -> true;
length(AritiesA) > length(AritiesB) -> false; length(AritiesA) > length(AritiesB) -> false;
true -> true ->
% Compare element by element consistent with Erlang compare
if AritiesA < AritiesB -> true; if AritiesA < AritiesB -> true;
AritiesA > AritiesB -> false; AritiesA > AritiesB -> false;
true -> true ->
@@ -315,32 +306,7 @@ lt(?ORD_VARIANT, ?FATE_VARIANT(AritiesA, TagA, TA),
end end
end end
end; end;
lt(?ORD_ADDRESS, ?FATE_ADDRESS(A), ?FATE_ADDRESS(B)) -> lt(_, A, B) -> A < B.
A < B;
lt(?ORD_CHANNEL, ?FATE_CHANNEL(A), ?FATE_CHANNEL(B)) ->
A < B;
lt(?ORD_CONTRACT, ?FATE_CONTRACT(A), ?FATE_CONTRACT(B)) ->
A < B;
lt(?ORD_ORACLE, ?FATE_ORACLE(A), ?FATE_ORACLE(B)) ->
A < B;
lt(?ORD_ORACLE_Q, ?FATE_ORACLE_Q(A), ?FATE_ORACLE_Q(B)) ->
A < B;
lt(?ORD_STRING, ?FATE_STRING(A), ?FATE_STRING(B)) ->
compare_bytes(A, B);
lt(?ORD_BYTES, ?FATE_BYTES(A), ?FATE_BYTES(B)) ->
compare_bytes(A, B);
lt(?ORD_CONTRACT_BYTEARRAY, ?FATE_CONTRACT_BYTEARRAY(A), ?FATE_CONTRACT_BYTEARRAY(B)) ->
compare_bytes(A, B).
% Shorter comes first
% On same length compare by first different bit
compare_bytes(A, B) ->
SizeA = byte_size(A),
SizeB = byte_size(B),
case SizeA - SizeB of
0 -> A < B;
N -> N < 0
end.
tuple_elements_lt(N,_A,_B, N) -> tuple_elements_lt(N,_A,_B, N) ->
false; false;
+7 -35
View File
@@ -63,7 +63,7 @@
-define(SHORT_STRING , 2#01). %% xxxxxx 01 | [bytes] - when 0 < xxxxxx:size < 64 -define(SHORT_STRING , 2#01). %% xxxxxx 01 | [bytes] - when 0 < xxxxxx:size < 64
%% 11 Set below %% 11 Set below
-define(SHORT_LIST , 2#0011). %% xxxx 0011 | [encoded elements] when 0 < length < 16 -define(SHORT_LIST , 2#0011). %% xxxx 0011 | [encoded elements] when 0 < length < 16
%% 0111 Set below %% xxxx 0111
-define(TYPE_INTEGER , 2#00000111). %% 0000 0111 - Integer typedef -define(TYPE_INTEGER , 2#00000111). %% 0000 0111 - Integer typedef
-define(TYPE_BOOLEAN , 2#00010111). %% 0001 0111 - Boolean typedef -define(TYPE_BOOLEAN , 2#00010111). %% 0001 0111 - Boolean typedef
-define(TYPE_LIST , 2#00100111). %% 0010 0111 | Type -define(TYPE_LIST , 2#00100111). %% 0010 0111 | Type
@@ -74,7 +74,7 @@
-define(TYPE_STRING , 2#01110111). %% 0111 0111 - string typedef -define(TYPE_STRING , 2#01110111). %% 0111 0111 - string typedef
-define(TYPE_VARIANT , 2#10000111). %% 1000 0111 | [Arities] | [Type] -define(TYPE_VARIANT , 2#10000111). %% 1000 0111 | [Arities] | [Type]
-define(TYPE_BYTES , 2#10010111). %% 1001 0111 - Bytes typedef -define(TYPE_BYTES , 2#10010111). %% 1001 0111 - Bytes typedef
-define(TYPE_CONTRACT_BYTEARRAY,2#10100111). %% 1010 0111 - Fate code typedef %% 1010 0111
%% 1011 0111 %% 1011 0111
%% 1100 0111 %% 1100 0111
%% 1101 0111 %% 1101 0111
@@ -90,11 +90,9 @@
-define(EMPTY_STRING , 2#01011111). %% 0101 1111 -define(EMPTY_STRING , 2#01011111). %% 0101 1111
-define(POS_BIG_INT , 2#01101111). %% 0110 1111 | RLP encoded (integer - 64) -define(POS_BIG_INT , 2#01101111). %% 0110 1111 | RLP encoded (integer - 64)
-define(FALSE , 2#01111111). %% 0111 1111 -define(FALSE , 2#01111111). %% 0111 1111
-define( %% %% 1000 1111 - FREE (Possibly for bytecode in the future.)
CONTRACT_BYTEARRAY, 2#10001111). %% 1000 1111
-define(OBJECT , 2#10011111). %% 1001 1111 | ObjectType | RLP encoded Array -define(OBJECT , 2#10011111). %% 1001 1111 | ObjectType | RLP encoded Array
-define(VARIANT , 2#10101111). %% 1010 1111 | [encoded arities] | encoded tag | [encoded values] -define(VARIANT , 2#10101111). %% 1010 1111 | [encoded arities] | encoded tag | [encoded values]
-define(MAP_ID , 2#10111111). %% 1011 1111 | RLP encoded integer (store map id)
-define(NEG_BITS , 2#11001111). %% 1100 1111 | RLP encoded integer (infinite 1:s bitfield) -define(NEG_BITS , 2#11001111). %% 1100 1111 | RLP encoded integer (infinite 1:s bitfield)
-define(EMPTY_MAP , 2#11011111). %% 1101 1111 -define(EMPTY_MAP , 2#11011111). %% 1101 1111
-define(NEG_BIG_INT , 2#11101111). %% 1110 1111 | RLP encoded (integer - 64) -define(NEG_BIG_INT , 2#11101111). %% 1110 1111 | RLP encoded (integer - 64)
@@ -124,11 +122,9 @@
X =:= ?TYPE_TUPLE orelse X =:= ?TYPE_TUPLE orelse
X =:= ?TYPE_OBJECT orelse X =:= ?TYPE_OBJECT orelse
X =:= ?TYPE_BITS orelse X =:= ?TYPE_BITS orelse
X =:= ?TYPE_BYTES orelse
X =:= ?TYPE_MAP orelse X =:= ?TYPE_MAP orelse
X =:= ?TYPE_STRING orelse X =:= ?TYPE_STRING orelse
X =:= ?TYPE_VARIANT orelse X =:= ?TYPE_VARIANT)).
X =:= ?TYPE_CONTRACT_BYTEARRAY)).
%% -------------------------------------------------- %% --------------------------------------------------
%% Serialize %% Serialize
@@ -197,9 +193,6 @@ serialize(Map) when ?IS_FATE_MAP(Map) ->
<<?MAP, <<?MAP,
(rlp_encode_int(Size))/binary, (rlp_encode_int(Size))/binary,
(Elements)/binary>>; (Elements)/binary>>;
serialize(?FATE_STORE_MAP(Cache, Id)) when Cache =:= #{} ->
%% We should never get to serialization without having flushed the caches.
<<?MAP_ID, (rlp_encode_int(Id))/binary>>;
serialize(?FATE_VARIANT(Arities, Tag, Values)) -> serialize(?FATE_VARIANT(Arities, Tag, Values)) ->
Arities = [A || A <- Arities, is_integer(A), A < 256], Arities = [A || A <- Arities, is_integer(A), A < 256],
Size = length(Arities), Size = length(Arities),
@@ -218,11 +211,7 @@ serialize(?FATE_VARIANT(Arities, Tag, Values)) ->
end end
end; end;
serialize(?FATE_TYPEREP(T)) -> serialize(?FATE_TYPEREP(T)) ->
iolist_to_binary(serialize_type(T)); iolist_to_binary(serialize_type(T)).
serialize(?FATE_CONTRACT_BYTEARRAY(B)) ->
<<?CONTRACT_BYTEARRAY,
(serialize_integer(?FATE_CONTRACT_BYTEARRAY_SIZE(B)))/binary
, B/binary>>.
%% ----------------------------------------------------- %% -----------------------------------------------------
@@ -253,8 +242,7 @@ serialize_type({variant, ListOfVariants}) ->
Size = length(ListOfVariants), Size = length(ListOfVariants),
if Size < 256 -> if Size < 256 ->
[?TYPE_VARIANT, Size | [serialize_type(T) || T <- ListOfVariants]] [?TYPE_VARIANT, Size | [serialize_type(T) || T <- ListOfVariants]]
end; end.
serialize_type(contract_bytearray) -> [?TYPE_CONTRACT_BYTEARRAY].
-spec deserialize_type(binary()) -> {aeb_fate_data:fate_type_type(), binary()}. -spec deserialize_type(binary()) -> {aeb_fate_data:fate_type_type(), binary()}.
@@ -289,8 +277,7 @@ deserialize_type(<<?TYPE_STRING, Rest/binary>>) ->
{string, Rest}; {string, Rest};
deserialize_type(<<?TYPE_VARIANT, Size, Rest/binary>>) -> deserialize_type(<<?TYPE_VARIANT, Size, Rest/binary>>) ->
{Variants, Rest2} = deserialize_variants(Size, Rest, []), {Variants, Rest2} = deserialize_variants(Size, Rest, []),
{{variant, Variants}, Rest2}; {{variant, Variants}, Rest2}.
deserialize_type(<<?TYPE_CONTRACT_BYTEARRAY, Rest/binary>>) -> {contract_bytearray, Rest}.
deserialize_variants(0, Rest, Variants) -> deserialize_variants(0, Rest, Variants) ->
{lists:reverse(Variants), Rest}; {lists:reverse(Variants), Rest};
@@ -385,12 +372,6 @@ deserialize2(<<?LONG_STRING, Rest/binary>>) ->
String = binary:part(Rest2, 0, Size), String = binary:part(Rest2, 0, Size),
Rest3 = binary:part(Rest2, byte_size(Rest2), - (byte_size(Rest2) - Size)), Rest3 = binary:part(Rest2, byte_size(Rest2), - (byte_size(Rest2) - Size)),
{?MAKE_FATE_STRING(String), Rest3}; {?MAKE_FATE_STRING(String), Rest3};
deserialize2(<<?CONTRACT_BYTEARRAY, Rest/binary>>) ->
{Size, Rest2} = deserialize_one(Rest),
true = is_integer(Size) andalso Size >= 0,
FateCode = binary:part(Rest2, 0, Size),
Rest3 = binary:part(Rest2, byte_size(Rest2), - (byte_size(Rest2) - Size)),
{?MAKE_FATE_CONTRACT_BYTEARRAY(FateCode), Rest3};
deserialize2(<<S:6, ?SHORT_STRING:2, Rest/binary>>) -> deserialize2(<<S:6, ?SHORT_STRING:2, Rest/binary>>) ->
String = binary:part(Rest, 0, S), String = binary:part(Rest, 0, S),
Rest2 = binary:part(Rest, byte_size(Rest), - (byte_size(Rest) - S)), Rest2 = binary:part(Rest, byte_size(Rest), - (byte_size(Rest) - S)),
@@ -445,9 +426,6 @@ deserialize2(<<?MAP, Rest/binary>>) ->
false -> false ->
error({unknown_map_serialization_format, KVList}) error({unknown_map_serialization_format, KVList})
end; end;
deserialize2(<<?MAP_ID, Rest/binary>>) ->
{Id, Rest1} = rlp_decode_int(Rest),
{?FATE_STORE_MAP(#{}, Id), Rest1};
deserialize2(<<?VARIANT, Rest/binary>>) -> deserialize2(<<?VARIANT, Rest/binary>>) ->
{AritiesBin, <<Tag:8, Rest2/binary>>} = aeser_rlp:decode_one(Rest), {AritiesBin, <<Tag:8, Rest2/binary>>} = aeser_rlp:decode_one(Rest),
Arities = binary_to_list(AritiesBin), Arities = binary_to_list(AritiesBin),
@@ -502,11 +480,5 @@ sort(KVList) ->
valid_key_type(K) when ?IS_FATE_MAP(K) -> valid_key_type(K) when ?IS_FATE_MAP(K) ->
error({map_as_key_in_map, K}); error({map_as_key_in_map, K});
valid_key_type(?FATE_STORE_MAP(_, _) = K) ->
error({map_as_key_in_map, K});
valid_key_type(K) when is_list(K) ->
lists:all(fun(E) -> valid_key_type(E) end, K);
valid_key_type(K) when is_tuple(K) ->
lists:all(fun(E) -> valid_key_type(E) end, tuple_to_list(K));
valid_key_type(_K) -> valid_key_type(_K) ->
true. true.
+154 -220
View File
@@ -4,7 +4,7 @@
, generate/0 , generate/0
, generate_documentation/1 , generate_documentation/1
, get_ops/0 , get_ops/0
, test_asm_generator/1 ]). , test_asm_generator/1]).
gen_and_halt([SrcDirArg, IncludeDirArg]) -> gen_and_halt([SrcDirArg, IncludeDirArg]) ->
generate(atom_to_list(SrcDirArg), generate(atom_to_list(SrcDirArg),
@@ -42,195 +42,145 @@ check_numbering(_, []) -> true.
%% TODO: Some real gas numbers... %% TODO: Some real gas numbers...
ops_defs() -> ops_defs() ->
%% Opname, Opcode, end_bb, in_auth offchain, gas, format, Constructor, ArgType, ResType, Documentation %% Opname, Opcode, end_bb, in_auth, gas, format, Constructor, ArgType, ResType, Documentation
[ { 'RETURN', 16#00, true, true, true, 10, [], return, {}, any, "Return from function call, top of stack is return value . The type of the retun value has to match the return type of the function."} [ { 'RETURN', 16#00, true, true, 2, [], return, {}, any, "Return from function call, top of stack is return value . The type of the retun value has to match the return type of the function."}
, { 'RETURNR', 16#01, true, true, true, 10, [a], returnr, {any}, any, "Push Arg0 and return from function. The type of the retun value has to match the return type of the function."} , { 'RETURNR', 16#01, true, true, 2, [a], returnr, {any}, any, "Push Arg0 and return from function. The type of the retun value has to match the return type of the function."}
, { 'CALL', 16#02, true, true, true, 10, [a], call, {string}, any, "Call the function Arg0 with args on stack. The types of the arguments has to match the argument typs of the function."} , { 'CALL', 16#02, true, true, 4, [a], call, {string}, any, "Call the function Arg0 with args on stack. The types of the arguments has to match the argument typs of the function."}
, { 'CALL_R', 16#03, true, false, true, 100, [a,is,a,a,a], call_r, {contract, string, typerep, typerep, integer}, any, "Remote call to contract Arg0 and function Arg1 of type Arg2 => Arg3 with value Arg4. The types of the arguments has to match the argument types of the function."} , { 'CALL_R', 16#03, true, false, 8, [a,is,a], call_r, {contract, string, integer}, any, "Remote call to contract Arg0 and function Arg1 with value Arg2. The types of the arguments has to match the argument typs of the function."}
, { 'CALL_T', 16#04, true, true, true, 10, [a], call_t, {string}, any, "Tail call to function Arg0. The types of the arguments has to match the argument typs of the function. And the return type of the called function has to match the type of the current function."} , { 'CALL_T', 16#04, true, true, 4, [a], call_t, {string}, any, "Tail call to function Arg0. The types of the arguments has to match the argument typs of the function. And the return type of the called function has to match the type of the current function."}
, { 'CALL_GR', 16#05, true, false, true, 100, [a,is,a,a,a,a], call_gr, {contract, string, typerep, typerep, integer, integer}, any, "Remote call with gas cap in Arg4. Otherwise as CALL_R."} , { 'CALL_TR', 16#05, true, false, 8, [a,is,a], call_tr, {contract, string, integer}, any, "Remote tail call to contract Arg0 and function Arg1 with value Arg2. The types of the arguments has to match the argument typs of the function. And the return type of the called function has to match the type of the current function."}
, { 'JUMP', 16#06, true, true, true, 10, [ii], jump, {integer}, none, "Jump to a basic block. The basic block has to exist in the current function."} , { 'CALL_GR', 16#06, true, false, 8, [a,is,a,a], call_gr, {contract, string, integer, integer}, any, "Remote call with gas cap in Arg3. Otherwise as CALL_R."}
, { 'JUMPIF', 16#07, true, true, true, 10, [a,ii], jumpif, {boolean, integer}, none, "Conditional jump to a basic block. If Arg0 then jump to Arg1."} , { 'CALL_GTR', 16#07, true, false, 8, [a,is,a,a], call_gtr, {contract, string, integer, integer}, any, "Remote tail call with gas cap in Arg3. Otherwise as CALL_TR."}
, { 'SWITCH_V2', 16#08, true, true, true, 10, [a,ii,ii], switch, {variant, integer, ingeger}, none, "Conditional jump to a basic block on variant tag."} , { 'JUMP', 16#08, true, true, 3, [ii], jump, {integer}, none, "Jump to a basic block. The basic block has to exist in the current function."}
, { 'SWITCH_V3', 16#09, true, true, true, 10, [a,ii,ii,ii], switch, {variant, integer, integer, ingeger}, none, "Conditional jump to a basic block on variant tag."} , { 'JUMPIF', 16#09, true, true, 4, [a,ii], jumpif, {boolean, integer}, none, "Conditional jump to a basic block. If Arg0 then jump to Arg1."}
, { 'SWITCH_VN', 16#0a, true, true, true, 10, [a, li], switch, {variant, {list, integer}}, none, "Conditional jump to a basic block on variant tag."} , { 'SWITCH_V2', 16#0a, true, true, 4, [a,ii,ii], switch, {variant, integer, ingeger}, none, "Conditional jump to a basic block on variant tag."}
, { 'CALL_VALUE', 16#0b, false, true, true, 10, [a], call_value, {}, integer, "The value sent in the current remote call."} , { 'SWITCH_V3', 16#0b, true, true, 4, [a,ii,ii,ii], switch, {variant, integer, integer, ingeger}, none, "Conditional jump to a basic block on variant tag."}
, { 'PUSH', 16#0c, false, true, true, 10, [a], push, {any}, any, "Push argument to stack."} , { 'SWITCH_VN', 16#0c, true, true, 4, [a, li], switch, {variant, {list, integer}}, none, "Conditional jump to a basic block on variant tag."}
, { 'DUPA', 16#0d, false, true, true, 10, [], dup, {any}, any, "Duplicate top of stack."} , { 'CALL_VALUE', 16#0d, false, true, 3, [a], call_value, {}, integer, "The value sent in the current remote call."}
, { 'DUP', 16#0e, false, true, true, 10, [a], dup, {any}, any, "push Arg0 stack pos on top of stack."} , { 'PUSH', 16#0e, false, true, 13, [a], push, {any}, any, "Push argument to stack."}
, { 'POP', 16#0f, false, true, true, 10, [a], pop, {integer}, integer, "Arg0 := top of stack."} , { 'DUPA', 16#0f, false, true, 8, [], dup, {any}, any, "Duplicate top of stack."}
, { 'INCA', 16#10, false, true, true, 10, [], inc, {integer}, integer, "Increment accumulator."} , { 'DUP', 16#10, false, true, 11, [a], dup, {any}, any, "push Arg0 stack pos on top of stack."}
, { 'INC', 16#11, false, true, true, 10, [a], inc, {integer}, integer, "Increment argument."} , { 'POP', 16#11, false, true, 15, [a], pop, {integer}, integer, "Arg0 := top of stack."}
, { 'DECA', 16#12, false, true, true, 10, [], dec, {integer}, integer, "Decrement accumulator."} , { 'INCA', 16#12, false, true, 14, [], inc, {integer}, integer, "Increment accumulator."}
, { 'DEC', 16#13, false, true, true, 10, [a], dec, {integer}, integer, "Decrement argument."} , { 'INC', 16#13, false, true, 15, [a], inc, {integer}, integer, "Increment argument."}
, { 'ADD', 16#14, false, true, true, 10, [a,a,a], add, {integer, integer}, integer, "Arg0 := Arg1 + Arg2."} , { 'DECA', 16#14, false, true, 13, [], dec, {integer}, integer, "Decrement accumulator."}
, { 'SUB', 16#15, false, true, true, 10, [a,a,a], sub, {integer, integer}, integer, "Arg0 := Arg1 - Arg2."} , { 'DEC', 16#15, false, true, 14, [a], dec, {integer}, integer, "Decrement argument."}
, { 'MUL', 16#16, false, true, true, 10, [a,a,a], mul, {integer, integer}, integer, "Arg0 := Arg1 * Arg2."} , { 'ADD', 16#16, false, true, 18, [a,a,a], add, {integer, integer}, integer, "Arg0 := Arg1 + Arg2."}
, { 'DIV', 16#17, false, true, true, 10, [a,a,a], divide, {integer, integer}, integer, "Arg0 := Arg1 / Arg2."} , { 'SUB', 16#17, false, true, 18, [a,a,a], sub, {integer, integer}, integer, "Arg0 := Arg1 - Arg2."}
, { 'MOD', 16#18, false, true, true, 10, [a,a,a], modulo, {integer, integer}, integer, "Arg0 := Arg1 mod Arg2."} , { 'MUL', 16#18, false, true, 16, [a,a,a], mul, {integer, integer}, integer, "Arg0 := Arg1 * Arg2."}
, { 'POW', 16#19, false, true, true, 10, [a,a,a], pow, {integer, integer}, integer, "Arg0 := Arg1 ^ Arg2."} , { 'DIV', 16#19, false, true, 16, [a,a,a], divide, {integer, integer}, integer, "Arg0 := Arg1 / Arg2."}
, { 'STORE', 16#1a, false, true, true, 10, [a,a], store, {any}, any, "Arg0 := Arg1."} , { 'MOD', 16#1a, false, true, 17, [a,a,a], modulo, {integer, integer}, integer, "Arg0 := Arg1 mod Arg2."}
, { 'SHA3', 16#1b, false, true, true, 100, [a,a], sha3, {any}, hash, "Arg0 := sha3(Arg1)."} , { 'POW', 16#1b, false, true, 18, [a,a,a], pow, {integer, integer}, integer, "Arg0 := Arg1 ^ Arg2."}
, { 'SHA256', 16#1c, false, true, true, 100, [a,a], sha256, {any}, hash, "Arg0 := sha256(Arg1)."} , { 'STORE', 16#1c, false, true, 20, [a,a], store, {any}, any, "Arg0 := Arg1."}
, { 'BLAKE2B', 16#1d, false, true, true, 100, [a,a], blake2b, {any}, hash, "Arg0 := blake2b(Arg1)."} , { 'SHA3', 16#1d, false, true, 45, [a,a], sha3, {any}, hash, "Arg0 := sha3(Arg1)."}
, { 'LT', 16#1e, false, true, true, 10, [a,a,a], lt, {integer, integer}, boolean, "Arg0 := Arg1 < Arg2."} , { 'SHA256', 16#1e, false, true, 43, [a,a], sha256, {any}, hash, "Arg0 := sha256(Arg1)."}
, { 'GT', 16#1f, false, true, true, 10, [a,a,a], gt, {integer, integer}, boolean, "Arg0 := Arg1 > Arg2."} , { 'BLAKE2B', 16#1f, false, true, 40, [a,a], blake2b, {any}, hash, "Arg0 := blake2b(Arg1)."}
, { 'EQ', 16#20, false, true, true, 10, [a,a,a], eq, {integer, integer}, boolean, "Arg0 := Arg1 = Arg2."} , { 'LT', 16#20, false, true, 15, [a,a,a], lt, {integer, integer}, boolean, "Arg0 := Arg1 < Arg2."}
, { 'ELT', 16#21, false, true, true, 10, [a,a,a], elt, {integer, integer}, boolean, "Arg0 := Arg1 =< Arg2."} , { 'GT', 16#21, false, true, 15, [a,a,a], gt, {integer, integer}, boolean, "Arg0 := Arg1 > Arg2."}
, { 'EGT', 16#22, false, true, true, 10, [a,a,a], egt, {integer, integer}, boolean, "Arg0 := Arg1 >= Arg2."} , { 'EQ', 16#22, false, true, 15, [a,a,a], eq, {integer, integer}, boolean, "Arg0 := Arg1 = Arg2."}
, { 'NEQ', 16#23, false, true, true, 10, [a,a,a], neq, {integer, integer}, boolean, "Arg0 := Arg1 /= Arg2."} , { 'ELT', 16#23, false, true, 16, [a,a,a], elt, {integer, integer}, boolean, "Arg0 := Arg1 =< Arg2."}
, { 'AND', 16#24, false, true, true, 10, [a,a,a], and_op, {boolean, boolean}, boolean, "Arg0 := Arg1 and Arg2."} , { 'EGT', 16#24, false, true, 15, [a,a,a], egt, {integer, integer}, boolean, "Arg0 := Arg1 >= Arg2."}
, { 'OR', 16#25, false, true, true, 10, [a,a,a], or_op, {boolean, boolean}, boolean, "Arg0 := Arg1 or Arg2."} , { 'NEQ', 16#25, false, true, 16, [a,a,a], neq, {integer, integer}, boolean, "Arg0 := Arg1 /= Arg2."}
, { 'NOT', 16#26, false, true, true, 10, [a,a], not_op, {boolean}, boolean, "Arg0 := not Arg1."} , { 'AND', 16#26, false, true, 16, [a,a,a], and_op, {boolean, boolean}, boolean, "Arg0 := Arg1 and Arg2."}
, { 'TUPLE', 16#27, false, true, true, 10, [a,ii], tuple, {integer}, tuple, "Arg0 := tuple of size = Arg1. Elements on stack."} , { 'OR', 16#27, false, true, 16, [a,a,a], or_op, {boolean, boolean}, boolean, "Arg0 := Arg1 or Arg2."}
, { 'ELEMENT', 16#28, false, true, true, 10, [a,a,a], element_op, {integer, tuple}, any, "Arg1 := element(Arg2, Arg3)."} , { 'NOT', 16#28, false, true, 13, [a,a], not_op, {boolean}, boolean, "Arg0 := not Arg1."}
, { 'SETELEMENT', 16#29, false, true, true, 10, [a,a,a,a], setelement, {integer, tuple, any}, tuple, "Arg0 := a new tuple similar to Arg2, but with element number Arg1 replaced by Arg3."} , { 'TUPLE', 16#29, false, true, 15, [a,ii], tuple, {integer}, tuple, "Arg0 := tuple of size = Arg1. Elements on stack."}
, { 'MAP_EMPTY', 16#2a, false, true, true, 10, [a], map_empty, {}, map, "Arg0 := #{}."} , { 'ELEMENT', 16#2a, false, true, 3, [a,a,a], element_op, {integer, tuple}, any, "Arg1 := element(Arg2, Arg3)."}
, { 'MAP_LOOKUP', 16#2b, false, true, true, 10, [a,a,a], map_lookup, {map, any}, any, "Arg0 := lookup key Arg2 in map Arg1."} , { 'SETELEMENT', 16#2b, false, true, 3, [a,a,a,a], setelement, {integer, tuple, any}, tuple, "Arg0 := a new tuple similar to Arg2, but with element number Arg1 replaced by Arg3."}
, { 'MAP_LOOKUPD', 16#2c, false, true, true, 10, [a,a,a,a], map_lookup, {map, any, any}, any, "Arg0 := lookup key Arg2 in map Arg1 if key exists in map otherwise Arg0 := Arg3."} , { 'MAP_EMPTY', 16#2c, false, true, 3, [a], map_empty, {}, map, "Arg0 := #{}."}
, { 'MAP_UPDATE', 16#2d, false, true, true, 10, [a,a,a,a], map_update, {map, any, any}, map, "Arg0 := update key Arg2 in map Arg1 with value Arg3."} , { 'MAP_LOOKUP', 16#2d, false, true, 3, [a,a,a], map_lookup, {map, any}, any, "Arg0 := lookup key Arg2 in map Arg1."}
, { 'MAP_DELETE', 16#2e, false, true, true, 10, [a,a,a], map_delete, {map, any}, map, "Arg0 := delete key Arg2 from map Arg1."} , { 'MAP_LOOKUPD', 16#2e, false, true, 3, [a,a,a,a], map_lookup, {map, any, any}, any, "Arg0 := lookup key Arg2 in map Arg1 if key exists in map otherwise Arg0 := Arg3."}
, { 'MAP_MEMBER', 16#2f, false, true, true, 10, [a,a,a], map_member, {map, any}, boolean, "Arg0 := true if key Arg2 is in map Arg1."} , { 'MAP_UPDATE', 16#2f, false, true, 3, [a,a,a,a], map_update, {map, any, any}, map, "Arg0 := update key Arg2 in map Arg1 with value Arg3."}
, { 'MAP_FROM_LIST', 16#30, false, true, true, 10, [a,a], map_from_list, {{list, {tuple, [any, any]}}}, map, "Arg0 := make a map from (key, value) list in Arg1."} , { 'MAP_DELETE', 16#30, false, true, 3, [a,a,a], map_delete, {map, any}, map, "Arg0 := delete key Arg2 from map Arg1."}
, { 'MAP_SIZE', 16#31, false, true, true, 10, [a,a], map_size_, {map}, integer, "Arg0 := The size of the map Arg1."} , { 'MAP_MEMBER', 16#31, false, true, 3, [a,a,a], map_member, {map, any}, boolean, "Arg0 := true if key Arg2 is in map Arg1."}
, { 'MAP_TO_LIST', 16#32, false, true, true, 10, [a,a], map_to_list, {map}, list, "Arg0 := The tuple list representation of the map Arg1."} , { 'MAP_FROM_LIST', 16#32, false, true, 3, [a,a], map_from_list, {{list, {tuple, [any, any]}}}, map, "Arg0 := make a map from (key, value) list in Arg1."}
, { 'IS_NIL', 16#33, false, true, true, 10, [a,a], is_nil, {list}, boolean, "Arg0 := true if Arg1 == []."} , { 'IS_NIL', 16#33, false, true, 3, [a,a], is_nil, {list}, boolean, "Arg0 := true if Arg1 == []."}
, { 'CONS', 16#34, false, true, true, 10, [a,a,a], cons, {any, list}, list, "Arg0 := [Arg1|Arg2]."} , { 'CONS', 16#34, false, true, 3, [a,a,a], cons, {any, list}, list, "Arg0 := [Arg1|Arg2]."}
, { 'HD', 16#35, false, true, true, 10, [a,a], hd, {list}, any, "Arg0 := head of list Arg1."} , { 'HD', 16#35, false, true, 3, [a,a], hd, {list}, any, "Arg0 := head of list Arg1."}
, { 'TL', 16#36, false, true, true, 10, [a,a], tl, {list}, list, "Arg0 := tail of list Arg1."} , { 'TL', 16#36, false, true, 3, [a,a], tl, {list}, list, "Arg0 := tail of list Arg1."}
, { 'LENGTH', 16#37, false, true, true, 10, [a,a], length, {list}, integer, "Arg0 := length of list Arg1."} , { 'LENGTH', 16#37, false, true, 3, [a,a], length, {list}, integer, "Arg0 := length of list Arg1."}
, { 'NIL', 16#38, false, true, true, 10, [a], nil, {}, list, "Arg0 := []."} , { 'NIL', 16#38, false, true, 3, [a], nil, {}, list, "Arg0 := []."}
, { 'APPEND', 16#39, false, true, true, 10, [a,a,a], append, {list, list}, list, "Arg0 := Arg1 ++ Arg2."} , { 'STR_JOIN', 16#39, false, true, 3, [a,a,a], str_join, {string, string}, string, "Arg0 := string Arg1 followed by string Arg2."}
, { 'STR_JOIN', 16#3a, false, true, true, 10, [a,a,a], str_join, {string, string}, string, "Arg0 := string Arg1 followed by string Arg2."} , { 'INT_TO_STR', 16#3a, false, true, 3, [a,a], int_to_str, {integer}, string, "Arg0 := turn integer Arg1 into a string."}
, { 'INT_TO_STR', 16#3b, false, true, true, 100, [a,a], int_to_str, {integer}, string, "Arg0 := turn integer Arg1 into a string."} , { 'ADDR_TO_STR', 16#3b, false, true, 3, [a,a], addr_to_str, {address}, string, "Arg0 := turn address Arg1 into a string."}
, { 'ADDR_TO_STR', 16#3c, false, true, true, 100, [a,a], addr_to_str, {address}, string, "Arg0 := turn address Arg1 into a string."} , { 'STR_REVERSE', 16#3c, false, true, 3, [a,a], str_reverse, {string}, string, "Arg0 := the reverse of string Arg1."}
, { 'STR_REVERSE', 16#3d, false, true, true, 100, [a,a], str_reverse, {string}, string, "Arg0 := the reverse of string Arg1."} , { 'APPEND', 16#3d, false, true, 3, [a,a,a], append, {list, list}, list, "Arg0 := Arg1 ++ Arg2."}
, { 'STR_LENGTH', 16#3e, false, true, true, 10, [a,a], str_length, {string}, integer, "Arg0 := The length of the string Arg1."} , { 'INT_TO_ADDR', 16#3e, false, true, 3, [a,a], int_to_addr, {integer}, address, "Arg0 := turn integer Arg1 into an address."}
, { 'BYTES_TO_INT', 16#3f, false, true, true, 10, [a,a], bytes_to_int, {bytes}, integer, "Arg0 := bytes_to_int(Arg1)"} , { 'VARIANT', 16#3f, false, true, 3, [a,a,a,a], variant, {integer, integer, integer}, variant, "Arg0 := create a variant of size Arg1 with the tag Arg2 (Arg2 < Arg1) and take Arg3 elements from the stack."}
, { 'BYTES_TO_STR', 16#40, false, true, true, 100, [a,a], bytes_to_str, {bytes}, string, "Arg0 := bytes_to_str(Arg1)"} , { 'VARIANT_TEST', 16#40, false, true, 3, [a,a,a], variant_test, {variant, integer}, boolean, "Arg0 := true if variant Arg1 has the tag Arg2."}
, { 'BYTES_CONCAT', 16#41, false, true, true, 10, [a,a,a], bytes_concat, {bytes, bytes}, bytes, "Arg0 := bytes_concat(Arg1, Arg2)"} , { 'VARIANT_ELEMENT', 16#41, false, true, 3, [a,a,a], variant_element, {variant, integer}, any, "Arg0 := element number Arg2 from variant Arg1."}
, { 'BYTES_SPLIT', 16#42, false, true, true, 10, [a,a,a], bytes_split, {bytes, integer}, bytes, "Arg0 := bytes_split(Arg2, Arg1), where Arg2 is the length of the first chunk."} , { 'BITS_NONEA', 16#42, false, true, 3, [], bits_none, {}, bits, "push an empty bitmap on the stack."}
, { 'INT_TO_ADDR', 16#43, false, true, true, 10, [a,a], int_to_addr, {integer}, address, "Arg0 := turn integer Arg1 into an address."} , { 'BITS_NONE', 16#43, false, true, 3, [a], bits_none, {}, bits, "Arg0 := empty bitmap."}
, { 'VARIANT', 16#44, false, true, true, 10, [a,a,a,a], variant, {integer, integer, integer}, variant, "Arg0 := create a variant of size Arg1 with the tag Arg2 (Arg2 < Arg1) and take Arg3 elements from the stack."} , { 'BITS_ALLA', 16#44, false, true, 3, [], bits_all, {}, bits, "push a full bitmap on the stack."}
, { 'VARIANT_TEST', 16#45, false, true, true, 10, [a,a,a], variant_test, {variant, integer}, boolean, "Arg0 := true if variant Arg1 has the tag Arg2."} , { 'BITS_ALL', 16#45, false, true, 3, [a], bits_all, {}, bits, "Arg0 := full bitmap."}
, { 'VARIANT_ELEMENT', 16#46, false, true, true, 10, [a,a,a], variant_element, {variant, integer}, any, "Arg0 := element number Arg2 from variant Arg1."} , { 'BITS_ALL_N', 16#46, false, true, 3, [a,a], bits_all_n, {integer}, bits, "Arg0 := bitmap with Arg1 bits set."}
, { 'BITS_NONEA', 16#47, false, true, true, 10, [], bits_none, {}, bits, "push an empty bitmap on the stack."} , { 'BITS_SET', 16#47, false, true, 3, [a,a,a], bits_set, {bits, integer}, bits, "Arg0 := set bit Arg2 of bitmap Arg1."}
, { 'BITS_NONE', 16#48, false, true, true, 10, [a], bits_none, {}, bits, "Arg0 := empty bitmap."} , { 'BITS_CLEAR', 16#48, false, true, 3, [a,a,a], bits_clear, {bits, integer}, bits, "Arg0 := clear bit Arg2 of bitmap Arg1."}
, { 'BITS_ALLA', 16#49, false, true, true, 10, [], bits_all, {}, bits, "push a full bitmap on the stack."} , { 'BITS_TEST', 16#49, false, true, 3, [a,a,a], bits_test, {bits, integer}, boolean, "Arg0 := true if bit Arg2 of bitmap Arg1 is set."}
, { 'BITS_ALL', 16#4a, false, true, true, 10, [a], bits_all, {}, bits, "Arg0 := full bitmap."} , { 'BITS_SUM', 16#4a, false, true, 3, [a,a], bits_sum, {bits}, integer, "Arg0 := sum of set bits in bitmap Arg1. Exception if infinit bitmap."}
, { 'BITS_ALL_N', 16#4b, false, true, true, 10, [a,a], bits_all_n, {integer}, bits, "Arg0 := bitmap with Arg1 bits set."} , { 'BITS_OR', 16#4b, false, true, 3, [a,a,a], bits_or, {bits, bits}, bits, "Arg0 := Arg1 v Arg2."}
, { 'BITS_SET', 16#4c, false, true, true, 10, [a,a,a], bits_set, {bits, integer}, bits, "Arg0 := set bit Arg2 of bitmap Arg1."} , { 'BITS_AND', 16#4c, false, true, 3, [a,a,a], bits_and, {bits, bits}, bits, "Arg0 := Arg1 ^ Arg2."}
, { 'BITS_CLEAR', 16#4d, false, true, true, 10, [a,a,a], bits_clear, {bits, integer}, bits, "Arg0 := clear bit Arg2 of bitmap Arg1."} , { 'BITS_DIFF', 16#4d, false, true, 3, [a,a,a], bits_diff, {bits, bits}, bits, "Arg0 := Arg1 - Arg2."}
, { 'BITS_TEST', 16#4e, false, true, true, 10, [a,a,a], bits_test, {bits, integer}, boolean, "Arg0 := true if bit Arg2 of bitmap Arg1 is set."} , { 'BALANCE', 16#4e, false, true, 3, [a], balance, {}, integer, "Arg0 := The current contract balance."}
, { 'BITS_SUM', 16#4f, false, true, true, 10, [a,a], bits_sum, {bits}, integer, "Arg0 := sum of set bits in bitmap Arg1. Exception if infinit bitmap."} , { 'ORIGIN', 16#4f, false, true, 3, [a], origin, {}, address, "Arg0 := Address of contract called by the call transaction."}
, { 'BITS_OR', 16#50, false, true, true, 10, [a,a,a], bits_or, {bits, bits}, bits, "Arg0 := Arg1 v Arg2."} , { 'CALLER', 16#50, false, true, 3, [a], caller, {}, address, "Arg0 := The address that signed the call transaction."}
, { 'BITS_AND', 16#51, false, true, true, 10, [a,a,a], bits_and, {bits, bits}, bits, "Arg0 := Arg1 ^ Arg2."} , { 'GASPRICE', 16#51, false, true, 3, [a], gasprice, {}, integer, "Arg0 := The current gas price."}
, { 'BITS_DIFF', 16#52, false, true, true, 10, [a,a,a], bits_diff, {bits, bits}, bits, "Arg0 := Arg1 - Arg2."} , { 'BLOCKHASH', 16#52, false, true, 3, [a,a], blockhash, {integer}, hash, "Arg0 := The blockhash at height Arg1."}
, { 'BALANCE', 16#53, false, true, true, 10, [a], balance, {}, integer, "Arg0 := The current contract balance."} , { 'BENEFICIARY', 16#53, false, true, 3, [a], beneficiary, {}, address, "Arg0 := The address of the current beneficiary."}
, { 'ORIGIN', 16#54, false, true, true, 10, [a], origin, {}, address, "Arg0 := Address of contract called by the call transaction."} , { 'TIMESTAMP', 16#54, false, true, 3, [a], timestamp, {}, integer, "Arg0 := The current timestamp. Unrelaiable, don't use for anything."}
, { 'CALLER', 16#55, false, true, true, 10, [a], caller, {}, address, "Arg0 := The address that signed the call transaction."} , { 'GENERATION', 16#55, false, true, 3, [a], generation, {}, integer, "Arg0 := The block height of the cureent generation."}
, { 'BLOCKHASH', 16#56, false, true, true, 10, [a,a], blockhash, {integer}, variant, "Arg0 := The blockhash at height."} , { 'MICROBLOCK', 16#56, false, true, 3, [a], microblock, {}, integer, "Arg0 := The current micro block number."}
, { 'BENEFICIARY', 16#57, false, true, true, 10, [a], beneficiary, {}, address, "Arg0 := The address of the current beneficiary."} , { 'DIFFICULTY', 16#57, false, true, 3, [a], difficulty, {}, integer, "Arg0 := The current difficulty."}
, { 'TIMESTAMP', 16#58, false, true, true, 10, [a], timestamp, {}, integer, "Arg0 := The current timestamp. Unrelaiable, don't use for anything."} , { 'GASLIMIT', 16#58, false, true, 3, [a], gaslimit, {}, integer, "Arg0 := The current gaslimit."}
, { 'GENERATION', 16#59, false, true, true, 10, [a], generation, {}, integer, "Arg0 := The block height of the cureent generation."} , { 'GAS', 16#59, false, true, 3, [a], gas, {}, integer, "Arg0 := The amount of gas left."}
, { 'MICROBLOCK', 16#5a, false, true, true, 10, [a], microblock, {}, integer, "Arg0 := The current micro block number."} , { 'ADDRESS', 16#5a, false, true, 3, [a], address, {}, address, "Arg0 := The current contract address."}
, { 'DIFFICULTY', 16#5b, false, true, true, 10, [a], difficulty, {}, integer, "Arg0 := The current difficulty."}
, { 'GASLIMIT', 16#5c, false, true, true, 10, [a], gaslimit, {}, integer, "Arg0 := The current gaslimit."}
, { 'GAS', 16#5d, false, true, true, 10, [a], gas, {}, integer, "Arg0 := The amount of gas left."}
, { 'ADDRESS', 16#5e, false, true, true, 10, [a], address, {}, address, "Arg0 := The current contract address."}
, { 'GASPRICE', 16#5f, false, true, true, 10, [a], gasprice, {}, integer, "Arg0 := The current gas price."}
, { 'LOG0', 16#60, false, true, true, 1000, [a], log, {string}, none, "Create a log message in the call object."} , { 'LOG0', 16#5b, false, true, 3, [a], log, {string}, none, "Create a log message in the call object."}
, { 'LOG1', 16#61, false, true, true, 1100, [a,a], log, {integer, string}, none, "Create a log message with one topic in the call object."} , { 'LOG1', 16#5c, false, true, 3, [a,a], log, {integer, string}, none, "Create a log message with one topic in the call object."}
, { 'LOG2', 16#62, false, true, true, 1200, [a,a,a], log, {integer, integer, string}, none, "Create a log message with two topics in the call object."} , { 'LOG2', 16#5d, false, true, 3, [a,a,a], log, {integer, integer, string}, none, "Create a log message with two topics in the call object."}
, { 'LOG3', 16#63, false, true, true, 1300, [a,a,a,a], log, {integer, integer, integer, string}, none, "Create a log message with three topics in the call object."} , { 'LOG3', 16#5e, false, true, 3, [a,a,a,a], log, {integer, integer, integer, string}, none, "Create a log message with three topics in the call object."}
, { 'LOG4', 16#64, false, true, true, 1400, [a,a,a,a,a], log, {integer, integer, integer, integer, string}, none, "Create a log message with four topics in the call object."} , { 'LOG4', 16#5f, false, true, 3, [a,a,a,a,a], log, {integer, integer, integer, integer, string}, none, "Create a log message with four topics in the call object."}
%% Transaction ops %% Transaction ops
, { 'SPEND', 16#65, false, false, true, 100, [a,a], spend, {address, integer}, none, "Transfer Arg1 tokens to account Arg0. (If the contract account has at least that many tokens."} , { 'SPEND', 16#60, false, false, 3, [a,a], spend, {address, integer}, none, "Transfer Arg1 tokens to account Arg0. (If the contract account has at least that many tokens."}
, { 'ORACLE_REGISTER', 16#66, false, false, false, 100, [a,a,a,a,a,a,a], oracle_register, {signature, address, integer, variant, typerep, typerep}, oracle, "Arg0 := New oracle with address Arg2, query fee Arg3, TTL Arg4, query type Arg5 and response type Arg6. Arg0 contains delegation signature."} , { 'ORACLE_REGISTER', 16#61, false, false, 3, [a,a,a,a,a,a,a], oracle_register, {signature, address, integer, variant, typerep, typerep}, oracle, "Arg0 := New oracle with address Arg2, query fee Arg3, TTL Arg4, query type Arg5 and response type Arg6. Arg0 contains delegation signature."}
, { 'ORACLE_QUERY', 16#67, false, false, false, 100, [a,a,a,a,a,a,a,a], oracle_query, {oracle, any, integer, variant, variant, typerep, typerep}, oracle_query, "Arg0 := New oracle query for oracle Arg1, question in Arg2, query fee in Arg3, query TTL in Arg4, response TTL in Arg5. Typereps for checking oracle type is in Arg6 and Arg7."} , { 'ORACLE_QUERY', 16#62, false, false, 3, [a,a,a,a,a,a,a,a], oracle_query, {oracle, any, integer, variant, variant, typerep, typerep}, oracle_query, "Arg0 := New oracle query for oracle Arg1, question in Arg2, query fee in Arg3, query TTL in Arg4, response TTL in Arg5. Typereps for checking oracle type is in Arg6 and Arg7."}
, { 'ORACLE_RESPOND', 16#68, false, false, false, 100, [a,a,a,a,a,a], oracle_respond, {signature, oracle, oracle_query,any, typerep, typerep}, none, "Respond as oracle Arg1 to query in Arg2 with response Arg3. Arg0 contains delegation signature. Typereps for checking oracle type is in Arg4 and Arg5."} , { 'ORACLE_RESPOND', 16#63, false, false, 3, [a,a,a,a,a,a], oracle_respond, {signature, oracle, oracle_query,any, typerep, typerep}, none, "Respond as oracle Arg1 to query in Arg2 with response Arg3. Arg0 contains delegation signature. Typereps for checking oracle type is in Arg4 and Arg5."}
, { 'ORACLE_EXTEND', 16#69, false, false, false, 100, [a,a,a], oracle_extend, {signature, oracle, variant}, none, "Extend oracle in Arg1 with TTL in Arg2. Arg0 contains delegation signature."} , { 'ORACLE_EXTEND', 16#64, false, false, 3, [a,a,a], oracle_extend, {signature, oracle, variant}, none, "Extend oracle in Arg1 with TTL in Arg2. Arg0 contains delegation signature."}
, { 'ORACLE_GET_ANSWER', 16#6a, false, false, true, 100, [a,a,a,a,a], oracle_get_answer, {oracle, oracle_query, typerep, typerep}, any, "Arg0 := option variant with answer (if any) from oracle query in Arg1 given by oracle Arg0. Typereps for checking oracle type is in Arg3 and Arg4."} , { 'ORACLE_GET_ANSWER', 16#65, false, false, 3, [a,a,a,a,a], oracle_get_answer, {oracle, oracle_query, typerep, typerep}, any, "Arg0 := option variant with answer (if any) from oracle query in Arg1 given by oracle Arg0. Typereps for checking oracle type is in Arg3 and Arg4."}
, { 'ORACLE_GET_QUESTION', 16#6b, false, false, true, 100, [a,a,a,a,a], oracle_get_question, {oracle, oracle_query, typerep, typerep}, any, "Arg0 := question in oracle query Arg2 given to oracle Arg1. Typereps for checking oracle type is in Arg3 and Arg4."} , { 'ORACLE_GET_QUESTION', 16#66, false, false, 3, [a,a,a,a,a], oracle_get_question, {oracle, oracle_query, typerep, typerep}, any, "Arg0 := question in oracle query Arg2 given to oracle Arg1. Typereps for checking oracle type is in Arg3 and Arg4."}
, { 'ORACLE_QUERY_FEE', 16#6c, false, false, true, 100, [a,a], oracle_query_fee, {oracle}, integer, "Arg0 := query fee for oracle Arg1"} , { 'ORACLE_QUERY_FEE', 16#67, false, false, 3, [a,a], oracle_query_fee, {oracle}, integer, "Arg0 := query fee for oracle Arg1"}
, { 'AENS_RESOLVE', 16#6d, false, false, true, 100, [a,a,a,a], aens_resolve, {string, string, typerep}, variant, "Resolve name in Arg0 with tag Arg1. Arg2 describes the type parameter of the resolved name."} , { 'AENS_RESOLVE', 16#68, false, false, 3, [a,a,a,a], aens_resolve, {string, string, typerep}, variant, "Resolve name in Arg0 with tag Arg1. Arg2 describes the type parameter of the resolved name."}
, { 'AENS_PRECLAIM', 16#6e, false, false, false, 100, [a,a,a], aens_preclaim, {signature, address, hash}, none, "Preclaim the hash in Arg2 for address in Arg1. Arg0 contains delegation signature."} , { 'AENS_PRECLAIM', 16#69, false, false, 3, [a,a,a], aens_preclaim, {signature, address, hash}, none, "Preclaim the hash in Arg2 for address in Arg1. Arg0 contains delegation signature."}
, { 'AENS_CLAIM', 16#6f, false, false, false, 100, [a,a,a,a,a], aens_claim, {signature, address, string, integer, integer}, none, "Attempt to claim the name in Arg2 for address in Arg1 at a price in Arg4. Arg3 contains the salt used to hash the preclaim. Arg0 contains delegation signature."} , { 'AENS_CLAIM', 16#6a, false, false, 3, [a,a,a,a], aens_claim, {signature, address, string, integer}, none, "Claim the name in Arg2 for address in Arg1. Arg3 contains the salt used to hash the preclaim. Arg0 contains delegation signature."}
, { 'AENS_UPDATE', 16#70, false, false, false, 100, [a,a,a,a,a,a], aens_update, {signature, address, string, variant, variant, variant}, none, "Updates name in Arg2 for address in Arg1. Arg3 contains optional ttl (of type Chain.ttl), Arg4 contains optional client_ttl (of type int), Arg5 contains optional pointers (of type map(string, pointee))"} , { 'AENS_UPDATE', 16#6b, false, false, 3, [], aens_update, {}, none, "NYI"}
, { 'AENS_TRANSFER', 16#71, false, false, false, 100, [a,a,a,a], aens_transfer,{signature, address, address, string}, none, "Transfer ownership of name Arg3 from account Arg1 to Arg2. Arg0 contains delegation signature."} , { 'AENS_TRANSFER', 16#6c, false, false, 3, [a,a,a,a], aens_transfer,{signature, address, address, string}, none, "Transfer ownership of name Arg3 from account Arg1 to Arg2. Arg0 contains delegation signature."}
, { 'AENS_REVOKE', 16#72, false, false, false, 100, [a,a,a], aens_revoke, {signature, address, string}, none, "Revoke the name in Arg2 from owner Arg1. Arg0 contains delegation signature."} , { 'AENS_REVOKE', 16#6d, false, false, 3, [a,a,a], aens_revoke, {signature, address, string}, none, "Revoke the name in Arg2 from owner Arg1. Arg0 contains delegation signature."}
, { 'BALANCE_OTHER', 16#73, false, true, true, 50, [a,a], balance_other, {address}, integer, "Arg0 := The balance of address Arg1."} , { 'BALANCE_OTHER', 16#6e, false, true, 3, [a,a], balance_other, {address}, integer, "Arg0 := The balance of address Arg1."}
%% TODO: Reorder these before documenting the specification
, { 'MAP_SIZE', 16#6f, false, true, 3, [a,a], map_size_, {map}, integer, "Arg0 := The size of the map Arg1."}
, { 'MAP_TO_LIST', 16#70, false, true, 3, [a,a], map_to_list, {map}, list, "Arg0 := The tuple list representation of the map Arg1."}
, { 'STR_LENGTH', 16#71, false, true, 3, [a,a], str_length, {string}, integer, "Arg0 := The length of the string Arg1."}
, { 'VERIFY_SIG', 16#74, false, true, true, 1300, [a,a,a,a], verify_sig, {bytes, address, bytes}, boolean, "Arg0 := verify_sig(Hash, PubKey, Signature)"} , { 'ECVERIFY', 16#72, false, true, 1300, [a,a,a,a], ecverify, {bytes, address, bytes}, boolean, "Arg0 := ecverify(Hash, PubKey, Signature)"}
, { 'VERIFY_SIG_SECP256K1',16#75, false, true, true, 1300, [a,a,a,a], verify_sig_secp256k1, {bytes, bytes, bytes}, boolean, "Arg0 := verify_sig_secp256k1(Hash, PubKey, Signature)"} , { 'ECVERIFY_SECP256K1', 16#73, false, true, 1300, [a,a,a,a], ecverify_secp256k1, {bytes, bytes, bytes}, boolean, "Arg0 := ecverify_secp256k1(Hash, PubKey, Signature)"}
, { 'CONTRACT_TO_ADDRESS', 16#76, false, true, true, 10, [a,a], contract_to_address, {contract}, address, "Arg0 := Arg1 - A no-op type conversion"} , { 'CONTRACT_TO_ADDRESS', 16#74, false, true, 3, [a,a], contract_to_address, {contract}, address, "Arg0 := Arg1 - A no-op type conversion"}
, { 'AUTH_TX_HASH', 16#77, false, true, true, 10, [a], auth_tx_hash, {}, variant, "If in GA authentication context return Some(TxHash) otherwise None."} , { 'AUTH_TX_HASH', 16#75, false, true, 3, [a], auth_tx_hash, {}, variant, "If in GA authentication context return Some(TxHash) otherwise None."}
, { 'ORACLE_CHECK', 16#78, false, false, true, 100, [a,a,a,a], oracle_check, {oracle, typerep, typerep}, bool, "Arg0 := is Arg1 an oracle with the given query (Arg2) and response (Arg3) types"} , { 'BYTES_TO_INT', 16#76, false, true, 3, [a,a], bytes_to_int, {bytes}, integer, "Arg0 := bytes_to_int(Arg1)"}
, { 'ORACLE_CHECK_QUERY', 16#79, false, false, true, 100, [a,a,a,a,a], oracle_check_query, {oracle, oracle_query, typerep, typerep}, bool, "Arg0 := is Arg2 a query for the oracle Arg1 with the given types (Arg3, Arg4)"} , { 'BYTES_TO_STR', 16#77, false, true, 3, [a,a], bytes_to_str, {bytes}, string, "Arg0 := bytes_to_str(Arg1)"}
, { 'IS_ORACLE', 16#7a, false, false, true, 100, [a,a], is_oracle, {address}, bool, "Arg0 := is Arg1 an oracle"} , { 'ORACLE_CHECK', 16#78, false, false, 3, [a,a,a,a], oracle_check, {oracle, typerep, typerep}, bool, "Arg0 := is Arg1 an oracle with the given query (Arg2) and response (Arg3) types"}
, { 'IS_CONTRACT', 16#7b, false, false, true, 100, [a,a], is_contract, {address}, bool, "Arg0 := is Arg1 a contract"} , { 'ORACLE_CHECK_QUERY', 16#79, false, false, 3, [a,a,a,a,a], oracle_check_query, {oracle, oracle_query, typerep, typerep}, bool, "Arg0 := is Arg2 a query for the oracle Arg1 with the given types (Arg3, Arg4)"}
, { 'IS_PAYABLE', 16#7c, false, false, true, 100, [a,a], is_payable, {address}, bool, "Arg0 := is Arg1 a payable address"}
, { 'CREATOR', 16#7d, false, true, true, 10, [a], contract_creator, {}, address, "Arg0 := contract creator"}
, { 'ECVERIFY_SECP256K1', 16#7e, false, true, true, 1300, [a,a,a,a], ecverify_secp256k1, {bytes, bytes, bytes}, bytes, "Arg0 := ecverify_secp256k1(Hash, Addr, Signature)"} , { 'IS_ORACLE', 16#7a, false, false, 3, [a,a], is_oracle, {address}, bool, "Arg0 := is Arg1 an oracle"}
, { 'ECRECOVER_SECP256K1', 16#7f, false, true, true, 1300, [a,a,a], ecrecover_secp256k1, {bytes, bytes}, bytes, "Arg0 := ecrecover_secp256k1(Hash, Signature)"} , { 'IS_CONTRACT', 16#7b, false, false, 3, [a,a], is_contract, {address}, bool, "Arg0 := is Arg1 a contract"}
, { 'CREATOR', 16#7c, false, true, 3, [a], contract_creator, {}, address, "Arg0 := contract creator"}
, { 'ADDRESS_TO_CONTRACT', 16#80, false, true, true, 10, [a,a], address_to_contract, {address}, contract, "Arg0 := Arg1 - A no-op type conversion"} , { 'DEACTIVATE', 16#fa, false, true, 3, [], deactivate, {}, none, "Mark the current contract for deactivation."}
, { 'ABORT', 16#fb, true, true, 3, [a], abort, {string}, none, "Abort execution (dont use all gas) with error message in Arg0."}
, { 'BLS12_381_G1_NEG', 16#81, false, true, true, 100, [a,a], bls12_381_g1_neg, {tuple}, tuple, "Arg0 := BLS12_381.g1_neg(Arg1) - Negate a G1-value"} , { 'EXIT', 16#fc, true, true, 3, [a], exit, {string}, none, "Abort execution (use upp all gas) with error message in Arg0."}
, { 'BLS12_381_G1_NORM', 16#82, false, true, true, 100, [a,a], bls12_381_g1_norm, {tuple}, tuple, "Arg0 := BLS12_381.g1_normalize(Arg1) - Normalize a G1-value"} , { 'NOP', 16#fd, false, true, 1, [], nop, {}, none, "The no op. does nothing."}
, { 'BLS12_381_G1_VALID', 16#83, false, true, true, 2000, [a,a], bls12_381_g1_valid, {tuple}, bool, "Arg0 := BLS12_381.g1_valid(Arg1) - Check if G1-value is a valid group member"}
, { 'BLS12_381_G1_IS_ZERO', 16#84, false, true, true, 30, [a,a], bls12_381_g1_is_zero, {tuple}, bool, "Arg0 := BLS12_381.g1_is_zero(Arg1) - Check if G1-value is zero"}
, { 'BLS12_381_G1_ADD', 16#85, false, true, true, 100, [a,a,a], bls12_381_g1_add, {tuple, tuple}, tuple, "Arg0 := BLS12_381.g1_add(Arg1, Arg2) - Add two G1-values"}
, { 'BLS12_381_G1_MUL', 16#86, false, true, true, 1000, [a,a,a], bls12_381_g1_mul, {tuple, tuple}, tuple, "Arg0 := BLS12_381.g1_mul(Arg1, Arg2) - Scalar multiplication for a G1-value (Arg1), and an Fr-value"}
, { 'BLS12_381_G2_NEG', 16#87, false, true, true, 100, [a,a], bls12_381_g2_neg, {tuple}, tuple, "Arg0 := BLS12_381.g2_neg(Arg1) - Negate a G2-value"}
, { 'BLS12_381_G2_NORM', 16#88, false, true, true, 100, [a,a], bls12_381_g2_norm, {tuple}, tuple, "Arg0 := BLS12_381.g2_normalize(Arg1) - Normalize a G2-value"}
, { 'BLS12_381_G2_VALID', 16#89, false, true, true, 2000, [a,a], bls12_381_g2_valid, {tuple}, bool, "Arg0 := BLS12_381.g2_valid(Arg1) - Check if G2-value is a valid group member"}
, { 'BLS12_381_G2_IS_ZERO', 16#8a, false, true, true, 30, [a,a], bls12_381_g2_is_zero, {tuple}, bool, "Arg0 := BLS12_381.g2_is_zero(Arg1) - Check if G2-value is zero"}
, { 'BLS12_381_G2_ADD', 16#8b, false, true, true, 100, [a,a,a], bls12_381_g2_add, {tuple, tuple}, tuple, "Arg0 := BLS12_381.g2_add(Arg1, Arg2) - Add two G2-values"}
, { 'BLS12_381_G2_MUL', 16#8c, false, true, true, 1000, [a,a,a], bls12_381_g2_mul, {tuple, tuple}, tuple, "Arg0 := BLS12_381.g2_mul(Arg1, Arg2) - Scalar multiplication for a G2-value (Arg2), and an Fr-value"}
, { 'BLS12_381_GT_INV', 16#8d, false, true, true, 100, [a,a], bls12_381_gt_inv, {tuple}, tuple, "Arg0 := BLS12_381.gt_inv(Arg1) - Invert a GT-value"}
, { 'BLS12_381_GT_ADD', 16#8e, false, true, true, 100, [a,a,a], bls12_381_gt_add, {tuple, tuple}, tuple, "Arg0 := BLS12_381.gt_add(Arg1, Arg2) - Add two GT-values"}
, { 'BLS12_381_GT_MUL', 16#8f, false, true, true, 100, [a,a,a], bls12_381_gt_mul, {tuple, tuple}, tuple, "Arg0 := BLS12_381.gt_mul(Arg1, Arg2) - Multiply two GT-values"}
, { 'BLS12_381_GT_POW', 16#90, false, true, true, 2000, [a,a,a], bls12_381_gt_pow, {tuple, tuple}, tuple, "Arg0 := BLS12_381.gt_pow(Arg1, Arg2) - Scalar exponentiation for a GT-value (Arg2), and an Fr-value"}
, { 'BLS12_381_GT_IS_ONE', 16#91, false, true, true, 30, [a,a], bls12_381_gt_is_one, {tuple}, bool, "Arg0 := BLS12_381.gt_is_one(Arg1) - Check if a GT value is \"one\""}
, { 'BLS12_381_PAIRING', 16#92, false, true, true, 12000, [a,a,a], bls12_381_pairing, {tuple, tuple}, tuple, "Arg0 := BLS12_381.pairing(Arg1, Arg2) - Find the pairing of a G1-value (Arg1) and a G2-value (Arg2)"}
, { 'BLS12_381_MILLER_LOOP', 16#93, false, true, true, 5000, [a,a,a], bls12_381_miller_loop, {tuple, tuple}, tuple, "Arg0 := BLS12_381.miller_loop(Arg1, Arg2) - Do the Miller-loop step of pairing for a G1-value (Arg1) and a G2-value (Arg2)"}
, { 'BLS12_381_FINAL_EXP', 16#94, false, true, true, 7000, [a,a], bls12_381_final_exp, {tuple}, tuple, "Arg0 := BLS12_381.final_exp(Arg1) - Do the final exponentiation in pairing"}
, { 'BLS12_381_INT_TO_FR', 16#95, false, true, true, 30, [a,a], bls12_381_int_to_fr, {tuple}, tuple, "Arg0 := to_montgomery(Arg1) - Convert (Big)integer to montgomery representation (32 bytes)"}
, { 'BLS12_381_INT_TO_FP', 16#96, false, true, true, 30, [a,a], bls12_381_int_to_fp, {tuple}, tuple, "Arg0 := to_montgomery(Arg1) - Convert (Big)integer to montgomery representation (48 bytes)"}
, { 'BLS12_381_FR_TO_INT', 16#97, false, true, true, 30, [a,a], bls12_381_fr_to_int, {tuple}, tuple, "Arg0 := from_montgomery(Arg1) - Convert montgomery representation (32 bytes) to integer"}
, { 'BLS12_381_FP_TO_INT', 16#98, false, true, true, 30, [a,a], bls12_381_fp_to_int, {tuple}, tuple, "Arg0 := from_montgomery(Arg1) - Convert montgomery representation (48 bytes) to integer"}
, { 'AENS_LOOKUP', 16#99, false, false, true, 100, [a,a], aens_lookup, {string}, variant, "Lookup the name of Arg0. Returns option(AENS.name)"}
, { 'ORACLE_EXPIRY', 16#9a, false, false, true, 100, [a,a], oracle_expiry, {oracle}, int, "Arg0 := expiry block for oracle Arg1"}
, { 'AUTH_TX', 16#9b, false, true, true, 100, [a], auth_tx, {}, variant, "If in GA authentication context return Some(Tx) otherwise None."}
, { 'STR_TO_LIST', 16#9c, false, true, true, 100, [a,a], str_to_list, {string}, list, "Arg0 := string converted to list of characters"}
, { 'STR_FROM_LIST', 16#9d, false, true, true, 100, [a,a], str_from_list, {list}, string, "Arg0 := string converted from list of characters"}
, { 'STR_TO_UPPER', 16#9e, false, true, true, 100, [a,a], str_to_upper, {string}, string, "Arg0 := to_upper(string)"}
, { 'STR_TO_LOWER', 16#9f, false, true, true, 100, [a,a], str_to_lower, {string}, string, "Arg0 := to_lower(string)"}
, { 'CHAR_TO_INT', 16#a0, false, true, true, 10, [a,a], char_to_int, {char}, int, "Arg0 := integer representation of UTF-8 character"}
, { 'CHAR_FROM_INT', 16#a1, false, true, true, 10, [a,a], char_from_int, {int}, variant, "Arg0 := Some(UTF-8 character) from integer if valid, None if not valid."}
, { 'CALL_PGR', 16#a2, true, false, true, 100, [a,is,a,a,a,a,a], call_pgr, {contract, string, typerep, typerep, integer, integer, bool}, variant, "Potentially protected remote call. Arg5 is protected flag, otherwise as CALL_GR."}
, { 'CREATE', 16#a3, true, false, true, 10000, [a,a,a], create, {contract_bytearray, typerep, integer}, contract, "Deploys a contract with a bytecode Arg1 and value Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract address to stack top."}
, { 'CLONE', 16#a4, true, false, true, 1000, [a,a,a,a], clone, {contract, typerep, integer, bool}, any, "Clones the contract under Arg1 and deploys it with value of Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract (or `None` on fail when protected) to stack top."}
, { 'CLONE_G', 16#a5, true, false, true, 1000, [a,a,a,a,a], clone_g, {contract, typerep, integer, integer, bool}, any, "Like `CLONE` but additionally limits gas of `init` call to Arg3"}
, { 'BYTECODE_HASH', 16#a6, false, true, true, 100, [a,a], bytecode_hash, {contract}, variant, "Arg0 := hash of the deserialized contract's bytecode under address given in Arg1 (or `None` on fail)."}
, { 'DEACTIVATE', 16#fa, false, true, true, 10, [], deactivate, {}, none, "Mark the current contract for deactivation."}
, { 'ABORT', 16#fb, true, true, true, 10, [a], abort, {string}, none, "Abort execution (dont use all gas) with error message in Arg0."}
, { 'EXIT', 16#fc, true, true, true, 10, [a], exit, {string}, none, "Abort execution (use upp all gas) with error message in Arg0."}
, { 'NOP', 16#fd, false, true, true, 1, [], nop, {}, none, "The no op. does nothing."}
%% FUNCTION 16#fe "Function declaration and entrypoint." %% FUNCTION 16#fe "Function declaration and entrypoint."
%% EXTEND 16#ff "Reserved for future extensions beyond one byte opcodes." %% EXTEND 16#ff "Reserved for future extensions beyond one byte opcodes."
]. ].
@@ -255,18 +205,16 @@ generate_opcodes_ops(Modulename, HrlFile, SrcDir, Ops) ->
Args = lists:flatten([gen_args(Op) || Op <- Ops]), Args = lists:flatten([gen_args(Op) || Op <- Ops]),
EndBB = lists:flatten([gen_bb(Op) || Op <- Ops]), EndBB = lists:flatten([gen_bb(Op) || Op <- Ops]),
InAuth = lists:flatten([gen_in_auth(Op) || Op <- Ops]), InAuth = lists:flatten([gen_in_auth(Op) || Op <- Ops]),
Offchain = lists:flatten([gen_allowed_offchain(Op) || Op <- Ops]), ResType = lists:flatten([gen_res_type(Op) || Op <- Ops]),
GasCost = lists:flatten([gen_gas_cost(Op) || Op <- Ops]),
io:format(File, "~s", [prelude("Provides opcode primitives.\n")]), io:format(File, "~s", [prelude("Provides opcode primitives.\n")]),
io:format(File, "~s", [ops_exports(Modulename, HrlFile, io:format(File, "~s", [ops_exports(Modulename, HrlFile,
["args/1\n" ["args/1\n"
" , end_bb/1\n" " , end_bb/1\n"
" , in_auth/1\n" " , in_auth/1\n"
" , allowed_offchain/1\n"
" , mnemonic/1\n" " , mnemonic/1\n"
" , m_to_op/1\n" " , m_to_op/1\n"
" , gas_cost/1\n" " , result_type/1\n"
])]), ])]),
io:format(File, "%% FATE mnemonics\n~s", [Mnemonic]), io:format(File, "%% FATE mnemonics\n~s", [Mnemonic]),
@@ -284,11 +232,8 @@ generate_opcodes_ops(Modulename, HrlFile, SrcDir, Ops) ->
io:format(File, "%% Is FATE Op allowed in GA Authentication context?\n~s", [InAuth]), io:format(File, "%% Is FATE Op allowed in GA Authentication context?\n~s", [InAuth]),
io:format(File, "in_auth(_) -> false.\n\n", []), io:format(File, "in_auth(_) -> false.\n\n", []),
io:format(File, "%% Is FATE Op allowed in a state channel offchain context?\n~s", [Offchain]), io:format(File, "%% What is the result type.\n~s", [ResType]),
io:format(File, "allowed_offchain(_) -> false.\n\n", []), io:format(File, "result_type(_) -> none.\n\n", []),
io:format(File, "%% Base cost of operation\n~s", [GasCost]),
io:format(File, "gas_cost(Op) -> exit({bad_opcode, Op}).\n\n", []),
file:close(File). file:close(File).
@@ -332,7 +277,7 @@ generate_code_ops(Modulename, SrcDir, Ops) ->
file:close(File). file:close(File).
gen_type(#{type_name := TypeName, type := Type}) -> gen_type(#{type_name := TypeName, type := Type}) ->
lists:flatten(io_lib:format("-type ~-29s :: ~s.\n", lists:flatten(io_lib:format("-type ~-26s :: ~s.\n",
[TypeName, Type])). [TypeName, Type])).
gen_fate_code_type(#{type_name := TypeName}) -> gen_fate_code_type(#{type_name := TypeName}) ->
@@ -410,32 +355,29 @@ ops_exports(Module, HrlFile, Exports) ->
[Module, Exports])). [Module, Exports])).
gen_mnemonic(#{opname := Name, macro := Macro}) -> gen_mnemonic(#{opname := Name, macro := Macro}) ->
lists:flatten(io_lib:format("mnemonic(~24s) -> ~24w ;\n", lists:flatten(io_lib:format("mnemonic(~21s) -> ~21w ;\n",
[Macro, Name])). [Macro, Name])).
gen_m_to_op(#{opname := Name, macro := Macro}) -> gen_m_to_op(#{opname := Name, macro := Macro}) ->
lists:flatten(io_lib:format("m_to_op(~24w) -> ~24s ;\n", lists:flatten(io_lib:format("m_to_op(~21w) -> ~21s ;\n",
[Name, Macro])). [Name, Macro])).
gen_args(#{macro := Macro, arity := Arity}) -> gen_args(#{macro := Macro, arity := Arity}) ->
lists:flatten(io_lib:format("args(~24s) -> ~2w ;\n", lists:flatten(io_lib:format("args(~21s) -> ~2w ;\n",
[Macro, Arity])). [Macro, Arity])).
gen_bb(#{macro := Macro, end_bb := EndBB}) -> gen_bb(#{macro := Macro, end_bb := EndBB}) ->
lists:flatten(io_lib:format("end_bb(~24s) -> ~w ;\n", lists:flatten(io_lib:format("end_bb(~21s) -> ~w ;\n",
[Macro, EndBB])). [Macro, EndBB])).
gen_in_auth(#{macro := Macro, in_auth := InAuth}) -> gen_in_auth(#{macro := Macro, in_auth := InAuth}) ->
lists:flatten(io_lib:format("in_auth(~24s) -> ~w ;\n", lists:flatten(io_lib:format("in_auth(~21s) -> ~w ;\n",
[Macro, InAuth])). [Macro, InAuth])).
gen_allowed_offchain(#{macro := Macro, offchain := Offchain}) -> gen_res_type(#{macro := Macro, res_type := ResType}) ->
lists:flatten(io_lib:format("allowed_offchain(~24s) -> ~w ;\n", lists:flatten(io_lib:format("result_type(~21s) -> ~w ;\n",
[Macro, Offchain])). [Macro, ResType])).
gen_gas_cost(#{macro := Macro, gas := Gas}) ->
lists:flatten(io_lib:format("gas_cost(~24s) -> ~w ;\n",
[Macro, Gas])).
prelude(Doc) -> prelude(Doc) ->
"%%%-------------------------------------------------------------------\n" "%%%-------------------------------------------------------------------\n"
@@ -451,11 +393,11 @@ prelude(Doc) ->
gen_defines(#{opname := Name, opcode := OpCode}) -> gen_defines(#{opname := Name, opcode := OpCode}) ->
lists:flatten(io_lib:format("-define(~-29w, 16#~2.16.0b).\n", [Name, OpCode])). lists:flatten(io_lib:format("-define(~-26w, 16#~2.16.0b).\n", [Name, OpCode])).
gen([]) -> gen([]) ->
[]; [];
gen([{OpName, OpCode, EndBB, InAuth, AllowedOffchain, Gas, FateFormat, Constructor, ArgTypes, ResType, Doc} | Rest]) -> gen([{OpName, OpCode, EndBB, InAuth, Gas, FateFormat, Constructor, ArgTypes, ResType, Doc} | Rest]) ->
Arity = length(FateFormat), Arity = length(FateFormat),
Name = atom_to_list(OpName), Name = atom_to_list(OpName),
LowerName = string:to_lower(Name), LowerName = string:to_lower(Name),
@@ -473,7 +415,6 @@ gen([{OpName, OpCode, EndBB, InAuth, AllowedOffchain, Gas, FateFormat, Construct
, arity => Arity , arity => Arity
, end_bb => EndBB , end_bb => EndBB
, in_auth => InAuth , in_auth => InAuth
, offchain => AllowedOffchain
, format => FateFormat , format => FateFormat
, macro => Macro , macro => Macro
, type_name => TypeName , type_name => TypeName
@@ -547,33 +488,25 @@ gen_asm_pp(Module, Path, Ops) ->
io:format(File, "format_op(Op, _Symbols) -> io_lib:format(\";; Bad Op: ~~w\\n\", [Op]).\n", []), io:format(File, "format_op(Op, _Symbols) -> io_lib:format(\";; Bad Op: ~~w\\n\", [Op]).\n", []),
file:close(File). file:close(File).
gen_format(#{opname := Name}) when (Name =:= 'CALL_R') -> gen_format(#{opname := Name}) when (Name =:= 'CALL_R') or (Name =:= 'CALL_TR') ->
io_lib:format("format_op({~w, {immediate, Contract}, {immediate, Function}, ArgType, RetType, Value}, Symbols) ->\n" io_lib:format("format_op({~w, {immediate, Contract}, {immediate, Function}, Value}, Symbols) ->\n"
" [\"~s \", lookup(Contract, Symbols), \".\", " " [\"~s \", lookup(Contract, Symbols), \".\", "
"lookup(Function, Symbols), \" \", " "lookup(Function, Symbols), \" \", "
"format_arg(a, ArgType), \" \", "
"format_arg(a, RetType), \" \", "
"format_arg(a, Value)];\n" "format_arg(a, Value)];\n"
"format_op({~w, Contract, {immediate, Function}, ArgType, RetType, Value}, Symbols) ->\n" "format_op({~w, Contract, {immediate, Function}, Value}, Symbols) ->\n"
"[\"~s \", format_arg(a, Contract), \".\", " "[\"~s \", format_arg(a, Contract), \".\", "
"lookup(Function, Symbols), \" \", " "lookup(Function, Symbols), \" \", "
"format_arg(a, ArgType), \" \", "
"format_arg(a, RetType), \" \", "
"format_arg(a, Value)];\n", "format_arg(a, Value)];\n",
[Name, atom_to_list(Name), Name, atom_to_list(Name)]); [Name, atom_to_list(Name), Name, atom_to_list(Name)]);
gen_format(#{opname := Name}) when (Name =:= 'CALL_GR') -> gen_format(#{opname := Name}) when (Name =:= 'CALL_GR') or (Name =:= 'CALL_GTR') ->
io_lib:format("format_op({~w, {immediate, Contract}, {immediate, Function}, ArgType, RetType, Value, Gas}, Symbols) ->\n" io_lib:format("format_op({~w, {immediate, Contract}, {immediate, Function}, Value, Gas}, Symbols) ->\n"
" [\"~s \", lookup(Contract, Symbols), \".\", " " [\"~s \", lookup(Contract, Symbols), \".\", "
"lookup(Function, Symbols), \" \", " "lookup(Function, Symbols), \" \", "
"format_arg(a, ArgType), \" \", "
"format_arg(a, RetType), \" \", "
"format_arg(a, Value), \" \", " "format_arg(a, Value), \" \", "
"format_arg(a, Gas)];\n" "format_arg(a, Gas)];\n"
"format_op({~w, Contract, {immediate, Function}, ArgType, RetType, Value, Gas}, Symbols) ->\n" "format_op({~w, Contract, {immediate, Function}, Value, Gas}, Symbols) ->\n"
"[\"~s \", format_arg(a, Contract), \".\", " "[\"~s \", format_arg(a, Contract), \".\", "
"lookup(Function, Symbols), \" \", " "lookup(Function, Symbols), \" \", "
"format_arg(a, ArgType), \" \", "
"format_arg(a, RetType), \" \", "
"format_arg(a, Value), \" \", " "format_arg(a, Value), \" \", "
"format_arg(a, Gas)];\n", "format_arg(a, Gas)];\n",
[Name, atom_to_list(Name), Name, atom_to_list(Name)]); [Name, atom_to_list(Name), Name, atom_to_list(Name)]);
@@ -819,3 +752,4 @@ format_arg_doc({is,_N}) -> "Identifier";
format_arg_doc({ii,_N}) -> "Integer"; format_arg_doc({ii,_N}) -> "Integer";
format_arg_doc({li,_N}) -> "[Integers]"; format_arg_doc({li,_N}) -> "[Integers]";
format_arg_doc({t,_N}) -> "Type". format_arg_doc({t,_N}) -> "Type".
-218
View File
@@ -1,218 +0,0 @@
%%%-------------------------------------------------------------------
%%% @copyright (C) 2019, Aeternity Anstalt
%%% @doc
%%% Functions for manipulating FATE maps. In particular for mediating
%%% between plain map values (represented by Erlang maps) and maps that are
%%% fully or partially saved in the contract store.
%%% @end
%%% -------------------------------------------------------------------
-module(aeb_fate_maps).
-include("aeb_fate_data.hrl").
-export([ allocate_store_maps/2
, has_store_maps/1
, unfold_store_maps/2
, refcount/1
, refcount_zero/0
, refcount_diff/2
, refcount_union/1
, refcount_union/2
, no_used_ids/0 ]).
-export_type([used_ids/0, maps/0, refcount/0]).
%% Size in bytes of serialization of a map for which we turn it into a store
%% map. It's not worth turning small maps into store maps.
%% Under consensus!
-ifdef(TEST).
-define(STORE_MAP_THRESHOLD, 0).
-else.
-define(STORE_MAP_THRESHOLD, 100).
-endif.
-type fate_value() :: aeb_fate_data:fate_type().
-type fate_value_or_tombstone() :: fate_value() | ?FATE_MAP_TOMBSTONE.
-type id() :: integer().
-type used_ids() :: list(id()).
-type maps() :: #{ id() => aeb_fate_data:fate_map() | aeb_fate_data:fate_store_map() }.
%% -- Allocating store maps --------------------------------------------------
-spec allocate_store_maps(used_ids(), [fate_value_or_tombstone()]) -> {[fate_value_or_tombstone()], maps()}.
allocate_store_maps(Used, Vals) ->
{_Used, Vals1, Maps} = allocate_store_maps_l(Used, Vals, #{}),
{Vals1, Maps}.
allocate_store_maps(Used, ?FATE_MAP_TOMBSTONE = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_TRUE = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_FALSE = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_UNIT = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_BITS(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_BYTES(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_ADDRESS(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_CONTRACT(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_ORACLE(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_ORACLE_Q(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_CHANNEL(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_TYPEREP(_) = Val, Maps) -> {Used, Val, Maps};
allocate_store_maps(Used, Val, Maps) when ?IS_FATE_INTEGER(Val) -> {Used, Val, Maps};
allocate_store_maps(Used, Val, Maps) when ?IS_FATE_STRING(Val) -> {Used, Val, Maps};
allocate_store_maps(Used, ?FATE_TUPLE(Val), Maps) ->
{Used1, Vals, Maps1} = allocate_store_maps_l(Used, tuple_to_list(Val), Maps),
{Used1, ?FATE_TUPLE(list_to_tuple(Vals)), Maps1};
allocate_store_maps(Used, Val, Maps) when ?IS_FATE_LIST(Val) ->
{Used1, Vals, Maps1} = allocate_store_maps_l(Used, ?FATE_LIST_VALUE(Val), Maps),
{Used1, ?MAKE_FATE_LIST(Vals), Maps1};
allocate_store_maps(Used, ?FATE_VARIANT(Arities, Tag, Vals), Maps) ->
{Used1, Vals1, Maps1} = allocate_store_maps_l(Used, tuple_to_list(Vals), Maps),
{Used1, ?FATE_VARIANT(Arities, Tag, list_to_tuple(Vals1)), Maps1};
allocate_store_maps(Used, Val, Maps) when ?IS_FATE_MAP(Val) ->
{Used1, KVs, Maps1} = allocate_store_maps_m(Used, ?FATE_MAP_VALUE(Val), Maps),
Val1 = ?MAKE_FATE_MAP(KVs),
case byte_size(aeb_fate_encoding:serialize(Val1)) < ?STORE_MAP_THRESHOLD of
true -> {Used1, Val1, Maps1};
false ->
{Id, Used2} = next_id(Used1),
{Used2, ?FATE_STORE_MAP(#{}, Id), Maps1#{Id => Val1}}
end;
allocate_store_maps(Used, ?FATE_STORE_MAP(Cache, _Id) = Val, Maps) when Cache =:= #{} ->
{Used, Val, Maps};
allocate_store_maps(Used, ?FATE_STORE_MAP(Cache, Id), Maps) ->
{NewId, Used1} = next_id(Used),
{Used2, Cache1, Maps1} = allocate_store_maps_m(Used1, Cache, Maps),
{Used2, ?FATE_STORE_MAP(#{}, NewId), Maps1#{NewId => ?FATE_STORE_MAP(Cache1, Id)}}.
allocate_store_maps_l(Used, [], Maps) -> {Used, [], Maps};
allocate_store_maps_l(Used, [H | T], Maps) ->
{Used1, H1, Maps1} = allocate_store_maps(Used, H, Maps),
{Used2, T1, Maps2} = allocate_store_maps(Used1, T, Maps1),
{Used2, [H1 | T1], Maps2}.
allocate_store_maps_m(Used, Val, Maps) ->
maps:fold(fun(K, V, {Us, M, Ms}) ->
{Us1, V1, Ms1} = allocate_store_maps(Us, V, Ms),
{Us1, M#{ K => V1 }, Ms1}
end, {Used, #{}, Maps}, Val).
%% -- Unfolding store maps ---------------------------------------------------
-type unfold_fun() :: fun((id()) -> aeb_fate_data:fate_map()).
-spec unfold_store_maps(unfold_fun(), fate_value_or_tombstone()) -> fate_value_or_tombstone().
unfold_store_maps(_Unfold, ?FATE_MAP_TOMBSTONE = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_TRUE = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_FALSE = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_UNIT = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_BITS(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_BYTES(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_ADDRESS(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_CONTRACT(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_ORACLE(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_ORACLE_Q(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_CHANNEL(_) = Val) -> Val;
unfold_store_maps(_Unfold, ?FATE_TYPEREP(_) = Val) -> Val;
unfold_store_maps(_Unfold, Val) when ?IS_FATE_INTEGER(Val) -> Val;
unfold_store_maps(_Unfold, Val) when ?IS_FATE_STRING(Val) -> Val;
unfold_store_maps(Unfold, ?FATE_TUPLE(Val)) ->
Vals = unfold_store_maps_l(Unfold, tuple_to_list(Val)),
?FATE_TUPLE(list_to_tuple(Vals));
unfold_store_maps(Unfold, Val) when ?IS_FATE_LIST(Val) ->
?MAKE_FATE_LIST(unfold_store_maps_l(Unfold, ?FATE_LIST_VALUE(Val)));
unfold_store_maps(Unfold, ?FATE_VARIANT(Arities, Tag, Vals)) ->
Vals1 = unfold_store_maps_l(Unfold, tuple_to_list(Vals)),
?FATE_VARIANT(Arities, Tag, list_to_tuple(Vals1));
unfold_store_maps(Unfold, Val) when ?IS_FATE_MAP(Val) ->
?MAKE_FATE_MAP(unfold_store_maps_m(Unfold, ?FATE_MAP_VALUE(Val)));
unfold_store_maps(Unfold, ?FATE_STORE_MAP(Cache, Id)) ->
StoreMap = Unfold(Id),
maps:fold(fun write_cache/3, unfold_store_maps(Unfold, StoreMap),
unfold_store_maps_m(Unfold, Cache)).
unfold_store_maps_l(Unfold, Vals) ->
[ unfold_store_maps(Unfold, Val) || Val <- Vals ].
unfold_store_maps_m(Unfold, Val) ->
maps:map(fun(_, V) -> unfold_store_maps(Unfold, V) end, Val).
write_cache(Key, ?FATE_MAP_TOMBSTONE, Map) ->
maps:remove(Key, Map);
write_cache(Key, Val, Map) ->
Map#{ Key => Val }.
%% -- Reference counting -----------------------------------------------------
-type refcount() :: #{id() => integer()}.
-spec refcount_zero() -> refcount().
refcount_zero() -> #{}.
-spec refcount_diff(refcount(), refcount()) -> refcount().
refcount_diff(New, Old) ->
maps:fold(fun(K, N, C) -> maps:update_with(K, fun(M) -> M - N end, -N, C) end,
New, Old).
-spec refcount_union([refcount()]) -> refcount().
refcount_union(Counts) -> lists:foldl(fun refcount_union/2, #{}, Counts).
-spec refcount_union(refcount(), refcount()) -> refcount().
refcount_union(A, B) ->
maps:fold(fun(K, N, C) -> maps:update_with(K, fun(M) -> M + N end, N, C) end,
B, A).
-spec has_store_maps(fate_value()) -> boolean().
has_store_maps(Val) ->
refcount_zero() /= refcount(Val).
-spec refcount(fate_value()) -> refcount().
refcount(Val) -> refcount(Val, #{}).
-spec refcount(fate_value_or_tombstone(), refcount()) -> refcount().
refcount(?FATE_MAP_TOMBSTONE, Count) -> Count;
refcount(?FATE_TRUE, Count) -> Count;
refcount(?FATE_FALSE, Count) -> Count;
refcount(?FATE_UNIT, Count) -> Count;
refcount(?FATE_BITS(_), Count) -> Count;
refcount(?FATE_BYTES(_), Count) -> Count;
refcount(?FATE_ADDRESS(_), Count) -> Count;
refcount(?FATE_CONTRACT(_), Count) -> Count;
refcount(?FATE_ORACLE(_), Count) -> Count;
refcount(?FATE_ORACLE_Q(_), Count) -> Count;
refcount(?FATE_CHANNEL(_), Count) -> Count;
refcount(?FATE_TYPEREP(_), Count) -> Count;
refcount(Val, Count) when ?IS_FATE_INTEGER(Val) -> Count;
refcount(Val, Count) when ?IS_FATE_STRING(Val) -> Count;
refcount(?FATE_TUPLE(Val), Count) ->
refcount_l(tuple_to_list(Val), Count);
refcount(Val, Count) when ?IS_FATE_LIST(Val) ->
refcount_l(?FATE_LIST_VALUE(Val), Count);
refcount(?FATE_VARIANT(_Arities, _Tag, Vals), Count) ->
refcount_l(tuple_to_list(Vals), Count);
refcount(Val, Count) when ?IS_FATE_MAP(Val) ->
refcount_m(?FATE_MAP_VALUE(Val), Count);
refcount(?FATE_STORE_MAP(Cache, Id), Count) ->
refcount_m(Cache, maps:update_with(Id, fun(N) -> N + 1 end, 1, Count)).
refcount_l(Vals, Count) ->
lists:foldl(fun refcount/2, Count, Vals).
refcount_m(Val, Count) ->
%% No maps in map keys
maps:fold(fun(_, ?FATE_MAP_TOMBSTONE, C) -> C;
(_, V, C) -> refcount(V, C) end, Count, Val).
%% -- Map id allocation ------------------------------------------------------
-spec no_used_ids() -> used_ids().
no_used_ids() -> [].
-spec next_id(used_ids()) -> {id(), used_ids()}.
next_id(UsedIds) ->
next_id(UsedIds, 0, []).
next_id(Used, J, Acc) when Used == []; J < hd(Used) ->
{J, lists:reverse(Acc) ++ [J | Used]};
next_id([I | Used], I, Acc) ->
next_id(Used, I + 1, [I | Acc]);
next_id([I | Used], J, Acc) when J > I ->
next_id(Used, J, [I | Acc]).
+2 -32
View File
@@ -14,7 +14,6 @@
, heap_value_maps/1 , heap_value_maps/1
, heap_value_offset/1 , heap_value_offset/1
, heap_value_heap/1 , heap_value_heap/1
, heap_value_byte_size/1
, heap_fragment_maps/1 , heap_fragment_maps/1
, heap_fragment_offset/1 , heap_fragment_offset/1
, heap_fragment_heap/1 , heap_fragment_heap/1
@@ -91,25 +90,6 @@ heap_value_offset({_, Heap}) -> Heap#heap.offset.
binary() | #{non_neg_integer() => non_neg_integer()}. binary() | #{non_neg_integer() => non_neg_integer()}.
heap_value_heap({_, Heap}) -> Heap#heap.heap. heap_value_heap({_, Heap}) -> Heap#heap.heap.
%% -- Byte size of a heap value ----------------------------------------------
-spec heap_value_byte_size(heap_value()) -> non_neg_integer().
heap_value_byte_size({_, Heap}) ->
Value = Heap#heap.heap,
Maps = Heap#heap.maps,
ValueSize =
if is_binary(Value) -> byte_size(Value);
true -> 0 end,
MapsSize =
lists:sum([ pmap_size(Map) || Map <- maps:values(Maps#maps.maps) ]),
ValueSize + MapsSize.
pmap_size(#pmap{data = stored}) -> 0;
pmap_size(#pmap{data = Data}) when is_map(Data) ->
lists:sum([ byte_size(Key) + byte_size(Val)
|| {Key, Val} <- maps:to_list(Data),
Val /= tombstone ]).
%% -- Value to binary -------------------------------------------------------- %% -- Value to binary --------------------------------------------------------
-spec to_binary(aeb_aevm_data:data()) -> aeb_aevm_data:heap(). -spec to_binary(aeb_aevm_data:data()) -> aeb_aevm_data:heap().
@@ -133,15 +113,11 @@ to_binary1(Data, Address) when is_binary(Data) ->
%% a string %% a string
Words = aeb_memory:binary_to_words(Data), Words = aeb_memory:binary_to_words(Data),
{Address,<<(size(Data)):256, << <<W:256>> || W <- Words>>/binary>>}; {Address,<<(size(Data)):256, << <<W:256>> || W <- Words>>/binary>>};
to_binary1({contract_bytearray, FateCode}, Address) when is_binary(FateCode) ->
Words = aeb_memory:binary_to_words(FateCode),
{Address,<<(size(FateCode)):256, << <<W:256>> || W <- Words>>/binary>>};
to_binary1(none, Address) -> to_binary1({variant, 0, []}, Address); to_binary1(none, Address) -> to_binary1({variant, 0, []}, Address);
to_binary1({some, Value}, Address) -> to_binary1({variant, 1, [Value]}, Address); to_binary1({some, Value}, Address) -> to_binary1({variant, 1, [Value]}, Address);
to_binary1(word, Address) -> to_binary1({?TYPEREP_WORD_TAG}, Address); to_binary1(word, Address) -> to_binary1({?TYPEREP_WORD_TAG}, Address);
to_binary1(string, Address) -> to_binary1({?TYPEREP_STRING_TAG}, Address); to_binary1(string, Address) -> to_binary1({?TYPEREP_STRING_TAG}, Address);
to_binary1(typerep, Address) -> to_binary1({?TYPEREP_TYPEREP_TAG}, Address); to_binary1(typerep, Address) -> to_binary1({?TYPEREP_TYPEREP_TAG}, Address);
to_binary1(contract_bytearray, Address) -> to_binary1({?TYPEREP_CONTRACT_BYTEARRAY_TAG}, Address);
to_binary1(function, Address) -> to_binary1({?TYPEREP_FUN_TAG}, Address); to_binary1(function, Address) -> to_binary1({?TYPEREP_FUN_TAG}, Address);
to_binary1({list, T}, Address) -> to_binary1({?TYPEREP_LIST_TAG, T}, Address); to_binary1({list, T}, Address) -> to_binary1({?TYPEREP_LIST_TAG, T}, Address);
to_binary1({option, T}, Address) -> to_binary1({variant, [[], [T]]}, Address); to_binary1({option, T}, Address) -> to_binary1({variant, [[], [T]]}, Address);
@@ -272,14 +248,8 @@ from_binary(Visited, typerep, Heap, V) ->
?TYPEREP_TUPLE_TAG -> {tuple, Arg({list, typerep})}; ?TYPEREP_TUPLE_TAG -> {tuple, Arg({list, typerep})};
?TYPEREP_VARIANT_TAG -> {variant, Arg({list, {list, typerep}})}; ?TYPEREP_VARIANT_TAG -> {variant, Arg({list, {list, typerep}})};
?TYPEREP_MAP_TAG -> {map, Arg(typerep), Arg1(typerep, 2)}; ?TYPEREP_MAP_TAG -> {map, Arg(typerep), Arg1(typerep, 2)};
?TYPEREP_FUN_TAG -> function; ?TYPEREP_FUN_TAG -> function
?TYPEREP_CONTRACT_BYTEARRAY_TAG -> contract_bytearray end.
end;
from_binary(_, contract_bytearray, Heap, V) ->
FateCodeSize = heap_word(Heap, V),
BitAddr = 8*(V+32),
<<_:BitAddr,Bytes:FateCodeSize/binary,_/binary>> = Heap,
{contract_bytearray, Bytes}.
map_binary_to_value(KeyType, ValType, N, Bin, Ptr) -> map_binary_to_value(KeyType, ValType, N, Bin, Ptr) ->
%% Avoid looping on bogus sizes %% Avoid looping on bogus sizes
+1 -1
View File
@@ -49,7 +49,7 @@ sources() ->
, "immediates" , "immediates"
, "names" , "names"
, "oracles" , "oracles"
, "meta" %% , "all_instructions"
]. ].
check_roundtrip(File) -> check_roundtrip(File) ->
+2 -11
View File
@@ -83,15 +83,6 @@ sources() ->
aeb_fate_data:make_variant([0,1,2,3,4,5], aeb_fate_data:make_variant([0,1,2,3,4,5],
3, {aeb_fate_data:make_boolean(true), 3, {aeb_fate_data:make_boolean(true),
aeb_fate_data:make_list(make_int_list(3)), aeb_fate_data:make_list(make_int_list(3)),
aeb_fate_data:make_string(<<"foo">>)}), aeb_fate_data:make_string(<<"foo">>)})
%% contract C =
%% type state = int
%% entrypoint init() = 2137
%% cb_+FFGA6Af6sHTrctrcNGwEa8MPei7iEHIjnxcsBzlA5IK0Yn11sCllP5E1kQfADcANwAaDoJvgggZAQM/jC8BEUTWRB8RaW5pdIIvAIU0LjMuMAD7u ].
aeb_fate_data:make_contract_bytearray(
<<248,81,70,3,160,31,234,193,211,173,203,107,112,209,176,17,175,12,61,232,187,
136,65,200,142,124,92,176,28,229,3,146,10,209,137,245,214,192,165,148,254,68,
214,68,31,0,55,0,55,0,26,14,130,111,130,8,25,1,3,63,140,47,1,17,68,214,68,31,
17,105,110,105,116,130,47,0,133,52,46,51,46,48,0>>)
].
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
ADD a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
ADDR_TO_STR a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+249
View File
@@ -0,0 +1,249 @@
;; CONTRACT all_instructions
;; Dont expect this contract to typecheck or run.
;; Just used to check assembler rountrip of all instructions.
FUNCTION foo () : {tuple, []}
RETURN
RETURNR a
CALL "foo"
CALL_R arg125 foo 0
CALL_T "foo"
CALL_TR arg245 foo 4711
CALL_GTR arg245 foo 0 100
CALL_GR arg245 foo 0 4711
JUMP 5514251025295783441695716053282666408426
JUMPIF arg196 0x12c651665
SWITCH_V2 a 63 33
SWITCH_V3 var4 0x1d61723dd 79 7
SWITCH_VN arg0 [1, 2, 3]
PUSH var80
DUPA
DUP a
POP a
STORE arg183 var225
INCA
INC a
DECA
DEC a
ADD a a a
SUB arg35 arg165 var74
MUL 44 35 "foo"
DIV 263838340369912686645632650718169038811 a a
MOD var113 arg80 arg207
POW a a a
LT a 78 var81
GT arg19 4729414120208894485838100532547810615352 var175
EQ 85 a arg164
ELT a arg226 a
EGT a 1 var250
NEQ a a a
AND var255 0x294a24f6 var189
OR (| [2,0] | 0 | ( (), (42) ) |) arg168 var107
NOT arg124 a
TUPLE var999 5019186157739257888756115213149493826410
ELEMENT arg148 var25 a
MAP_EMPTY a
MAP_LOOKUP a a a
MAP_LOOKUPD var112 arg35 a var112
MAP_UPDATE false a a a
MAP_DELETE arg180 a var1
MAP_MEMBER a { true => 4} 94
MAP_FROM_LIST () a
MAP_TO_LIST a { true => 4 }
MAP_SIZE a { true => 42 }
NIL arg91
IS_NIL a var6
CONS arg185 "foo" a
HD a var124
TL arg223 a
LENGTH var216 a
APPEND { 203961992615221001243597889146034217896 => 0x1f53a1843} 281217554184165828643225535776787296845 a
STR_JOIN a a 7144184027126178769820155907121270843348
INT_TO_STR var238 a
ADDR_TO_STR a arg216
STR_REVERSE a @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
STR_LENGTH a "foo"
INT_TO_ADDR arg127 var207
VARIANT a a 0x1f7b72200 a
VARIANT_TEST a arg217 a
VARIANT_ELEMENT a arg103 arg108
BITS_NONEA
BITS_NONE a
BITS_ALLA
BITS_ALL a
BITS_ALL_N a arg135
BITS_SET arg150 a { 0x1a715e2a6 => 3}
BITS_CLEAR arg98 a arg164
BITS_TEST a a (| [0,0,3] | 2 | (1, "foo", ()) |)
BITS_SUM a a
BITS_OR var20 var186 a
BITS_AND a 4 arg203
BITS_DIFF var200 arg247 var20
ADDRESS a
BALANCE a
ORIGIN arg216
CALLER a
GASPRICE arg119
BLOCKHASH a arg110
CALL_VALUE a
BENEFICIARY var163
TIMESTAMP a
GENERATION 242795038229506961431398379342231049652
MICROBLOCK arg43
DIFFICULTY var24
GASLIMIT arg220
GAS var35
LOG0 a
LOG1 arg86 arg208
LOG2 a a (| [0,1,3] | 2 | (1, "foo", ()) |)
LOG3 arg15 arg211 var139 arg44
LOG4 a a 9 a a
DEACTIVATE
SPEND @ak_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv var136
ORACLE_REGISTER arg29 48 ((| [0,1,3] | 2 | (1, "foo", ()) |)) arg65 { <> => false} <>
ORACLE_QUERY
ORACLE_RESPOND
ORACLE_EXTEND
ORACLE_GET_ANSWER
ORACLE_GET_QUESTION
ORACLE_QUERY_FEE
AENS_RESOLVE
AENS_PRECLAIM
AENS_CLAIM
AENS_UPDATE
AENS_TRANSFER
AENS_REVOKE
ECVERIFY
SHA3 a
SHA256 a
BLAKE2B a
ABORT a
EXIT var120
NOP
RETURNR ()
BALANCE_OTHER a arg0
SETELEMENT a 2 (1, "two", 3) 2
AUTH_TX_HASH
CONTRACT_TO_ADDRESS @ct_nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
AND a true true
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
APPEND a [1] [2]
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
BALANCE a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
BITS_ALL a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
BITS_ALL_N a 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
BITS_ALLA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
BITS_AND a <101010> <010101>
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
BITS_CLEAR a <101010> 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
BITS_DIFF a <101010> <010101>
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
BITS_NONE a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
BITS_NONEA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
BITS_OR a <101010> <010101>
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
BITS_SET a <101010> 2
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
BITS_SUM a <101010>
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
BITS_TEST a <101010> 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
BLAKE2B a "This is a string"
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
BLOCKHASH var3 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
CALLER var3
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
CONS a 42 []
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DECA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DIV a 1 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DUP 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DUPA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
EGT a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
ELEMENT a 0 (42)
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
ELT a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+5
View File
@@ -0,0 +1,5 @@
;; CONTRACT empty
FUNCTION run () : integer
RETURNR 0
+12
View File
@@ -0,0 +1,12 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
JUMP 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
EQ a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
GASPRICE var3
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
GT a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
HD a [42]
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
INC a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
INCA
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
INT_TO_ADDR a 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
INT_TO_STR a 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
IS_NIL a []
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
LENGTH a [42]
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
LT a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
MAP_DELETE a { 42 => true } 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
MAP_EMPTY a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
MAP_FROM_LIST a [ ( 42, true) ]
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
MAP_LOOKUP a { 42 => true } 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
MAP_LOOKUPD a { 42 => true } 41 false
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
MAP_MEMBER a { 42 => true } 42
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
MAP_UPDATE a { 42 => true } 42 false
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
-12
View File
@@ -1,12 +0,0 @@
;; CONTRACT meta
FUNCTION meta() : boolean
CREATE @cb_+PJGA6A4Fz4T2LHV5knITCldR3rqO7HrXO2zhOAR9JWNbhf8Q8C4xbhx/gx8JckANwAXfQBVACAAAP4vhlvZADcABwECgv5E1kQfADcBBzcACwAWMBReAHMAFjBvJFMAFjBvggOoFAAUABQSggABAz/+tIwWhAA3AAdTAAD+1jB5kAQ3AAcLAAD+6MRetgA3AQc3ABoGggABAz+4TS8GEQx8JclFY2FsbGVyX2lzX2NyZWF0b3IRL4Zb2Q1nZXQRRNZEHxFpbml0EbSMFoQdYmFsYW5jZRHWMHmQFXZhbHVlEejEXrYNc2V0gi8AhTQuMy4wAUqQ8s4= a 2137
CLONE a arg0 2137 false
CLONE_G a arg0 2137 10000 false
BYTECODE_HASH a a
BYTECODE_HASH a a
EQ a a a
RETURNR a
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
MOD a 1 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
MUL a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+4 -2
View File
@@ -4,8 +4,8 @@ FUNCTION preclaim(address, {bytes, 32}) : {tuple, []}
AENS_PRECLAIM #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== arg0 arg1 AENS_PRECLAIM #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== arg0 arg1
RETURNR {} RETURNR {}
FUNCTION claim(address, string, integer, integer) : {tuple, []} FUNCTION claim(address, string, integer) : {tuple, []}
AENS_CLAIM #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== arg0 arg1 arg2 arg3 AENS_CLAIM #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== arg0 arg1 arg2
RETURNR {} RETURNR {}
FUNCTION transfer(address, address, {bytes, 32}) : {tuple, []} FUNCTION transfer(address, address, {bytes, 32}) : {tuple, []}
@@ -19,3 +19,5 @@ FUNCTION revoke(address, {bytes, 32}) : {tuple, []}
FUNCTION resolve(string, string) : {variant, [{tuple, []}, {tuple, [address]}]} FUNCTION resolve(string, string) : {variant, [{tuple, []}, {tuple, [address]}]}
AENS_RESOLVE a arg0 arg1 'address AENS_RESOLVE a arg0 arg1 'address
RETURN RETURN
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
NEQ a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
NIL a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
NOT a true
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
OR a true true
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
ORIGIN var3
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
POP a
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
POW a 1 1
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+122
View File
@@ -0,0 +1,122 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
JUMP 1
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
SETELEMENT a 0 (42) 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
SHA256 a "This is a string"
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
STORE var3 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
STR_JOIN a "hello " "world!"
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
STR_REVERSE a "abba"
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; CONTRACT empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
SUB a 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+9 -5
View File
@@ -28,11 +28,15 @@ FUNCTION tailcall(integer) -> integer
INCA INCA
CALL_T "inc" CALL_T "inc"
;; FUNCTION remote_call(integer) : integer FUNCTION remote_call(integer) : integer
;; PUSH arg0 PUSH arg0
;; CALL_R remote.add_five {tuple, [integer]} integer 0 ;; typereps don't parse CALL_R remote.add_five 0
;; INCA INCA
;; RETURN RETURN
FUNCTION remote_tailcall(integer) : integer
PUSH arg0
CALL_TR remote add_five 0
;; Test the code from the shell ;; Test the code from the shell
;; _build/default/rel/aessembler/bin/aessembler console ;; _build/default/rel/aessembler/bin/aessembler console
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
TL a [42]
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH 0
JUMP 1
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
TUPLE a 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
VARIANT_ELEMENT a (| [1] | 0 | (42) |) 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
VARIANT a [0] 0 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0
+123
View File
@@ -0,0 +1,123 @@
;; Contract empty_loop
FUNCTION run (integer) : integer
STORE var0 arg0
PUSH (0)
JUMP 1
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
VARIANT_TEST a (| [0] | 0 | () |) 0
DEC var0
GT var1 var0 0
JUMPIF var1 1
RETURNR 0