Michelson: Simpler prim encoding
This commit is contained in:
parent
6e1be8efe3
commit
2364a66403
@ -384,223 +384,109 @@ let strings_of_prims expr =
|
|||||||
strip_locations (convert (root expr))
|
strip_locations (convert (root expr))
|
||||||
|
|
||||||
let prim_encoding =
|
let prim_encoding =
|
||||||
let to_int = function
|
|
||||||
| K_parameter -> 0
|
|
||||||
| K_return -> 1
|
|
||||||
| K_storage -> 2
|
|
||||||
| K_code -> 3
|
|
||||||
| D_False -> 4
|
|
||||||
| D_Item -> 5
|
|
||||||
| D_Left -> 6
|
|
||||||
| D_List -> 7
|
|
||||||
| D_Map -> 8
|
|
||||||
| D_None -> 9
|
|
||||||
| D_Pair -> 10
|
|
||||||
| D_Right -> 11
|
|
||||||
| D_Set -> 12
|
|
||||||
| D_Some -> 13
|
|
||||||
| D_True -> 14
|
|
||||||
| D_Unit -> 15
|
|
||||||
| I_H -> 16
|
|
||||||
| I_ABS -> 17
|
|
||||||
| I_ADD -> 18
|
|
||||||
| I_AMOUNT -> 19
|
|
||||||
| I_AND -> 20
|
|
||||||
| I_BALANCE -> 21
|
|
||||||
| I_CAR -> 22
|
|
||||||
| I_CDR -> 23
|
|
||||||
| I_CHECK_SIGNATURE -> 24
|
|
||||||
| I_COMPARE -> 25
|
|
||||||
| I_CONCAT -> 26
|
|
||||||
| I_CONS -> 27
|
|
||||||
| I_CREATE_ACCOUNT -> 28
|
|
||||||
| I_CREATE_CONTRACT -> 29
|
|
||||||
| I_DEFAULT_ACCOUNT -> 30
|
|
||||||
| I_DIP -> 31
|
|
||||||
| I_DROP -> 32
|
|
||||||
| I_DUP -> 33
|
|
||||||
| I_EDIV -> 34
|
|
||||||
| I_EMPTY_MAP -> 35
|
|
||||||
| I_EMPTY_SET -> 36
|
|
||||||
| I_EQ -> 37
|
|
||||||
| I_EXEC -> 38
|
|
||||||
| I_FAIL -> 39
|
|
||||||
| I_GE -> 40
|
|
||||||
| I_GET -> 41
|
|
||||||
| I_GT -> 42
|
|
||||||
| I_HASH_KEY -> 43
|
|
||||||
| I_IF -> 44
|
|
||||||
| I_IF_CONS -> 45
|
|
||||||
| I_IF_LEFT -> 46
|
|
||||||
| I_IF_NONE -> 47
|
|
||||||
| I_INT -> 48
|
|
||||||
| I_LAMBDA -> 49
|
|
||||||
| I_LE -> 50
|
|
||||||
| I_LEFT -> 51
|
|
||||||
| I_LOOP -> 52
|
|
||||||
| I_LSL -> 53
|
|
||||||
| I_LSR -> 54
|
|
||||||
| I_LT -> 55
|
|
||||||
| I_MANAGER -> 56
|
|
||||||
| I_MAP -> 57
|
|
||||||
| I_MEM -> 58
|
|
||||||
| I_MUL -> 59
|
|
||||||
| I_NEG -> 60
|
|
||||||
| I_NEQ -> 61
|
|
||||||
| I_NIL -> 62
|
|
||||||
| I_NONE -> 63
|
|
||||||
| I_NOT -> 64
|
|
||||||
| I_NOW -> 65
|
|
||||||
| I_OR -> 66
|
|
||||||
| I_PAIR -> 67
|
|
||||||
| I_PUSH -> 68
|
|
||||||
| I_REDUCE -> 69
|
|
||||||
| I_RIGHT -> 70
|
|
||||||
| I_SIZE -> 71
|
|
||||||
| I_SOME -> 72
|
|
||||||
| I_SOURCE -> 73
|
|
||||||
| I_STEPS_TO_QUOTA -> 74
|
|
||||||
| I_SUB -> 75
|
|
||||||
| I_SWAP -> 76
|
|
||||||
| I_TRANSFER_TOKENS -> 77
|
|
||||||
| I_UNIT -> 78
|
|
||||||
| I_UPDATE -> 79
|
|
||||||
| I_XOR -> 80
|
|
||||||
| I_ITER -> 81
|
|
||||||
| I_LOOP_LEFT -> 82
|
|
||||||
| T_bool -> 83
|
|
||||||
| T_contract -> 84
|
|
||||||
| T_int -> 85
|
|
||||||
| T_key -> 86
|
|
||||||
| T_key_hash -> 87
|
|
||||||
| T_lambda -> 88
|
|
||||||
| T_list -> 89
|
|
||||||
| T_map -> 90
|
|
||||||
| T_nat -> 91
|
|
||||||
| T_option -> 92
|
|
||||||
| T_or -> 93
|
|
||||||
| T_pair -> 94
|
|
||||||
| T_set -> 95
|
|
||||||
| T_signature -> 96
|
|
||||||
| T_string -> 97
|
|
||||||
| T_tez -> 98
|
|
||||||
| T_timestamp -> 99
|
|
||||||
| T_unit -> 100 in
|
|
||||||
let of_int_map = [|
|
|
||||||
K_parameter ;
|
|
||||||
K_return ;
|
|
||||||
K_storage ;
|
|
||||||
K_code ;
|
|
||||||
D_False ;
|
|
||||||
D_Item ;
|
|
||||||
D_Left ;
|
|
||||||
D_List ;
|
|
||||||
D_Map ;
|
|
||||||
D_None ;
|
|
||||||
D_Pair ;
|
|
||||||
D_Right ;
|
|
||||||
D_Set ;
|
|
||||||
D_Some ;
|
|
||||||
D_True ;
|
|
||||||
D_Unit ;
|
|
||||||
I_H ;
|
|
||||||
I_ABS ;
|
|
||||||
I_ADD ;
|
|
||||||
I_AMOUNT ;
|
|
||||||
I_AND ;
|
|
||||||
I_BALANCE ;
|
|
||||||
I_CAR ;
|
|
||||||
I_CDR ;
|
|
||||||
I_CHECK_SIGNATURE ;
|
|
||||||
I_COMPARE ;
|
|
||||||
I_CONCAT ;
|
|
||||||
I_CONS ;
|
|
||||||
I_CREATE_ACCOUNT ;
|
|
||||||
I_CREATE_CONTRACT ;
|
|
||||||
I_DEFAULT_ACCOUNT ;
|
|
||||||
I_DIP ;
|
|
||||||
I_DROP ;
|
|
||||||
I_DUP ;
|
|
||||||
I_EDIV ;
|
|
||||||
I_EMPTY_MAP ;
|
|
||||||
I_EMPTY_SET ;
|
|
||||||
I_EQ ;
|
|
||||||
I_EXEC ;
|
|
||||||
I_FAIL ;
|
|
||||||
I_GE ;
|
|
||||||
I_GET ;
|
|
||||||
I_GT ;
|
|
||||||
I_HASH_KEY ;
|
|
||||||
I_IF ;
|
|
||||||
I_IF_CONS ;
|
|
||||||
I_IF_LEFT ;
|
|
||||||
I_IF_NONE ;
|
|
||||||
I_INT ;
|
|
||||||
I_LAMBDA ;
|
|
||||||
I_LE ;
|
|
||||||
I_LEFT ;
|
|
||||||
I_LOOP ;
|
|
||||||
I_LSL ;
|
|
||||||
I_LSR ;
|
|
||||||
I_LT ;
|
|
||||||
I_MANAGER ;
|
|
||||||
I_MAP ;
|
|
||||||
I_MEM ;
|
|
||||||
I_MUL ;
|
|
||||||
I_NEG ;
|
|
||||||
I_NEQ ;
|
|
||||||
I_NIL ;
|
|
||||||
I_NONE ;
|
|
||||||
I_NOT ;
|
|
||||||
I_NOW ;
|
|
||||||
I_OR ;
|
|
||||||
I_PAIR ;
|
|
||||||
I_PUSH ;
|
|
||||||
I_REDUCE ;
|
|
||||||
I_RIGHT ;
|
|
||||||
I_SIZE ;
|
|
||||||
I_SOME ;
|
|
||||||
I_SOURCE ;
|
|
||||||
I_STEPS_TO_QUOTA ;
|
|
||||||
I_SUB ;
|
|
||||||
I_SWAP ;
|
|
||||||
I_TRANSFER_TOKENS ;
|
|
||||||
I_UNIT ;
|
|
||||||
I_UPDATE ;
|
|
||||||
I_XOR ;
|
|
||||||
I_ITER ;
|
|
||||||
I_LOOP_LEFT ;
|
|
||||||
T_bool ;
|
|
||||||
T_contract ;
|
|
||||||
T_int ;
|
|
||||||
T_key ;
|
|
||||||
T_key_hash ;
|
|
||||||
T_lambda ;
|
|
||||||
T_list ;
|
|
||||||
T_map ;
|
|
||||||
T_nat ;
|
|
||||||
T_option ;
|
|
||||||
T_or ;
|
|
||||||
T_pair ;
|
|
||||||
T_set ;
|
|
||||||
T_signature ;
|
|
||||||
T_string ;
|
|
||||||
T_tez ;
|
|
||||||
T_timestamp ;
|
|
||||||
T_unit |] in
|
|
||||||
let of_int i =
|
|
||||||
if Compare.Int.(i >= 0 || i <= 100) then
|
|
||||||
of_int_map.(i)
|
|
||||||
else
|
|
||||||
raise Data_encoding.No_case_matched in
|
|
||||||
let open Data_encoding in
|
let open Data_encoding in
|
||||||
let binary =
|
string_enum [
|
||||||
conv to_int of_int uint8 in
|
("parameter", K_parameter) ;
|
||||||
let json =
|
("return", K_return) ;
|
||||||
string_enum
|
("storage", K_storage) ;
|
||||||
(List.map (fun op -> string_of_prim op, op)
|
("code", K_code) ;
|
||||||
(Array.to_list of_int_map)) in
|
("False", D_False) ;
|
||||||
splitted ~json ~binary
|
("Item", D_Item) ;
|
||||||
|
("Left", D_Left) ;
|
||||||
|
("List", D_List) ;
|
||||||
|
("Map", D_Map) ;
|
||||||
|
("None", D_None) ;
|
||||||
|
("Pair", D_Pair) ;
|
||||||
|
("Right", D_Right) ;
|
||||||
|
("Set", D_Set) ;
|
||||||
|
("Some", D_Some) ;
|
||||||
|
("True", D_True) ;
|
||||||
|
("Unit", D_Unit) ;
|
||||||
|
("H", I_H) ;
|
||||||
|
("ABS", I_ABS) ;
|
||||||
|
("ADD", I_ADD) ;
|
||||||
|
("AMOUNT", I_AMOUNT) ;
|
||||||
|
("AND", I_AND) ;
|
||||||
|
("BALANCE", I_BALANCE) ;
|
||||||
|
("CAR", I_CAR) ;
|
||||||
|
("CDR", I_CDR) ;
|
||||||
|
("CHECK_SIGNATURE", I_CHECK_SIGNATURE) ;
|
||||||
|
("COMPARE", I_COMPARE) ;
|
||||||
|
("CONCAT", I_CONCAT) ;
|
||||||
|
("CONS", I_CONS) ;
|
||||||
|
("CREATE_ACCOUNT", I_CREATE_ACCOUNT) ;
|
||||||
|
("CREATE_CONTRACT", I_CREATE_CONTRACT) ;
|
||||||
|
("DEFAULT_ACCOUNT", I_DEFAULT_ACCOUNT) ;
|
||||||
|
("DIP", I_DIP) ;
|
||||||
|
("DROP", I_DROP) ;
|
||||||
|
("DUP", I_DUP) ;
|
||||||
|
("EDIV", I_EDIV) ;
|
||||||
|
("EMPTY_MAP", I_EMPTY_MAP) ;
|
||||||
|
("EMPTY_SET", I_EMPTY_SET) ;
|
||||||
|
("EQ", I_EQ) ;
|
||||||
|
("EXEC", I_EXEC) ;
|
||||||
|
("FAIL", I_FAIL) ;
|
||||||
|
("GE", I_GE) ;
|
||||||
|
("GET", I_GET) ;
|
||||||
|
("GT", I_GT) ;
|
||||||
|
("HASH_KEY", I_HASH_KEY) ;
|
||||||
|
("IF", I_IF) ;
|
||||||
|
("IF_CONS", I_IF_CONS) ;
|
||||||
|
("IF_LEFT", I_IF_LEFT) ;
|
||||||
|
("IF_NONE", I_IF_NONE) ;
|
||||||
|
("INT", I_INT) ;
|
||||||
|
("LAMBDA", I_LAMBDA) ;
|
||||||
|
("LE", I_LE) ;
|
||||||
|
("LEFT", I_LEFT) ;
|
||||||
|
("LOOP", I_LOOP) ;
|
||||||
|
("LSL", I_LSL) ;
|
||||||
|
("LSR", I_LSR) ;
|
||||||
|
("LT", I_LT) ;
|
||||||
|
("MANAGER", I_MANAGER) ;
|
||||||
|
("MAP", I_MAP) ;
|
||||||
|
("MEM", I_MEM) ;
|
||||||
|
("MUL", I_MUL) ;
|
||||||
|
("NEG", I_NEG) ;
|
||||||
|
("NEQ", I_NEQ) ;
|
||||||
|
("NIL", I_NIL) ;
|
||||||
|
("NONE", I_NONE) ;
|
||||||
|
("NOT", I_NOT) ;
|
||||||
|
("NOW", I_NOW) ;
|
||||||
|
("OR", I_OR) ;
|
||||||
|
("PAIR", I_PAIR) ;
|
||||||
|
("PUSH", I_PUSH) ;
|
||||||
|
("REDUCE", I_REDUCE) ;
|
||||||
|
("RIGHT", I_RIGHT) ;
|
||||||
|
("SIZE", I_SIZE) ;
|
||||||
|
("SOME", I_SOME) ;
|
||||||
|
("SOURCE", I_SOURCE) ;
|
||||||
|
("STEPS_TO_QUOTA", I_STEPS_TO_QUOTA) ;
|
||||||
|
("SUB", I_SUB) ;
|
||||||
|
("SWAP", I_SWAP) ;
|
||||||
|
("TRANSFER_TOKENS", I_TRANSFER_TOKENS) ;
|
||||||
|
("UNIT", I_UNIT) ;
|
||||||
|
("UPDATE", I_UPDATE) ;
|
||||||
|
("XOR", I_XOR) ;
|
||||||
|
("ITER", I_ITER) ;
|
||||||
|
("LOOP_LEFT", I_LOOP_LEFT) ;
|
||||||
|
("bool", T_bool) ;
|
||||||
|
("contract", T_contract) ;
|
||||||
|
("int", T_int) ;
|
||||||
|
("key", T_key) ;
|
||||||
|
("key_hash", T_key_hash) ;
|
||||||
|
("lambda", T_lambda) ;
|
||||||
|
("list", T_list) ;
|
||||||
|
("map", T_map) ;
|
||||||
|
("nat", T_nat) ;
|
||||||
|
("option", T_option) ;
|
||||||
|
("or", T_or) ;
|
||||||
|
("pair", T_pair) ;
|
||||||
|
("set", T_set) ;
|
||||||
|
("signature", T_signature) ;
|
||||||
|
("string", T_string) ;
|
||||||
|
("tez", T_tez) ;
|
||||||
|
("timestamp", T_timestamp) ;
|
||||||
|
("unit", T_unit) ]
|
||||||
|
|
||||||
let () =
|
let () =
|
||||||
register_error_kind
|
register_error_kind
|
||||||
|
Loading…
Reference in New Issue
Block a user