diff --git a/CoqOfPython/CoqOfPython.v b/CoqOfPython/CoqOfPython.v index e7d3d63..af03df8 100644 --- a/CoqOfPython/CoqOfPython.v +++ b/CoqOfPython/CoqOfPython.v @@ -64,6 +64,15 @@ Module Globals. Definition t : Set := string. End Globals. +Module Klass. + Record t {Value M : Set} : Set := { + bases : list (Globals.t * string); + class_methods : list (string * (Value -> Value -> M)); + methods : list (string * (Value -> Value -> M)); + }. + Arguments t : clear implicits. +End Klass. + Module Data. (** This type is not accessible directly in Python, as only object are. We use this type internally to represent integers, closures, ... that can be made accessible in a special @@ -81,10 +90,7 @@ Module Data. | Set_ (items : list Value) | Dict (dict : Dict.t Value) | Closure {Value M : Set} (f : Value -> Value -> M) - | Klass {Value M : Set} - (bases : list (Globals.t * string)) - (class_methods : list (string * (Value -> Value -> M))) - (methods : list (string * (Value -> Value -> M))). + | Klass {Value M : Set} (klass : Klass.t Value M). Arguments Ellipsis {_}. Arguments Bool {_}. Arguments Integer {_}. @@ -106,19 +112,32 @@ Module Object. Arguments t : clear implicits. Arguments Build_t {_}. - Fixpoint fields_of_optional_dict {Value : Set} (optional_dict : list (string * option Value)) : + Fixpoint fields_of_dict_option {Value : Set} (optional_dict : list (string * option Value)) : Dict.t Value := match optional_dict with | [] => [] | (name, Some value) :: optional_dict => - Dict.write (fields_of_optional_dict optional_dict) name value - | (_, None) :: optional_dict => fields_of_optional_dict optional_dict + Dict.write (fields_of_dict_option optional_dict) name value + | (_, None) :: optional_dict => fields_of_dict_option optional_dict end. - Definition make {Value : Set} (optional_dict : list (string * option Value)) : t Value := + Definition make_option {Value : Set} (optional_dict : list (string * option Value)) : t Value := {| internal := None; - fields := fields_of_optional_dict optional_dict; + fields := fields_of_dict_option optional_dict; + |}. + + Fixpoint fields_of_dict {Value : Set} (dict : list (string * Value)) : Dict.t Value := + match dict with + | [] => [] + | (name, value) :: dict => + Dict.write (fields_of_dict dict) name value + end. + + Definition make {Value : Set} (dict : list (string * Value)) : t Value := + {| + internal := None; + fields := fields_of_dict dict; |}. (** When an object is just a wrapper around the [Data.t] type. *) @@ -131,11 +150,15 @@ End Object. Module Pointer. Module Mutable. + Module Kind. + Inductive t : Set := + | Stack (index : nat) + | Heap {Address : Set} (address : Address). + End Kind. + Inductive t (Value : Set) : Set := - | Stack {A : Set} (index : nat) (to_object : A -> Object.t Value) - | Heap {Address A : Set} (address : Address) (to_object : A -> Object.t Value). - Arguments Stack {_ _}. - Arguments Heap {_ _ _}. + | Make {A : Set} (kind : Kind.t) (to_object : A -> Object.t Value). + Arguments Make {_ _}. End Mutable. Inductive t (Value : Set) : Set := @@ -143,6 +166,13 @@ Module Pointer. | Mutable (mutable : Mutable.t Value). Arguments Imm {_}. Arguments Mutable {_}. + + Definition stack {Value A : Set} (index : nat) (to_object : A -> Object.t Value) : t Value := + Mutable (Mutable.Make (Mutable.Kind.Stack index) to_object). + + Definition heap {Value A Address : Set} (address : Address) (to_object : A -> Object.t Value) : + t Value := + Mutable (Mutable.Make (Mutable.Kind.Heap address) to_object). End Pointer. Module Value. @@ -241,6 +271,11 @@ Definition IsImported (globals : Globals.t) (import : Globals.t) (name : string) IsInGlobals import name value -> IsInGlobals globals name value. +(** The `builtins` module is accessible from anywhere. *) +Axiom builtins_is_imported : + forall (globals : Globals.t) (name : string), + IsImported globals "builtins" name. + Module M. Definition pure (v : Value.t) : M := LowM.Pure (inl v). @@ -507,31 +542,10 @@ Module Compare. Parameter not_in : Value.t -> Value.t -> M. End Compare. -(** ** Builtins *) -Module builtins. - Definition make_klass - (bases : list (string * string)) - (class_methods : list (string * (Value.t -> Value.t -> M))) - (methods : list (string * (Value.t -> Value.t -> M))) : - Value.t := - Value.Make "builtins" "type" (Pointer.Imm (Object.wrapper ( - Data.Klass bases class_methods methods - ))). - - Definition type : Value.t := - make_klass [] [] []. - Axiom type_in_globals : IsInGlobals "builtins" "type" type. - - Definition int : Value.t := - make_klass [] [] []. - Axiom int_in_globals : IsInGlobals "builtins" "int" int. - - Definition str : Value.t := - make_klass [] [] []. - Axiom str_in_globals : IsInGlobals "builtins" "str" str. -End builtins. - Parameter make_list_concat : list Value.t -> M. Definition make_function (f : Value.t -> Value.t -> M) : Value.t := Value.Make "builtins" "function" (Pointer.Imm (Object.wrapper (Data.Closure f))). + +Definition make_klass (klass : Klass.t Value.t M) : Value.t := + Value.Make "builtins" "type" (Pointer.Imm (Object.wrapper (Data.Klass klass))). diff --git a/CoqOfPython/builtins.v b/CoqOfPython/builtins.v new file mode 100644 index 0000000..e2a293e --- /dev/null +++ b/CoqOfPython/builtins.v @@ -0,0 +1,30 @@ +Require Import CoqOfPython.CoqOfPython. + +Definition globals : Globals.t := "builtins". + +Definition type : Value.t := + make_klass {| + Klass.bases := []; + Klass.class_methods := []; + Klass.methods := []; + |}. +Axiom type_in_globals : IsInGlobals "builtins" "type" type. + +Definition int : Value.t := + make_klass {| + Klass.bases := []; + Klass.class_methods := []; + Klass.methods := []; + |}. +Axiom int_in_globals : IsInGlobals "builtins" "int" int. + +Definition str : Value.t := + make_klass {| + Klass.bases := []; + Klass.class_methods := []; + Klass.methods := []; + |}. +Axiom str_in_globals : IsInGlobals "builtins" "str" str. + +Parameter len : Value.t -> Value.t -> M. +Axiom len_in_globals : IsInGlobals globals "len" (make_function len). diff --git a/CoqOfPython/ethereum/arrow_glacier/blocks.v b/CoqOfPython/ethereum/arrow_glacier/blocks.v index 7e91936..33fae8a 100644 --- a/CoqOfPython/ethereum/arrow_glacier/blocks.v +++ b/CoqOfPython/ethereum/arrow_glacier/blocks.v @@ -50,42 +50,38 @@ Axiom ethereum_arrow_glacier_fork_types_imports_Root : Axiom ethereum_arrow_glacier_transactions_imports_LegacyTransaction : IsImported globals "ethereum.arrow_glacier.transactions" "LegacyTransaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/arrow_glacier/fork.v b/CoqOfPython/ethereum/arrow_glacier/fork.v index 0231cd1..ef83d4b 100644 --- a/CoqOfPython/ethereum/arrow_glacier/fork.v +++ b/CoqOfPython/ethereum/arrow_glacier/fork.v @@ -216,15 +216,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1267,15 +1266,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/arrow_glacier/fork_types.v b/CoqOfPython/ethereum/arrow_glacier/fork_types.v index 247c71e..634e11e 100644 --- a/CoqOfPython/ethereum/arrow_glacier/fork_types.v +++ b/CoqOfPython/ethereum/arrow_glacier/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/arrow_glacier/state.v b/CoqOfPython/ethereum/arrow_glacier/state.v index ee0b067..31a4df1 100644 --- a/CoqOfPython/ethereum/arrow_glacier/state.v +++ b/CoqOfPython/ethereum/arrow_glacier/state.v @@ -76,15 +76,14 @@ Axiom ethereum_arrow_glacier_trie_imports_trie_get : Axiom ethereum_arrow_glacier_trie_imports_trie_set : IsImported globals "ethereum.arrow_glacier.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/arrow_glacier/transactions.v b/CoqOfPython/ethereum/arrow_glacier/transactions.v index 9fda9f0..5f91272 100644 --- a/CoqOfPython/ethereum/arrow_glacier/transactions.v +++ b/CoqOfPython/ethereum/arrow_glacier/transactions.v @@ -67,35 +67,32 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/arrow_glacier/trie.v b/CoqOfPython/ethereum/arrow_glacier/trie.v index 3777ab8..76a40aa 100644 --- a/CoqOfPython/ethereum/arrow_glacier/trie.v +++ b/CoqOfPython/ethereum/arrow_glacier/trie.v @@ -157,35 +157,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -485,15 +482,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/__init__.v b/CoqOfPython/ethereum/arrow_glacier/vm/__init__.v index 12056c6..96fa998 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/__init__.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/exceptions.v b/CoqOfPython/ethereum/arrow_glacier/vm/exceptions.v index ed3e40a..f8a7429 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/exceptions.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,80 +95,81 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/gas.v b/CoqOfPython/ethereum/arrow_glacier/vm/gas.v index 73fe5f7..0822083 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/gas.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/gas.v @@ -446,25 +446,23 @@ Definition GAS_WARM_ACCESS : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/__init__.v b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/__init__.v index 1309d4b..c7a87e7 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_arrow_glacier_vm_instructions_imports_storage : Axiom ethereum_arrow_glacier_vm_instructions_imports_system : IsImported globals "ethereum.arrow_glacier.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v b/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v index dfe783a..217ea7d 100644 --- a/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/arrow_glacier/vm/interpreter.v @@ -140,15 +140,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/base_types.v b/CoqOfPython/ethereum/base_types.v index c19cb89..395bca1 100644 --- a/CoqOfPython/ethereum/base_types.v +++ b/CoqOfPython/ethereum/base_types.v @@ -50,15 +50,15 @@ Axiom typing_imports_TypeVar : Axiom typing_imports_runtime_checkable : IsImported globals "typing" "runtime_checkable". -Definition SlottedFreezable : Value.t := - builtins.make_klass - [(globals, "Protocol")] - [ - - ] - [ - - ]. +Definition SlottedFreezable : Value.t := make_klass {| + Klass.bases := [ + (globals, "Protocol") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition U255_CEIL_VALUE : Value.t := M.run ltac:(M.monadic ( BinOp.pow (| @@ -91,1436 +91,1438 @@ Smallest value that requires 257 bits to represent. Used when converting a [`U256.to_signed`]: ref:ethereum.base_types.U256.to_signed ". -Definition Uint : Value.t := - builtins.make_klass - [(globals, "int")] - [ - ( - "from_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition Uint : Value.t := make_klass {| + Klass.bases := [ + (globals, "int") + ]; + Klass.class_methods := [ + ( + "from_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into an arbitrarily sized unsigned integer from its big endian representation. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "from_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "from_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into an arbitrarily sized unsigned integer from its little endian representation. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "little" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "value" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "little" - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "value" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "value" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "value" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "TypeError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "value" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_)) - ); - ( - "__radd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "TypeError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "value" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_)) + ); + ( + "__radd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "left" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__iadd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__sub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| Compare.lt (| M.get_name (| globals, locals_stack, "right" |), Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] + ltac:(M.monadic ( + Compare.lt (| + M.get_name (| globals, locals_stack, "self" |), + M.get_name (| globals, locals_stack, "right" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__iadd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__sub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "self" |), - M.get_name (| globals, locals_stack, "right" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rsub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rsub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "self" |), - M.get_name (| globals, locals_stack, "left" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "self" |), + M.get_name (| globals, locals_stack, "left" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__isub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__sub__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__isub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__sub__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__floordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__floordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__floordiv__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rfloordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__floordiv__" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rfloordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rfloordiv__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ifloordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__floordiv__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rfloordiv__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ifloordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__floordiv__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mod__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mod__" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rmod__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mod__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__divmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rmod__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__divmod__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mod__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__divmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - let _ := M.return_ (| - make_tuple [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 0 - |) - ], + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |); M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__divmod__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + let _ := M.return_ (| + make_tuple [ M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 0 + |) + ], + make_dict [] + |); M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 1 + |) + ], + make_dict [] + |) ] + |) in + M.pure Constant.None_)) + ); + ( + "__rdivmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 1 - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) ] - |) in - M.pure Constant.None_)) - ); - ( - "__rdivmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rdivmod__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - let _ := M.return_ (| - make_tuple [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rdivmod__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + let _ := M.return_ (| + make_tuple [ M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 0 + |) + ], + make_dict [] + |); M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 1 + |) + ], + make_dict [] + |) ] + |) in + M.pure Constant.None_)) + ); + ( + "__pow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.is_not (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.None_ + |), + (* then *) + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "modulo" |); + M.get_name (| globals, locals_stack, "int" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "modulo" |), Constant.int 0 - |) - ], - make_dict [] - |); M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 1 - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) ] - |) in - M.pure Constant.None_)) - ); - ( - "__pow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.is_not (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.None_ - |), - (* then *) - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "modulo" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), make_list [ + M.get_name (| globals, locals_stack, "self" |); M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "modulo" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rpow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left"; "modulo" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.is_not (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.None_ + |), + (* then *) + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "modulo" |) + M.get_name (| globals, locals_stack, "modulo" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rpow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left"; "modulo" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.is_not (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.None_ - |), - (* then *) - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "modulo" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rpow__" |), make_list [ + M.get_name (| globals, locals_stack, "self" |); M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "modulo" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rpow__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "modulo" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ipow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ipow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "modulo" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__xor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "modulo" |) + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__xor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__xor__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rxor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__xor__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rxor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rxor__" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rxor__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ixor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__xor__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_be_bytes32", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ixor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__xor__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_be_bytes32", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this arbitrarily sized unsigned integer into its big endian representation with exactly 32 bytes. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "Bytes32" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - Constant.int 32; - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "Bytes32" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + Constant.int 32; + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this arbitrarily sized unsigned integer into its big endian representation, without padding. " in - let _ := M.assign_local (| - "bit_length" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "byte_length" , - BinOp.floor_div (| - BinOp.add (| - M.get_name (| globals, locals_stack, "bit_length" |), - Constant.int 7 - |), - Constant.int 8 - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "byte_length" |); - Constant.str "big" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "number_bytes" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.assign_local (| + "bit_length" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "byte_length" , + BinOp.floor_div (| + BinOp.add (| + M.get_name (| globals, locals_stack, "bit_length" |), + Constant.int 7 + |), + Constant.int 8 + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "byte_length" |); + Constant.str "big" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "number_bytes" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this arbitrarily sized unsigned integer into its little endian representation, without padding. " in - let _ := - (* if *) - M.if_then_else (| - Compare.is (| - M.get_name (| globals, locals_stack, "number_bytes" |), - Constant.None_ - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "bit_length" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "number_bytes" , - BinOp.floor_div (| - BinOp.add (| - M.get_name (| globals, locals_stack, "bit_length" |), - Constant.int 7 - |), - Constant.int 8 - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "number_bytes" |); - Constant.str "little" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + let _ := + (* if *) + M.if_then_else (| + Compare.is (| + M.get_name (| globals, locals_stack, "number_bytes" |), + Constant.None_ + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "bit_length" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "number_bytes" , + BinOp.floor_div (| + BinOp.add (| + M.get_name (| globals, locals_stack, "bit_length" |), + Constant.int 7 + |), + Constant.int 8 + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "number_bytes" |); + Constant.str "little" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. Definition T : Value.t := M.run ltac:(M.monadic ( M.call (| @@ -1532,168 +1534,168 @@ Definition T : Value.t := M.run ltac:(M.monadic ( |) )). -Definition FixedUint : Value.t := - builtins.make_klass - [(globals, "int")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "value" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "value" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "TypeError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "value" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "value" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_)) - ); - ( - "__radd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), +Definition FixedUint : Value.t := make_klass {| + Klass.bases := [ + (globals, "int") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "value" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "left" |) + M.get_name (| globals, locals_stack, "value" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "TypeError" |), + make_list [], make_dict [] - |) - |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "result" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "value" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "value" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_)) + ); + ( + "__radd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_name (| globals, locals_stack, "result" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "wrapping_add", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "result" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "wrapping_add", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.str " Return a new instance containing `self + right (mod N)`. Passing a `right` value greater than [`MAX_VALUE`] or less than zero @@ -1702,178 +1704,178 @@ Definition FixedUint : Value.t := [`MAX_VALUE`]: ref:ethereum.base_types.FixedUint.MAX_VALUE " in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - BinOp.bit_and (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__iadd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__sub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - BoolOp.or (| - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |), - ltac:(M.monadic ( - Compare.lt (| - M.get_name (| globals, locals_stack, "self" |), - M.get_name (| globals, locals_stack, "right" |) - |) - )) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + BinOp.bit_and (| M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), make_list [ M.get_name (| globals, locals_stack, "self" |); M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__iadd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__sub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "wrapping_sub", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + BoolOp.or (| + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |), + ltac:(M.monadic ( + Compare.lt (| + M.get_name (| globals, locals_stack, "self" |), + M.get_name (| globals, locals_stack, "right" |) + |) + )) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "wrapping_sub", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.str " Return a new instance containing `self - right (mod N)`. Passing a `right` value greater than [`MAX_VALUE`] or less than zero @@ -1882,254 +1884,254 @@ Definition FixedUint : Value.t := [`MAX_VALUE`]: ref:ethereum.base_types.FixedUint.MAX_VALUE " in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - BinOp.bit_and (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rsub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - BoolOp.or (| - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "self" |), - M.get_name (| globals, locals_stack, "left" |) - |) - )) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + BinOp.bit_and (| M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), make_list [ M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__isub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__sub__" |), + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rsub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + ltac:(M.monadic ( + BoolOp.or (| + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "self" |), + M.get_name (| globals, locals_stack, "left" |) + |) + )) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__isub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__sub__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "result" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "wrapping_mul", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "result" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "wrapping_mul", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.str " Return a new instance containing `self * right (mod N)`. Passing a `right` value greater than [`MAX_VALUE`] or less than zero @@ -2138,771 +2140,771 @@ Definition FixedUint : Value.t := [`MAX_VALUE`]: ref:ethereum.base_types.FixedUint.MAX_VALUE " in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - BinOp.bit_and (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__floordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + BinOp.bit_and (| M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__floordiv__" |), + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), make_list [ M.get_name (| globals, locals_stack, "self" |); M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__floordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rfloordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rfloordiv__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ifloordiv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__floordiv__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__floordiv__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rfloordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mod__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rmod__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mod__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__divmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rfloordiv__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.call (| - M.get_name (| globals, locals_stack, "super" |), - make_list [ - M.get_name (| globals, locals_stack, "FixedUint" |); - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |), "__divmod__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ifloordiv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__floordiv__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - let _ := M.return_ (| - make_tuple [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 0 + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) - ], + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], make_dict [] - |); M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mod__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 1 - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) ] - |) in - M.pure Constant.None_)) - ); - ( - "__rdivmod__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.call (| - M.get_name (| globals, locals_stack, "super" |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rmod__" |), make_list [ - M.get_name (| globals, locals_stack, "FixedUint" |); - M.get_name (| globals, locals_stack, "self" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |), "__rdivmod__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mod__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__divmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "left" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - let _ := M.return_ (| - make_tuple [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 0 + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.call (| + M.get_name (| globals, locals_stack, "super" |), + make_list [ + M.get_name (| globals, locals_stack, "FixedUint" |); + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |); M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |), "__divmod__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + let _ := M.return_ (| + make_tuple [ M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 0 + |) + ], + make_dict [] + |); M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 1 + |) + ], + make_dict [] + |) ] + |) in + M.pure Constant.None_)) + ); + ( + "__rdivmod__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_subscript (| - M.get_name (| globals, locals_stack, "result" |), - Constant.int 1 - |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) ] - |) in - M.pure Constant.None_)) - ); - ( - "__pow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.is_not (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.None_ + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "modulo" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "modulo" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.call (| + M.get_name (| globals, locals_stack, "super" |), make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "modulo" |) + M.get_name (| globals, locals_stack, "FixedUint" |); + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) - |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - BoolOp.or (| + |), "__rdivmod__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + let _ := M.return_ (| + make_tuple [ M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 0 + |) + ], + make_dict [] + |); M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "result" |), + Constant.int 1 + |) + ], + make_dict [] + |) ] + |) in + M.pure Constant.None_)) + ); + ( + "__pow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.is_not (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.None_ + |), + (* then *) + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "modulo" |); + M.get_name (| globals, locals_stack, "int" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.int 0 + |), + ltac:(M.monadic ( Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), + M.get_name (| globals, locals_stack, "modulo" |), M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "result" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.get_name (| globals, locals_stack, "result" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "wrapping_pow", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "modulo" |) + ], + make_dict [] + |) + |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + BoolOp.or (| + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "result" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.get_name (| globals, locals_stack, "result" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "wrapping_pow", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + ltac:(M.monadic ( + let _ := Constant.str " Return a new instance containing `self ** right (mod modulo)`. If omitted, `modulo` defaults to `Uint(self.MAX_VALUE) + 1`. @@ -2913,1196 +2915,1203 @@ Definition FixedUint : Value.t := [`MAX_VALUE`]: ref:ethereum.base_types.FixedUint.MAX_VALUE " in - let _ := - (* if *) - M.if_then_else (| - Compare.is_not (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.None_ - |), - (* then *) - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "modulo" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "modulo" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := + (* if *) + M.if_then_else (| + Compare.is_not (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.None_ + |), + (* then *) + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "modulo" |); + M.get_name (| globals, locals_stack, "int" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "modulo" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - BinOp.bit_and (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "modulo" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rpow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left"; "modulo" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.is_not (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.None_ - |), - (* then *) - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "modulo" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "modulo" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "modulo" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + BinOp.bit_and (| M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rpow__" |), + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), make_list [ M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "right" |); M.get_name (| globals, locals_stack, "modulo" |) ], make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ipow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rpow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left"; "modulo" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.is_not (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.None_ + |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "modulo" |); + M.get_name (| globals, locals_stack, "int" |) + ], + make_dict [] + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "modulo" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "modulo" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "modulo" |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__and__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__and__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__or__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rpow__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "modulo" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ipow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right"; "modulo" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "modulo" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__and__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__or__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__xor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__and__" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "right" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "right" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__or__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__xor__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rxor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__or__" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.or (| - Compare.lt (| - M.get_name (| globals, locals_stack, "left" |), - Constant.int 0 - |), - ltac:(M.monadic ( - Compare.gt (| - M.get_name (| globals, locals_stack, "left" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "OverflowError" |), - make_list [], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__xor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rxor__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ixor__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__xor__" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "right" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "right" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__xor__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rxor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__invert__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); - BinOp.bit_and (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__invert__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.or (| + Compare.lt (| + M.get_name (| globals, locals_stack, "left" |), + Constant.int 0 + |), + ltac:(M.monadic ( + Compare.gt (| + M.get_name (| globals, locals_stack, "left" |), M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rshift__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "shift_by" ] in + )) + |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "OverflowError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rxor__" |), make_list [ - M.get_name (| globals, locals_stack, "shift_by" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ixor__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__xor__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__invert__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + BinOp.bit_and (| M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rshift__" |), + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__invert__" |), make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "shift_by" |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rshift__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "shift_by" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "shift_by" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__class__" |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rshift__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "shift_by" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this unsigned integer into its big endian representation, omitting leading zero bytes. " in - let _ := M.assign_local (| - "bit_length" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "byte_length" , - BinOp.floor_div (| - BinOp.add (| - M.get_name (| globals, locals_stack, "bit_length" |), - Constant.int 7 - |), - Constant.int 8 - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "byte_length" |); - Constant.str "big" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + let _ := M.assign_local (| + "bit_length" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "byte_length" , + BinOp.floor_div (| + BinOp.add (| + M.get_name (| globals, locals_stack, "bit_length" |), + Constant.int 7 + |), + Constant.int 8 + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "byte_length" |); + Constant.str "big" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. -Definition U256 : Value.t := - builtins.make_klass - [(globals, "FixedUint")] - [ - ( - "from_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition U256 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedUint") + ]; + Klass.class_methods := [ + ( + "from_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into a fixed sized unsigned integer from its big endian representation. " in - let _ := - (* if *) - M.if_then_else (| - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |) - ], - make_dict [] - |), - Constant.int 32 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [], + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |) + ], make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "from_signed", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "value" ] in + |), + Constant.int 32 + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "from_signed", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "value" ] in + ltac:(M.monadic ( + let _ := Constant.str " Creates an unsigned integer representing `value` using two's complement. " in - let _ := - (* if *) - M.if_then_else (| - Compare.gt_e (| - M.get_name (| globals, locals_stack, "value" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.get_name (| globals, locals_stack, "value" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - BinOp.bit_and (| - M.get_name (| globals, locals_stack, "value" |), - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MAX_VALUE" |) - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "to_be_bytes32", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + let _ := + (* if *) + M.if_then_else (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "value" |), + Constant.int 0 + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.get_name (| globals, locals_stack, "value" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + BinOp.bit_and (| + M.get_name (| globals, locals_stack, "value" |), + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MAX_VALUE" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "to_be_bytes32", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this 256-bit unsigned integer into its big endian representation with exactly 32 bytes. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "Bytes32" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - Constant.int 32; - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_signed", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "Bytes32" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + Constant.int 32; + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_signed", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Decodes a signed integer from its two's complement representation. " in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |), - Constant.int 256 + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "int" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - BinOp.sub (| + Constant.int 256 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| M.call (| M.get_name (| globals, locals_stack, "int" |), make_list [ M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |), - M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |) - |) - |) in - M.pure Constant.None_)) - ) - ]. + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + BinOp.sub (| + M.call (| + M.get_name (| globals, locals_stack, "int" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |), + M.get_name (| globals, locals_stack, "U256_CEIL_VALUE" |) + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. (* At top_level_stmt: unsupported node type: Assign *) -Definition U32 : Value.t := - builtins.make_klass - [(globals, "FixedUint")] - [ - ( - "from_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition U32 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedUint") + ]; + Klass.class_methods := [ + ( + "from_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into an arbitrarily sized unsigned integer from its little endian representation. " in - let _ := - (* if *) - M.if_then_else (| - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |) - ], - make_dict [] - |), - Constant.int 4 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [], + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |) + ], make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "little" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "to_le_bytes4", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |), + Constant.int 4 + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "little" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "to_le_bytes4", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this fixed sized unsigned integer into its little endian representation, with exactly 4 bytes. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "Bytes4" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - Constant.int 4; - Constant.str "little" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "Bytes4" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + Constant.int 4; + Constant.str "little" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this fixed sized unsigned integer into its little endian representation, in the fewest bytes possible. " in - let _ := M.assign_local (| - "bit_length" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "byte_length" , - BinOp.floor_div (| - BinOp.add (| - M.get_name (| globals, locals_stack, "bit_length" |), - Constant.int 7 - |), - Constant.int 8 - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "byte_length" |); - Constant.str "little" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + let _ := M.assign_local (| + "bit_length" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "byte_length" , + BinOp.floor_div (| + BinOp.add (| + M.get_name (| globals, locals_stack, "bit_length" |), + Constant.int 7 + |), + Constant.int 8 + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "byte_length" |); + Constant.str "little" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. (* At top_level_stmt: unsupported node type: Assign *) -Definition U64 : Value.t := - builtins.make_klass - [(globals, "FixedUint")] - [ - ( - "from_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition U64 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedUint") + ]; + Klass.class_methods := [ + ( + "from_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into an arbitrarily sized unsigned integer from its little endian representation. " in - let _ := - (* if *) - M.if_then_else (| - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |) - ], - make_dict [] - |), - Constant.int 8 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [], + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |) + ], make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "little" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "from_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + |), + Constant.int 8 + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "little" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "from_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into an unsigned 64 bit integer from its big endian representation. " in - let _ := - (* if *) - M.if_then_else (| - Compare.gt (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |) - ], - make_dict [] - |), - Constant.int 8 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [], + let _ := + (* if *) + M.if_then_else (| + Compare.gt (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |) + ], make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "to_le_bytes8", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |), + Constant.int 8 + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "to_le_bytes8", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this fixed sized unsigned integer into its little endian representation, with exactly 8 bytes. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "Bytes8" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - Constant.int 8; - Constant.str "little" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_le_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "Bytes8" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + Constant.int 8; + Constant.str "little" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_le_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this fixed sized unsigned integer into its little endian representation, in the fewest bytes possible. " in - let _ := M.assign_local (| - "bit_length" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "byte_length" , - BinOp.floor_div (| - BinOp.add (| - M.get_name (| globals, locals_stack, "bit_length" |), - Constant.int 7 - |), - Constant.int 8 - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "byte_length" |); - Constant.str "little" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + let _ := M.assign_local (| + "bit_length" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "bit_length" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "byte_length" , + BinOp.floor_div (| + BinOp.add (| + M.get_name (| globals, locals_stack, "bit_length" |), + Constant.int 7 + |), + Constant.int 8 + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + M.get_name (| globals, locals_stack, "byte_length" |); + Constant.str "little" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. (* At top_level_stmt: unsupported node type: Assign *) @@ -4116,154 +4125,155 @@ Definition B : Value.t := M.run ltac:(M.monadic ( |) )). -Definition FixedBytes : Value.t := - builtins.make_klass - [(globals, "bytes")] - [ - - ] - [ - ( - "__new__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition FixedBytes : Value.t := make_klass {| + Klass.bases := [ + (globals, "bytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__new__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := Constant.str " Create a new instance, ensuring the result has the correct length. " in - let _ := M.assign_local (| - "result" , - M.call (| - M.get_field (| M.call (| - M.get_name (| globals, locals_stack, "super" |), - make_list [ - M.get_name (| globals, locals_stack, "FixedBytes" |); - M.get_name (| globals, locals_stack, "cls" |) - ], - make_dict [] - |), "__new__" |), - make_list_concat (| [ - make_list [ - M.get_name (| globals, locals_stack, "cls" |) - ]; - M.get_name (| globals, locals_stack, "args" |) - ] |), + let _ := M.assign_local (| + "result" , + M.call (| + M.get_field (| M.call (| + M.get_name (| globals, locals_stack, "super" |), + make_list [ + M.get_name (| globals, locals_stack, "FixedBytes" |); + M.get_name (| globals, locals_stack, "cls" |) + ], make_dict [] - |) - |) in - let _ := - (* if *) - M.if_then_else (| - Compare.not_eq (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "result" |) - ], - make_dict [] - |), - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "LENGTH" |) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), + |), "__new__" |), + make_list_concat (| [ + make_list [ + M.get_name (| globals, locals_stack, "cls" |) + ]; + M.get_name (| globals, locals_stack, "args" |) + ] |), + make_dict [] + |) + |) in + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), make_list [ - Constant.str "(* At expr: unsupported node type: JoinedStr *)" + M.get_name (| globals, locals_stack, "result" |) ], make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "result" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition Bytes0 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ - - ] - [ - - ]. - -Definition Bytes4 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ - - ] - [ - - ]. - -Definition Bytes8 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ - - ] - [ - - ]. - -Definition Bytes20 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ - - ] - [ - - ]. - -Definition Bytes32 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ - - ] - [ - - ]. - -Definition Bytes48 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ + |), + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "LENGTH" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [ + Constant.str "(* At expr: unsupported node type: JoinedStr *)" + ], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "result" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. - ] - [ +Definition Bytes0 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. +Definition Bytes4 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. -Definition Bytes64 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ +Definition Bytes8 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Bytes20 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. +Definition Bytes32 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. -Definition Bytes256 : Value.t := - builtins.make_klass - [(globals, "FixedBytes")] - [ +Definition Bytes48 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Bytes64 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. +Definition Bytes256 : Value.t := make_klass {| + Klass.bases := [ + (globals, "FixedBytes") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Bytes : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "bytes" |) diff --git a/CoqOfPython/ethereum/berlin/blocks.v b/CoqOfPython/ethereum/berlin/blocks.v index 092d01e..aa6f00c 100644 --- a/CoqOfPython/ethereum/berlin/blocks.v +++ b/CoqOfPython/ethereum/berlin/blocks.v @@ -50,42 +50,38 @@ Axiom ethereum_berlin_fork_types_imports_Root : Axiom ethereum_berlin_transactions_imports_LegacyTransaction : IsImported globals "ethereum.berlin.transactions" "LegacyTransaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/berlin/fork.v b/CoqOfPython/ethereum/berlin/fork.v index ea566d1..27de206 100644 --- a/CoqOfPython/ethereum/berlin/fork.v +++ b/CoqOfPython/ethereum/berlin/fork.v @@ -206,15 +206,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -957,15 +956,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/berlin/fork_types.v b/CoqOfPython/ethereum/berlin/fork_types.v index 3275327..45526c0 100644 --- a/CoqOfPython/ethereum/berlin/fork_types.v +++ b/CoqOfPython/ethereum/berlin/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/berlin/state.v b/CoqOfPython/ethereum/berlin/state.v index 9b7c736..c1396f6 100644 --- a/CoqOfPython/ethereum/berlin/state.v +++ b/CoqOfPython/ethereum/berlin/state.v @@ -76,15 +76,14 @@ Axiom ethereum_berlin_trie_imports_trie_get : Axiom ethereum_berlin_trie_imports_trie_set : IsImported globals "ethereum.berlin.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/berlin/transactions.v b/CoqOfPython/ethereum/berlin/transactions.v index 7d191a8..ec6283a 100644 --- a/CoqOfPython/ethereum/berlin/transactions.v +++ b/CoqOfPython/ethereum/berlin/transactions.v @@ -70,25 +70,23 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/berlin/trie.v b/CoqOfPython/ethereum/berlin/trie.v index f5cdf46..17cb6d3 100644 --- a/CoqOfPython/ethereum/berlin/trie.v +++ b/CoqOfPython/ethereum/berlin/trie.v @@ -157,35 +157,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -485,15 +482,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/berlin/vm/__init__.v b/CoqOfPython/ethereum/berlin/vm/__init__.v index 8448361..d2dec7d 100644 --- a/CoqOfPython/ethereum/berlin/vm/__init__.v +++ b/CoqOfPython/ethereum/berlin/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/berlin/vm/exceptions.v b/CoqOfPython/ethereum/berlin/vm/exceptions.v index 55de82f..2d1ab69 100644 --- a/CoqOfPython/ethereum/berlin/vm/exceptions.v +++ b/CoqOfPython/ethereum/berlin/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,70 +95,71 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/berlin/vm/gas.v b/CoqOfPython/ethereum/berlin/vm/gas.v index b180144..08b92aa 100644 --- a/CoqOfPython/ethereum/berlin/vm/gas.v +++ b/CoqOfPython/ethereum/berlin/vm/gas.v @@ -456,25 +456,23 @@ Definition GAS_WARM_ACCESS : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/berlin/vm/instructions/__init__.v b/CoqOfPython/ethereum/berlin/vm/instructions/__init__.v index 4ab52a9..a4e1f80 100644 --- a/CoqOfPython/ethereum/berlin/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/berlin/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_berlin_vm_instructions_imports_storage : Axiom ethereum_berlin_vm_instructions_imports_system : IsImported globals "ethereum.berlin.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/berlin/vm/interpreter.v b/CoqOfPython/ethereum/berlin/vm/interpreter.v index cbb5986..4f2bc27 100644 --- a/CoqOfPython/ethereum/berlin/vm/interpreter.v +++ b/CoqOfPython/ethereum/berlin/vm/interpreter.v @@ -138,15 +138,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/blocks.v b/CoqOfPython/ethereum/byzantium/blocks.v index e211724..f355afa 100644 --- a/CoqOfPython/ethereum/byzantium/blocks.v +++ b/CoqOfPython/ethereum/byzantium/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_byzantium_fork_types_imports_Root : Axiom ethereum_byzantium_transactions_imports_Transaction : IsImported globals "ethereum.byzantium.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/byzantium/fork.v b/CoqOfPython/ethereum/byzantium/fork.v index 570d90e..3e13179 100644 --- a/CoqOfPython/ethereum/byzantium/fork.v +++ b/CoqOfPython/ethereum/byzantium/fork.v @@ -192,15 +192,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -913,15 +912,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/fork_types.v b/CoqOfPython/ethereum/byzantium/fork_types.v index ee6d634..97afb94 100644 --- a/CoqOfPython/ethereum/byzantium/fork_types.v +++ b/CoqOfPython/ethereum/byzantium/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/byzantium/state.v b/CoqOfPython/ethereum/byzantium/state.v index f8f1c3f..01ea880 100644 --- a/CoqOfPython/ethereum/byzantium/state.v +++ b/CoqOfPython/ethereum/byzantium/state.v @@ -74,15 +74,14 @@ Axiom ethereum_byzantium_trie_imports_trie_get : Axiom ethereum_byzantium_trie_imports_trie_set : IsImported globals "ethereum.byzantium.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/transactions.v b/CoqOfPython/ethereum/byzantium/transactions.v index 9fcc79a..2460af2 100644 --- a/CoqOfPython/ethereum/byzantium/transactions.v +++ b/CoqOfPython/ethereum/byzantium/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/byzantium/trie.v b/CoqOfPython/ethereum/byzantium/trie.v index 8b87007..3a14967 100644 --- a/CoqOfPython/ethereum/byzantium/trie.v +++ b/CoqOfPython/ethereum/byzantium/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/vm/__init__.v b/CoqOfPython/ethereum/byzantium/vm/__init__.v index 9a3bc28..1b37afd 100644 --- a/CoqOfPython/ethereum/byzantium/vm/__init__.v +++ b/CoqOfPython/ethereum/byzantium/vm/__init__.v @@ -64,35 +64,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/vm/exceptions.v b/CoqOfPython/ethereum/byzantium/vm/exceptions.v index 0e595d2..c1ffce4 100644 --- a/CoqOfPython/ethereum/byzantium/vm/exceptions.v +++ b/CoqOfPython/ethereum/byzantium/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,60 +95,61 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/byzantium/vm/gas.v b/CoqOfPython/ethereum/byzantium/vm/gas.v index d732e54..de4b6b3 100644 --- a/CoqOfPython/ethereum/byzantium/vm/gas.v +++ b/CoqOfPython/ethereum/byzantium/vm/gas.v @@ -446,25 +446,23 @@ Definition GAS_RETURN_DATA_COPY : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/byzantium/vm/instructions/__init__.v b/CoqOfPython/ethereum/byzantium/vm/instructions/__init__.v index 4299835..b34a19d 100644 --- a/CoqOfPython/ethereum/byzantium/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/byzantium/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_byzantium_vm_instructions_imports_storage : Axiom ethereum_byzantium_vm_instructions_imports_system : IsImported globals "ethereum.byzantium.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/byzantium/vm/interpreter.v b/CoqOfPython/ethereum/byzantium/vm/interpreter.v index e0984a8..dd4923c 100644 --- a/CoqOfPython/ethereum/byzantium/vm/interpreter.v +++ b/CoqOfPython/ethereum/byzantium/vm/interpreter.v @@ -136,15 +136,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/blocks.v b/CoqOfPython/ethereum/cancun/blocks.v index 6d98eb6..0db574b 100644 --- a/CoqOfPython/ethereum/cancun/blocks.v +++ b/CoqOfPython/ethereum/cancun/blocks.v @@ -52,52 +52,47 @@ Axiom ethereum_cancun_fork_types_imports_Root : Axiom ethereum_cancun_transactions_imports_LegacyTransaction : IsImported globals "ethereum.cancun.transactions" "LegacyTransaction". -Definition Withdrawal : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Withdrawal : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/cancun/fork.v b/CoqOfPython/ethereum/cancun/fork.v index ddfc829..61cc921 100644 --- a/CoqOfPython/ethereum/cancun/fork.v +++ b/CoqOfPython/ethereum/cancun/fork.v @@ -240,15 +240,14 @@ Definition VERSIONED_HASH_VERSION_KZG : Value.t := M.run ltac:(M.monadic ( Constant.bytes "01" )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1509,15 +1508,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/fork_types.v b/CoqOfPython/ethereum/cancun/fork_types.v index 8eb2521..650459a 100644 --- a/CoqOfPython/ethereum/cancun/fork_types.v +++ b/CoqOfPython/ethereum/cancun/fork_types.v @@ -59,15 +59,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/cancun/state.v b/CoqOfPython/ethereum/cancun/state.v index b0b40c3..fc9d4bc 100644 --- a/CoqOfPython/ethereum/cancun/state.v +++ b/CoqOfPython/ethereum/cancun/state.v @@ -81,25 +81,23 @@ Axiom ethereum_cancun_trie_imports_trie_get : Axiom ethereum_cancun_trie_imports_trie_set : IsImported globals "ethereum.cancun.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition TransientStorage : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition TransientStorage : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/transactions.v b/CoqOfPython/ethereum/cancun/transactions.v index bb800fe..6de94bf 100644 --- a/CoqOfPython/ethereum/cancun/transactions.v +++ b/CoqOfPython/ethereum/cancun/transactions.v @@ -69,45 +69,41 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BlobTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BlobTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/cancun/trie.v b/CoqOfPython/ethereum/cancun/trie.v index 6b003d3..18a2730 100644 --- a/CoqOfPython/ethereum/cancun/trie.v +++ b/CoqOfPython/ethereum/cancun/trie.v @@ -166,35 +166,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -494,15 +491,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/vm/__init__.v b/CoqOfPython/ethereum/cancun/vm/__init__.v index f7252b0..d3d799f 100644 --- a/CoqOfPython/ethereum/cancun/vm/__init__.v +++ b/CoqOfPython/ethereum/cancun/vm/__init__.v @@ -72,35 +72,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/vm/exceptions.v b/CoqOfPython/ethereum/cancun/vm/exceptions.v index 257d805..f885689 100644 --- a/CoqOfPython/ethereum/cancun/vm/exceptions.v +++ b/CoqOfPython/ethereum/cancun/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,90 +95,91 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition KZGProofError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition KZGProofError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/cancun/vm/gas.v b/CoqOfPython/ethereum/cancun/vm/gas.v index 6f4bc91..38c75f5 100644 --- a/CoqOfPython/ethereum/cancun/vm/gas.v +++ b/CoqOfPython/ethereum/cancun/vm/gas.v @@ -525,25 +525,23 @@ Definition BLOB_GASPRICE_UPDATE_FRACTION : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/cancun/vm/instructions/__init__.v b/CoqOfPython/ethereum/cancun/vm/instructions/__init__.v index 153a2a3..4e93bb2 100644 --- a/CoqOfPython/ethereum/cancun/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/cancun/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_cancun_vm_instructions_imports_storage : Axiom ethereum_cancun_vm_instructions_imports_system : IsImported globals "ethereum.cancun.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/cancun/vm/interpreter.v b/CoqOfPython/ethereum/cancun/vm/interpreter.v index 897386b..b9090f0 100644 --- a/CoqOfPython/ethereum/cancun/vm/interpreter.v +++ b/CoqOfPython/ethereum/cancun/vm/interpreter.v @@ -142,15 +142,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/blocks.v b/CoqOfPython/ethereum/constantinople/blocks.v index ffb89c6..a3b80f3 100644 --- a/CoqOfPython/ethereum/constantinople/blocks.v +++ b/CoqOfPython/ethereum/constantinople/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_constantinople_fork_types_imports_Root : Axiom ethereum_constantinople_transactions_imports_Transaction : IsImported globals "ethereum.constantinople.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/constantinople/fork.v b/CoqOfPython/ethereum/constantinople/fork.v index 245bd87..8fbbebc 100644 --- a/CoqOfPython/ethereum/constantinople/fork.v +++ b/CoqOfPython/ethereum/constantinople/fork.v @@ -192,15 +192,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -913,15 +912,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/fork_types.v b/CoqOfPython/ethereum/constantinople/fork_types.v index 269cc60..37d6f65 100644 --- a/CoqOfPython/ethereum/constantinople/fork_types.v +++ b/CoqOfPython/ethereum/constantinople/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/constantinople/state.v b/CoqOfPython/ethereum/constantinople/state.v index 74dc7a7..4397bcd 100644 --- a/CoqOfPython/ethereum/constantinople/state.v +++ b/CoqOfPython/ethereum/constantinople/state.v @@ -74,15 +74,14 @@ Axiom ethereum_constantinople_trie_imports_trie_get : Axiom ethereum_constantinople_trie_imports_trie_set : IsImported globals "ethereum.constantinople.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/transactions.v b/CoqOfPython/ethereum/constantinople/transactions.v index c4232b6..45e32d1 100644 --- a/CoqOfPython/ethereum/constantinople/transactions.v +++ b/CoqOfPython/ethereum/constantinople/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/constantinople/trie.v b/CoqOfPython/ethereum/constantinople/trie.v index 44509df..1805950 100644 --- a/CoqOfPython/ethereum/constantinople/trie.v +++ b/CoqOfPython/ethereum/constantinople/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/vm/__init__.v b/CoqOfPython/ethereum/constantinople/vm/__init__.v index abac4a2..e8ec229 100644 --- a/CoqOfPython/ethereum/constantinople/vm/__init__.v +++ b/CoqOfPython/ethereum/constantinople/vm/__init__.v @@ -64,35 +64,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/vm/exceptions.v b/CoqOfPython/ethereum/constantinople/vm/exceptions.v index e9b6a3e..16e2447 100644 --- a/CoqOfPython/ethereum/constantinople/vm/exceptions.v +++ b/CoqOfPython/ethereum/constantinople/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,60 +95,61 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/constantinople/vm/gas.v b/CoqOfPython/ethereum/constantinople/vm/gas.v index c08c6d4..ded3b06 100644 --- a/CoqOfPython/ethereum/constantinople/vm/gas.v +++ b/CoqOfPython/ethereum/constantinople/vm/gas.v @@ -456,25 +456,23 @@ Definition GAS_CODE_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/constantinople/vm/instructions/__init__.v b/CoqOfPython/ethereum/constantinople/vm/instructions/__init__.v index 1debf2b..5ba863b 100644 --- a/CoqOfPython/ethereum/constantinople/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/constantinople/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_constantinople_vm_instructions_imports_storage : Axiom ethereum_constantinople_vm_instructions_imports_system : IsImported globals "ethereum.constantinople.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/constantinople/vm/interpreter.v b/CoqOfPython/ethereum/constantinople/vm/interpreter.v index 183898c..8cb4096 100644 --- a/CoqOfPython/ethereum/constantinople/vm/interpreter.v +++ b/CoqOfPython/ethereum/constantinople/vm/interpreter.v @@ -136,15 +136,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/crypto/alt_bn128.v b/CoqOfPython/ethereum/crypto/alt_bn128.v index 29ed360..242ae22 100644 --- a/CoqOfPython/ethereum/crypto/alt_bn128.v +++ b/CoqOfPython/ethereum/crypto/alt_bn128.v @@ -31,35 +31,35 @@ Definition ATE_PAIRING_COUNT_BITS : Value.t := M.run ltac:(M.monadic ( Constant.int 63 )). -Definition BNF : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. - -Definition BNP : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. - -Definition BNF2 : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition BNF : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BNP : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BNF2 : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: Assign *) @@ -76,72 +76,72 @@ Definition expr_48 : Value.t := Definition expr_51 : Value.t := Constant.str "autoapi_noindex". -Definition BNP2 : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. - -Definition BNF12 : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition BNP2 : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BNF12 : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.str " Multiplication special cased for BNF12. " in - let _ := M.assign_local (| - "mul" , - BinOp.mult (| - make_list [ - Constant.int 0 - ], - Constant.int 23 - |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + let _ := M.assign_local (| + "mul" , + BinOp.mult (| + make_list [ + Constant.int 0 + ], + Constant.int 23 + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ Constant.int 12 ], make_dict [] |), - ltac:(M.monadic ( - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "j" |), - M.call (| + ltac:(M.monadic ( + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "j" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ Constant.int 12 ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op (| - BinOp.add, - M.get_subscript (| + ltac:(M.monadic ( + let _ := M.assign_op (| + BinOp.add, + M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), BinOp.add (| M.get_name (| globals, locals_stack, "i" |), M.get_name (| globals, locals_stack, "j" |) |) |), - BinOp.mult (| + BinOp.mult (| M.get_subscript (| M.get_name (| globals, locals_stack, "self" |), M.get_name (| globals, locals_stack, "i" |) @@ -151,23 +151,23 @@ Definition BNF12 : Value.t := M.get_name (| globals, locals_stack, "j" |) |) |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ Constant.int 22; @@ -176,65 +176,66 @@ Definition BNF12 : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op (| - BinOp.sub, - M.get_subscript (| + ltac:(M.monadic ( + let _ := M.assign_op (| + BinOp.sub, + M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), BinOp.sub (| M.get_name (| globals, locals_stack, "i" |), Constant.int 6 |) |), - BinOp.mult (| + BinOp.mult (| M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), M.get_name (| globals, locals_stack, "i" |) |), UnOp.sub (| Constant.int 18 |) |) - |) in - let _ := M.assign_op (| - BinOp.sub, - M.get_subscript (| + |) in + let _ := M.assign_op (| + BinOp.sub, + M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), BinOp.sub (| M.get_name (| globals, locals_stack, "i" |), Constant.int 12 |) |), - BinOp.mult (| + BinOp.mult (| M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), M.get_name (| globals, locals_stack, "i" |) |), Constant.int 82 |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "BNF12" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "BNF12" |); - M.slice (| - M.get_name (| globals, locals_stack, "mul" |), - Constant.None_, - Constant.int 12, - Constant.None_ - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "BNF12" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "BNF12" |); + M.slice (| + M.get_name (| globals, locals_stack, "mul" |), + Constant.None_, + Constant.int 12, + Constant.None_ + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. (* At top_level_stmt: unsupported node type: Assign *) @@ -251,15 +252,15 @@ Definition expr_101 : Value.t := Definition expr_104 : Value.t := Constant.str "autoapi_noindex". -Definition BNP12 : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition BNP12 : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition bnf2_to_bnf12 : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/crypto/blake2.v b/CoqOfPython/ethereum/crypto/blake2.v index 07372e6..2d320d3 100644 --- a/CoqOfPython/ethereum/crypto/blake2.v +++ b/CoqOfPython/ethereum/crypto/blake2.v @@ -99,19 +99,18 @@ Definition spit_le_to_uint : Value.t -> Value.t -> M := Axiom spit_le_to_uint_in_globals : IsInGlobals globals "spit_le_to_uint" (make_function spit_le_to_uint). -Definition Blake2 : Value.t := - builtins.make_klass - [] - [ - - ] - [ - ( - "get_blake2_parameters", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "data" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition Blake2 : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "get_blake2_parameters", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "data" ] in + ltac:(M.monadic ( + let _ := Constant.str " Extract the parameters required in the Blake2 compression function from the provided bytes data. @@ -120,83 +119,83 @@ Definition Blake2 : Value.t := data : The bytes data that has been passed in the message. " in - let _ := M.assign_local (| - "rounds" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.slice (| - M.get_name (| globals, locals_stack, "data" |), - Constant.None_, - Constant.int 4, - Constant.None_ - |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "h" , - M.call (| - M.get_name (| globals, locals_stack, "spit_le_to_uint" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |); - Constant.int 4; - Constant.int 8 - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "m" , - M.call (| - M.get_name (| globals, locals_stack, "spit_le_to_uint" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |); - Constant.int 68; - Constant.int 16 - ], - make_dict [] - |) - |) in - let _ := M.assign (| - make_tuple [ M.get_name (| globals, locals_stack, "t_0" |); M.get_name (| globals, locals_stack, "t_1" |) ], - M.call (| - M.get_name (| globals, locals_stack, "spit_le_to_uint" |), - make_list [ - M.get_name (| globals, locals_stack, "data" |); - Constant.int 196; - Constant.int 2 - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "f" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), - make_list [ - M.slice (| - M.get_name (| globals, locals_stack, "data" |), - Constant.int 212, - Constant.None_, - Constant.None_ - |) - ], - make_dict [] - |) - |) in - let _ := M.return_ (| - make_tuple [ M.get_name (| globals, locals_stack, "rounds" |); M.get_name (| globals, locals_stack, "h" |); M.get_name (| globals, locals_stack, "m" |); M.get_name (| globals, locals_stack, "t_0" |); M.get_name (| globals, locals_stack, "t_1" |); M.get_name (| globals, locals_stack, "f" |) ] - |) in - M.pure Constant.None_)) - ); - ( - "G", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "v"; "a"; "b"; "c"; "d"; "x"; "y" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.assign_local (| + "rounds" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.slice (| + M.get_name (| globals, locals_stack, "data" |), + Constant.None_, + Constant.int 4, + Constant.None_ + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "h" , + M.call (| + M.get_name (| globals, locals_stack, "spit_le_to_uint" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |); + Constant.int 4; + Constant.int 8 + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "m" , + M.call (| + M.get_name (| globals, locals_stack, "spit_le_to_uint" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |); + Constant.int 68; + Constant.int 16 + ], + make_dict [] + |) + |) in + let _ := M.assign (| + make_tuple [ M.get_name (| globals, locals_stack, "t_0" |); M.get_name (| globals, locals_stack, "t_1" |) ], + M.call (| + M.get_name (| globals, locals_stack, "spit_le_to_uint" |), + make_list [ + M.get_name (| globals, locals_stack, "data" |); + Constant.int 196; + Constant.int 2 + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "f" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "Uint" |), "from_be_bytes" |), + make_list [ + M.slice (| + M.get_name (| globals, locals_stack, "data" |), + Constant.int 212, + Constant.None_, + Constant.None_ + |) + ], + make_dict [] + |) + |) in + let _ := M.return_ (| + make_tuple [ M.get_name (| globals, locals_stack, "rounds" |); M.get_name (| globals, locals_stack, "h" |); M.get_name (| globals, locals_stack, "m" |); M.get_name (| globals, locals_stack, "t_0" |); M.get_name (| globals, locals_stack, "t_1" |); M.get_name (| globals, locals_stack, "f" |) ] + |) in + M.pure Constant.None_)) + ); + ( + "G", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "v"; "a"; "b"; "c"; "d"; "x"; "y" ] in + ltac:(M.monadic ( + let _ := Constant.str " The mixing function used in Blake2 https://datatracker.ietf.org/doc/html/rfc7693#section-3.1 @@ -209,35 +208,49 @@ Definition Blake2 : Value.t := x, y : The two input words for the mixing. " in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |), - BinOp.mod_ (| + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) + |), + BinOp.mod_ (| + BinOp.add (| BinOp.add (| - BinOp.add (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) - |) + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) |), - M.get_name (| globals, locals_stack, "x" |) + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "b" |) + |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) + M.get_name (| globals, locals_stack, "x" |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |), + BinOp.bit_xor (| + BinOp.r_shift (| + BinOp.bit_xor (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) + |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R1" |) |), - BinOp.bit_xor (| - BinOp.r_shift (| + BinOp.mod_ (| + BinOp.l_shift (| BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), @@ -248,52 +261,52 @@ Definition Blake2 : Value.t := M.get_name (| globals, locals_stack, "a" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R1" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R1" |) |), - BinOp.mod_ (| - BinOp.l_shift (| - BinOp.bit_xor (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R1" |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "c" |) + |), + BinOp.mod_ (| + BinOp.add (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "c" |) + |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |) |), - BinOp.mod_ (| - BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "b" |) + |), + BinOp.bit_xor (| + BinOp.r_shift (| + BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) + M.get_name (| globals, locals_stack, "b" |) |), M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) + M.get_name (| globals, locals_stack, "c" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R2" |) |), - BinOp.bit_xor (| - BinOp.r_shift (| + BinOp.mod_ (| + BinOp.l_shift (| BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), @@ -304,55 +317,55 @@ Definition Blake2 : Value.t := M.get_name (| globals, locals_stack, "c" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R2" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R2" |) |), - BinOp.mod_ (| - BinOp.l_shift (| - BinOp.bit_xor (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) - |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R2" |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |), - BinOp.mod_ (| + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) + |), + BinOp.mod_ (| + BinOp.add (| BinOp.add (| - BinOp.add (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) - |) + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) |), - M.get_name (| globals, locals_stack, "y" |) + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "b" |) + |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) + M.get_name (| globals, locals_stack, "y" |) |), - BinOp.bit_xor (| - BinOp.r_shift (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |), + BinOp.bit_xor (| + BinOp.r_shift (| + BinOp.bit_xor (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "a" |) + |) + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R3" |) + |), + BinOp.mod_ (| + BinOp.l_shift (| BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), @@ -363,52 +376,52 @@ Definition Blake2 : Value.t := M.get_name (| globals, locals_stack, "a" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R3" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R3" |) |), - BinOp.mod_ (| - BinOp.l_shift (| - BinOp.bit_xor (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "a" |) - |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R3" |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "c" |) + |), + BinOp.mod_ (| + BinOp.add (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "c" |) + |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "d" |) + |) |), - BinOp.mod_ (| - BinOp.add (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + M.get_name (| globals, locals_stack, "b" |) + |), + BinOp.bit_xor (| + BinOp.r_shift (| + BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) + M.get_name (| globals, locals_stack, "b" |) |), M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "d" |) + M.get_name (| globals, locals_stack, "c" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R4" |) |), - BinOp.bit_xor (| - BinOp.r_shift (| + BinOp.mod_ (| + BinOp.l_shift (| BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), @@ -419,37 +432,23 @@ Definition Blake2 : Value.t := M.get_name (| globals, locals_stack, "c" |) |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "R4" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R4" |) |), - BinOp.mod_ (| - BinOp.l_shift (| - BinOp.bit_xor (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "b" |) - |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - M.get_name (| globals, locals_stack, "c" |) - |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "w_R4" |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "max_word" |) |) - |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "v" |) - |) in - M.pure Constant.None_)) - ); - ( - "compress", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "num_rounds"; "h"; "m"; "t_0"; "t_1"; "f" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |) + |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "v" |) + |) in + M.pure Constant.None_)) + ); + ( + "compress", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "num_rounds"; "h"; "m"; "t_0"; "t_1"; "f" ] in + ltac:(M.monadic ( + let _ := Constant.str " 'F Compression' from section 3.2 of RFC 7693: https://tools.ietf.org/html/rfc7693#section-3.2 @@ -466,363 +465,364 @@ Definition Blake2 : Value.t := f: The final block indicator flag. An 8-bit word " in - let _ := M.assign_local (| - "v" , - BinOp.mult (| - make_list [ - Constant.int 0 - ], - Constant.int 16 - |) - |) in - let _ := M.assign (| - M.slice (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 0, - Constant.int 8, - Constant.None_ - |), - M.get_name (| globals, locals_stack, "h" |) - |) in - let _ := M.assign (| - M.slice (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 8, - Constant.int 15, - Constant.None_ - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |) - |) in - let _ := M.assign (| + let _ := M.assign_local (| + "v" , + BinOp.mult (| + make_list [ + Constant.int 0 + ], + Constant.int 16 + |) + |) in + let _ := M.assign (| + M.slice (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 0, + Constant.int 8, + Constant.None_ + |), + M.get_name (| globals, locals_stack, "h" |) + |) in + let _ := M.assign (| + M.slice (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 8, + Constant.int 15, + Constant.None_ + |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 12 + |), + BinOp.bit_xor (| + M.get_name (| globals, locals_stack, "t_0" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 12 - |), - BinOp.bit_xor (| - M.get_name (| globals, locals_stack, "t_0" |), - M.get_subscript (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |), - Constant.int 4 - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |), + Constant.int 4 |) - |) in - let _ := M.assign (| + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 13 + |), + BinOp.bit_xor (| + M.get_name (| globals, locals_stack, "t_1" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 13 - |), - BinOp.bit_xor (| - M.get_name (| globals, locals_stack, "t_1" |), - M.get_subscript (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |), - Constant.int 5 - |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "IV" |), + Constant.int 5 |) - |) in - let _ := - (* if *) - M.if_then_else (| - M.get_name (| globals, locals_stack, "f" |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign (| + |) + |) in + let _ := + (* if *) + M.if_then_else (| + M.get_name (| globals, locals_stack, "f" |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "v" |), + Constant.int 14 + |), + BinOp.bit_xor (| M.get_subscript (| M.get_name (| globals, locals_stack, "v" |), Constant.int 14 |), - BinOp.bit_xor (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "v" |), - Constant.int 14 - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "mask_bits" |) - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "r" |), - M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "mask_bits" |) + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "r" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.get_name (| globals, locals_stack, "num_rounds" |) ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_local (| - "s" , - M.get_subscript (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "sigma" |), - BinOp.mod_ (| - M.get_name (| globals, locals_stack, "r" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "sigma_len" |) - |) + ltac:(M.monadic ( + let _ := M.assign_local (| + "s" , + M.get_subscript (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "sigma" |), + BinOp.mod_ (| + M.get_name (| globals, locals_stack, "r" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "sigma_len" |) |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 0; - Constant.int 4; - Constant.int 8; - Constant.int 12; + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 0; + Constant.int 4; + Constant.int 8; + Constant.int 12; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 0 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 0 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 1 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 1 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 1; - Constant.int 5; - Constant.int 9; - Constant.int 13; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 1; + Constant.int 5; + Constant.int 9; + Constant.int 13; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 2 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 2 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 3 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 3 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 2; - Constant.int 6; - Constant.int 10; - Constant.int 14; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 2; + Constant.int 6; + Constant.int 10; + Constant.int 14; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 4 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 4 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 5 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 5 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 3; - Constant.int 7; - Constant.int 11; - Constant.int 15; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 3; + Constant.int 7; + Constant.int 11; + Constant.int 15; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 6 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 6 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 7 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 7 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 0; - Constant.int 5; - Constant.int 10; - Constant.int 15; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 0; + Constant.int 5; + Constant.int 10; + Constant.int 15; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 8 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 8 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 9 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 9 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 1; - Constant.int 6; - Constant.int 11; - Constant.int 12; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 1; + Constant.int 6; + Constant.int 11; + Constant.int 12; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 10 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 10 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 11 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 11 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 2; - Constant.int 7; - Constant.int 8; - Constant.int 13; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 2; + Constant.int 7; + Constant.int 8; + Constant.int 13; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 12 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 12 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 13 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 13 |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "v" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), - make_list [ - M.get_name (| globals, locals_stack, "v" |); - Constant.int 3; - Constant.int 4; - Constant.int 9; - Constant.int 14; + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "v" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "G" |), + make_list [ + M.get_name (| globals, locals_stack, "v" |); + Constant.int 3; + Constant.int 4; + Constant.int 9; + Constant.int 14; + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 14 - |) - |); + M.get_name (| globals, locals_stack, "s" |), + Constant.int 14 + |) + |); + M.get_subscript (| + M.get_name (| globals, locals_stack, "m" |), M.get_subscript (| - M.get_name (| globals, locals_stack, "m" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "s" |), - Constant.int 15 - |) + M.get_name (| globals, locals_stack, "s" |), + Constant.int 15 |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.assign_local (| - "result_message_words" , - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "struct" |), "pack" |), - make_list_concat (| [ - make_list [ - BinOp.mod_ (| - Constant.str "<8%s", - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "word_format" |) - |) - ]; - M.get_name (| globals, locals_stack, "result_message_words" |) - ] |), - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition Blake2b : Value.t := - builtins.make_klass - [(globals, "Blake2")] - [ - - ] - [ + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.assign_local (| + "result_message_words" , + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "struct" |), "pack" |), + make_list_concat (| [ + make_list [ + BinOp.mod_ (| + Constant.str "<8%s", + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "word_format" |) + |) + ]; + M.get_name (| globals, locals_stack, "result_message_words" |) + ] |), + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. - ]. +Definition Blake2b : Value.t := make_klass {| + Klass.bases := [ + (globals, "Blake2") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/crypto/elliptic_curve.v b/CoqOfPython/ethereum/crypto/elliptic_curve.v index 2a9343a..b45c932 100644 --- a/CoqOfPython/ethereum/crypto/elliptic_curve.v +++ b/CoqOfPython/ethereum/crypto/elliptic_curve.v @@ -189,598 +189,600 @@ Definition secp256k1_recover : Value.t -> Value.t -> M := Axiom secp256k1_recover_in_globals : IsInGlobals globals "secp256k1_recover" (make_function secp256k1_recover). -Definition EllipticCurve : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - ( - "point_at_infinity", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition EllipticCurve : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ( + "point_at_infinity", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := Constant.str " Return the point at infinity. This is the identity element of the group operation. The point at infinity doesn't actually have coordinates so we use `(0, 0)` (which isn't on the curve) to represent it. " in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |); - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "__new__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "x"; "y" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |); + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "__new__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "x"; "y" ] in + ltac:(M.monadic ( + let _ := Constant.str " Make new point on the curve. The point is not checked to see if it is on the curve. " in - let _ := M.assign_local (| - "res" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "object" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |) - ], - make_dict [] - |) - |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "res" |), "x" |), - M.get_name (| globals, locals_stack, "x" |) - |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "res" |), "y" |), - M.get_name (| globals, locals_stack, "y" |) - |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "res" |) - |) in - M.pure Constant.None_)) - ); - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "x"; "y" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.assign_local (| + "res" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "object" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |) + ], + make_dict [] + |) + |) in + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "res" |), "x" |), + M.get_name (| globals, locals_stack, "x" |) + |) in + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "res" |), "y" |), + M.get_name (| globals, locals_stack, "y" |) + |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "res" |) + |) in + M.pure Constant.None_)) + ); + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "x"; "y" ] in + ltac:(M.monadic ( + let _ := Constant.str " Checks if the point is on the curve. To skip this check call `__new__()` directly. " in - let _ := - (* if *) - M.if_then_else (| - BoolOp.and (| - BoolOp.or (| + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + BoolOp.or (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "x" |), + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |) + |), + ltac:(M.monadic ( Compare.not_eq (| - M.get_name (| globals, locals_stack, "x" |), + M.get_name (| globals, locals_stack, "y" |), M.call (| M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), make_list [], make_dict [] |) - |), - ltac:(M.monadic ( - Compare.not_eq (| - M.get_name (| globals, locals_stack, "y" |), - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |) - |) - )) - |), - ltac:(M.monadic ( - Compare.not_eq (| + |) + )) + |), + ltac:(M.monadic ( + Compare.not_eq (| + BinOp.sub (| BinOp.sub (| BinOp.sub (| - BinOp.sub (| - BinOp.pow (| - M.get_name (| globals, locals_stack, "y" |), - Constant.int 2 - |), - BinOp.pow (| - M.get_name (| globals, locals_stack, "x" |), - Constant.int 3 - |) + BinOp.pow (| + M.get_name (| globals, locals_stack, "y" |), + Constant.int 2 |), - BinOp.mult (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "A" |), - M.get_name (| globals, locals_stack, "x" |) + BinOp.pow (| + M.get_name (| globals, locals_stack, "x" |), + Constant.int 3 |) |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "B" |) + BinOp.mult (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "A" |), + M.get_name (| globals, locals_stack, "x" |) + |) |), - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |) - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [ - Constant.str "Point not on curve" - ], - make_dict [] - |)) |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_)) - ); - ( - "__eq__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in - ltac:(M.monadic ( - let _ := Constant.str " - Test two points for equality. - " in - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "other" |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "B" |) + |), M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), + make_list [], make_dict [] |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - Constant.bool false - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - BoolOp.and (| - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |), - M.get_field (| M.get_name (| globals, locals_stack, "other" |), "x" |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |), - M.get_field (| M.get_name (| globals, locals_stack, "other" |), "y" |) |) )) - |) - |) in - M.pure Constant.None_)) - ); - ( - "__str__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " - Stringify a point as its coordinates. + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [ + Constant.str "Point not on curve" + ], + make_dict [] + |)) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_)) + ); + ( + "__eq__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in + ltac:(M.monadic ( + let _ := Constant.str " + Test two points for equality. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "str" |), + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |) ] + M.get_name (| globals, locals_stack, "other" |); + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "double", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Constant.bool false + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + BoolOp.and (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |), + M.get_field (| M.get_name (| globals, locals_stack, "other" |), "x" |) + |), + ltac:(M.monadic ( + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |), + M.get_field (| M.get_name (| globals, locals_stack, "other" |), "y" |) + |) + )) + |) + |) in + M.pure Constant.None_)) + ); + ( + "__str__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " + Stringify a point as its coordinates. + " in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "str" |), + make_list [ + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |) ] + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "double", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Add a point to itself. " in - let _ := M.assign (| - make_tuple [ M.get_name (| globals, locals_stack, "x" |); M.get_name (| globals, locals_stack, "y" |); M.get_name (| globals, locals_stack, "F" |) ], - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |) ] - |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.and (| + let _ := M.assign (| + make_tuple [ M.get_name (| globals, locals_stack, "x" |); M.get_name (| globals, locals_stack, "y" |); M.get_name (| globals, locals_stack, "F" |) ], + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |) ] + |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.eq (| + M.get_name (| globals, locals_stack, "x" |), + Constant.int 0 + |), + ltac:(M.monadic ( Compare.eq (| - M.get_name (| globals, locals_stack, "x" |), + M.get_name (| globals, locals_stack, "y" |), Constant.int 0 - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "y" |), - Constant.int 0 - |) - )) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "self" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "lam" , - BinOp.div (| - BinOp.add (| - BinOp.mult (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "F" |), "from_int" |), - make_list [ - Constant.int 3 - ], - make_dict [] - |), - BinOp.pow (| - M.get_name (| globals, locals_stack, "x" |), - Constant.int 2 - |) - |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "A" |) - |), + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "self" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "lam" , + BinOp.div (| + BinOp.add (| BinOp.mult (| M.call (| M.get_field (| M.get_name (| globals, locals_stack, "F" |), "from_int" |), make_list [ - Constant.int 2 + Constant.int 3 ], make_dict [] |), - M.get_name (| globals, locals_stack, "y" |) - |) - |) - |) in - let _ := M.assign_local (| - "new_x" , - BinOp.sub (| - BinOp.sub (| BinOp.pow (| - M.get_name (| globals, locals_stack, "lam" |), + M.get_name (| globals, locals_stack, "x" |), Constant.int 2 - |), - M.get_name (| globals, locals_stack, "x" |) + |) |), - M.get_name (| globals, locals_stack, "x" |) + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "A" |) + |), + BinOp.mult (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "F" |), "from_int" |), + make_list [ + Constant.int 2 + ], + make_dict [] + |), + M.get_name (| globals, locals_stack, "y" |) |) - |) in - let _ := M.assign_local (| - "new_y" , + |) + |) in + let _ := M.assign_local (| + "new_x" , + BinOp.sub (| BinOp.sub (| - BinOp.mult (| + BinOp.pow (| M.get_name (| globals, locals_stack, "lam" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "x" |), - M.get_name (| globals, locals_stack, "new_x" |) - |) + Constant.int 2 |), - M.get_name (| globals, locals_stack, "y" |) - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "new_x" |); - M.get_name (| globals, locals_stack, "new_y" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in - ltac:(M.monadic ( - let _ := Constant.str " + M.get_name (| globals, locals_stack, "x" |) + |), + M.get_name (| globals, locals_stack, "x" |) + |) + |) in + let _ := M.assign_local (| + "new_y" , + BinOp.sub (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "lam" |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "x" |), + M.get_name (| globals, locals_stack, "new_x" |) + |) + |), + M.get_name (| globals, locals_stack, "y" |) + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.get_name (| globals, locals_stack, "new_x" |); + M.get_name (| globals, locals_stack, "new_y" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in + ltac:(M.monadic ( + let _ := Constant.str " Add two points together. " in - let _ := M.assign_local (| - "ZERO" , - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign (| - make_tuple [ M.get_name (| globals, locals_stack, "self_x" |); M.get_name (| globals, locals_stack, "self_y" |); M.get_name (| globals, locals_stack, "other_x" |); M.get_name (| globals, locals_stack, "other_y" |) ], - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |); M.get_field (| M.get_name (| globals, locals_stack, "other" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "other" |), "y" |) ] - |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.and (| + let _ := M.assign_local (| + "ZERO" , + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign (| + make_tuple [ M.get_name (| globals, locals_stack, "self_x" |); M.get_name (| globals, locals_stack, "self_y" |); M.get_name (| globals, locals_stack, "other_x" |); M.get_name (| globals, locals_stack, "other_y" |) ], + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "self" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "self" |), "y" |); M.get_field (| M.get_name (| globals, locals_stack, "other" |), "x" |); M.get_field (| M.get_name (| globals, locals_stack, "other" |), "y" |) ] + |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.eq (| + M.get_name (| globals, locals_stack, "self_x" |), + M.get_name (| globals, locals_stack, "ZERO" |) + |), + ltac:(M.monadic ( Compare.eq (| - M.get_name (| globals, locals_stack, "self_x" |), + M.get_name (| globals, locals_stack, "self_y" |), M.get_name (| globals, locals_stack, "ZERO" |) - |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "self_y" |), - M.get_name (| globals, locals_stack, "ZERO" |) - |) - )) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "other" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + BoolOp.and (| + Compare.eq (| + M.get_name (| globals, locals_stack, "other_x" |), + M.get_name (| globals, locals_stack, "ZERO" |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "other" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - BoolOp.and (| + ltac:(M.monadic ( Compare.eq (| - M.get_name (| globals, locals_stack, "other_x" |), + M.get_name (| globals, locals_stack, "other_y" |), M.get_name (| globals, locals_stack, "ZERO" |) + |) + )) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "self" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "self_x" |), + M.get_name (| globals, locals_stack, "other_x" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "self_y" |), + M.get_name (| globals, locals_stack, "other_y" |) |), - ltac:(M.monadic ( - Compare.eq (| - M.get_name (| globals, locals_stack, "other_y" |), - M.get_name (| globals, locals_stack, "ZERO" |) + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "double" |), + make_list [], + make_dict [] |) - )) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "point_at_infinity" |), + make_list [], + make_dict [] + |) + |) in + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "lam" , + BinOp.div (| + BinOp.sub (| + M.get_name (| globals, locals_stack, "other_y" |), + M.get_name (| globals, locals_stack, "self_y" |) + |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "other_x" |), + M.get_name (| globals, locals_stack, "self_x" |) + |) + |) + |) in + let _ := M.assign_local (| + "x" , + BinOp.sub (| + BinOp.sub (| + BinOp.pow (| + M.get_name (| globals, locals_stack, "lam" |), + Constant.int 2 |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "self" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.eq (| + M.get_name (| globals, locals_stack, "self_x" |) + |), + M.get_name (| globals, locals_stack, "other_x" |) + |) + |) in + let _ := M.assign_local (| + "y" , + BinOp.sub (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "lam" |), + BinOp.sub (| M.get_name (| globals, locals_stack, "self_x" |), - M.get_name (| globals, locals_stack, "other_x" |) - |), - (* then *) + M.get_name (| globals, locals_stack, "x" |) + |) + |), + M.get_name (| globals, locals_stack, "self_y" |) + |) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.get_name (| globals, locals_stack, "x" |); + M.get_name (| globals, locals_stack, "y" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "mul_by", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "n" ] in + ltac:(M.monadic ( + let _ := Constant.str " + Multiply `self` by `n` using the double and add algorithm. + " in + let _ := M.assign_local (| + "res" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |); + M.call (| + M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), + make_list [], + make_dict [] + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "s" , + M.get_name (| globals, locals_stack, "self" |) + |) in + let _ := + M.while (| + Compare.not_eq (| + M.get_name (| globals, locals_stack, "n" |), + Constant.int 0 + |), ltac:(M.monadic ( let _ := (* if *) M.if_then_else (| Compare.eq (| - M.get_name (| globals, locals_stack, "self_y" |), - M.get_name (| globals, locals_stack, "other_y" |) + BinOp.mod_ (| + M.get_name (| globals, locals_stack, "n" |), + Constant.int 2 + |), + Constant.int 1 |), (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "double" |), - make_list [], - make_dict [] + let _ := M.assign_local (| + "res" , + BinOp.add (| + M.get_name (| globals, locals_stack, "res" |), + M.get_name (| globals, locals_stack, "s" |) |) |) in M.pure Constant.None_ (* else *) )), ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "point_at_infinity" |), - make_list [], - make_dict [] - |) - |) in M.pure Constant.None_ )) |) in + let _ := M.assign_local (| + "s" , + BinOp.add (| + M.get_name (| globals, locals_stack, "s" |), + M.get_name (| globals, locals_stack, "s" |) + |) + |) in + let _ := M.assign_op_local (| + BinOp.floor_div, + "n", + Constant.int 2 + |) in M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( + )), + ltac:(M.monadic ( M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "lam" , - BinOp.div (| - BinOp.sub (| - M.get_name (| globals, locals_stack, "other_y" |), - M.get_name (| globals, locals_stack, "self_y" |) - |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "other_x" |), - M.get_name (| globals, locals_stack, "self_x" |) - |) - |) - |) in - let _ := M.assign_local (| - "x" , - BinOp.sub (| - BinOp.sub (| - BinOp.pow (| - M.get_name (| globals, locals_stack, "lam" |), - Constant.int 2 - |), - M.get_name (| globals, locals_stack, "self_x" |) - |), - M.get_name (| globals, locals_stack, "other_x" |) - |) - |) in - let _ := M.assign_local (| - "y" , - BinOp.sub (| - BinOp.mult (| - M.get_name (| globals, locals_stack, "lam" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "self_x" |), - M.get_name (| globals, locals_stack, "x" |) - |) - |), - M.get_name (| globals, locals_stack, "self_y" |) - |) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "x" |); - M.get_name (| globals, locals_stack, "y" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "mul_by", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "n" ] in - ltac:(M.monadic ( - let _ := Constant.str " - Multiply `self` by `n` using the double and add algorithm. - " in - let _ := M.assign_local (| - "res" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |); - M.call (| - M.get_field (| M.get_field (| M.get_name (| globals, locals_stack, "self" |), "FIELD" |), "zero" |), - make_list [], - make_dict [] - |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "s" , - M.get_name (| globals, locals_stack, "self" |) - |) in - let _ := - M.while (| - Compare.not_eq (| - M.get_name (| globals, locals_stack, "n" |), - Constant.int 0 - |), - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.eq (| - BinOp.mod_ (| - M.get_name (| globals, locals_stack, "n" |), - Constant.int 2 - |), - Constant.int 1 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "res" , - BinOp.add (| - M.get_name (| globals, locals_stack, "res" |), - M.get_name (| globals, locals_stack, "s" |) - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "s" , - BinOp.add (| - M.get_name (| globals, locals_stack, "s" |), - M.get_name (| globals, locals_stack, "s" |) - |) - |) in - let _ := M.assign_op_local (| - BinOp.floor_div, - "n", - Constant.int 2 - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "res" |) - |) in - M.pure Constant.None_)) - ) - ]. + )) + |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "res" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. diff --git a/CoqOfPython/ethereum/crypto/finite_field.v b/CoqOfPython/ethereum/crypto/finite_field.v index 458e285..9fa8297 100644 --- a/CoqOfPython/ethereum/crypto/finite_field.v +++ b/CoqOfPython/ethereum/crypto/finite_field.v @@ -41,125 +41,127 @@ Definition F : Value.t := M.run ltac:(M.monadic ( |) )). -Definition Field : Value.t := - builtins.make_klass - [(globals, "Protocol")] - [ - ( - "zero", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "from_int", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ) - ] - [ - ( - "__radd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__iadd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__sub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__rsub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__rmul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__imul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__pow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__ipow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__neg__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ); - ( - "__truediv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := Constant.ellipsis in - M.pure Constant.None_)) - ) - ]. +Definition Field : Value.t := make_klass {| + Klass.bases := [ + (globals, "Protocol") + ]; + Klass.class_methods := [ + ( + "zero", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "from_int", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "__radd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__iadd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__sub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__rsub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__rmul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__imul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__pow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__ipow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__neg__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ); + ( + "__truediv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := Constant.ellipsis in + M.pure Constant.None_)) + ) + ]; +|}. Definition T : Value.t := M.run ltac:(M.monadic ( M.call (| @@ -171,16 +173,18 @@ Definition T : Value.t := M.run ltac:(M.monadic ( |) )). -Definition PrimeField : Value.t := - builtins.make_klass - [(globals, "int"); (globals, "Field")] - [ - ( - "from_be_bytes", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition PrimeField : Value.t := make_klass {| + Klass.bases := [ + (globals, "int"); + (globals, "Field") + ]; + Klass.class_methods := [ + ( + "from_be_bytes", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "buffer" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts a sequence of bytes into a element of the field. Parameters ---------- @@ -191,465 +195,465 @@ Definition PrimeField : Value.t := self : `T` Unsigned integer decoded from `buffer`. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), - make_list [ - M.get_name (| globals, locals_stack, "buffer" |); - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "zero", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - Constant.int 0 - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "from_int", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "cls" |), - make_list [ - M.get_name (| globals, locals_stack, "n" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "__new__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "value" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - BinOp.mod_ (| - M.get_name (| globals, locals_stack, "value" |), - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "PRIME" |) - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__radd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "from_bytes" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "buffer" |); + Constant.str "big" ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__iadd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "zero", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + Constant.int 0 + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "from_int", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "cls" |), + make_list [ + M.get_name (| globals, locals_stack, "n" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "__new__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "value" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + BinOp.mod_ (| + M.get_name (| globals, locals_stack, "value" |), + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "PRIME" |) + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__radd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__sub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rsub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__add__" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__iadd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__sub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.get_name (| globals, locals_stack, "int" |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |); - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__sub__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rsub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "left" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__pow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "int" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "exponent" |); - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__ipow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__rsub__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.get_name (| globals, locals_stack, "int" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__neg__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__neg__" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__truediv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - BinOp.mult (| - M.get_name (| globals, locals_stack, "self" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "right" |), "multiplicative_inverse" |), - make_list [], + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |); + M.get_name (| globals, locals_stack, "right" |) + ], make_dict [] |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__pow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__pow__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "int" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.get_name (| globals, locals_stack, "exponent" |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__ipow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__neg__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "int" |), "__neg__" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__truediv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "self" |), + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "right" |), "multiplicative_inverse" |), + make_list [], + make_dict [] |) - |) in - M.pure Constant.None_)) - ); - ( - "multiplicative_inverse", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - BinOp.pow (| - M.get_name (| globals, locals_stack, "self" |), - UnOp.sub (| Constant.int 1 |) - |) - |) in - M.pure Constant.None_)) - ); - ( - "to_be_bytes32", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |) + |) in + M.pure Constant.None_)) + ); + ( + "multiplicative_inverse", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + BinOp.pow (| + M.get_name (| globals, locals_stack, "self" |), + UnOp.sub (| Constant.int 1 |) + |) + |) in + M.pure Constant.None_)) + ); + ( + "to_be_bytes32", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Converts this arbitrarily sized unsigned integer into its big endian representation with exactly 32 bytes. Returns @@ -657,25 +661,26 @@ Definition PrimeField : Value.t := big_endian : `Bytes32` Big endian (most significant bits first) representation. " in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "Bytes32" |), - make_list [ - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), - make_list [ - Constant.int 32; - Constant.str "big" - ], - make_dict [] - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "Bytes32" |), + make_list [ + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "to_bytes" |), + make_list [ + Constant.int 32; + Constant.str "big" + ], + make_dict [] + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. Definition U : Value.t := M.run ltac:(M.monadic ( M.call (| @@ -687,90 +692,92 @@ Definition U : Value.t := M.run ltac:(M.monadic ( |) )). -Definition GaloisField : Value.t := - builtins.make_klass - [(globals, "tuple"); (globals, "Field")] - [ - ( - "zero", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - BinOp.mult (| +Definition GaloisField : Value.t := make_klass {| + Klass.bases := [ + (globals, "tuple"); + (globals, "Field") + ]; + Klass.class_methods := [ + ( + "zero", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + BinOp.mult (| + make_list [ + Constant.int 0 + ], + M.call (| + M.get_name (| globals, locals_stack, "len" |), make_list [ - Constant.int 0 + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) ], - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) - ], - make_dict [] - |) + make_dict [] |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "from_int", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - BinOp.add (| + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "from_int", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "n" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + BinOp.add (| + make_list [ + M.get_name (| globals, locals_stack, "n" |) + ], + BinOp.mult (| make_list [ - M.get_name (| globals, locals_stack, "n" |) + Constant.int 0 ], - BinOp.mult (| - make_list [ - Constant.int 0 - ], - BinOp.sub (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) - ], - make_dict [] - |), - Constant.int 1 - |) + BinOp.sub (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) + ], + make_dict [] + |), + Constant.int 1 |) |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "calculate_frobenius_coefficients", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "calculate_frobenius_coefficients", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls" ] in + ltac:(M.monadic ( + let _ := Constant.str " Calculate the coefficients needed by `frobenius()`. " in - let _ := M.assign_local (| - "coefficients" , - make_list [] - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + let _ := M.assign_local (| + "coefficients" , + make_list [] + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.call (| @@ -783,30 +790,30 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_local (| - "x" , - BinOp.mult (| + ltac:(M.monadic ( + let _ := M.assign_local (| + "x" , + BinOp.mult (| + make_list [ + Constant.int 0 + ], + M.call (| + M.get_name (| globals, locals_stack, "len" |), make_list [ - Constant.int 0 + M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) ], - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "cls" |), "MODULUS" |) - ], - make_dict [] - |) + make_dict [] |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x" |), - M.get_name (| globals, locals_stack, "i" |) - |), - Constant.int 1 - |) in - let _ := M.call (| + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x" |), + M.get_name (| globals, locals_stack, "i" |) + |), + Constant.int 1 + |) in + let _ := M.call (| M.get_field (| M.get_name (| globals, locals_stack, "coefficients" |), "append" |), make_list [ BinOp.pow (| @@ -823,42 +830,42 @@ Definition GaloisField : Value.t := ], make_dict [] |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.call (| - M.get_name (| globals, locals_stack, "tuple" |), - make_list [ - M.get_name (| globals, locals_stack, "coefficients" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ] - [ - ( - "__new__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "iterable" ] in - ltac:(M.monadic ( - let _ := M.assign_local (| - "self" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "tuple" |), "__new__" |), - make_list [ - M.get_name (| globals, locals_stack, "cls" |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" - ], - make_dict [] - |) - |) in - let _ := M.assert (| Compare.eq (| + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "tuple" |), + make_list [ + M.get_name (| globals, locals_stack, "coefficients" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; + Klass.methods := [ + ( + "__new__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "cls"; "iterable" ] in + ltac:(M.monadic ( + let _ := M.assign_local (| + "self" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "tuple" |), "__new__" |), + make_list [ + M.get_name (| globals, locals_stack, "cls" |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + let _ := M.assert (| Compare.eq (| M.call (| M.get_name (| globals, locals_stack, "len" |), make_list [ @@ -874,262 +881,262 @@ Definition GaloisField : Value.t := make_dict [] |) |) |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "self" |) - |) in - M.pure Constant.None_)) - ); - ( - "__add__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) - ], - make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__radd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__iadd__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "self" |) + |) in + M.pure Constant.None_)) + ); + ( + "__add__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_name (| globals, locals_stack, "right" |) + M.get_name (| globals, locals_stack, "right" |); + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__sub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), make_list [ - M.get_name (| globals, locals_stack, "right" |); - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in -(* At stmt: unsupported node type: AnnAssign *) -(* At stmt: unsupported node type: AnnAssign *) - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__radd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__iadd__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__add__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__sub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ + M.get_name (| globals, locals_stack, "right" |); M.call (| M.get_name (| globals, locals_stack, "type" |), make_list [ M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rsub__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - UnOp.not (| M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in +(* At stmt: unsupported node type: AnnAssign *) +(* At stmt: unsupported node type: AnnAssign *) + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), make_list [ - M.get_name (| globals, locals_stack, "left" |); - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |) |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rsub__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + UnOp.not (| M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ + M.get_name (| globals, locals_stack, "left" |); M.call (| M.get_name (| globals, locals_stack, "type" |), make_list [ M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__mul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + |) |), + (* then *) ltac:(M.monadic ( - let _ := M.assign_local (| - "modulus" , - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) - |) in - let _ := M.assign_local (| - "degree" , - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "modulus" |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "prime" , - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - |) in - let _ := M.assign_local (| - "mul" , + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__mul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.assign_local (| + "modulus" , + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) + |) in + let _ := M.assign_local (| + "degree" , + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "modulus" |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "prime" , + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + |) in + let _ := M.assign_local (| + "mul" , + BinOp.mult (| + make_list [ + Constant.int 0 + ], BinOp.mult (| - make_list [ - Constant.int 0 - ], - BinOp.mult (| - M.get_name (| globals, locals_stack, "degree" |), - Constant.int 2 - |) + M.get_name (| globals, locals_stack, "degree" |), + Constant.int 2 |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.get_name (| globals, locals_stack, "degree" |) ], make_dict [] |), - ltac:(M.monadic ( - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "j" |), - M.call (| + ltac:(M.monadic ( + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "j" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.get_name (| globals, locals_stack, "degree" |) ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op (| - BinOp.add, - M.get_subscript (| + ltac:(M.monadic ( + let _ := M.assign_op (| + BinOp.add, + M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), BinOp.add (| M.get_name (| globals, locals_stack, "i" |), M.get_name (| globals, locals_stack, "j" |) |) |), - BinOp.mult (| + BinOp.mult (| M.get_subscript (| M.get_name (| globals, locals_stack, "self" |), M.get_name (| globals, locals_stack, "i" |) @@ -1139,23 +1146,23 @@ Definition GaloisField : Value.t := M.get_name (| globals, locals_stack, "j" |) |) |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1173,11 +1180,11 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "j" |), - M.call (| + ltac:(M.monadic ( + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "j" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1188,14 +1195,14 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op (| - BinOp.sub, - M.get_subscript (| + ltac:(M.monadic ( + let _ := M.assign_op (| + BinOp.sub, + M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), M.get_name (| globals, locals_stack, "j" |) |), - BinOp.mod_ (| + BinOp.mod_ (| BinOp.mult (| M.get_subscript (| M.get_name (| globals, locals_stack, "mul" |), @@ -1214,153 +1221,153 @@ Definition GaloisField : Value.t := |), M.get_name (| globals, locals_stack, "prime" |) |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.slice (| - M.get_name (| globals, locals_stack, "mul" |), - Constant.None_, - M.get_name (| globals, locals_stack, "degree" |), - Constant.None_ - |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__rmul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "left" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__imul__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__truediv__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - BinOp.mult (| - M.get_name (| globals, locals_stack, "self" |), + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "right" |), "multiplicative_inverse" |), - make_list [], + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], make_dict [] + |); + M.slice (| + M.get_name (| globals, locals_stack, "mul" |), + Constant.None_, + M.get_name (| globals, locals_stack, "degree" |), + Constant.None_ |) - |) - |) in - M.pure Constant.None_)) - ); - ( - "__neg__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := M.return_ (| + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__rmul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "left" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "left" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__imul__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__mul__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__truediv__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "self" |), M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" - ], + M.get_field (| M.get_name (| globals, locals_stack, "right" |), "multiplicative_inverse" |), + make_list [], make_dict [] |) - |) in - M.pure Constant.None_)) - ); - ( - "scalar_mul", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "x" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |) + |) in + M.pure Constant.None_)) + ); + ( + "__neg__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "scalar_mul", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "x" ] in + ltac:(M.monadic ( + let _ := Constant.str " Multiply a field element by a integer. This is faster than using `from_int()` and field multiplication. " in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - Constant.str "(* At expr: unsupported node type: GeneratorExp *)" - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "deg", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + Constant.str "(* At expr: unsupported node type: GeneratorExp *)" + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "deg", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " This is a support function for `multiplicative_inverse()`. " in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1378,237 +1385,237 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "self" |), - M.get_name (| globals, locals_stack, "i" |) - |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "self" |), M.get_name (| globals, locals_stack, "i" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.raise (| Some (M.call (| - M.get_name (| globals, locals_stack, "ValueError" |), - make_list [ - Constant.str "deg() does not support zero" - ], - make_dict [] - |)) |) in - M.pure Constant.None_)) - ); - ( - "multiplicative_inverse", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "i" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.raise (| Some (M.call (| + M.get_name (| globals, locals_stack, "ValueError" |), + make_list [ + Constant.str "deg() does not support zero" + ], + make_dict [] + |)) |) in + M.pure Constant.None_)) + ); + ( + "multiplicative_inverse", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Calculate the multiplicative inverse. Uses the Euclidean algorithm. " in (* At stmt: unsupported node type: AnnAssign *) - let _ := M.assign_local (| - "p" , - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - |) in - let _ := M.assign (| - make_tuple [ M.get_name (| globals, locals_stack, "x1" |); M.get_name (| globals, locals_stack, "f1" |) ], - make_tuple [ M.call (| - M.get_name (| globals, locals_stack, "list" |), + let _ := M.assign_local (| + "p" , + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + |) in + let _ := M.assign (| + make_tuple [ M.get_name (| globals, locals_stack, "x1" |); M.get_name (| globals, locals_stack, "f1" |) ], + make_tuple [ M.call (| + M.get_name (| globals, locals_stack, "list" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) + ], + make_dict [] + |); BinOp.mult (| + make_list [ + Constant.int 0 + ], + M.call (| + M.get_name (| globals, locals_stack, "len" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) + M.get_name (| globals, locals_stack, "self" |) ], make_dict [] - |); BinOp.mult (| + |) + |) ] + |) in + let _ := M.assign (| + make_tuple [ M.get_name (| globals, locals_stack, "x2" |); M.get_name (| globals, locals_stack, "f2" |); M.get_name (| globals, locals_stack, "d2" |) ], + make_tuple [ M.call (| + M.get_name (| globals, locals_stack, "list" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); BinOp.add (| + make_list [ + Constant.int 1 + ], + BinOp.mult (| make_list [ Constant.int 0 ], - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |) - |) ] - |) in - let _ := M.assign (| - make_tuple [ M.get_name (| globals, locals_stack, "x2" |); M.get_name (| globals, locals_stack, "f2" |); M.get_name (| globals, locals_stack, "d2" |) ], - make_tuple [ M.call (| - M.get_name (| globals, locals_stack, "list" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); BinOp.add (| - make_list [ + BinOp.sub (| + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |), Constant.int 1 - ], - BinOp.mult (| - make_list [ - Constant.int 0 - ], - BinOp.sub (| - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |), - Constant.int 1 - |) |) - |); M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "deg" |), - make_list [], - make_dict [] - |) ] - |) in - let _ := M.assign_local (| - "q_0" , - M.call (| - M.get_name (| globals, locals_stack, "pow" |), - make_list [ - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - M.get_name (| globals, locals_stack, "d2" |) - |); - UnOp.sub (| Constant.int 1 |); - M.get_name (| globals, locals_stack, "p" |) - ], - make_dict [] |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |); M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "deg" |), + make_list [], + make_dict [] + |) ] + |) in + let _ := M.assign_local (| + "q_0" , + M.call (| + M.get_name (| globals, locals_stack, "pow" |), + make_list [ + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + M.get_name (| globals, locals_stack, "d2" |) + |); + UnOp.sub (| Constant.int 1 |); + M.get_name (| globals, locals_stack, "p" |) + ], + make_dict [] + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.get_name (| globals, locals_stack, "d2" |) ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - BinOp.sub (| - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "x1" |) - ], - make_dict [] - |) - |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |), - BinOp.mod_ (| - BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - BinOp.sub (| - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "x1" |) - ], - make_dict [] - |) - |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q_0" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - M.get_name (| globals, locals_stack, "i" |) - |) + ltac:(M.monadic ( + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + BinOp.sub (| + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "x1" |) + ], + make_dict [] |) |), - M.get_name (| globals, locals_stack, "p" |) + M.get_name (| globals, locals_stack, "d2" |) |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f1" |), - BinOp.sub (| - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "x1" |) - ], - make_dict [] - |) - |), - M.get_name (| globals, locals_stack, "d2" |) + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + BinOp.sub (| + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "x1" |) + ], + make_dict [] + |) + |), + M.get_name (| globals, locals_stack, "d2" |) + |) + |), + BinOp.mult (| + M.get_name (| globals, locals_stack, "q_0" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + M.get_name (| globals, locals_stack, "i" |) + |) |) |), - BinOp.mod_ (| - BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f1" |), - BinOp.sub (| - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_name (| globals, locals_stack, "x1" |) - ], - make_dict [] - |) - |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q_0" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "f2" |), - M.get_name (| globals, locals_stack, "i" |) - |) + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f1" |), + BinOp.sub (| + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "x1" |) + ], + make_dict [] |) |), - M.get_name (| globals, locals_stack, "p" |) + M.get_name (| globals, locals_stack, "d2" |) |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f1" |), + BinOp.sub (| + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_name (| globals, locals_stack, "x1" |) + ], + make_dict [] + |) + |), + M.get_name (| globals, locals_stack, "d2" |) + |) + |), + BinOp.mult (| + M.get_name (| globals, locals_stack, "q_0" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "f2" |), + M.get_name (| globals, locals_stack, "i" |) + |) + |) + |), + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1626,71 +1633,71 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.not_eq (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - M.get_name (| globals, locals_stack, "i" |) - |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "d1" , + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.not_eq (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), M.get_name (| globals, locals_stack, "i" |) - |) in - let _ := M.break (| |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.while (| - Constant.bool true, - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.eq (| - M.get_name (| globals, locals_stack, "d1" |), - Constant.int 0 |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "ans" , - M.get_name (| globals, locals_stack, "f1" |) - |) in - let _ := M.assign_local (| - "q" , + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "d1" , + M.get_name (| globals, locals_stack, "i" |) + |) in + let _ := M.break (| |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.while (| + Constant.bool true, + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "d1" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "ans" , + M.get_name (| globals, locals_stack, "f1" |) + |) in + let _ := M.assign_local (| + "q" , + M.call (| + M.get_name (| globals, locals_stack, "pow" |), + make_list [ + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + Constant.int 0 + |); + UnOp.sub (| Constant.int 1 |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + ], + make_dict [] + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), M.call (| - M.get_name (| globals, locals_stack, "pow" |), - make_list [ - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - Constant.int 0 - |); - UnOp.sub (| Constant.int 1 |); - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - ], - make_dict [] - |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.call (| @@ -1703,57 +1710,57 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op (| - BinOp.mult, - M.get_subscript (| + ltac:(M.monadic ( + let _ := M.assign_op (| + BinOp.mult, + M.get_subscript (| M.get_name (| globals, locals_stack, "ans" |), M.get_name (| globals, locals_stack, "i" |) |), - M.get_name (| globals, locals_stack, "q" |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.break (| |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.eq (| - M.get_name (| globals, locals_stack, "d2" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "ans" , - M.get_name (| globals, locals_stack, "f2" |) + M.get_name (| globals, locals_stack, "q" |) |) in - let _ := M.assign_local (| - "q" , + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.break (| |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + M.get_name (| globals, locals_stack, "d2" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "ans" , + M.get_name (| globals, locals_stack, "f2" |) + |) in + let _ := M.assign_local (| + "q" , + M.call (| + M.get_name (| globals, locals_stack, "pow" |), + make_list [ + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + Constant.int 0 + |); + UnOp.sub (| Constant.int 1 |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + ], + make_dict [] + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), M.call (| - M.get_name (| globals, locals_stack, "pow" |), - make_list [ - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - Constant.int 0 - |); - UnOp.sub (| Constant.int 1 |); - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - ], - make_dict [] - |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ M.call (| @@ -1766,60 +1773,60 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op_local (| - BinOp.mult, - "ans", - M.get_name (| globals, locals_stack, "q" |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.break (| |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - )) |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "d1" |), - M.get_name (| globals, locals_stack, "d2" |) - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "q" , - BinOp.mult (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - M.get_name (| globals, locals_stack, "d2" |) - |), - M.call (| - M.get_name (| globals, locals_stack, "pow" |), - make_list [ - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - M.get_name (| globals, locals_stack, "d1" |) - |); - UnOp.sub (| Constant.int 1 |); - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - ], - make_dict [] - |) + ltac:(M.monadic ( + let _ := M.assign_op_local (| + BinOp.mult, + "ans", + M.get_name (| globals, locals_stack, "q" |) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.break (| |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + M.pure Constant.None_ + )) |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "d1" |), + M.get_name (| globals, locals_stack, "d2" |) + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "q" , + BinOp.mult (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + M.get_name (| globals, locals_stack, "d2" |) + |), + M.call (| + M.get_name (| globals, locals_stack, "pow" |), + make_list [ + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + M.get_name (| globals, locals_stack, "d1" |) + |); + UnOp.sub (| Constant.int 1 |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + ], + make_dict [] |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1838,130 +1845,130 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d2" |), - M.get_name (| globals, locals_stack, "d1" |) - |) - |) - |), - BinOp.mod_ (| + ltac:(M.monadic ( + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d2" |), - M.get_name (| globals, locals_stack, "d1" |) - |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - M.get_name (| globals, locals_stack, "i" |) + M.get_name (| globals, locals_stack, "d2" |), + M.get_name (| globals, locals_stack, "d1" |) + |) + |) + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "d2" |), + M.get_name (| globals, locals_stack, "d1" |) |) |) |), - M.get_name (| globals, locals_stack, "p" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f2" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d2" |), - M.get_name (| globals, locals_stack, "d1" |) + BinOp.mult (| + M.get_name (| globals, locals_stack, "q" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + M.get_name (| globals, locals_stack, "i" |) |) |) |), - BinOp.mod_ (| + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f2" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f2" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d2" |), - M.get_name (| globals, locals_stack, "d1" |) - |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "f1" |), - M.get_name (| globals, locals_stack, "i" |) + M.get_name (| globals, locals_stack, "d2" |), + M.get_name (| globals, locals_stack, "d1" |) + |) + |) + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f2" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "d2" |), + M.get_name (| globals, locals_stack, "d1" |) |) |) |), - M.get_name (| globals, locals_stack, "p" |) - |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.while (| - Compare.eq (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "q" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "f1" |), + M.get_name (| globals, locals_stack, "i" |) + |) + |) + |), + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.while (| + Compare.eq (| M.get_subscript (| M.get_name (| globals, locals_stack, "x2" |), M.get_name (| globals, locals_stack, "d2" |) |), Constant.int 0 |), - ltac:(M.monadic ( - let _ := M.assign_op_local (| - BinOp.sub, - "d2", - Constant.int 1 - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - let _ := M.assign_local (| - "q" , - BinOp.mult (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - M.get_name (| globals, locals_stack, "d1" |) - |), - M.call (| - M.get_name (| globals, locals_stack, "pow" |), - make_list [ - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - M.get_name (| globals, locals_stack, "d2" |) - |); - UnOp.sub (| Constant.int 1 |); - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) - ], - make_dict [] - |) + ltac:(M.monadic ( + let _ := M.assign_op_local (| + BinOp.sub, + "d2", + Constant.int 1 + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + let _ := M.assign_local (| + "q" , + BinOp.mult (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + M.get_name (| globals, locals_stack, "d1" |) + |), + M.call (| + M.get_name (| globals, locals_stack, "pow" |), + make_list [ + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + M.get_name (| globals, locals_stack, "d2" |) + |); + UnOp.sub (| Constant.int 1 |); + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "PRIME" |) + ], + make_dict [] |) - |) in - let _ := - M.for_ (| - M.get_name (| globals, locals_stack, "i" |), - M.call (| + |) + |) in + let _ := + M.for_ (| + M.get_name (| globals, locals_stack, "i" |), + M.call (| M.get_name (| globals, locals_stack, "range" |), make_list [ BinOp.sub (| @@ -1980,306 +1987,306 @@ Definition GaloisField : Value.t := ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d1" |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |) - |), - BinOp.mod_ (| + ltac:(M.monadic ( + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "x1" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d1" |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "x2" |), - M.get_name (| globals, locals_stack, "i" |) + M.get_name (| globals, locals_stack, "d1" |), + M.get_name (| globals, locals_stack, "d2" |) + |) + |) + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "x1" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "d1" |), + M.get_name (| globals, locals_stack, "d2" |) |) |) |), - M.get_name (| globals, locals_stack, "p" |) - |) - |) in - let _ := M.assign (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f1" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d1" |), - M.get_name (| globals, locals_stack, "d2" |) + BinOp.mult (| + M.get_name (| globals, locals_stack, "q" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "x2" |), + M.get_name (| globals, locals_stack, "i" |) |) |) |), - BinOp.mod_ (| + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + let _ := M.assign (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f1" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), BinOp.sub (| - M.get_subscript (| - M.get_name (| globals, locals_stack, "f1" |), - BinOp.add (| - M.get_name (| globals, locals_stack, "i" |), - BinOp.sub (| - M.get_name (| globals, locals_stack, "d1" |), - M.get_name (| globals, locals_stack, "d2" |) - |) - |) - |), - BinOp.mult (| - M.get_name (| globals, locals_stack, "q" |), - M.get_subscript (| - M.get_name (| globals, locals_stack, "f2" |), - M.get_name (| globals, locals_stack, "i" |) + M.get_name (| globals, locals_stack, "d1" |), + M.get_name (| globals, locals_stack, "d2" |) + |) + |) + |), + BinOp.mod_ (| + BinOp.sub (| + M.get_subscript (| + M.get_name (| globals, locals_stack, "f1" |), + BinOp.add (| + M.get_name (| globals, locals_stack, "i" |), + BinOp.sub (| + M.get_name (| globals, locals_stack, "d1" |), + M.get_name (| globals, locals_stack, "d2" |) |) |) |), - M.get_name (| globals, locals_stack, "p" |) - |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := - M.while (| - Compare.eq (| + BinOp.mult (| + M.get_name (| globals, locals_stack, "q" |), + M.get_subscript (| + M.get_name (| globals, locals_stack, "f2" |), + M.get_name (| globals, locals_stack, "i" |) + |) + |) + |), + M.get_name (| globals, locals_stack, "p" |) + |) + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := + M.while (| + Compare.eq (| M.get_subscript (| M.get_name (| globals, locals_stack, "x1" |), M.get_name (| globals, locals_stack, "d1" |) |), Constant.int 0 |), - ltac:(M.monadic ( - let _ := M.assign_op_local (| - BinOp.sub, - "d1", - Constant.int 1 - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - M.pure Constant.None_ - )) |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), - make_list [ - M.get_name (| globals, locals_stack, "self" |) - ], - make_dict [] - |); - M.get_name (| globals, locals_stack, "ans" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "__pow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in - ltac:(M.monadic ( - let _ := M.assign_local (| - "degree" , - M.call (| - M.get_name (| globals, locals_stack, "len" |), - make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) - ], - make_dict [] - |) - |) in - let _ := - (* if *) - M.if_then_else (| - Compare.lt (| - M.get_name (| globals, locals_stack, "exponent" |), - Constant.int 0 - |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_local (| - "self" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "multiplicative_inverse" |), - make_list [], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "exponent" , - UnOp.sub (| M.get_name (| globals, locals_stack, "exponent" |) |) - |) in + ltac:(M.monadic ( + let _ := M.assign_op_local (| + BinOp.sub, + "d1", + Constant.int 1 + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + M.pure Constant.None_ + )) |) in M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( + )), + ltac:(M.monadic ( M.pure Constant.None_ - )) |) in - let _ := M.assign_local (| - "res" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), - make_list [ - M.call (| - M.get_name (| globals, locals_stack, "type" |), + )) + |) in + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + M.get_name (| globals, locals_stack, "ans" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "__pow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "exponent" ] in + ltac:(M.monadic ( + let _ := M.assign_local (| + "degree" , + M.call (| + M.get_name (| globals, locals_stack, "len" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "MODULUS" |) + ], + make_dict [] + |) + |) in + let _ := + (* if *) + M.if_then_else (| + Compare.lt (| + M.get_name (| globals, locals_stack, "exponent" |), + Constant.int 0 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_local (| + "self" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "multiplicative_inverse" |), + make_list [], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "exponent" , + UnOp.sub (| M.get_name (| globals, locals_stack, "exponent" |) |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_local (| + "res" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__new__" |), + make_list [ + M.call (| + M.get_name (| globals, locals_stack, "type" |), + make_list [ + M.get_name (| globals, locals_stack, "self" |) + ], + make_dict [] + |); + BinOp.add (| + make_list [ + Constant.int 1 + ], + BinOp.mult (| make_list [ - M.get_name (| globals, locals_stack, "self" |) + Constant.int 0 ], - make_dict [] - |); - BinOp.add (| - make_list [ + BinOp.sub (| + M.get_name (| globals, locals_stack, "degree" |), Constant.int 1 - ], - BinOp.mult (| - make_list [ - Constant.int 0 - ], - BinOp.sub (| - M.get_name (| globals, locals_stack, "degree" |), - Constant.int 1 - |) |) |) - ], - make_dict [] - |) - |) in - let _ := M.assign_local (| - "s" , - M.get_name (| globals, locals_stack, "self" |) - |) in - let _ := - M.while (| - Compare.not_eq (| + |) + ], + make_dict [] + |) + |) in + let _ := M.assign_local (| + "s" , + M.get_name (| globals, locals_stack, "self" |) + |) in + let _ := + M.while (| + Compare.not_eq (| M.get_name (| globals, locals_stack, "exponent" |), Constant.int 0 |), - ltac:(M.monadic ( - let _ := - (* if *) - M.if_then_else (| - Compare.eq (| - BinOp.mod_ (| - M.get_name (| globals, locals_stack, "exponent" |), - Constant.int 2 - |), - Constant.int 1 + ltac:(M.monadic ( + let _ := + (* if *) + M.if_then_else (| + Compare.eq (| + BinOp.mod_ (| + M.get_name (| globals, locals_stack, "exponent" |), + Constant.int 2 |), - (* then *) - ltac:(M.monadic ( - let _ := M.assign_op_local (| - BinOp.mult, - "res", - M.get_name (| globals, locals_stack, "s" |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.assign_op_local (| - BinOp.mult, - "s", - M.get_name (| globals, locals_stack, "s" |) - |) in - let _ := M.assign_op_local (| - BinOp.floor_div, - "exponent", - Constant.int 2 - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "res" |) - |) in - M.pure Constant.None_)) - ); - ( - "__ipow__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in - ltac:(M.monadic ( - let _ := M.return_ (| - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), - make_list [ - M.get_name (| globals, locals_stack, "right" |) - ], - make_dict [] - |) - |) in - M.pure Constant.None_)) - ); - ( - "frobenius", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + Constant.int 1 + |), + (* then *) + ltac:(M.monadic ( + let _ := M.assign_op_local (| + BinOp.mult, + "res", + M.get_name (| globals, locals_stack, "s" |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.assign_op_local (| + BinOp.mult, + "s", + M.get_name (| globals, locals_stack, "s" |) + |) in + let _ := M.assign_op_local (| + BinOp.floor_div, + "exponent", + Constant.int 2 + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "res" |) + |) in + M.pure Constant.None_)) + ); + ( + "__ipow__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "right" ] in + ltac:(M.monadic ( + let _ := M.return_ (| + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "__pow__" |), + make_list [ + M.get_name (| globals, locals_stack, "right" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ); + ( + "frobenius", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " Returns `self ** p`. This function is known as the Frobenius endomorphism and has many special mathematical properties. In particular it is extremely cheap to compute compared to other exponentiations. " in - let _ := M.assign_local (| - "ans" , - M.call (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "from_int" |), - make_list [ - Constant.int 0 - ], - make_dict [] - |) - |) in + let _ := M.assign_local (| + "ans" , + M.call (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "from_int" |), + make_list [ + Constant.int 0 + ], + make_dict [] + |) + |) in (* At stmt: unsupported node type: AnnAssign *) - let _ := - M.for_ (| - make_tuple [ M.get_name (| globals, locals_stack, "i" |); M.get_name (| globals, locals_stack, "a" |) ], - M.call (| + let _ := + M.for_ (| + make_tuple [ M.get_name (| globals, locals_stack, "i" |); M.get_name (| globals, locals_stack, "a" |) ], + M.call (| M.get_name (| globals, locals_stack, "enumerate" |), make_list [ M.get_name (| globals, locals_stack, "self" |) ], make_dict [] |), - ltac:(M.monadic ( - let _ := M.assign_op_local (| - BinOp.add, - "ans", - M.call (| + ltac:(M.monadic ( + let _ := M.assign_op_local (| + BinOp.add, + "ans", + M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "cast" |), make_list [ @@ -2296,16 +2303,17 @@ Definition GaloisField : Value.t := ], make_dict [] |) - |) in - M.pure Constant.None_ - )), - ltac:(M.monadic ( - M.pure Constant.None_ - )) - |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "ans" |) - |) in - M.pure Constant.None_)) - ) - ]. + |) in + M.pure Constant.None_ + )), + ltac:(M.monadic ( + M.pure Constant.None_ + )) + |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "ans" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. diff --git a/CoqOfPython/ethereum/dao_fork/blocks.v b/CoqOfPython/ethereum/dao_fork/blocks.v index ddecfb8..717862f 100644 --- a/CoqOfPython/ethereum/dao_fork/blocks.v +++ b/CoqOfPython/ethereum/dao_fork/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_dao_fork_fork_types_imports_Root : Axiom ethereum_dao_fork_transactions_imports_Transaction : IsImported globals "ethereum.dao_fork.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/dao_fork/fork.v b/CoqOfPython/ethereum/dao_fork/fork.v index c21ef9d..b1467d1 100644 --- a/CoqOfPython/ethereum/dao_fork/fork.v +++ b/CoqOfPython/ethereum/dao_fork/fork.v @@ -179,15 +179,14 @@ Definition MAX_OMMER_DEPTH : Value.t := M.run ltac:(M.monadic ( Constant.int 6 )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -938,15 +937,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/dao_fork/fork_types.v b/CoqOfPython/ethereum/dao_fork/fork_types.v index 0a9b4d5..d55f40c 100644 --- a/CoqOfPython/ethereum/dao_fork/fork_types.v +++ b/CoqOfPython/ethereum/dao_fork/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/dao_fork/state.v b/CoqOfPython/ethereum/dao_fork/state.v index 51f8471..81d41be 100644 --- a/CoqOfPython/ethereum/dao_fork/state.v +++ b/CoqOfPython/ethereum/dao_fork/state.v @@ -74,15 +74,14 @@ Axiom ethereum_dao_fork_trie_imports_trie_get : Axiom ethereum_dao_fork_trie_imports_trie_set : IsImported globals "ethereum.dao_fork.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/dao_fork/transactions.v b/CoqOfPython/ethereum/dao_fork/transactions.v index 3da1347..656a0c8 100644 --- a/CoqOfPython/ethereum/dao_fork/transactions.v +++ b/CoqOfPython/ethereum/dao_fork/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/dao_fork/trie.v b/CoqOfPython/ethereum/dao_fork/trie.v index 876db76..3f75039 100644 --- a/CoqOfPython/ethereum/dao_fork/trie.v +++ b/CoqOfPython/ethereum/dao_fork/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/dao_fork/vm/__init__.v b/CoqOfPython/ethereum/dao_fork/vm/__init__.v index e084d76..4070e47 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/__init__.v +++ b/CoqOfPython/ethereum/dao_fork/vm/__init__.v @@ -59,35 +59,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/dao_fork/vm/exceptions.v b/CoqOfPython/ethereum/dao_fork/vm/exceptions.v index 8544beb..d1e0a81 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/exceptions.v +++ b/CoqOfPython/ethereum/dao_fork/vm/exceptions.v @@ -22,59 +22,59 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -85,40 +85,41 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/dao_fork/vm/gas.v b/CoqOfPython/ethereum/dao_fork/vm/gas.v index e234492..4ad4c35 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/gas.v +++ b/CoqOfPython/ethereum/dao_fork/vm/gas.v @@ -424,25 +424,23 @@ Definition GAS_IDENTITY_WORD : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/dao_fork/vm/instructions/__init__.v b/CoqOfPython/ethereum/dao_fork/vm/instructions/__init__.v index e8eadb1..3296b0f 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/dao_fork/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_dao_fork_vm_instructions_imports_storage : Axiom ethereum_dao_fork_vm_instructions_imports_system : IsImported globals "ethereum.dao_fork.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/dao_fork/vm/interpreter.v b/CoqOfPython/ethereum/dao_fork/vm/interpreter.v index fa172b4..6c19207 100644 --- a/CoqOfPython/ethereum/dao_fork/vm/interpreter.v +++ b/CoqOfPython/ethereum/dao_fork/vm/interpreter.v @@ -119,15 +119,14 @@ Definition STACK_DEPTH_LIMIT : Value.t := M.run ltac:(M.monadic ( |) )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/exceptions.v b/CoqOfPython/ethereum/exceptions.v index 4823691..52dd27c 100644 --- a/CoqOfPython/ethereum/exceptions.v +++ b/CoqOfPython/ethereum/exceptions.v @@ -19,42 +19,42 @@ Introduction The Ethereum specification exception classes. ". -Definition EthereumException : Value.t := - builtins.make_klass - [(globals, "Exception")] - [ - - ] - [ - - ]. - -Definition InvalidBlock : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition RLPDecodingError : Value.t := - builtins.make_klass - [(globals, "InvalidBlock")] - [ - - ] - [ - - ]. - -Definition RLPEncodingError : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. +Definition EthereumException : Value.t := make_klass {| + Klass.bases := [ + (globals, "Exception") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidBlock : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition RLPDecodingError : Value.t := make_klass {| + Klass.bases := [ + (globals, "InvalidBlock") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition RLPEncodingError : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/fork_criteria.v b/CoqOfPython/ethereum/fork_criteria.v index f4745fa..d8148fe 100644 --- a/CoqOfPython/ethereum/fork_criteria.v +++ b/CoqOfPython/ethereum/fork_criteria.v @@ -31,257 +31,261 @@ Axiom typing_imports_Final : Axiom typing_imports_Tuple : IsImported globals "typing" "Tuple". -Definition ForkCriteria : Value.t := - builtins.make_klass - [(globals, "ABC")] - [ - - ] - [ - ( - "__eq__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition ForkCriteria : Value.t := make_klass {| + Klass.bases := [ + (globals, "ABC") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__eq__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in + ltac:(M.monadic ( + let _ := Constant.str " Equality for fork criteria. " in - let _ := - (* if *) - M.if_then_else (| - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "other" |); - M.get_name (| globals, locals_stack, "ForkCriteria" |) - ], - make_dict [] - |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - Compare.eq (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), - M.get_field (| M.get_name (| globals, locals_stack, "other" |), "_internal" |) - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_)) - ); - ( - "__lt__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in + let _ := + (* if *) + M.if_then_else (| + M.call (| + M.get_name (| globals, locals_stack, "isinstance" |), + make_list [ + M.get_name (| globals, locals_stack, "other" |); + M.get_name (| globals, locals_stack, "ForkCriteria" |) + ], + make_dict [] + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Compare.eq (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), + M.get_field (| M.get_name (| globals, locals_stack, "other" |), "_internal" |) + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_)) + ); + ( + "__lt__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "other" ] in + ltac:(M.monadic ( + let _ := Constant.str " Ordering for fork criteria. Block number forks are before timestamp forks and scheduled forks are before unscheduled forks. " in - let _ := - (* if *) - M.if_then_else (| - M.call (| - M.get_name (| globals, locals_stack, "isinstance" |), - make_list [ - M.get_name (| globals, locals_stack, "other" |); - M.get_name (| globals, locals_stack, "ForkCriteria" |) - ], - make_dict [] - |), - (* then *) - ltac:(M.monadic ( - let _ := M.return_ (| - Compare.lt (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), - M.get_field (| M.get_name (| globals, locals_stack, "other" |), "_internal" |) - |) - |) in - M.pure Constant.None_ - (* else *) - )), ltac:(M.monadic ( - M.pure Constant.None_ - )) |) in - let _ := M.return_ (| - M.get_name (| globals, locals_stack, "NotImplemented" |) - |) in - M.pure Constant.None_)) - ); - ( - "__hash__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " - `ForkCriteria` is hashable, so it can be stored in dictionaries. - " in - let _ := M.return_ (| + let _ := + (* if *) + M.if_then_else (| M.call (| - M.get_name (| globals, locals_stack, "hash" |), + M.get_name (| globals, locals_stack, "isinstance" |), make_list [ - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |) + M.get_name (| globals, locals_stack, "other" |); + M.get_name (| globals, locals_stack, "ForkCriteria" |) ], make_dict [] - |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition ByBlockNumber : Value.t := - builtins.make_klass - [(globals, "ForkCriteria")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number" ] in - ltac:(M.monadic ( - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "BLOCK_NUMBER" |); M.get_name (| globals, locals_stack, "block_number" |) ] - |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "block_number" |), - M.get_name (| globals, locals_stack, "block_number" |) - |) in - M.pure Constant.None_)) - ); - ( - "check", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in + |), + (* then *) ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Compare.lt (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), + M.get_field (| M.get_name (| globals, locals_stack, "other" |), "_internal" |) + |) + |) in + M.pure Constant.None_ + (* else *) + )), ltac:(M.monadic ( + M.pure Constant.None_ + )) |) in + let _ := M.return_ (| + M.get_name (| globals, locals_stack, "NotImplemented" |) + |) in + M.pure Constant.None_)) + ); + ( + "__hash__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " + `ForkCriteria` is hashable, so it can be stored in dictionaries. + " in + let _ := M.return_ (| + M.call (| + M.get_name (| globals, locals_stack, "hash" |), + make_list [ + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |) + ], + make_dict [] + |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition ByBlockNumber : Value.t := make_klass {| + Klass.bases := [ + (globals, "ForkCriteria") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number" ] in + ltac:(M.monadic ( + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "BLOCK_NUMBER" |); M.get_name (| globals, locals_stack, "block_number" |) ] + |) in + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "block_number" |), + M.get_name (| globals, locals_stack, "block_number" |) + |) in + M.pure Constant.None_)) + ); + ( + "check", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in + ltac:(M.monadic ( + let _ := Constant.str " Check whether the block number has been reached. " in - let _ := M.return_ (| - Compare.gt_e (| - M.get_name (| globals, locals_stack, "block_number" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "block_number" |) - |) - |) in - M.pure Constant.None_)) - ); - ( - "__repr__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "block_number" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "block_number" |) + |) + |) in + M.pure Constant.None_)) + ); + ( + "__repr__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " String representation of this object. " in - let _ := M.return_ (| - Constant.str "(* At expr: unsupported node type: JoinedStr *)" - |) in - M.pure Constant.None_)) - ) - ]. - -Definition ByTimestamp : Value.t := - builtins.make_klass - [(globals, "ForkCriteria")] - [ + let _ := M.return_ (| + Constant.str "(* At expr: unsupported node type: JoinedStr *)" + |) in + M.pure Constant.None_)) + ) + ]; +|}. - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "timestamp" ] in - ltac:(M.monadic ( - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "TIMESTAMP" |); M.get_name (| globals, locals_stack, "timestamp" |) ] - |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "timestamp" |), - M.get_name (| globals, locals_stack, "timestamp" |) - |) in - M.pure Constant.None_)) - ); - ( - "check", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition ByTimestamp : Value.t := make_klass {| + Klass.bases := [ + (globals, "ForkCriteria") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "timestamp" ] in + ltac:(M.monadic ( + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "TIMESTAMP" |); M.get_name (| globals, locals_stack, "timestamp" |) ] + |) in + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "timestamp" |), + M.get_name (| globals, locals_stack, "timestamp" |) + |) in + M.pure Constant.None_)) + ); + ( + "check", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in + ltac:(M.monadic ( + let _ := Constant.str " Check whether the timestamp has been reached. " in - let _ := M.return_ (| - Compare.gt_e (| - M.get_name (| globals, locals_stack, "timestamp" |), - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "timestamp" |) - |) - |) in - M.pure Constant.None_)) - ); - ( - "__repr__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Compare.gt_e (| + M.get_name (| globals, locals_stack, "timestamp" |), + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "timestamp" |) + |) + |) in + M.pure Constant.None_)) + ); + ( + "__repr__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " String representation of this object. " in - let _ := M.return_ (| - Constant.str "(* At expr: unsupported node type: JoinedStr *)" - |) in - M.pure Constant.None_)) - ) - ]. - -Definition Unscheduled : Value.t := - builtins.make_klass - [(globals, "ForkCriteria")] - [ + let _ := M.return_ (| + Constant.str "(* At expr: unsupported node type: JoinedStr *)" + |) in + M.pure Constant.None_)) + ) + ]; +|}. - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), - make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "UNSCHEDULED" |); Constant.int 0 ] - |) in - M.pure Constant.None_)) - ); - ( - "check", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in - ltac:(M.monadic ( - let _ := Constant.str " +Definition Unscheduled : Value.t := make_klass {| + Klass.bases := [ + (globals, "ForkCriteria") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "_internal" |), + make_tuple [ M.get_field (| M.get_name (| globals, locals_stack, "ForkCriteria" |), "UNSCHEDULED" |); Constant.int 0 ] + |) in + M.pure Constant.None_)) + ); + ( + "check", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "block_number"; "timestamp" ] in + ltac:(M.monadic ( + let _ := Constant.str " Unscheduled forks never occur. " in - let _ := M.return_ (| - Constant.bool false - |) in - M.pure Constant.None_)) - ); - ( - "__repr__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in - ltac:(M.monadic ( - let _ := Constant.str " + let _ := M.return_ (| + Constant.bool false + |) in + M.pure Constant.None_)) + ); + ( + "__repr__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self" ] in + ltac:(M.monadic ( + let _ := Constant.str " String representation of this object. " in - let _ := M.return_ (| - Constant.str "Unscheduled()" - |) in - M.pure Constant.None_)) - ) - ]. + let _ := M.return_ (| + Constant.str "Unscheduled()" + |) in + M.pure Constant.None_)) + ) + ]; +|}. diff --git a/CoqOfPython/ethereum/frontier/blocks.v b/CoqOfPython/ethereum/frontier/blocks.v index e976a96..2936adb 100644 --- a/CoqOfPython/ethereum/frontier/blocks.v +++ b/CoqOfPython/ethereum/frontier/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_frontier_fork_types_imports_Root : Axiom ethereum_frontier_transactions_imports_Transaction : IsImported globals "ethereum.frontier.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/frontier/fork.v b/CoqOfPython/ethereum/frontier/fork.v index 3050de5..0c1207b 100644 --- a/CoqOfPython/ethereum/frontier/fork.v +++ b/CoqOfPython/ethereum/frontier/fork.v @@ -167,15 +167,14 @@ Definition MAX_OMMER_DEPTH : Value.t := M.run ltac:(M.monadic ( Constant.int 6 )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -876,15 +875,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/frontier/fork_types.v b/CoqOfPython/ethereum/frontier/fork_types.v index 36db524..a3d8cfd 100644 --- a/CoqOfPython/ethereum/frontier/fork_types.v +++ b/CoqOfPython/ethereum/frontier/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/frontier/state.v b/CoqOfPython/ethereum/frontier/state.v index bafaf00..938c52f 100644 --- a/CoqOfPython/ethereum/frontier/state.v +++ b/CoqOfPython/ethereum/frontier/state.v @@ -74,15 +74,14 @@ Axiom ethereum_frontier_trie_imports_trie_get : Axiom ethereum_frontier_trie_imports_trie_set : IsImported globals "ethereum.frontier.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/frontier/transactions.v b/CoqOfPython/ethereum/frontier/transactions.v index 995a9a0..7db2093 100644 --- a/CoqOfPython/ethereum/frontier/transactions.v +++ b/CoqOfPython/ethereum/frontier/transactions.v @@ -43,12 +43,11 @@ Definition TX_DATA_COST_PER_ZERO : Value.t := M.run ltac:(M.monadic ( Constant.int 4 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/frontier/trie.v b/CoqOfPython/ethereum/frontier/trie.v index ddc6426..59ff15a 100644 --- a/CoqOfPython/ethereum/frontier/trie.v +++ b/CoqOfPython/ethereum/frontier/trie.v @@ -148,35 +148,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -473,15 +470,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/frontier/vm/__init__.v b/CoqOfPython/ethereum/frontier/vm/__init__.v index 8324117..3e42362 100644 --- a/CoqOfPython/ethereum/frontier/vm/__init__.v +++ b/CoqOfPython/ethereum/frontier/vm/__init__.v @@ -59,35 +59,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/frontier/vm/exceptions.v b/CoqOfPython/ethereum/frontier/vm/exceptions.v index e226ebc..a65204a 100644 --- a/CoqOfPython/ethereum/frontier/vm/exceptions.v +++ b/CoqOfPython/ethereum/frontier/vm/exceptions.v @@ -22,59 +22,59 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -85,40 +85,41 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/frontier/vm/gas.v b/CoqOfPython/ethereum/frontier/vm/gas.v index 8a4c58b..f2f5a20 100644 --- a/CoqOfPython/ethereum/frontier/vm/gas.v +++ b/CoqOfPython/ethereum/frontier/vm/gas.v @@ -424,25 +424,23 @@ Definition GAS_IDENTITY_WORD : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/frontier/vm/instructions/__init__.v b/CoqOfPython/ethereum/frontier/vm/instructions/__init__.v index 543b21d..386e475 100644 --- a/CoqOfPython/ethereum/frontier/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/frontier/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_frontier_vm_instructions_imports_storage : Axiom ethereum_frontier_vm_instructions_imports_system : IsImported globals "ethereum.frontier.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/frontier/vm/interpreter.v b/CoqOfPython/ethereum/frontier/vm/interpreter.v index 09c24c0..56a203a 100644 --- a/CoqOfPython/ethereum/frontier/vm/interpreter.v +++ b/CoqOfPython/ethereum/frontier/vm/interpreter.v @@ -119,15 +119,14 @@ Definition STACK_DEPTH_LIMIT : Value.t := M.run ltac:(M.monadic ( |) )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/genesis.v b/CoqOfPython/ethereum/genesis.v index 0110c66..f4121b8 100644 --- a/CoqOfPython/ethereum/genesis.v +++ b/CoqOfPython/ethereum/genesis.v @@ -67,15 +67,14 @@ Definition Address : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes20" |) )). -Definition GenesisConfiguration : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition GenesisConfiguration : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition get_genesis_configuration : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/blocks.v b/CoqOfPython/ethereum/gray_glacier/blocks.v index 2713c4f..6b3b8e8 100644 --- a/CoqOfPython/ethereum/gray_glacier/blocks.v +++ b/CoqOfPython/ethereum/gray_glacier/blocks.v @@ -50,42 +50,38 @@ Axiom ethereum_gray_glacier_fork_types_imports_Root : Axiom ethereum_gray_glacier_transactions_imports_LegacyTransaction : IsImported globals "ethereum.gray_glacier.transactions" "LegacyTransaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/gray_glacier/fork.v b/CoqOfPython/ethereum/gray_glacier/fork.v index 2ef29ca..fec80de 100644 --- a/CoqOfPython/ethereum/gray_glacier/fork.v +++ b/CoqOfPython/ethereum/gray_glacier/fork.v @@ -216,15 +216,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1267,15 +1266,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/fork_types.v b/CoqOfPython/ethereum/gray_glacier/fork_types.v index 75bf012..702375b 100644 --- a/CoqOfPython/ethereum/gray_glacier/fork_types.v +++ b/CoqOfPython/ethereum/gray_glacier/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/gray_glacier/state.v b/CoqOfPython/ethereum/gray_glacier/state.v index 17cb1ef..3ed4a4d 100644 --- a/CoqOfPython/ethereum/gray_glacier/state.v +++ b/CoqOfPython/ethereum/gray_glacier/state.v @@ -76,15 +76,14 @@ Axiom ethereum_gray_glacier_trie_imports_trie_get : Axiom ethereum_gray_glacier_trie_imports_trie_set : IsImported globals "ethereum.gray_glacier.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/transactions.v b/CoqOfPython/ethereum/gray_glacier/transactions.v index 89d391d..1754578 100644 --- a/CoqOfPython/ethereum/gray_glacier/transactions.v +++ b/CoqOfPython/ethereum/gray_glacier/transactions.v @@ -67,35 +67,32 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/gray_glacier/trie.v b/CoqOfPython/ethereum/gray_glacier/trie.v index 001f2f3..c3cc1b3 100644 --- a/CoqOfPython/ethereum/gray_glacier/trie.v +++ b/CoqOfPython/ethereum/gray_glacier/trie.v @@ -157,35 +157,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -485,15 +482,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/vm/__init__.v b/CoqOfPython/ethereum/gray_glacier/vm/__init__.v index fcf36c9..a6e0fb1 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/__init__.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/vm/exceptions.v b/CoqOfPython/ethereum/gray_glacier/vm/exceptions.v index 9455938..1177ea3 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/exceptions.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,80 +95,81 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/gray_glacier/vm/gas.v b/CoqOfPython/ethereum/gray_glacier/vm/gas.v index 6691103..559a469 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/gas.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/gas.v @@ -446,25 +446,23 @@ Definition GAS_WARM_ACCESS : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/gray_glacier/vm/instructions/__init__.v b/CoqOfPython/ethereum/gray_glacier/vm/instructions/__init__.v index aec2c0b..b53f8a6 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_gray_glacier_vm_instructions_imports_storage : Axiom ethereum_gray_glacier_vm_instructions_imports_system : IsImported globals "ethereum.gray_glacier.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v b/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v index 3227434..df5155f 100644 --- a/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/gray_glacier/vm/interpreter.v @@ -140,15 +140,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/blocks.v b/CoqOfPython/ethereum/homestead/blocks.v index a91ad83..81da773 100644 --- a/CoqOfPython/ethereum/homestead/blocks.v +++ b/CoqOfPython/ethereum/homestead/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_homestead_fork_types_imports_Root : Axiom ethereum_homestead_transactions_imports_Transaction : IsImported globals "ethereum.homestead.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/homestead/fork.v b/CoqOfPython/ethereum/homestead/fork.v index 4f70853..958b4c5 100644 --- a/CoqOfPython/ethereum/homestead/fork.v +++ b/CoqOfPython/ethereum/homestead/fork.v @@ -172,15 +172,14 @@ Definition MAX_OMMER_DEPTH : Value.t := M.run ltac:(M.monadic ( Constant.int 6 )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -881,15 +880,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/fork_types.v b/CoqOfPython/ethereum/homestead/fork_types.v index 59ba66d..cfc69ac 100644 --- a/CoqOfPython/ethereum/homestead/fork_types.v +++ b/CoqOfPython/ethereum/homestead/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/homestead/state.v b/CoqOfPython/ethereum/homestead/state.v index cfc2954..53a7f48 100644 --- a/CoqOfPython/ethereum/homestead/state.v +++ b/CoqOfPython/ethereum/homestead/state.v @@ -74,15 +74,14 @@ Axiom ethereum_homestead_trie_imports_trie_get : Axiom ethereum_homestead_trie_imports_trie_set : IsImported globals "ethereum.homestead.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/transactions.v b/CoqOfPython/ethereum/homestead/transactions.v index c51a67c..41a9bed 100644 --- a/CoqOfPython/ethereum/homestead/transactions.v +++ b/CoqOfPython/ethereum/homestead/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/homestead/trie.v b/CoqOfPython/ethereum/homestead/trie.v index 6cc6e14..dd8f289 100644 --- a/CoqOfPython/ethereum/homestead/trie.v +++ b/CoqOfPython/ethereum/homestead/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/vm/__init__.v b/CoqOfPython/ethereum/homestead/vm/__init__.v index 4b090d3..e53a63d 100644 --- a/CoqOfPython/ethereum/homestead/vm/__init__.v +++ b/CoqOfPython/ethereum/homestead/vm/__init__.v @@ -59,35 +59,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/vm/exceptions.v b/CoqOfPython/ethereum/homestead/vm/exceptions.v index 5a0a5b0..c62c2d7 100644 --- a/CoqOfPython/ethereum/homestead/vm/exceptions.v +++ b/CoqOfPython/ethereum/homestead/vm/exceptions.v @@ -22,59 +22,59 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -85,40 +85,41 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/homestead/vm/gas.v b/CoqOfPython/ethereum/homestead/vm/gas.v index 51339bb..314b80f 100644 --- a/CoqOfPython/ethereum/homestead/vm/gas.v +++ b/CoqOfPython/ethereum/homestead/vm/gas.v @@ -424,25 +424,23 @@ Definition GAS_IDENTITY_WORD : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/homestead/vm/instructions/__init__.v b/CoqOfPython/ethereum/homestead/vm/instructions/__init__.v index 258a081..4e70c0f 100644 --- a/CoqOfPython/ethereum/homestead/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/homestead/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_homestead_vm_instructions_imports_storage : Axiom ethereum_homestead_vm_instructions_imports_system : IsImported globals "ethereum.homestead.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/homestead/vm/interpreter.v b/CoqOfPython/ethereum/homestead/vm/interpreter.v index 3bca6f2..1f8d320 100644 --- a/CoqOfPython/ethereum/homestead/vm/interpreter.v +++ b/CoqOfPython/ethereum/homestead/vm/interpreter.v @@ -119,15 +119,14 @@ Definition STACK_DEPTH_LIMIT : Value.t := M.run ltac:(M.monadic ( |) )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/blocks.v b/CoqOfPython/ethereum/istanbul/blocks.v index 50a1dcb..60af2aa 100644 --- a/CoqOfPython/ethereum/istanbul/blocks.v +++ b/CoqOfPython/ethereum/istanbul/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_istanbul_fork_types_imports_Root : Axiom ethereum_istanbul_transactions_imports_Transaction : IsImported globals "ethereum.istanbul.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/istanbul/fork.v b/CoqOfPython/ethereum/istanbul/fork.v index cfe8967..76a26c4 100644 --- a/CoqOfPython/ethereum/istanbul/fork.v +++ b/CoqOfPython/ethereum/istanbul/fork.v @@ -192,15 +192,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -913,15 +912,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/fork_types.v b/CoqOfPython/ethereum/istanbul/fork_types.v index 028fcf9..7bd8849 100644 --- a/CoqOfPython/ethereum/istanbul/fork_types.v +++ b/CoqOfPython/ethereum/istanbul/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/istanbul/state.v b/CoqOfPython/ethereum/istanbul/state.v index 2ac67fd..8675ac6 100644 --- a/CoqOfPython/ethereum/istanbul/state.v +++ b/CoqOfPython/ethereum/istanbul/state.v @@ -76,15 +76,14 @@ Axiom ethereum_istanbul_trie_imports_trie_get : Axiom ethereum_istanbul_trie_imports_trie_set : IsImported globals "ethereum.istanbul.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/transactions.v b/CoqOfPython/ethereum/istanbul/transactions.v index b3f8e81..91be7ac 100644 --- a/CoqOfPython/ethereum/istanbul/transactions.v +++ b/CoqOfPython/ethereum/istanbul/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/istanbul/trie.v b/CoqOfPython/ethereum/istanbul/trie.v index ad14cf0..67f365f 100644 --- a/CoqOfPython/ethereum/istanbul/trie.v +++ b/CoqOfPython/ethereum/istanbul/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/vm/__init__.v b/CoqOfPython/ethereum/istanbul/vm/__init__.v index d1881e2..0f16800 100644 --- a/CoqOfPython/ethereum/istanbul/vm/__init__.v +++ b/CoqOfPython/ethereum/istanbul/vm/__init__.v @@ -66,35 +66,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/vm/exceptions.v b/CoqOfPython/ethereum/istanbul/vm/exceptions.v index 60bd736..6dad9a4 100644 --- a/CoqOfPython/ethereum/istanbul/vm/exceptions.v +++ b/CoqOfPython/ethereum/istanbul/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,70 +95,71 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/istanbul/vm/gas.v b/CoqOfPython/ethereum/istanbul/vm/gas.v index cab2efc..7da8340 100644 --- a/CoqOfPython/ethereum/istanbul/vm/gas.v +++ b/CoqOfPython/ethereum/istanbul/vm/gas.v @@ -476,25 +476,23 @@ Definition GAS_BLAKE2_PER_ROUND : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/istanbul/vm/instructions/__init__.v b/CoqOfPython/ethereum/istanbul/vm/instructions/__init__.v index ac4aa10..bdb75d4 100644 --- a/CoqOfPython/ethereum/istanbul/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/istanbul/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_istanbul_vm_instructions_imports_storage : Axiom ethereum_istanbul_vm_instructions_imports_system : IsImported globals "ethereum.istanbul.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/istanbul/vm/interpreter.v b/CoqOfPython/ethereum/istanbul/vm/interpreter.v index 1bd4026..59d492a 100644 --- a/CoqOfPython/ethereum/istanbul/vm/interpreter.v +++ b/CoqOfPython/ethereum/istanbul/vm/interpreter.v @@ -138,15 +138,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/blocks.v b/CoqOfPython/ethereum/london/blocks.v index 9c5e31a..9603689 100644 --- a/CoqOfPython/ethereum/london/blocks.v +++ b/CoqOfPython/ethereum/london/blocks.v @@ -50,42 +50,38 @@ Axiom ethereum_london_fork_types_imports_Root : Axiom ethereum_london_transactions_imports_LegacyTransaction : IsImported globals "ethereum.london.transactions" "LegacyTransaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/london/fork.v b/CoqOfPython/ethereum/london/fork.v index 1ffb61f..140abfc 100644 --- a/CoqOfPython/ethereum/london/fork.v +++ b/CoqOfPython/ethereum/london/fork.v @@ -222,15 +222,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1303,15 +1302,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/fork_types.v b/CoqOfPython/ethereum/london/fork_types.v index 7a3b0ad..44c76cd 100644 --- a/CoqOfPython/ethereum/london/fork_types.v +++ b/CoqOfPython/ethereum/london/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/london/state.v b/CoqOfPython/ethereum/london/state.v index 0a2ceac..3b93813 100644 --- a/CoqOfPython/ethereum/london/state.v +++ b/CoqOfPython/ethereum/london/state.v @@ -76,15 +76,14 @@ Axiom ethereum_london_trie_imports_trie_get : Axiom ethereum_london_trie_imports_trie_set : IsImported globals "ethereum.london.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/transactions.v b/CoqOfPython/ethereum/london/transactions.v index fad63b0..12db311 100644 --- a/CoqOfPython/ethereum/london/transactions.v +++ b/CoqOfPython/ethereum/london/transactions.v @@ -67,35 +67,32 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/london/trie.v b/CoqOfPython/ethereum/london/trie.v index f53ebf4..560c96a 100644 --- a/CoqOfPython/ethereum/london/trie.v +++ b/CoqOfPython/ethereum/london/trie.v @@ -157,35 +157,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -485,15 +482,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/vm/__init__.v b/CoqOfPython/ethereum/london/vm/__init__.v index b37bda2..ed81d5a 100644 --- a/CoqOfPython/ethereum/london/vm/__init__.v +++ b/CoqOfPython/ethereum/london/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/vm/exceptions.v b/CoqOfPython/ethereum/london/vm/exceptions.v index 9c5da7a..0f6c678 100644 --- a/CoqOfPython/ethereum/london/vm/exceptions.v +++ b/CoqOfPython/ethereum/london/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,80 +95,81 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/london/vm/gas.v b/CoqOfPython/ethereum/london/vm/gas.v index 43df28d..a84a02f 100644 --- a/CoqOfPython/ethereum/london/vm/gas.v +++ b/CoqOfPython/ethereum/london/vm/gas.v @@ -446,25 +446,23 @@ Definition GAS_WARM_ACCESS : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/london/vm/instructions/__init__.v b/CoqOfPython/ethereum/london/vm/instructions/__init__.v index 3d27c13..9b0381f 100644 --- a/CoqOfPython/ethereum/london/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/london/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_london_vm_instructions_imports_storage : Axiom ethereum_london_vm_instructions_imports_system : IsImported globals "ethereum.london.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/london/vm/interpreter.v b/CoqOfPython/ethereum/london/vm/interpreter.v index ef00b6b..2f605dd 100644 --- a/CoqOfPython/ethereum/london/vm/interpreter.v +++ b/CoqOfPython/ethereum/london/vm/interpreter.v @@ -140,15 +140,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/blocks.v b/CoqOfPython/ethereum/muir_glacier/blocks.v index 7b797d3..294524f 100644 --- a/CoqOfPython/ethereum/muir_glacier/blocks.v +++ b/CoqOfPython/ethereum/muir_glacier/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_muir_glacier_fork_types_imports_Root : Axiom ethereum_muir_glacier_transactions_imports_Transaction : IsImported globals "ethereum.muir_glacier.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/muir_glacier/fork.v b/CoqOfPython/ethereum/muir_glacier/fork.v index 4b82429..a4e88b1 100644 --- a/CoqOfPython/ethereum/muir_glacier/fork.v +++ b/CoqOfPython/ethereum/muir_glacier/fork.v @@ -192,15 +192,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -913,15 +912,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/fork_types.v b/CoqOfPython/ethereum/muir_glacier/fork_types.v index f598da2..57b4da1 100644 --- a/CoqOfPython/ethereum/muir_glacier/fork_types.v +++ b/CoqOfPython/ethereum/muir_glacier/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/muir_glacier/state.v b/CoqOfPython/ethereum/muir_glacier/state.v index f13b998..ef3e2e2 100644 --- a/CoqOfPython/ethereum/muir_glacier/state.v +++ b/CoqOfPython/ethereum/muir_glacier/state.v @@ -76,15 +76,14 @@ Axiom ethereum_muir_glacier_trie_imports_trie_get : Axiom ethereum_muir_glacier_trie_imports_trie_set : IsImported globals "ethereum.muir_glacier.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/transactions.v b/CoqOfPython/ethereum/muir_glacier/transactions.v index b62f546..1a1dde6 100644 --- a/CoqOfPython/ethereum/muir_glacier/transactions.v +++ b/CoqOfPython/ethereum/muir_glacier/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/muir_glacier/trie.v b/CoqOfPython/ethereum/muir_glacier/trie.v index 9c7cc58..fcfdf83 100644 --- a/CoqOfPython/ethereum/muir_glacier/trie.v +++ b/CoqOfPython/ethereum/muir_glacier/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/vm/__init__.v b/CoqOfPython/ethereum/muir_glacier/vm/__init__.v index 39dd981..6aa1d45 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/__init__.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/__init__.v @@ -66,35 +66,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/vm/exceptions.v b/CoqOfPython/ethereum/muir_glacier/vm/exceptions.v index 7261cd7..6c97ad0 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/exceptions.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,70 +95,71 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/muir_glacier/vm/gas.v b/CoqOfPython/ethereum/muir_glacier/vm/gas.v index 3bd7267..6c3e914 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/gas.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/gas.v @@ -476,25 +476,23 @@ Definition GAS_BLAKE2_PER_ROUND : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/muir_glacier/vm/instructions/__init__.v b/CoqOfPython/ethereum/muir_glacier/vm/instructions/__init__.v index 2e0d4f9..64a20ab 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_muir_glacier_vm_instructions_imports_storage : Axiom ethereum_muir_glacier_vm_instructions_imports_system : IsImported globals "ethereum.muir_glacier.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v b/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v index 5edf264..2470a44 100644 --- a/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v +++ b/CoqOfPython/ethereum/muir_glacier/vm/interpreter.v @@ -138,15 +138,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/blocks.v b/CoqOfPython/ethereum/paris/blocks.v index 0b69d9c..63f72e8 100644 --- a/CoqOfPython/ethereum/paris/blocks.v +++ b/CoqOfPython/ethereum/paris/blocks.v @@ -50,42 +50,38 @@ Axiom ethereum_paris_fork_types_imports_Root : Axiom ethereum_paris_transactions_imports_LegacyTransaction : IsImported globals "ethereum.paris.transactions" "LegacyTransaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/paris/fork.v b/CoqOfPython/ethereum/paris/fork.v index 1c063d1..b1af4e9 100644 --- a/CoqOfPython/ethereum/paris/fork.v +++ b/CoqOfPython/ethereum/paris/fork.v @@ -171,15 +171,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1065,15 +1064,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/fork_types.v b/CoqOfPython/ethereum/paris/fork_types.v index 993db55..8a9095a 100644 --- a/CoqOfPython/ethereum/paris/fork_types.v +++ b/CoqOfPython/ethereum/paris/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/paris/state.v b/CoqOfPython/ethereum/paris/state.v index 031eed2..199d24b 100644 --- a/CoqOfPython/ethereum/paris/state.v +++ b/CoqOfPython/ethereum/paris/state.v @@ -76,15 +76,14 @@ Axiom ethereum_paris_trie_imports_trie_get : Axiom ethereum_paris_trie_imports_trie_set : IsImported globals "ethereum.paris.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/transactions.v b/CoqOfPython/ethereum/paris/transactions.v index bd79adc..b8b7ea2 100644 --- a/CoqOfPython/ethereum/paris/transactions.v +++ b/CoqOfPython/ethereum/paris/transactions.v @@ -67,35 +67,32 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/paris/trie.v b/CoqOfPython/ethereum/paris/trie.v index 3366830..2054643 100644 --- a/CoqOfPython/ethereum/paris/trie.v +++ b/CoqOfPython/ethereum/paris/trie.v @@ -157,35 +157,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -485,15 +482,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/vm/__init__.v b/CoqOfPython/ethereum/paris/vm/__init__.v index 5c7b2c3..ef29375 100644 --- a/CoqOfPython/ethereum/paris/vm/__init__.v +++ b/CoqOfPython/ethereum/paris/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/vm/exceptions.v b/CoqOfPython/ethereum/paris/vm/exceptions.v index 3b460e3..76f4ad8 100644 --- a/CoqOfPython/ethereum/paris/vm/exceptions.v +++ b/CoqOfPython/ethereum/paris/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,80 +95,81 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/paris/vm/gas.v b/CoqOfPython/ethereum/paris/vm/gas.v index b900f56..889f4a1 100644 --- a/CoqOfPython/ethereum/paris/vm/gas.v +++ b/CoqOfPython/ethereum/paris/vm/gas.v @@ -446,25 +446,23 @@ Definition GAS_WARM_ACCESS : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/vm/instructions/__init__.v b/CoqOfPython/ethereum/paris/vm/instructions/__init__.v index 14189e3..b5f9956 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_paris_vm_instructions_imports_storage : Axiom ethereum_paris_vm_instructions_imports_system : IsImported globals "ethereum.paris.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/paris/vm/instructions/proofs/arithmetic.v b/CoqOfPython/ethereum/paris/vm/instructions/proofs/arithmetic.v index 053fffc..2b01216 100644 --- a/CoqOfPython/ethereum/paris/vm/instructions/proofs/arithmetic.v +++ b/CoqOfPython/ethereum/paris/vm/instructions/proofs/arithmetic.v @@ -34,15 +34,15 @@ Module AddLocals. result := None; |}. - Definition to_object (locals : t) : Object.t Value.t := + (* Definition to_object (locals : t) : Object.t Value.t := Object.make [ ("x", Option.map U256.to_value locals.(x)); ("y", Option.map U256.to_value locals.(y)); ("result", Option.map U256.to_value locals.(result)) - ]. + ]. *) End AddLocals. -Lemma run_add (stack : Stack.t) (heap : Heap.t) : +(* Lemma run_add (stack : Stack.t) (heap : Heap.t) : let '(result, evm') := simulations.arithmetic.add heap.(Heap.evm) in let result := match result with @@ -71,4 +71,4 @@ Proof. } { admit. } } -Admitted. +Admitted. *) diff --git a/CoqOfPython/ethereum/paris/vm/interpreter.v b/CoqOfPython/ethereum/paris/vm/interpreter.v index 77362be..546e237 100644 --- a/CoqOfPython/ethereum/paris/vm/interpreter.v +++ b/CoqOfPython/ethereum/paris/vm/interpreter.v @@ -142,15 +142,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/paris/vm/proofs/stack.v b/CoqOfPython/ethereum/paris/vm/proofs/stack.v deleted file mode 100644 index cb12120..0000000 --- a/CoqOfPython/ethereum/paris/vm/proofs/stack.v +++ /dev/null @@ -1,33 +0,0 @@ -Require Import CoqOfPython.CoqOfPython. -Require Import proofs.CoqOfPython. -Require Import simulations.CoqOfPython. -Require Import proofs.heap. - -Require ethereum.paris.vm.simulations.stack. -Require ethereum.paris.vm.stack. - -Require ethereum.paris.vm.simulations.__init__. -Module Evm := __init__.Evm. - -Import Run. - -Lemma run_pop (stack : Stack.t) (heap : Heap.t) : - let '(result, evm') := - StateError.lift_lens Evm.Lens.stack simulations.stack.pop heap.(Heap.evm) in - let result := - match result with - | inl s' => inl Constant.None_ - | inr exn => inr (Exception.Raise (Some Constant.None_)) - end in - let heap' := heap <| Heap.evm := evm' |> in - exists fresh_stack, - {{ stack, heap | - stack.pop (make_list []) (make_dict []) ⇓ - result - | stack ++ fresh_stack, heap' }}. -Proof. - destruct StateError.lift_lens as [result evm'] eqn:?. - unfold stack.pop, simulations.stack.pop in *. - cbn in *. - eexists. -Admitted. diff --git a/CoqOfPython/ethereum/paris/vm/simulations/__init__.v b/CoqOfPython/ethereum/paris/vm/simulations/__init__.v index 5fb9a63..18f512b 100644 --- a/CoqOfPython/ethereum/paris/vm/simulations/__init__.v +++ b/CoqOfPython/ethereum/paris/vm/simulations/__init__.v @@ -64,10 +64,10 @@ Module Evm. Record t : Set := { pc : Uint.t; stack : list (U256.t); - memory : list ascii; - code : Bytes.t; + (* memory : list ascii; + code : Bytes.t; *) gas_left : Uint.t; - env : Environment.t; + (* env : Environment.t; valid_jump_destinations : list Uint.t; logs : list unit; refund_counter : Z; @@ -78,7 +78,7 @@ Module Evm. return_data : Bytes.t; error : option Exception.t; accessed_addresses : list Address.t; - accessed_storage_keys : list (Address.t * Bytes32.t) + accessed_storage_keys : list (Address.t * Bytes32.t) *) }. End Rest. @@ -101,9 +101,19 @@ Module Evm. Lens.write '(Make message rest) stack := Make message rest<|Rest.stack := stack|>; |}. - Definition memory : Lens.t t (list ascii) := {| + (* Definition memory : Lens.t t (list ascii) := {| Lens.read '(Make _ rest) := rest.(Rest.memory); Lens.write '(Make message rest) memory := Make message rest<|Rest.memory := memory|>; |}. + + Definition code : Lens.t t Bytes.t := {| + Lens.read '(Make _ rest) := rest.(Rest.code); + Lens.write '(Make message rest) code := Make message rest<|Rest.code := code|>; + |}. *) + + Definition gas_left : Lens.t t Uint.t := {| + Lens.read '(Make _ rest) := rest.(Rest.gas_left); + Lens.write '(Make message rest) gas_left := Make message rest<|Rest.gas_left := gas_left|>; + |}. End Lens. End Evm. diff --git a/CoqOfPython/ethereum/paris/vm/simulations/proofs/__init__.v b/CoqOfPython/ethereum/paris/vm/simulations/proofs/__init__.v new file mode 100644 index 0000000..a6c1f06 --- /dev/null +++ b/CoqOfPython/ethereum/paris/vm/simulations/proofs/__init__.v @@ -0,0 +1,34 @@ +Require Import CoqOfPython.CoqOfPython. +Require Import simulations.CoqOfPython. +Require Import simulations.proofs.CoqOfPython. +Require Import simulations.proofs.heap. + +Require Import ethereum.paris.vm.simulations.__init__. + +Require ethereum.simulations.proofs.base_types. +Module Uint := base_types.Uint. +Module U256 := base_types.U256. + +Definition globals : Globals.t := "ethereum.paris.vm". + +Module Evm. + Definition stack_to_value : Value.t := + Value.Make "builtins" "list" (Pointer.heap + Address.stack + (fun (stack : list U256.t) => + Object.wrapper (Data.List (List.map U256.to_value stack)) + ) + ). + + Definition to_value : Value.t := + Value.Make globals "Evm" (Pointer.heap + Address.evm + (fun (evm : Heap.Evm.t) => + Object.make [ + ("pc", Uint.to_value evm.(Heap.Evm.pc)); + ("stack", stack_to_value); + ("gas_left", Uint.to_value evm.(Heap.Evm.gas_left)) + ] + ) + ). +End Evm. diff --git a/CoqOfPython/ethereum/paris/vm/simulations/proofs/stack.v b/CoqOfPython/ethereum/paris/vm/simulations/proofs/stack.v new file mode 100644 index 0000000..fd7de01 --- /dev/null +++ b/CoqOfPython/ethereum/paris/vm/simulations/proofs/stack.v @@ -0,0 +1,66 @@ +Require Import CoqOfPython.CoqOfPython. +Require Import proofs.CoqOfPython. +Require Import simulations.CoqOfPython. +Require Import proofs.heap. + +Require ethereum.paris.vm.simulations.stack. +Require ethereum.paris.vm.stack. + +Require ethereum.paris.vm.simulations.proofs.__init__. +Module Evm := __init__.Evm. + +Import Run. + +Module PopLocals. + Record t : Set := { + (* The stack is a pointer to some data in the heap. *) + stack : unit; + }. + + Definition init (evm : Evm.t) : t := + {| + stack := tt; + |}. + + Definition to_object (locals : t) : Object.t Value.t := + Object.make_option [ + ("stack", Some Evm.stack_to_value) + ]. +End PopLocals. + +Lemma run_pop (stack : Stack.t) (heap : Heap.t) : + let evm := Heap.to_evm heap in + let '(result, evm') := StateError.lift_lens Evm.Lens.stack simulations.stack.pop evm in + let result := + match result with + | inl s' => inl Constant.None_ + | inr exn => inr (Exception.Raise (Some Constant.None_)) + end in + exists fresh_stack heap', + {{ stack, heap | + stack.pop (make_list [Evm.stack_to_value]) (make_dict []) ⇓ + result + | stack ++ fresh_stack, heap' }} /\ + evm' = Heap.to_evm heap'. +Proof. + intros. + destruct StateError.lift_lens as [result evm'] eqn:?. + unfold stack.pop, simulations.stack.pop in *. + cbn in *. + repeat eexists. + { eapply Run.CallPrimitiveStateAllocMutable. { + now apply (IsAlloc.Stack PopLocals.to_object (PopLocals.init evm)). + } + cbn. + eapply Run.CallPrimitiveStateRead. { + apply IsRead.Stack. + now erewrite Stack.read_length_eq. + } + cbn. + eapply Run.CallPrimitiveGetInGlobals. { + apply builtins_is_imported. + admit. + } + admit. + } +Admitted. diff --git a/CoqOfPython/ethereum/shanghai/blocks.v b/CoqOfPython/ethereum/shanghai/blocks.v index ae02dbc..30a64c8 100644 --- a/CoqOfPython/ethereum/shanghai/blocks.v +++ b/CoqOfPython/ethereum/shanghai/blocks.v @@ -52,52 +52,47 @@ Axiom ethereum_shanghai_fork_types_imports_Root : Axiom ethereum_shanghai_transactions_imports_LegacyTransaction : IsImported globals "ethereum.shanghai.transactions" "LegacyTransaction". -Definition Withdrawal : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Withdrawal : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/shanghai/fork.v b/CoqOfPython/ethereum/shanghai/fork.v index beccf17..8daa517 100644 --- a/CoqOfPython/ethereum/shanghai/fork.v +++ b/CoqOfPython/ethereum/shanghai/fork.v @@ -180,15 +180,14 @@ Definition EMPTY_OMMER_HASH : Value.t := M.run ltac:(M.monadic ( |) )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -1086,15 +1085,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/shanghai/fork_types.v b/CoqOfPython/ethereum/shanghai/fork_types.v index 79ab0bb..0ab24a1 100644 --- a/CoqOfPython/ethereum/shanghai/fork_types.v +++ b/CoqOfPython/ethereum/shanghai/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/shanghai/state.v b/CoqOfPython/ethereum/shanghai/state.v index 2ff575b..dbbbdc6 100644 --- a/CoqOfPython/ethereum/shanghai/state.v +++ b/CoqOfPython/ethereum/shanghai/state.v @@ -79,15 +79,14 @@ Axiom ethereum_shanghai_trie_imports_trie_get : Axiom ethereum_shanghai_trie_imports_trie_set : IsImported globals "ethereum.shanghai.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/shanghai/transactions.v b/CoqOfPython/ethereum/shanghai/transactions.v index d8710f6..60160d0 100644 --- a/CoqOfPython/ethereum/shanghai/transactions.v +++ b/CoqOfPython/ethereum/shanghai/transactions.v @@ -67,35 +67,32 @@ Definition TX_ACCESS_LIST_STORAGE_KEY_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 1900 )). -Definition LegacyTransaction : Value.t := - builtins.make_klass - [] - [ +Definition LegacyTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition AccessListTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition AccessListTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition FeeMarketTransaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition FeeMarketTransaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition Transaction : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/ethereum/shanghai/trie.v b/CoqOfPython/ethereum/shanghai/trie.v index fc4508e..1d05c08 100644 --- a/CoqOfPython/ethereum/shanghai/trie.v +++ b/CoqOfPython/ethereum/shanghai/trie.v @@ -166,35 +166,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -494,15 +491,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/shanghai/vm/__init__.v b/CoqOfPython/ethereum/shanghai/vm/__init__.v index 7d9e4eb..ff23c26 100644 --- a/CoqOfPython/ethereum/shanghai/vm/__init__.v +++ b/CoqOfPython/ethereum/shanghai/vm/__init__.v @@ -68,35 +68,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ] - [ +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/shanghai/vm/exceptions.v b/CoqOfPython/ethereum/shanghai/vm/exceptions.v index b62f125..289a6e6 100644 --- a/CoqOfPython/ethereum/shanghai/vm/exceptions.v +++ b/CoqOfPython/ethereum/shanghai/vm/exceptions.v @@ -22,69 +22,69 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition Revert : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Revert : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -95,80 +95,81 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition WriteInStaticContext : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfBoundsRead : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidParameter : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidContractPrefix : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition WriteInStaticContext : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfBoundsRead : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidParameter : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidContractPrefix : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/shanghai/vm/gas.v b/CoqOfPython/ethereum/shanghai/vm/gas.v index 948212e..2be5e9b 100644 --- a/CoqOfPython/ethereum/shanghai/vm/gas.v +++ b/CoqOfPython/ethereum/shanghai/vm/gas.v @@ -450,25 +450,23 @@ Definition GAS_INIT_CODE_WORD_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 2 )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/shanghai/vm/instructions/__init__.v b/CoqOfPython/ethereum/shanghai/vm/instructions/__init__.v index 3e8b12d..3c4d738 100644 --- a/CoqOfPython/ethereum/shanghai/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/shanghai/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_shanghai_vm_instructions_imports_storage : Axiom ethereum_shanghai_vm_instructions_imports_system : IsImported globals "ethereum.shanghai.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/shanghai/vm/interpreter.v b/CoqOfPython/ethereum/shanghai/vm/interpreter.v index 5e4ca3c..0d79dae 100644 --- a/CoqOfPython/ethereum/shanghai/vm/interpreter.v +++ b/CoqOfPython/ethereum/shanghai/vm/interpreter.v @@ -142,15 +142,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/simulations/base_types.v b/CoqOfPython/ethereum/simulations/base_types.v index 864d5b2..4408677 100644 --- a/CoqOfPython/ethereum/simulations/base_types.v +++ b/CoqOfPython/ethereum/simulations/base_types.v @@ -64,9 +64,6 @@ Module U256. Definition to_Z (value : t) : Z := FixedUint.value (get value). - Definition to_value (value : t) : Value.t := - Value.Make globals "U256" (Pointer.Imm (Object.wrapper (Data.Integer (to_Z value)))). - Definition __add__ (self right_ : t) : M? Exception.t t := let? result := FixedUint.__add__ (get self) (get right_) in return? (Make result). diff --git a/CoqOfPython/ethereum/simulations/proofs/base_types.v b/CoqOfPython/ethereum/simulations/proofs/base_types.v new file mode 100644 index 0000000..6ecc71f --- /dev/null +++ b/CoqOfPython/ethereum/simulations/proofs/base_types.v @@ -0,0 +1,13 @@ +Require Import CoqOfPython.CoqOfPython. + +Require Import ethereum.simulations.base_types. + +Module Uint. + Definition to_value (value : Uint.t) : Value.t := + Value.Make globals "Uint" (Pointer.Imm (Object.wrapper (Data.Integer (Uint.get value)))). +End Uint. + +Module U256. + Definition to_value (value : U256.t) : Value.t := + Value.Make globals "U256" (Pointer.Imm (Object.wrapper (Data.Integer (U256.to_Z value)))). +End U256. diff --git a/CoqOfPython/ethereum/spurious_dragon/blocks.v b/CoqOfPython/ethereum/spurious_dragon/blocks.v index b0c41a7..4a83d9d 100644 --- a/CoqOfPython/ethereum/spurious_dragon/blocks.v +++ b/CoqOfPython/ethereum/spurious_dragon/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_spurious_dragon_fork_types_imports_Root : Axiom ethereum_spurious_dragon_transactions_imports_Transaction : IsImported globals "ethereum.spurious_dragon.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/spurious_dragon/fork.v b/CoqOfPython/ethereum/spurious_dragon/fork.v index 5e200e3..d39f4d1 100644 --- a/CoqOfPython/ethereum/spurious_dragon/fork.v +++ b/CoqOfPython/ethereum/spurious_dragon/fork.v @@ -174,15 +174,14 @@ Definition MAX_OMMER_DEPTH : Value.t := M.run ltac:(M.monadic ( Constant.int 6 )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -887,15 +886,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/spurious_dragon/fork_types.v b/CoqOfPython/ethereum/spurious_dragon/fork_types.v index 53d3315..15be450 100644 --- a/CoqOfPython/ethereum/spurious_dragon/fork_types.v +++ b/CoqOfPython/ethereum/spurious_dragon/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/spurious_dragon/state.v b/CoqOfPython/ethereum/spurious_dragon/state.v index 67e6e39..dc14e86 100644 --- a/CoqOfPython/ethereum/spurious_dragon/state.v +++ b/CoqOfPython/ethereum/spurious_dragon/state.v @@ -74,15 +74,14 @@ Axiom ethereum_spurious_dragon_trie_imports_trie_get : Axiom ethereum_spurious_dragon_trie_imports_trie_set : IsImported globals "ethereum.spurious_dragon.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/spurious_dragon/transactions.v b/CoqOfPython/ethereum/spurious_dragon/transactions.v index d732447..c85dcfb 100644 --- a/CoqOfPython/ethereum/spurious_dragon/transactions.v +++ b/CoqOfPython/ethereum/spurious_dragon/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/spurious_dragon/trie.v b/CoqOfPython/ethereum/spurious_dragon/trie.v index 8186244..d113dc3 100644 --- a/CoqOfPython/ethereum/spurious_dragon/trie.v +++ b/CoqOfPython/ethereum/spurious_dragon/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/__init__.v b/CoqOfPython/ethereum/spurious_dragon/vm/__init__.v index 9e0ded2..61e3810 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/__init__.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/__init__.v @@ -64,35 +64,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/exceptions.v b/CoqOfPython/ethereum/spurious_dragon/vm/exceptions.v index 324690f..82d7706 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/exceptions.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/exceptions.v @@ -22,59 +22,59 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -85,40 +85,41 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/gas.v b/CoqOfPython/ethereum/spurious_dragon/vm/gas.v index a9c89f9..8cda65f 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/gas.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/gas.v @@ -436,25 +436,23 @@ Definition GAS_IDENTITY_WORD : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/instructions/__init__.v b/CoqOfPython/ethereum/spurious_dragon/vm/instructions/__init__.v index e153214..88f9b85 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_spurious_dragon_vm_instructions_imports_storage : Axiom ethereum_spurious_dragon_vm_instructions_imports_system : IsImported globals "ethereum.spurious_dragon.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v b/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v index 7491047..6bb6729 100644 --- a/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v +++ b/CoqOfPython/ethereum/spurious_dragon/vm/interpreter.v @@ -134,15 +134,14 @@ Definition MAX_CODE_SIZE : Value.t := M.run ltac:(M.monadic ( Constant.int 24576 )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/blocks.v b/CoqOfPython/ethereum/tangerine_whistle/blocks.v index 17115ef..c1bfa1e 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/blocks.v +++ b/CoqOfPython/ethereum/tangerine_whistle/blocks.v @@ -48,42 +48,38 @@ Axiom ethereum_tangerine_whistle_fork_types_imports_Root : Axiom ethereum_tangerine_whistle_transactions_imports_Transaction : IsImported globals "ethereum.tangerine_whistle.transactions" "Transaction". -Definition Header : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Block : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Log : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Receipt : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Header : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Block : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Log : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Receipt : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/tangerine_whistle/fork.v b/CoqOfPython/ethereum/tangerine_whistle/fork.v index 67fab1f..ab3bad3 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/fork.v +++ b/CoqOfPython/ethereum/tangerine_whistle/fork.v @@ -172,15 +172,14 @@ Definition MAX_OMMER_DEPTH : Value.t := M.run ltac:(M.monadic ( Constant.int 6 )). -Definition BlockChain : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition BlockChain : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_fork : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => @@ -881,15 +880,14 @@ Definition make_receipt : Value.t -> Value.t -> M := Axiom make_receipt_in_globals : IsInGlobals globals "make_receipt" (make_function make_receipt). -Definition ApplyBodyOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ApplyBodyOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition apply_body : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/fork_types.v b/CoqOfPython/ethereum/tangerine_whistle/fork_types.v index eafa82a..e511ec7 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/fork_types.v +++ b/CoqOfPython/ethereum/tangerine_whistle/fork_types.v @@ -55,15 +55,14 @@ Definition Bloom : Value.t := M.run ltac:(M.monadic ( M.get_name (| globals, locals_stack, "Bytes256" |) )). -Definition Account : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Account : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition EMPTY_ACCOUNT : Value.t := M.run ltac:(M.monadic ( M.call (| diff --git a/CoqOfPython/ethereum/tangerine_whistle/state.v b/CoqOfPython/ethereum/tangerine_whistle/state.v index 1f1a695..55b2806 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/state.v +++ b/CoqOfPython/ethereum/tangerine_whistle/state.v @@ -74,15 +74,14 @@ Axiom ethereum_tangerine_whistle_trie_imports_trie_get : Axiom ethereum_tangerine_whistle_trie_imports_trie_set : IsImported globals "ethereum.tangerine_whistle.trie" "trie_set". -Definition State : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition State : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition close_state : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/transactions.v b/CoqOfPython/ethereum/tangerine_whistle/transactions.v index 20fa717..c37de7c 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/transactions.v +++ b/CoqOfPython/ethereum/tangerine_whistle/transactions.v @@ -47,12 +47,11 @@ Definition TX_CREATE_COST : Value.t := M.run ltac:(M.monadic ( Constant.int 32000 )). -Definition Transaction : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Transaction : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/tangerine_whistle/trie.v b/CoqOfPython/ethereum/tangerine_whistle/trie.v index cf17d7f..16c4121 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/trie.v +++ b/CoqOfPython/ethereum/tangerine_whistle/trie.v @@ -151,35 +151,32 @@ Definition V : Value.t := M.run ltac:(M.monadic ( |) )). -Definition LeafNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition ExtensionNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition BranchNode : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition LeafNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition ExtensionNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition BranchNode : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition InternalNode : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| @@ -479,15 +476,15 @@ Definition encode_node : Value.t -> Value.t -> M := Axiom encode_node_in_globals : IsInGlobals globals "encode_node" (make_function encode_node). -Definition Trie : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Subscript *)] - [ - - ] - [ - - ]. +Definition Trie : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Subscript *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition copy_trie : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/__init__.v b/CoqOfPython/ethereum/tangerine_whistle/vm/__init__.v index 05e2952..22f0d8a 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/__init__.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/__init__.v @@ -59,35 +59,32 @@ Definition __all__ : Value.t := M.run ltac:(M.monadic ( make_tuple [ Constant.str "Environment"; Constant.str "Evm"; Constant.str "Message" ] )). -Definition Environment : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Message : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition Evm : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition Environment : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Message : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition Evm : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition incorporate_child_on_success : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/exceptions.v b/CoqOfPython/ethereum/tangerine_whistle/vm/exceptions.v index 2f409fe..3341ef9 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/exceptions.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/exceptions.v @@ -22,59 +22,59 @@ Exceptions which cause the EVM to halt exceptionally. Axiom ethereum_exceptions_imports_EthereumException : IsImported globals "ethereum.exceptions" "EthereumException". -Definition ExceptionalHalt : Value.t := - builtins.make_klass - [(globals, "EthereumException")] - [ - - ] - [ - - ]. - -Definition StackUnderflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackOverflowError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition OutOfGasError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition InvalidOpcode : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - ( - "__init__", - fun (args kwargs : Value.t) => - let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in - ltac:(M.monadic ( - let _ := M.call (| +Definition ExceptionalHalt : Value.t := make_klass {| + Klass.bases := [ + (globals, "EthereumException") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackUnderflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackOverflowError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OutOfGasError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition InvalidOpcode : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ( + "__init__", + fun (args kwargs : Value.t) => + let- locals_stack := M.create_locals locals_stack args kwargs [ "self"; "code" ] in + ltac:(M.monadic ( + let _ := M.call (| M.get_field (| M.call (| M.get_name (| globals, locals_stack, "super" |), make_list [], @@ -85,40 +85,41 @@ Definition InvalidOpcode : Value.t := ], make_dict [] |) in - let _ := M.assign (| - M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), - M.get_name (| globals, locals_stack, "code" |) - |) in - M.pure Constant.None_)) - ) - ]. - -Definition InvalidJumpDestError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition StackDepthLimitError : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. - -Definition AddressCollision : Value.t := - builtins.make_klass - [(globals, "ExceptionalHalt")] - [ - - ] - [ - - ]. + let _ := M.assign (| + M.get_field (| M.get_name (| globals, locals_stack, "self" |), "code" |), + M.get_name (| globals, locals_stack, "code" |) + |) in + M.pure Constant.None_)) + ) + ]; +|}. + +Definition InvalidJumpDestError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition StackDepthLimitError : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition AddressCollision : Value.t := make_klass {| + Klass.bases := [ + (globals, "ExceptionalHalt") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/gas.v b/CoqOfPython/ethereum/tangerine_whistle/vm/gas.v index fe39510..1c1e192 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/gas.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/gas.v @@ -436,25 +436,23 @@ Definition GAS_IDENTITY_WORD : Value.t := M.run ltac:(M.monadic ( |) )). -Definition ExtendMemory : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition MessageCallGas : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition ExtendMemory : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition MessageCallGas : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition charge_gas : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/__init__.v b/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/__init__.v index 6e8a81f..3180942 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/__init__.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/instructions/__init__.v @@ -63,14 +63,14 @@ Axiom ethereum_tangerine_whistle_vm_instructions_imports_storage : Axiom ethereum_tangerine_whistle_vm_instructions_imports_system : IsImported globals "ethereum.tangerine_whistle.vm.instructions" "system". -Definition Ops : Value.t := - builtins.make_klass - [(* At base: unsupported node type: Attribute *)] - [ - - ] - [ - - ]. +Definition Ops : Value.t := make_klass {| + Klass.bases := [ + (globals, "(* At base: unsupported node type: Attribute *)") + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. (* At top_level_stmt: unsupported node type: AnnAssign *) diff --git a/CoqOfPython/ethereum/tangerine_whistle/vm/interpreter.v b/CoqOfPython/ethereum/tangerine_whistle/vm/interpreter.v index 9c806cb..aaedb9e 100644 --- a/CoqOfPython/ethereum/tangerine_whistle/vm/interpreter.v +++ b/CoqOfPython/ethereum/tangerine_whistle/vm/interpreter.v @@ -119,15 +119,14 @@ Definition STACK_DEPTH_LIMIT : Value.t := M.run ltac:(M.monadic ( |) )). -Definition MessageCallOutput : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition MessageCallOutput : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition process_message_call : Value.t -> Value.t -> M := fun (args kwargs : Value.t) => diff --git a/CoqOfPython/ethereum/trace.v b/CoqOfPython/ethereum/trace.v index 4e1cce6..ffcdca4 100644 --- a/CoqOfPython/ethereum/trace.v +++ b/CoqOfPython/ethereum/trace.v @@ -31,95 +31,86 @@ Axiom typing_imports_Optional : Axiom typing_imports_Union : IsImported globals "typing" "Union". -Definition TransactionStart : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition TransactionEnd : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition PrecompileStart : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition PrecompileEnd : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition OpStart : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition OpEnd : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition OpException : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition EvmStop : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. - -Definition GasAndRefund : Value.t := - builtins.make_klass - [] - [ - - ] - [ - - ]. +Definition TransactionStart : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition TransactionEnd : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition PrecompileStart : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition PrecompileEnd : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OpStart : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OpEnd : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition OpException : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition EvmStop : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. + +Definition GasAndRefund : Value.t := make_klass {| + Klass.bases := [ + ]; + Klass.class_methods := [ + ]; + Klass.methods := [ + ]; +|}. Definition TraceEvent : Value.t := M.run ltac:(M.monadic ( M.get_subscript (| diff --git a/CoqOfPython/proofs/heap.v b/CoqOfPython/proofs/heap.v deleted file mode 100644 index 5d336c0..0000000 --- a/CoqOfPython/proofs/heap.v +++ /dev/null @@ -1,37 +0,0 @@ -(** * The memory that we use to interpret the translated Python code. *) -Require Import CoqOfPython.CoqOfPython. -Require Import proofs.CoqOfPython. - -Require ethereum.paris.vm.simulations.__init__. -Module Evm := __init__.Evm. - -Module Address. - Inductive t : Set := - | Evm. -End Address. - -Module Heap. - Record t : Set := { - evm : Evm.t; - }. - - Global Instance I : Heap.Trait Heap.t Address.t := { - get_Set a := - match a with - | Address.Evm => Evm.t - end; - read a h := - match a with - | Address.Evm => Some h.(evm) - end; - alloc_write a h := - match a with - | Address.Evm => fun v => Some (h <| evm := v |>) - end; - }. - - Lemma is_valid : Heap.Valid.t I. - Proof. - sauto. - Qed. -End Heap. diff --git a/CoqOfPython/proofs/CoqOfPython.v b/CoqOfPython/simulations/proofs/CoqOfPython.v similarity index 62% rename from CoqOfPython/proofs/CoqOfPython.v rename to CoqOfPython/simulations/proofs/CoqOfPython.v index d21c5f2..2ffab45 100644 --- a/CoqOfPython/proofs/CoqOfPython.v +++ b/CoqOfPython/simulations/proofs/CoqOfPython.v @@ -58,6 +58,80 @@ Module Heap. End Valid. End Heap. +Module IsAlloc. + Inductive t `{Heap.Trait} + (stack : Stack.t) (heap : Heap) : + Pointer.Mutable.t Value.t -> + Object.t Value.t -> + Stack.t -> Heap -> + Prop := + | Stack {A : Set} to_object (value : A) object : + let index := List.length stack in + object = to_object value -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Stack index) to_object) + object + (stack ++ [existS A value]) heap + | Heap heap' (address : Address) to_object value object : + Heap.read address heap = None -> + Heap.alloc_write address heap value = Some heap' -> + object = to_object value -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Heap address) to_object) + object + stack heap'. + (* We make the first arguments implicit so that we can apply this contructor in proofs directly + with the parameters than cannot be found by unification, namely [to_object] and [value]. *) + Arguments Stack {_ _ _ _ _ _}. +End IsAlloc. + +Module IsRead. + Inductive t `{Heap.Trait} + (stack : Stack.t) (heap : Heap) : + Pointer.Mutable.t Value.t -> + Object.t Value.t -> + Prop := + | Stack {A : Set} index to_object (value : A) : + Stack.read stack index = Some (existS A value) -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Stack index) to_object) + (to_object value) + | Heap (address : Address) to_object value : + Heap.read address heap = Some value -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Heap address) to_object) + (to_object value). +End IsRead. + +Module IsWrite. + Inductive t `{Heap.Trait} + (stack : Stack.t) (heap : Heap) : + Pointer.Mutable.t Value.t -> + Object.t Value.t -> + Stack.t -> Heap -> + Prop := + | Stack {A : Set} index to_object (update : A) update_object : + let stack' := Stack.write stack index update in + update_object = to_object update -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Stack index) to_object) + update_object + stack' heap + | Heap (address : Address) to_object update update_object heap' : + Heap.alloc_write address heap update = Some heap' -> + update_object = to_object update -> + t + stack heap + (Pointer.Mutable.Make (Pointer.Mutable.Kind.Heap address) to_object) + update_object + stack heap'. +End IsWrite. + Module Run. Reserved Notation "{{ stack , heap | e ⇓ result | stack' , heap' }}". @@ -84,17 +158,17 @@ Module Run. LowM.CallPrimitive (Primitive.StateAlloc object) k ⇓ result | stack', heap' }} - | CallPrimitiveStateAllocStack {B : Set} - (value : B) - (to_object : B -> Object.t Value.t) + | CallPrimitiveStateAllocMutable + (mutable : Pointer.Mutable.t Value.t) (object : Object.t Value.t) - (stack : Stack.t) (heap : Heap) + (stack stack_inter : Stack.t) (heap heap_inter : Heap) (k : Pointer.t Value.t -> LowM.t A) : - let stack_inter := (stack ++ [existS B value])%list in - let index := List.length stack in - let mutable := Pointer.Mutable.Stack index to_object in - object = to_object value -> - {{ stack_inter, heap | + IsAlloc.t + stack heap + mutable + object + stack_inter heap_inter -> + {{ stack_inter, heap_inter | k (Pointer.Mutable mutable) ⇓ result | stack', heap' }} -> @@ -102,91 +176,32 @@ Module Run. LowM.CallPrimitive (Primitive.StateAlloc object) k ⇓ result | stack', heap' }} - | CallPrimitiveStateAllocHeap - (address : Address) - (value : Heap.get_Set address) + | CallPrimitiveStateRead + (mutable : Pointer.Mutable.t Value.t) (object : Object.t Value.t) - (to_object : Heap.get_Set address -> Object.t Value.t) - (stack : Stack.t) (heap heap_inter : Heap) - (k : Pointer.t Value.t -> LowM.t A) : - let mutable := Pointer.Mutable.Heap address to_object in - object = to_object value -> - Heap.read address heap = None -> - Heap.alloc_write address heap value = Some heap_inter -> - {{ stack, heap_inter | - k (Pointer.Mutable mutable) ⇓ - result - | stack', heap' }} -> - {{ stack, heap | - LowM.CallPrimitive (Primitive.StateAlloc object) k ⇓ - result - | stack', heap' }} - | CallPrimitiveStateReadStack {B : Set} - (index : nat) - (to_object : B -> Object.t Value.t) - (value : B) (stack : Stack.t) (heap : Heap) (k : Object.t Value.t -> LowM.t A) : - let mutable := Pointer.Mutable.Stack index to_object in - Stack.read stack index = Some (existS B value) -> - {{ stack, heap | - k (to_object value) ⇓ - result - | stack', heap' }} -> - {{ stack, heap | - LowM.CallPrimitive (Primitive.StateRead mutable) k ⇓ - result - | stack', heap' }} - | CallPrimitiveStateReadHeap - (address : Address) - (to_object : Heap.get_Set address -> Object.t Value.t) - (value : Heap.get_Set address) - (stack : Stack.t) (heap : Heap) - (k : Object.t Value.t -> LowM.t A) : - let mutable := Pointer.Mutable.Heap address to_object in - Heap.read address heap = Some value -> + IsRead.t stack heap mutable object -> {{ stack, heap | - k (to_object value) ⇓ + k object ⇓ result | stack', heap' }} -> {{ stack, heap | LowM.CallPrimitive (Primitive.StateRead mutable) k ⇓ result | stack', heap' }} - | CallPrimitiveStateWriteStack {B : Set} - (index : nat) - (to_object : B -> Object.t Value.t) - (update : B) - (update' : Object.t Value.t) - (stack : Stack.t) (heap : Heap) - (k : unit -> LowM.t A) : - let stack_inter := Stack.write stack index update in - let mutable := Pointer.Mutable.Stack index to_object in - update' = to_object update -> - {{ stack_inter, heap | - k tt ⇓ - result - | stack', heap' }} -> - {{ stack, heap | - LowM.CallPrimitive (Primitive.StateWrite mutable update') k ⇓ - result - | stack', heap' }} - | CallPrimitiveStateWriteHeap - (address : Address) - (to_object : Heap.get_Set address -> Object.t Value.t) - (update : Heap.get_Set address) - (update' : Object.t Value.t) - (stack : Stack.t) (heap heap_inter : Heap) + | CallPrimitiveStateWrite + (mutable : Pointer.Mutable.t Value.t) + (update : Object.t Value.t) + (stack stack_inter : Stack.t) (heap heap_inter : Heap) (k : unit -> LowM.t A) : - let mutable := Pointer.Mutable.Heap address to_object in - update' = to_object update -> - Heap.alloc_write address heap update = Some heap_inter -> - {{ stack, heap_inter | + IsWrite.t stack heap mutable update stack' heap' -> + {{ stack_inter, heap_inter | k tt ⇓ result | stack', heap' }} -> {{ stack, heap | - LowM.CallPrimitive (Primitive.StateWrite mutable update') k ⇓ + LowM.CallPrimitive (Primitive.StateWrite mutable update) k ⇓ result | stack', heap' }} | CallPrimitiveGetInGlobals diff --git a/CoqOfPython/simulations/proofs/heap.v b/CoqOfPython/simulations/proofs/heap.v new file mode 100644 index 0000000..1df0da6 --- /dev/null +++ b/CoqOfPython/simulations/proofs/heap.v @@ -0,0 +1,73 @@ +(** * The memory that we use to interpret the translated Python code. *) +Require Import CoqOfPython.CoqOfPython. +Require Import simulations.CoqOfPython. +Require Import simulations.proofs.CoqOfPython. + +Require ethereum.simulations.base_types. +Module Uint := base_types.Uint. +Module U256 := base_types.U256. + +Require ethereum.paris.vm.simulations.__init__. +Module Evm := __init__.Evm. + +Module Address. + Inductive t : Set := + | evm + | stack. +End Address. + +Module Heap. + Module Evm. + Record t : Set := { + pc : Uint.t; + gas_left : Uint.t; + }. + End Evm. + + Record t : Set := { + evm : Evm.t; + stack : list U256.t; + }. + + Global Instance I : Heap.Trait Heap.t Address.t := { + get_Set a := + match a with + | Address.evm => Evm.t + | Address.stack => list U256.t + end; + read a h := + match a with + | Address.evm => Some h.(evm) + | Address.stack => Some h.(stack) + end; + alloc_write a h := + match a with + | Address.evm => fun v => Some (h <| evm := v |>) + | Address.stack => fun v => Some (h <| stack := v |>) + end; + }. + + Lemma is_valid : Heap.Valid.t I. + Proof. + sauto. + Qed. + + Definition to_message (heap : t) : __init__.Message.t __init__.Evm.t. + Admitted. (* TODO *) + + (*Definition of_evm (evm : ethereum.paris.vm.simulations.__init__.Evm.t) : t := + {| + evm := {| + Evm.pc := Evm.Lens.pc.(Lens.read) evm; + Evm.gas_left := Evm.Lens.gas_left.(Lens.read) evm; + |}; + stack := Evm.Lens.stack.(Lens.read) evm; + |}.*) + + Definition to_evm (heap : t) : __init__.Evm.t := + __init__.Evm.Make (to_message heap) {| + __init__.Evm.Rest.pc := heap.(evm).(Evm.pc); + __init__.Evm.Rest.stack := heap.(stack); + __init__.Evm.Rest.gas_left := heap.(evm).(Evm.gas_left); + |}. +End Heap. diff --git a/main.py b/main.py index 8254005..15788cd 100644 --- a/main.py +++ b/main.py @@ -99,6 +99,62 @@ def get_globals_of_import(node: ast.ImportFrom) -> str: return actual_path.replace("/", ".") +def generate_klass( + klass_name: str, + bases: list[str], + class_methods: list[tuple[str, str]], + methods: list[tuple[str, str]], +) -> str: + text = f"Definition {klass_name} : Value.t := " + text += "make_klass {|\n" + + # Bases + text += generate_indent(1) + "Klass.bases := [" + not_first = False + for base in bases: + if not_first: + text += ";" + text += "\n" + text += generate_indent(2) + f"(globals, \"{base}\")" + not_first = True + text += "\n" + text += generate_indent(1) + "];\n" + + # Class methods + text += generate_indent(1) + "Klass.class_methods := [" + not_first = False + for (name, body) in class_methods: + if not_first: + text += ";" + text += "\n" + text += generate_indent(2) + "(\n" + text += generate_indent(3) + f"\"{name}\"," + "\n" + text += generate_indent(3) + body + "\n" + text += generate_indent(2) + ")" + not_first = True + text += "\n" + text += generate_indent(1) + "];\n" + + # Methods + text += generate_indent(1) + "Klass.methods := [" + not_first = False + for (name, body) in methods: + if not_first: + text += ";" + text += "\n" + text += generate_indent(2) + "(\n" + text += generate_indent(3) + f"\"{name}\"," + "\n" + text += generate_indent(3) + body + "\n" + text += generate_indent(2) + ")" + not_first = True + text += "\n" + text += generate_indent(1) + "];\n" + + text += "|}." + + return text + + def generate_top_level_stmt(node: ast.stmt): if isinstance(node, ast.FunctionDef): return f"Definition {generate_name(node.name)} : Value.t -> Value.t -> M :=\n" + \ @@ -109,57 +165,36 @@ def generate_top_level_stmt(node: ast.stmt): elif isinstance(node, ast.AsyncFunctionDef): return generate_error("top_level_stmt", node) elif isinstance(node, ast.ClassDef): - text = f"Definition {generate_name(node.name)} : Value.t :=\n" - text += generate_indent(1) + "builtins.make_klass\n" - - # Bases - text += generate_indent(2) + "[" - not_first = False - for base in node.bases: - if not_first: - text += "; " - if isinstance(base, ast.Name): - text += f"(globals, \"{generate_name(base.id)}\")" - else: - text += generate_error("base", base) - not_first = True - text += "]\n" - - # Class methods - text += generate_indent(2) + "[\n" - not_first = False - for stmt in node.body: - if isinstance(stmt, ast.FunctionDef) and len(stmt.decorator_list) == 1: - decorator = stmt.decorator_list[0] - if isinstance(decorator, ast.Name) and decorator.id == "classmethod": - if not_first: - text += ";\n" - text += generate_indent(3) + "(\n" - text += generate_indent(4) + f"\"{stmt.name}\"," + "\n" - text += generate_indent(4) - text += generate_function_def_body(4, stmt) + "\n" - text += generate_indent(3) + ")" - not_first = True - text += "\n" - text += generate_indent(2) + "]\n" - - # Methods - text += generate_indent(2) + "[\n" - not_first = False - for stmt in node.body: - if isinstance(stmt, ast.FunctionDef) and len(stmt.decorator_list) == 0: - if not_first: - text += ";\n" - text += generate_indent(3) + "(\n" - text += generate_indent(4) + f"\"{stmt.name}\"," + "\n" - text += generate_indent(4) - text += generate_function_def_body(4, stmt) + "\n" - text += generate_indent(3) + ")" - not_first = True - text += "\n" - text += generate_indent(2) + "]." - - return text + name = generate_name(node.name) + + bases = [ + generate_name(base.id) + if isinstance(base, ast.Name) + else generate_error("base", base) + for base in node.bases + ] + class_methods = [ + (stmt.name, generate_function_def_body(3, stmt)) + for stmt in node.body + if isinstance(stmt, ast.FunctionDef) and len(stmt.decorator_list) == 1 and + isinstance(stmt.decorator_list[0], ast.Name) and + stmt.decorator_list[0].id == "classmethod" + + ] + methods = [ + (stmt.name, generate_function_def_body(3, stmt)) + for stmt in node.body + if isinstance(stmt, ast.FunctionDef) and len(stmt.decorator_list) == 0 + ] + + # If the class is a `@dataclass` + if len(node.decorator_list) == 1 and \ + isinstance(node.decorator_list[0], ast.Name) and \ + node.decorator_list[0].id == "dataclass": + # TODO: add an `__init__` function, ... + pass + + return generate_klass(name, bases, class_methods, methods) elif isinstance(node, ast.Assign): if len(node.targets) >= 2: return generate_error("top_level_stmt", node)