superacli 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/adapter-schema.test.js +2 -0
- package/__tests__/config.test.js +62 -1
- package/__tests__/help-json.test.js +2 -0
- package/__tests__/mcp-adapter.test.js +14 -4
- package/__tests__/mcp-local.test.js +159 -0
- package/__tests__/mcp-stdio-jsonrpc.test.js +105 -0
- package/__tests__/monty-plugin.test.js +121 -0
- package/__tests__/plugin-browser-use-uninstall.test.js +23 -0
- package/__tests__/plugin-browser-use.test.js +77 -0
- package/__tests__/plugins-command.test.js +92 -1
- package/__tests__/plugins-learn.test.js +62 -0
- package/__tests__/plugins-registry.test.js +3 -1
- package/__tests__/resend-plugin.test.js +122 -0
- package/__tests__/skills.test.js +4 -0
- package/cli/adapter-schema.js +3 -2
- package/cli/adapters/mcp.js +22 -3
- package/cli/adapters/process.js +34 -7
- package/cli/config.js +27 -1
- package/cli/help-json.js +2 -2
- package/cli/mcp-diagnostics.js +152 -0
- package/cli/mcp-discovery.js +221 -0
- package/cli/mcp-local.js +267 -25
- package/cli/mcp-stdio-jsonrpc.js +246 -0
- package/cli/plugin-install-guidance.js +25 -0
- package/cli/plugins-command.js +86 -3
- package/cli/plugins-learn.js +177 -0
- package/cli/plugins-manager.js +3 -0
- package/cli/plugins-registry.js +2 -1
- package/cli/skills-mcp.js +102 -0
- package/cli/skills.js +6 -40
- package/cli/supercli.js +7 -2
- package/docs/initial/mcp-local-mode.md +35 -0
- package/docs/mcp-cheatsheet.md +324 -0
- package/docs/plugins.md +7 -0
- package/package.json +1 -1
- package/plugins/browser-use/plugin.json +23 -0
- package/plugins/browser-use/scripts/post-install.js +146 -0
- package/plugins/browser-use/scripts/post-uninstall.js +28 -0
- package/plugins/browser-use/skills/quickstart/SKILL.md +47 -0
- package/plugins/monty/README.md +49 -0
- package/plugins/monty/plugin.json +69 -0
- package/plugins/monty/scripts/post-install.js +73 -0
- package/plugins/monty/scripts/post-uninstall.js +23 -0
- package/plugins/monty/scripts/run-python.js +140 -0
- package/plugins/monty/scripts/setup-monty.js +27 -0
- package/plugins/plugins.json +29 -0
- package/plugins/resend/plugin.json +371 -0
- package/plugins/resend/scripts/post-install.js +59 -0
- package/plugins/resend/scripts/post-uninstall.js +23 -0
- package/plugins/resend/scripts/setup-resend.js +27 -0
- package/plugins/resend/skills/quickstart/SKILL.md +80 -0
- package/ref-monty/.cargo/config.toml +3 -0
- package/ref-monty/.claude/settings.json +60 -0
- package/ref-monty/.claude/skills/fastmod/SKILL.md +22 -0
- package/ref-monty/.claude/skills/python-playground/SKILL.md +47 -0
- package/ref-monty/.codecov.yml +12 -0
- package/ref-monty/.github/actions/build-pgo-wheel/action.yml +72 -0
- package/ref-monty/.github/workflows/ci.yml +776 -0
- package/ref-monty/.github/workflows/codspeed.yml +45 -0
- package/ref-monty/.github/workflows/init-npm-packages.yml +82 -0
- package/ref-monty/.pre-commit-config.yaml +47 -0
- package/ref-monty/.python-version +1 -0
- package/ref-monty/.rustfmt.toml +4 -0
- package/ref-monty/.zed/settings.json +11 -0
- package/ref-monty/CLAUDE.md +535 -0
- package/ref-monty/Cargo.lock +3798 -0
- package/ref-monty/Cargo.toml +87 -0
- package/ref-monty/LICENSE +21 -0
- package/ref-monty/Makefile +216 -0
- package/ref-monty/README.md +430 -0
- package/ref-monty/RELEASING.md +47 -0
- package/ref-monty/crates/fuzz/Cargo.toml +30 -0
- package/ref-monty/crates/fuzz/fuzz_targets/string_input_panic.rs +37 -0
- package/ref-monty/crates/fuzz/fuzz_targets/tokens_input_panic.rs +552 -0
- package/ref-monty/crates/monty/Cargo.toml +68 -0
- package/ref-monty/crates/monty/benches/main.rs +247 -0
- package/ref-monty/crates/monty/build.rs +10 -0
- package/ref-monty/crates/monty/src/args.rs +733 -0
- package/ref-monty/crates/monty/src/asyncio.rs +179 -0
- package/ref-monty/crates/monty/src/builtins/abs.rs +55 -0
- package/ref-monty/crates/monty/src/builtins/all.rs +30 -0
- package/ref-monty/crates/monty/src/builtins/any.rs +30 -0
- package/ref-monty/crates/monty/src/builtins/bin.rs +59 -0
- package/ref-monty/crates/monty/src/builtins/chr.rs +46 -0
- package/ref-monty/crates/monty/src/builtins/divmod.rs +164 -0
- package/ref-monty/crates/monty/src/builtins/enumerate.rs +52 -0
- package/ref-monty/crates/monty/src/builtins/filter.rs +67 -0
- package/ref-monty/crates/monty/src/builtins/getattr.rs +65 -0
- package/ref-monty/crates/monty/src/builtins/hash.rs +28 -0
- package/ref-monty/crates/monty/src/builtins/hex.rs +58 -0
- package/ref-monty/crates/monty/src/builtins/id.rs +24 -0
- package/ref-monty/crates/monty/src/builtins/isinstance.rs +68 -0
- package/ref-monty/crates/monty/src/builtins/len.rs +25 -0
- package/ref-monty/crates/monty/src/builtins/map.rs +98 -0
- package/ref-monty/crates/monty/src/builtins/min_max.rs +113 -0
- package/ref-monty/crates/monty/src/builtins/mod.rs +246 -0
- package/ref-monty/crates/monty/src/builtins/next.rs +21 -0
- package/ref-monty/crates/monty/src/builtins/oct.rs +59 -0
- package/ref-monty/crates/monty/src/builtins/ord.rs +67 -0
- package/ref-monty/crates/monty/src/builtins/pow.rs +365 -0
- package/ref-monty/crates/monty/src/builtins/print.rs +141 -0
- package/ref-monty/crates/monty/src/builtins/repr.rs +16 -0
- package/ref-monty/crates/monty/src/builtins/reversed.rs +28 -0
- package/ref-monty/crates/monty/src/builtins/round.rs +174 -0
- package/ref-monty/crates/monty/src/builtins/sorted.rs +151 -0
- package/ref-monty/crates/monty/src/builtins/sum.rs +66 -0
- package/ref-monty/crates/monty/src/builtins/type_.rs +16 -0
- package/ref-monty/crates/monty/src/builtins/zip.rs +77 -0
- package/ref-monty/crates/monty/src/bytecode/builder.rs +699 -0
- package/ref-monty/crates/monty/src/bytecode/code.rs +310 -0
- package/ref-monty/crates/monty/src/bytecode/compiler.rs +3206 -0
- package/ref-monty/crates/monty/src/bytecode/mod.rs +24 -0
- package/ref-monty/crates/monty/src/bytecode/op.rs +617 -0
- package/ref-monty/crates/monty/src/bytecode/vm/async_exec.rs +1058 -0
- package/ref-monty/crates/monty/src/bytecode/vm/attr.rs +63 -0
- package/ref-monty/crates/monty/src/bytecode/vm/binary.rs +487 -0
- package/ref-monty/crates/monty/src/bytecode/vm/call.rs +767 -0
- package/ref-monty/crates/monty/src/bytecode/vm/collections.rs +741 -0
- package/ref-monty/crates/monty/src/bytecode/vm/compare.rs +147 -0
- package/ref-monty/crates/monty/src/bytecode/vm/exceptions.rs +297 -0
- package/ref-monty/crates/monty/src/bytecode/vm/format.rs +132 -0
- package/ref-monty/crates/monty/src/bytecode/vm/mod.rs +1958 -0
- package/ref-monty/crates/monty/src/bytecode/vm/scheduler.rs +620 -0
- package/ref-monty/crates/monty/src/exception_private.rs +1513 -0
- package/ref-monty/crates/monty/src/exception_public.rs +346 -0
- package/ref-monty/crates/monty/src/expressions.rs +694 -0
- package/ref-monty/crates/monty/src/fstring.rs +854 -0
- package/ref-monty/crates/monty/src/function.rs +119 -0
- package/ref-monty/crates/monty/src/heap.rs +1073 -0
- package/ref-monty/crates/monty/src/heap_data.rs +985 -0
- package/ref-monty/crates/monty/src/heap_traits.rs +312 -0
- package/ref-monty/crates/monty/src/intern.rs +837 -0
- package/ref-monty/crates/monty/src/io.rs +106 -0
- package/ref-monty/crates/monty/src/lib.rs +52 -0
- package/ref-monty/crates/monty/src/modules/asyncio.rs +144 -0
- package/ref-monty/crates/monty/src/modules/math.rs +1453 -0
- package/ref-monty/crates/monty/src/modules/mod.rs +120 -0
- package/ref-monty/crates/monty/src/modules/os.rs +116 -0
- package/ref-monty/crates/monty/src/modules/pathlib.rs +33 -0
- package/ref-monty/crates/monty/src/modules/re.rs +606 -0
- package/ref-monty/crates/monty/src/modules/sys.rs +60 -0
- package/ref-monty/crates/monty/src/modules/typing.rs +70 -0
- package/ref-monty/crates/monty/src/namespace.rs +21 -0
- package/ref-monty/crates/monty/src/object.rs +1040 -0
- package/ref-monty/crates/monty/src/os.rs +215 -0
- package/ref-monty/crates/monty/src/parse.rs +1730 -0
- package/ref-monty/crates/monty/src/prepare.rs +3015 -0
- package/ref-monty/crates/monty/src/repl.rs +1109 -0
- package/ref-monty/crates/monty/src/resource.rs +559 -0
- package/ref-monty/crates/monty/src/run.rs +457 -0
- package/ref-monty/crates/monty/src/run_progress.rs +821 -0
- package/ref-monty/crates/monty/src/signature.rs +651 -0
- package/ref-monty/crates/monty/src/sorting.rs +100 -0
- package/ref-monty/crates/monty/src/types/bytes.rs +2356 -0
- package/ref-monty/crates/monty/src/types/dataclass.rs +345 -0
- package/ref-monty/crates/monty/src/types/dict.rs +879 -0
- package/ref-monty/crates/monty/src/types/dict_view.rs +619 -0
- package/ref-monty/crates/monty/src/types/iter.rs +799 -0
- package/ref-monty/crates/monty/src/types/list.rs +929 -0
- package/ref-monty/crates/monty/src/types/long_int.rs +211 -0
- package/ref-monty/crates/monty/src/types/mod.rs +48 -0
- package/ref-monty/crates/monty/src/types/module.rs +146 -0
- package/ref-monty/crates/monty/src/types/namedtuple.rs +261 -0
- package/ref-monty/crates/monty/src/types/path.rs +596 -0
- package/ref-monty/crates/monty/src/types/property.rs +35 -0
- package/ref-monty/crates/monty/src/types/py_trait.rs +322 -0
- package/ref-monty/crates/monty/src/types/range.rs +285 -0
- package/ref-monty/crates/monty/src/types/re_match.rs +522 -0
- package/ref-monty/crates/monty/src/types/re_pattern.rs +726 -0
- package/ref-monty/crates/monty/src/types/set.rs +1373 -0
- package/ref-monty/crates/monty/src/types/slice.rs +257 -0
- package/ref-monty/crates/monty/src/types/str.rs +2051 -0
- package/ref-monty/crates/monty/src/types/tuple.rs +376 -0
- package/ref-monty/crates/monty/src/types/type.rs +407 -0
- package/ref-monty/crates/monty/src/value.rs +2558 -0
- package/ref-monty/crates/monty/test_cases/args__dict_get_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_get_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_items_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_keys_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_pop_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_pop_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__dict_values_with_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__id_too_many.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_too_many.py +2 -0
- package/ref-monty/crates/monty/test_cases/args__len_type_error_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/args__len_type_error_none.py +9 -0
- package/ref-monty/crates/monty/test_cases/args__list_append_no_args.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_append_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_insert_too_few.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__list_insert_too_many.py +3 -0
- package/ref-monty/crates/monty/test_cases/args__repr_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__div_zero_float.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__div_zero_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__floordiv_zero_float.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__floordiv_zero_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__pow_zero_neg.py +2 -0
- package/ref-monty/crates/monty/test_cases/arith__pow_zero_neg_builtin.py +9 -0
- package/ref-monty/crates/monty/test_cases/assert__expr_fail.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fail.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fail_msg.py +2 -0
- package/ref-monty/crates/monty/test_cases/assert__fn_fail.py +3 -0
- package/ref-monty/crates/monty/test_cases/assert__ops.py +11 -0
- package/ref-monty/crates/monty/test_cases/async__asyncio_run.py +47 -0
- package/ref-monty/crates/monty/test_cases/async__basic.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__closure.py +14 -0
- package/ref-monty/crates/monty/test_cases/async__double_await_coroutine.py +16 -0
- package/ref-monty/crates/monty/test_cases/async__exception.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__ext_call.py +73 -0
- package/ref-monty/crates/monty/test_cases/async__gather_all.py +85 -0
- package/ref-monty/crates/monty/test_cases/async__nested_await.py +15 -0
- package/ref-monty/crates/monty/test_cases/async__nested_gather_ext.py +37 -0
- package/ref-monty/crates/monty/test_cases/async__not_awaitable.py +10 -0
- package/ref-monty/crates/monty/test_cases/async__not_imported.py +14 -0
- package/ref-monty/crates/monty/test_cases/async__recursion_depth_isolation.py +27 -0
- package/ref-monty/crates/monty/test_cases/async__return_types.py +31 -0
- package/ref-monty/crates/monty/test_cases/async__sequential.py +16 -0
- package/ref-monty/crates/monty/test_cases/async__traceback.py +19 -0
- package/ref-monty/crates/monty/test_cases/async__with_args.py +14 -0
- package/ref-monty/crates/monty/test_cases/attr__get_int_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/attr__get_list_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/attr__set_frozen_nonfield.py +12 -0
- package/ref-monty/crates/monty/test_cases/attr__set_int_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/attr__set_list_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bench__kitchen_sink.py +68 -0
- package/ref-monty/crates/monty/test_cases/bool__ops.py +20 -0
- package/ref-monty/crates/monty/test_cases/builtin__add_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/builtin__filter.py +62 -0
- package/ref-monty/crates/monty/test_cases/builtin__filter_not_iterable.py +11 -0
- package/ref-monty/crates/monty/test_cases/builtin__getattr.py +84 -0
- package/ref-monty/crates/monty/test_cases/builtin__iter_funcs.py +42 -0
- package/ref-monty/crates/monty/test_cases/builtin__iter_next.py +66 -0
- package/ref-monty/crates/monty/test_cases/builtin__map.py +74 -0
- package/ref-monty/crates/monty/test_cases/builtin__map_not_iterable.py +11 -0
- package/ref-monty/crates/monty/test_cases/builtin__math_funcs.py +154 -0
- package/ref-monty/crates/monty/test_cases/builtin__more_iter_funcs.py +148 -0
- package/ref-monty/crates/monty/test_cases/builtin__next_stop_iteration.py +10 -0
- package/ref-monty/crates/monty/test_cases/builtin__print_invalid_kwarg.py +9 -0
- package/ref-monty/crates/monty/test_cases/builtin__print_kwargs.py +12 -0
- package/ref-monty/crates/monty/test_cases/builtin__repr.py +3 -0
- package/ref-monty/crates/monty/test_cases/builtin__string_funcs.py +73 -0
- package/ref-monty/crates/monty/test_cases/bytes__decode_invalid_utf8.py +18 -0
- package/ref-monty/crates/monty/test_cases/bytes__endswith_str_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/bytes__methods.py +394 -0
- package/ref-monty/crates/monty/test_cases/bytes__negative_count.py +9 -0
- package/ref-monty/crates/monty/test_cases/bytes__ops.py +90 -0
- package/ref-monty/crates/monty/test_cases/bytes__startswith_str_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/call_object.py +3 -0
- package/ref-monty/crates/monty/test_cases/chain_comparison__all.py +79 -0
- package/ref-monty/crates/monty/test_cases/closure__param_shadows_outer.py +81 -0
- package/ref-monty/crates/monty/test_cases/closure__pep448.py +203 -0
- package/ref-monty/crates/monty/test_cases/closure__undefined_nonlocal.py +13 -0
- package/ref-monty/crates/monty/test_cases/compare__mixed_types.py +120 -0
- package/ref-monty/crates/monty/test_cases/comprehension__all.py +208 -0
- package/ref-monty/crates/monty/test_cases/comprehension__scope.py +7 -0
- package/ref-monty/crates/monty/test_cases/comprehension__unbound_local.py +14 -0
- package/ref-monty/crates/monty/test_cases/dataclass__basic.py +238 -0
- package/ref-monty/crates/monty/test_cases/dataclass__call_field_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/dataclass__frozen_set_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/dataclass__get_missing_attr_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/dict__get_unhashable_key.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__literal_unhashable_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__method_pop_missing_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__methods.py +151 -0
- package/ref-monty/crates/monty/test_cases/dict__ops.py +133 -0
- package/ref-monty/crates/monty/test_cases/dict__pop_unhashable_key.py +4 -0
- package/ref-monty/crates/monty/test_cases/dict__popitem_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/dict__subscript_missing_key.py +3 -0
- package/ref-monty/crates/monty/test_cases/dict__unhashable_dict_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__unhashable_list_key.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/dict__views.py +165 -0
- package/ref-monty/crates/monty/test_cases/edge__all.py +26 -0
- package/ref-monty/crates/monty/test_cases/edge__float_int_mod.py +2 -0
- package/ref-monty/crates/monty/test_cases/edge__int_float_mod.py +2 -0
- package/ref-monty/crates/monty/test_cases/exc__args.py +16 -0
- package/ref-monty/crates/monty/test_cases/exc__str.py +15 -0
- package/ref-monty/crates/monty/test_cases/execute_ok__all.py +54 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_instance_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_string_arg.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_string_arg_quotes.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__error_type.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_instance_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_list.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_number.py +2 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_call_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_direct.py +3 -0
- package/ref-monty/crates/monty/test_cases/execute_raise__raise_type_via_var.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__arg_side_effect_bug.py +22 -0
- package/ref-monty/crates/monty/test_cases/ext_call__augmented.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__augmented_refcount_bug.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__bare_raise_after_resume.py +34 -0
- package/ref-monty/crates/monty/test_cases/ext_call__basic.py +99 -0
- package/ref-monty/crates/monty/test_cases/ext_call__boolean.py +37 -0
- package/ref-monty/crates/monty/test_cases/ext_call__boolean_side_effect_hang.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__closure_bug.py +16 -0
- package/ref-monty/crates/monty/test_cases/ext_call__comparison.py +26 -0
- package/ref-monty/crates/monty/test_cases/ext_call__deep_call_stack.py +18 -0
- package/ref-monty/crates/monty/test_cases/ext_call__elif.py +171 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_deep_stack.py +39 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_in_function.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__exc_nested_functions.py +31 -0
- package/ref-monty/crates/monty/test_cases/ext_call__ext_exc.py +171 -0
- package/ref-monty/crates/monty/test_cases/ext_call__for.py +114 -0
- package/ref-monty/crates/monty/test_cases/ext_call__fstring.py +12 -0
- package/ref-monty/crates/monty/test_cases/ext_call__if.py +135 -0
- package/ref-monty/crates/monty/test_cases/ext_call__if_condition.py +37 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_closure.py +14 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_function.py +40 -0
- package/ref-monty/crates/monty/test_cases/ext_call__in_function_simple.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__literals.py +17 -0
- package/ref-monty/crates/monty/test_cases/ext_call__multi_in_func.py +32 -0
- package/ref-monty/crates/monty/test_cases/ext_call__name_lookup.py +69 -0
- package/ref-monty/crates/monty/test_cases/ext_call__name_lookup_undefined.py +4 -0
- package/ref-monty/crates/monty/test_cases/ext_call__nested_calls.py +14 -0
- package/ref-monty/crates/monty/test_cases/ext_call__recursion_bug.py +19 -0
- package/ref-monty/crates/monty/test_cases/ext_call__return.py +28 -0
- package/ref-monty/crates/monty/test_cases/ext_call__side_effects.py +25 -0
- package/ref-monty/crates/monty/test_cases/ext_call__subscript.py +7 -0
- package/ref-monty/crates/monty/test_cases/ext_call__ternary.py +28 -0
- package/ref-monty/crates/monty/test_cases/ext_call__try.py +280 -0
- package/ref-monty/crates/monty/test_cases/ext_call__try_simple.py +10 -0
- package/ref-monty/crates/monty/test_cases/ext_call__unary.py +13 -0
- package/ref-monty/crates/monty/test_cases/frozenset__ops.py +178 -0
- package/ref-monty/crates/monty/test_cases/fstring__all.py +236 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_eq_align_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_float_f_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_int_d_on_float.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_int_d_on_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec_dynamic.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_invalid_spec_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/fstring__error_str_s_on_int.py +3 -0
- package/ref-monty/crates/monty/test_cases/function__call_duplicate_kwargs.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__call_unpack.py +42 -0
- package/ref-monty/crates/monty/test_cases/function__defaults.py +117 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_arg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_first_arg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_duplicate_kwarg_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_kwonly_as_positional.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_all_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_heap_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_kwonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_posonly_with_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_missing_with_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_posonly_as_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_posonly_first_as_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_too_many_posonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_too_many_with_kwonly.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_cleanup.py +9 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_quote.py +13 -0
- package/ref-monty/crates/monty/test_cases/function__err_unexpected_kwarg_simple.py +7 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_duplicate_arg.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_duplicate_heap.py +8 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_int.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_nonstring_key.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__err_unpack_not_mapping.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__kwargs_unpacking.py +173 -0
- package/ref-monty/crates/monty/test_cases/function__ops.py +294 -0
- package/ref-monty/crates/monty/test_cases/function__return_none.py +42 -0
- package/ref-monty/crates/monty/test_cases/function__signatures.py +47 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_all.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_one.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_few_args_two.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_one.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_two.py +6 -0
- package/ref-monty/crates/monty/test_cases/function__too_many_args_zero.py +6 -0
- package/ref-monty/crates/monty/test_cases/global__error_assigned_before.py +7 -0
- package/ref-monty/crates/monty/test_cases/global__ops.py +163 -0
- package/ref-monty/crates/monty/test_cases/hash__dict_unhashable.py +2 -0
- package/ref-monty/crates/monty/test_cases/hash__list_unhashable.py +2 -0
- package/ref-monty/crates/monty/test_cases/hash__ops.py +153 -0
- package/ref-monty/crates/monty/test_cases/id__bytes_literals_distinct.py +3 -0
- package/ref-monty/crates/monty/test_cases/id__int_copy_distinct.py +5 -0
- package/ref-monty/crates/monty/test_cases/id__is_number_is_number.py +3 -0
- package/ref-monty/crates/monty/test_cases/id__non_overlapping_lifetimes_distinct_types.py +10 -0
- package/ref-monty/crates/monty/test_cases/id__non_overlapping_lifetimes_same_types.py +6 -0
- package/ref-monty/crates/monty/test_cases/id__ops.py +97 -0
- package/ref-monty/crates/monty/test_cases/id__str_literals_same.py +3 -0
- package/ref-monty/crates/monty/test_cases/if__elif_else.py +207 -0
- package/ref-monty/crates/monty/test_cases/if__raise_elif.py +11 -0
- package/ref-monty/crates/monty/test_cases/if__raise_else.py +13 -0
- package/ref-monty/crates/monty/test_cases/if__raise_if.py +9 -0
- package/ref-monty/crates/monty/test_cases/if__raise_in_elif_condition.py +18 -0
- package/ref-monty/crates/monty/test_cases/if__raise_in_if_condition.py +16 -0
- package/ref-monty/crates/monty/test_cases/if_else_expr__all.py +55 -0
- package/ref-monty/crates/monty/test_cases/import__error_cannot_import.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__error_module_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__local_scope.py +68 -0
- package/ref-monty/crates/monty/test_cases/import__os.py +25 -0
- package/ref-monty/crates/monty/test_cases/import__relative_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__relative_no_module_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/import__runtime_error_when_executed.py +14 -0
- package/ref-monty/crates/monty/test_cases/import__star_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/import__sys.py +47 -0
- package/ref-monty/crates/monty/test_cases/import__sys_monty.py +28 -0
- package/ref-monty/crates/monty/test_cases/import__type_checking_guard.py +37 -0
- package/ref-monty/crates/monty/test_cases/import__typing.py +25 -0
- package/ref-monty/crates/monty/test_cases/import__typing_type_ignore.py +4 -0
- package/ref-monty/crates/monty/test_cases/int__bigint.py +467 -0
- package/ref-monty/crates/monty/test_cases/int__bigint_errors.py +260 -0
- package/ref-monty/crates/monty/test_cases/int__ops.py +219 -0
- package/ref-monty/crates/monty/test_cases/int__overflow_division.py +84 -0
- package/ref-monty/crates/monty/test_cases/is_variant__all.py +36 -0
- package/ref-monty/crates/monty/test_cases/isinstance__arg2_list_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/isinstance__arg2_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/iter__dict_mutation.py +4 -0
- package/ref-monty/crates/monty/test_cases/iter__for.py +243 -0
- package/ref-monty/crates/monty/test_cases/iter__for_loop_unpacking.py +66 -0
- package/ref-monty/crates/monty/test_cases/iter__generator_expr.py +20 -0
- package/ref-monty/crates/monty/test_cases/iter__generator_expr_type.py +7 -0
- package/ref-monty/crates/monty/test_cases/iter__not_iterable.py +3 -0
- package/ref-monty/crates/monty/test_cases/lambda__all.py +145 -0
- package/ref-monty/crates/monty/test_cases/list__extend_not_iterable.py +7 -0
- package/ref-monty/crates/monty/test_cases/list__getitem_out_of_bounds.py +3 -0
- package/ref-monty/crates/monty/test_cases/list__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__ops.py +473 -0
- package/ref-monty/crates/monty/test_cases/list__pop_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__pop_out_of_range.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__pop_type_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__remove_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_dict_index.py +13 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_huge_int_index.py +13 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__setitem_type_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/list__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/longint__index_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/longint__repeat_error.py +3 -0
- package/ref-monty/crates/monty/test_cases/loop__break_continue.py +113 -0
- package/ref-monty/crates/monty/test_cases/loop__break_finally.py +69 -0
- package/ref-monty/crates/monty/test_cases/loop__break_in_function_error.py +13 -0
- package/ref-monty/crates/monty/test_cases/loop__break_in_if_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/loop__break_nested_except_clears.py +55 -0
- package/ref-monty/crates/monty/test_cases/loop__break_outside_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_finally.py +81 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_in_function_error.py +13 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_in_if_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_nested_except_clears.py +60 -0
- package/ref-monty/crates/monty/test_cases/loop__continue_outside_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/math__acos_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__acosh_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__asin_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__atanh_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__cos_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__cosh_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__exp_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__factorial_float_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__factorial_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_nan_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__floor_str_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__fmod_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__gamma_neg_int_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__gcd_float_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__isqrt_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__ldexp_overflow_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log1p_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log_base1_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__log_zero_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__module.py +1432 -0
- package/ref-monty/crates/monty/test_cases/math__pow_domain_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__sin_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__sqrt_negative_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__tan_inf_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/math__trunc_str_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/method__args_kwargs_unpacking.py +259 -0
- package/ref-monty/crates/monty/test_cases/name_error__unbound_local_func.py +19 -0
- package/ref-monty/crates/monty/test_cases/name_error__unbound_local_module.py +12 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_chained.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_in_expr.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_in_function.py +16 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_call_with_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/name_error__undefined_global.py +10 -0
- package/ref-monty/crates/monty/test_cases/namedtuple__missing_attr.py +11 -0
- package/ref-monty/crates/monty/test_cases/namedtuple__ops.py +34 -0
- package/ref-monty/crates/monty/test_cases/nonlocal__error_module_level.py +3 -0
- package/ref-monty/crates/monty/test_cases/nonlocal__ops.py +353 -0
- package/ref-monty/crates/monty/test_cases/os__environ.py +40 -0
- package/ref-monty/crates/monty/test_cases/os__getenv_key_list_error.py +5 -0
- package/ref-monty/crates/monty/test_cases/os__getenv_key_type_error.py +5 -0
- package/ref-monty/crates/monty/test_cases/parse_error__complex.py +3 -0
- package/ref-monty/crates/monty/test_cases/pathlib__import.py +11 -0
- package/ref-monty/crates/monty/test_cases/pathlib__os.py +136 -0
- package/ref-monty/crates/monty/test_cases/pathlib__os_read_error.py +12 -0
- package/ref-monty/crates/monty/test_cases/pathlib__pure.py +81 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_dict_self.py +5 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_list_dict.py +6 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_list_self.py +5 -0
- package/ref-monty/crates/monty/test_cases/pyobject__cycle_multiple_refs.py +6 -0
- package/ref-monty/crates/monty/test_cases/range__error_no_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__error_step_zero.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__error_too_many_args.py +2 -0
- package/ref-monty/crates/monty/test_cases/range__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/range__ops.py +236 -0
- package/ref-monty/crates/monty/test_cases/re__basic.py +756 -0
- package/ref-monty/crates/monty/test_cases/re__grouping.py +241 -0
- package/ref-monty/crates/monty/test_cases/re__match.py +148 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_drop.py +26 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_eq.py +23 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_hash.py +46 -0
- package/ref-monty/crates/monty/test_cases/recursion__deep_repr.py +12 -0
- package/ref-monty/crates/monty/test_cases/recursion__function_depth.py +13 -0
- package/ref-monty/crates/monty/test_cases/refcount__cycle_mutual_reference.py +18 -0
- package/ref-monty/crates/monty/test_cases/refcount__cycle_self_reference.py +12 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_basic.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_get.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_keys_and.py +14 -0
- package/ref-monty/crates/monty/test_cases/refcount__dict_overwrite.py +6 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_cleanup.py +16 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_exception.py +18 -0
- package/ref-monty/crates/monty/test_cases/refcount__gather_nested_cancel.py +25 -0
- package/ref-monty/crates/monty/test_cases/refcount__immediate_skipped.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__kwargs_unpacking.py +27 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_append_multiple.py +6 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_append_ref.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_concat.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_getitem.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__list_iadd.py +5 -0
- package/ref-monty/crates/monty/test_cases/refcount__nested_list.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_pattern_sub_error_paths.py +37 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_search_match.py +34 -0
- package/ref-monty/crates/monty/test_cases/refcount__re_sub_error_paths.py +31 -0
- package/ref-monty/crates/monty/test_cases/refcount__shared_reference.py +4 -0
- package/ref-monty/crates/monty/test_cases/refcount__single_list.py +3 -0
- package/ref-monty/crates/monty/test_cases/repr__cycle_detection.py +24 -0
- package/ref-monty/crates/monty/test_cases/set__ops.py +191 -0
- package/ref-monty/crates/monty/test_cases/set__review_bugs.py +35 -0
- package/ref-monty/crates/monty/test_cases/set__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/slice__invalid_indices.py +2 -0
- package/ref-monty/crates/monty/test_cases/slice__kwargs.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__no_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__ops.py +149 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_bytes.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_range.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_str.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__step_zero_tuple.py +9 -0
- package/ref-monty/crates/monty/test_cases/slice__too_many_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__getitem_index_error.py +10 -0
- package/ref-monty/crates/monty/test_cases/str__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_no_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_non_string.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_not_iterable.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__join_too_many_args.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__methods.py +327 -0
- package/ref-monty/crates/monty/test_cases/str__ops.py +162 -0
- package/ref-monty/crates/monty/test_cases/str__partition_empty.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__rsplit_empty_sep.py +9 -0
- package/ref-monty/crates/monty/test_cases/str__split_empty_sep.py +9 -0
- package/ref-monty/crates/monty/test_cases/sys__types.py +7 -0
- package/ref-monty/crates/monty/test_cases/traceback__division_error.py +30 -0
- package/ref-monty/crates/monty/test_cases/traceback__index_error.py +17 -0
- package/ref-monty/crates/monty/test_cases/traceback__insert_as_int.py +10 -0
- package/ref-monty/crates/monty/test_cases/traceback__nested_call.py +29 -0
- package/ref-monty/crates/monty/test_cases/traceback__nonlocal_module_scope.py +10 -0
- package/ref-monty/crates/monty/test_cases/traceback__nonlocal_unbound.py +24 -0
- package/ref-monty/crates/monty/test_cases/traceback__range_as_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/traceback__recursion_error.py +23 -0
- package/ref-monty/crates/monty/test_cases/traceback__set_mutation.py +11 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_attr_call.py +16 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_call.py +16 -0
- package/ref-monty/crates/monty/test_cases/traceback__undefined_raise.py +16 -0
- package/ref-monty/crates/monty/test_cases/try_except__all.py +472 -0
- package/ref-monty/crates/monty/test_cases/try_except__bare_raise_no_context.py +2 -0
- package/ref-monty/crates/monty/test_cases/try_except__invalid_type.py +5 -0
- package/ref-monty/crates/monty/test_cases/tuple__getitem_out_of_bounds.py +3 -0
- package/ref-monty/crates/monty/test_cases/tuple__index_not_found.py +9 -0
- package/ref-monty/crates/monty/test_cases/tuple__index_start_gt_end.py +10 -0
- package/ref-monty/crates/monty/test_cases/tuple__methods.py +19 -0
- package/ref-monty/crates/monty/test_cases/tuple__ops.py +133 -0
- package/ref-monty/crates/monty/test_cases/tuple__unpack_type_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__builtin_attr_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__bytes_negative.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__cell_not_builtin.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__exception_attr_error.py +11 -0
- package/ref-monty/crates/monty/test_cases/type__float_conversion_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_both_quotes.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_newline.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__float_repr_single_quote.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__int_conversion_error.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__list_not_iterable.py +2 -0
- package/ref-monty/crates/monty/test_cases/type__non_builtin_name_error.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__ops.py +200 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_exc.py +3 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_int.py +9 -0
- package/ref-monty/crates/monty/test_cases/type__shadow_len.py +3 -0
- package/ref-monty/crates/monty/test_cases/type__tuple_not_iterable.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_add_list.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_div_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_floordiv_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_iadd_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_mod_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_pow_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__int_sub_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_add_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_add_str.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__list_iadd_int.py +6 -0
- package/ref-monty/crates/monty/test_cases/type_error__str_add_int.py +2 -0
- package/ref-monty/crates/monty/test_cases/type_error__str_iadd_int.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_invert_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_minus_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_neg_str.py +3 -0
- package/ref-monty/crates/monty/test_cases/type_error__unary_plus_str.py +4 -0
- package/ref-monty/crates/monty/test_cases/typing__types.py +24 -0
- package/ref-monty/crates/monty/test_cases/unpack__nested.py +48 -0
- package/ref-monty/crates/monty/test_cases/unpack__non_sequence.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__not_enough.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__ops.py +153 -0
- package/ref-monty/crates/monty/test_cases/unpack__star_not_enough.py +9 -0
- package/ref-monty/crates/monty/test_cases/unpack__too_many.py +9 -0
- package/ref-monty/crates/monty/test_cases/version__cpython.py +4 -0
- package/ref-monty/crates/monty/test_cases/walrus__all.py +178 -0
- package/ref-monty/crates/monty/test_cases/while__all.py +206 -0
- package/ref-monty/crates/monty/tests/asyncio.rs +764 -0
- package/ref-monty/crates/monty/tests/binary_serde.rs +185 -0
- package/ref-monty/crates/monty/tests/bytecode_limits.rs +248 -0
- package/ref-monty/crates/monty/tests/datatest_runner.rs +2029 -0
- package/ref-monty/crates/monty/tests/inputs.rs +420 -0
- package/ref-monty/crates/monty/tests/json_serde.rs +250 -0
- package/ref-monty/crates/monty/tests/main.rs +71 -0
- package/ref-monty/crates/monty/tests/math_module.rs +114 -0
- package/ref-monty/crates/monty/tests/name_lookup.rs +482 -0
- package/ref-monty/crates/monty/tests/os_tests.rs +459 -0
- package/ref-monty/crates/monty/tests/parse_errors.rs +441 -0
- package/ref-monty/crates/monty/tests/print_writer.rs +238 -0
- package/ref-monty/crates/monty/tests/py_object.rs +121 -0
- package/ref-monty/crates/monty/tests/regex.rs +90 -0
- package/ref-monty/crates/monty/tests/repl.rs +344 -0
- package/ref-monty/crates/monty/tests/resource_limits.rs +1826 -0
- package/ref-monty/crates/monty/tests/try_from.rs +167 -0
- package/ref-monty/crates/monty-cli/Cargo.toml +25 -0
- package/ref-monty/crates/monty-cli/src/main.rs +541 -0
- package/ref-monty/crates/monty-js/.cargo/config.toml +2 -0
- package/ref-monty/crates/monty-js/.prettierignore +8 -0
- package/ref-monty/crates/monty-js/Cargo.toml +32 -0
- package/ref-monty/crates/monty-js/README.md +207 -0
- package/ref-monty/crates/monty-js/__test__/async.spec.ts +350 -0
- package/ref-monty/crates/monty-js/__test__/basic.spec.ts +114 -0
- package/ref-monty/crates/monty-js/__test__/exceptions.spec.ts +427 -0
- package/ref-monty/crates/monty-js/__test__/external.spec.ts +354 -0
- package/ref-monty/crates/monty-js/__test__/inputs.spec.ts +143 -0
- package/ref-monty/crates/monty-js/__test__/limits.spec.ts +162 -0
- package/ref-monty/crates/monty-js/__test__/package.json +3 -0
- package/ref-monty/crates/monty-js/__test__/print.spec.ts +229 -0
- package/ref-monty/crates/monty-js/__test__/repl.spec.ts +34 -0
- package/ref-monty/crates/monty-js/__test__/serialize.spec.ts +205 -0
- package/ref-monty/crates/monty-js/__test__/start.spec.ts +443 -0
- package/ref-monty/crates/monty-js/__test__/type_check.spec.ts +147 -0
- package/ref-monty/crates/monty-js/__test__/types.spec.ts +319 -0
- package/ref-monty/crates/monty-js/build.rs +61 -0
- package/ref-monty/crates/monty-js/index-header.d.ts +3 -0
- package/ref-monty/crates/monty-js/package-lock.json +4694 -0
- package/ref-monty/crates/monty-js/package.json +100 -0
- package/ref-monty/crates/monty-js/scripts/smoke-test.sh +69 -0
- package/ref-monty/crates/monty-js/smoke-test/package.json +17 -0
- package/ref-monty/crates/monty-js/smoke-test/test.ts +171 -0
- package/ref-monty/crates/monty-js/smoke-test/tsconfig.json +11 -0
- package/ref-monty/crates/monty-js/src/convert.rs +648 -0
- package/ref-monty/crates/monty-js/src/exceptions.rs +293 -0
- package/ref-monty/crates/monty-js/src/lib.rs +41 -0
- package/ref-monty/crates/monty-js/src/limits.rs +53 -0
- package/ref-monty/crates/monty-js/src/monty_cls.rs +1407 -0
- package/ref-monty/crates/monty-js/tsconfig.json +17 -0
- package/ref-monty/crates/monty-js/wrapper.ts +701 -0
- package/ref-monty/crates/monty-python/Cargo.toml +38 -0
- package/ref-monty/crates/monty-python/README.md +134 -0
- package/ref-monty/crates/monty-python/build.rs +4 -0
- package/ref-monty/crates/monty-python/example.py +40 -0
- package/ref-monty/crates/monty-python/exercise.py +46 -0
- package/ref-monty/crates/monty-python/pyproject.toml +57 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/__init__.py +281 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/_monty.pyi +677 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/os_access.py +933 -0
- package/ref-monty/crates/monty-python/python/pydantic_monty/py.typed +0 -0
- package/ref-monty/crates/monty-python/src/convert.rs +273 -0
- package/ref-monty/crates/monty-python/src/dataclass.rs +461 -0
- package/ref-monty/crates/monty-python/src/exceptions.rs +557 -0
- package/ref-monty/crates/monty-python/src/external.rs +165 -0
- package/ref-monty/crates/monty-python/src/lib.rs +77 -0
- package/ref-monty/crates/monty-python/src/limits.rs +142 -0
- package/ref-monty/crates/monty-python/src/monty_cls.rs +1650 -0
- package/ref-monty/crates/monty-python/src/repl.rs +470 -0
- package/ref-monty/crates/monty-python/src/serialization.rs +761 -0
- package/ref-monty/crates/monty-python/tests/test_async.py +1201 -0
- package/ref-monty/crates/monty-python/tests/test_basic.py +66 -0
- package/ref-monty/crates/monty-python/tests/test_dataclasses.py +971 -0
- package/ref-monty/crates/monty-python/tests/test_exceptions.py +361 -0
- package/ref-monty/crates/monty-python/tests/test_external.py +367 -0
- package/ref-monty/crates/monty-python/tests/test_inputs.py +126 -0
- package/ref-monty/crates/monty-python/tests/test_limits.py +257 -0
- package/ref-monty/crates/monty-python/tests/test_os_access.py +1286 -0
- package/ref-monty/crates/monty-python/tests/test_os_access_compat.py +731 -0
- package/ref-monty/crates/monty-python/tests/test_os_access_raw.py +483 -0
- package/ref-monty/crates/monty-python/tests/test_os_calls.py +819 -0
- package/ref-monty/crates/monty-python/tests/test_print.py +208 -0
- package/ref-monty/crates/monty-python/tests/test_re.py +170 -0
- package/ref-monty/crates/monty-python/tests/test_readme_examples.py +20 -0
- package/ref-monty/crates/monty-python/tests/test_repl.py +749 -0
- package/ref-monty/crates/monty-python/tests/test_serialize.py +284 -0
- package/ref-monty/crates/monty-python/tests/test_start.py +346 -0
- package/ref-monty/crates/monty-python/tests/test_threading.py +163 -0
- package/ref-monty/crates/monty-python/tests/test_type_check.py +344 -0
- package/ref-monty/crates/monty-python/tests/test_types.py +553 -0
- package/ref-monty/crates/monty-type-checking/Cargo.toml +32 -0
- package/ref-monty/crates/monty-type-checking/src/db.rs +116 -0
- package/ref-monty/crates/monty-type-checking/src/lib.rs +4 -0
- package/ref-monty/crates/monty-type-checking/src/type_check.rs +280 -0
- package/ref-monty/crates/monty-type-checking/tests/bad_types.py +109 -0
- package/ref-monty/crates/monty-type-checking/tests/bad_types_output.txt +21 -0
- package/ref-monty/crates/monty-type-checking/tests/good_types.py +475 -0
- package/ref-monty/crates/monty-type-checking/tests/main.rs +205 -0
- package/ref-monty/crates/monty-type-checking/tests/reveal_types.py +56 -0
- package/ref-monty/crates/monty-type-checking/tests/reveal_types_output.txt +41 -0
- package/ref-monty/crates/monty-typeshed/Cargo.toml +29 -0
- package/ref-monty/crates/monty-typeshed/README.md +11 -0
- package/ref-monty/crates/monty-typeshed/build.rs +101 -0
- package/ref-monty/crates/monty-typeshed/custom/README.md +1 -0
- package/ref-monty/crates/monty-typeshed/custom/asyncio.pyi +138 -0
- package/ref-monty/crates/monty-typeshed/custom/os.pyi +87 -0
- package/ref-monty/crates/monty-typeshed/custom/sys.pyi +33 -0
- package/ref-monty/crates/monty-typeshed/src/lib.rs +56 -0
- package/ref-monty/crates/monty-typeshed/update.py +321 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/source_commit.txt +1 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/VERSIONS +20 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/_collections_abc.pyi +105 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/_typeshed/__init__.pyi +394 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/asyncio.pyi +138 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/builtins.pyi +1434 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/collections/__init__.pyi +527 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/collections/abc.pyi +2 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/dataclasses.pyi +502 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/enum.pyi +376 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/math.pyi +149 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/os.pyi +87 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/pathlib/__init__.pyi +395 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/pathlib/types.pyi +8 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/re.pyi +337 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/sys.pyi +33 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/types.pyi +741 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/typing.pyi +1217 -0
- package/ref-monty/crates/monty-typeshed/vendor/typeshed/stdlib/typing_extensions.pyi +716 -0
- package/ref-monty/docs/usage-guide.md +117 -0
- package/ref-monty/examples/README.md +3 -0
- package/ref-monty/examples/expense_analysis/README.md +3 -0
- package/ref-monty/examples/expense_analysis/data.py +124 -0
- package/ref-monty/examples/expense_analysis/main.py +115 -0
- package/ref-monty/examples/sql_playground/README.md +20 -0
- package/ref-monty/examples/sql_playground/external_functions.py +129 -0
- package/ref-monty/examples/sql_playground/main.py +81 -0
- package/ref-monty/examples/sql_playground/sandbox_code.py +82 -0
- package/ref-monty/examples/sql_playground/type_stubs.pyi +14 -0
- package/ref-monty/examples/web_scraper/README.md +15 -0
- package/ref-monty/examples/web_scraper/browser.py +56 -0
- package/ref-monty/examples/web_scraper/example_code.py +59 -0
- package/ref-monty/examples/web_scraper/external_functions.py +324 -0
- package/ref-monty/examples/web_scraper/main.py +193 -0
- package/ref-monty/examples/web_scraper/sub_agent.py +79 -0
- package/ref-monty/monty-npm.md +235 -0
- package/ref-monty/pyproject.toml +162 -0
- package/ref-monty/scripts/check_imports.py +91 -0
- package/ref-monty/scripts/codecov_diff.py +412 -0
- package/ref-monty/scripts/complete_tests.py +146 -0
- package/ref-monty/scripts/flamegraph_to_text.py +208 -0
- package/ref-monty/scripts/iter_test_methods.py +540 -0
- package/ref-monty/scripts/run_traceback.py +180 -0
- package/ref-monty/scripts/startup_performance.py +130 -0
- package/ref-monty/uv.lock +1779 -0
- package/temp_resend_cli/repo/.github/scripts/pr-title-check.js +34 -0
- package/temp_resend_cli/repo/.github/workflows/ci.yml +67 -0
- package/temp_resend_cli/repo/.github/workflows/post-release.yml +51 -0
- package/temp_resend_cli/repo/.github/workflows/pr-title-check.yml +13 -0
- package/temp_resend_cli/repo/.github/workflows/release.yml +175 -0
- package/temp_resend_cli/repo/.github/workflows/test-install-unix.yml +34 -0
- package/temp_resend_cli/repo/.github/workflows/test-install-windows.yml +48 -0
- package/temp_resend_cli/repo/CHANGELOG.md +31 -0
- package/temp_resend_cli/repo/LICENSE +21 -0
- package/temp_resend_cli/repo/README.md +450 -0
- package/temp_resend_cli/repo/biome.json +36 -0
- package/temp_resend_cli/repo/install.ps1 +141 -0
- package/temp_resend_cli/repo/install.sh +301 -0
- package/temp_resend_cli/repo/package.json +61 -0
- package/temp_resend_cli/repo/pnpm-lock.yaml +2439 -0
- package/temp_resend_cli/repo/renovate.json +4 -0
- package/temp_resend_cli/repo/src/cli.ts +98 -0
- package/temp_resend_cli/repo/src/commands/api-keys/create.ts +114 -0
- package/temp_resend_cli/repo/src/commands/api-keys/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/api-keys/index.ts +26 -0
- package/temp_resend_cli/repo/src/commands/api-keys/list.ts +35 -0
- package/temp_resend_cli/repo/src/commands/api-keys/utils.ts +8 -0
- package/temp_resend_cli/repo/src/commands/auth/index.ts +20 -0
- package/temp_resend_cli/repo/src/commands/auth/login.ts +234 -0
- package/temp_resend_cli/repo/src/commands/auth/logout.ts +105 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/create.ts +196 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/delete.ts +46 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/get.ts +59 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/index.ts +43 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/list.ts +60 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/send.ts +56 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/update.ts +95 -0
- package/temp_resend_cli/repo/src/commands/broadcasts/utils.ts +35 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/create.ts +118 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/delete.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/get.ts +46 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/index.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/list.ts +68 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/update.ts +88 -0
- package/temp_resend_cli/repo/src/commands/contact-properties/utils.ts +17 -0
- package/temp_resend_cli/repo/src/commands/contacts/add-segment.ts +78 -0
- package/temp_resend_cli/repo/src/commands/contacts/create.ts +122 -0
- package/temp_resend_cli/repo/src/commands/contacts/delete.ts +49 -0
- package/temp_resend_cli/repo/src/commands/contacts/get.ts +53 -0
- package/temp_resend_cli/repo/src/commands/contacts/index.ts +58 -0
- package/temp_resend_cli/repo/src/commands/contacts/list.ts +57 -0
- package/temp_resend_cli/repo/src/commands/contacts/remove-segment.ts +48 -0
- package/temp_resend_cli/repo/src/commands/contacts/segments.ts +39 -0
- package/temp_resend_cli/repo/src/commands/contacts/topics.ts +45 -0
- package/temp_resend_cli/repo/src/commands/contacts/update-topics.ts +90 -0
- package/temp_resend_cli/repo/src/commands/contacts/update.ts +77 -0
- package/temp_resend_cli/repo/src/commands/contacts/utils.ts +119 -0
- package/temp_resend_cli/repo/src/commands/doctor.ts +216 -0
- package/temp_resend_cli/repo/src/commands/domains/create.ts +83 -0
- package/temp_resend_cli/repo/src/commands/domains/delete.ts +42 -0
- package/temp_resend_cli/repo/src/commands/domains/get.ts +47 -0
- package/temp_resend_cli/repo/src/commands/domains/index.ts +35 -0
- package/temp_resend_cli/repo/src/commands/domains/list.ts +53 -0
- package/temp_resend_cli/repo/src/commands/domains/update.ts +75 -0
- package/temp_resend_cli/repo/src/commands/domains/utils.ts +44 -0
- package/temp_resend_cli/repo/src/commands/domains/verify.ts +38 -0
- package/temp_resend_cli/repo/src/commands/emails/batch.ts +140 -0
- package/temp_resend_cli/repo/src/commands/emails/get.ts +44 -0
- package/temp_resend_cli/repo/src/commands/emails/index.ts +30 -0
- package/temp_resend_cli/repo/src/commands/emails/list.ts +84 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/attachment.ts +55 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/attachments.ts +68 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/get.ts +58 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/index.ts +28 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/list.ts +59 -0
- package/temp_resend_cli/repo/src/commands/emails/receiving/utils.ts +38 -0
- package/temp_resend_cli/repo/src/commands/emails/send.ts +189 -0
- package/temp_resend_cli/repo/src/commands/open.ts +27 -0
- package/temp_resend_cli/repo/src/commands/segments/create.ts +50 -0
- package/temp_resend_cli/repo/src/commands/segments/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/segments/get.ts +38 -0
- package/temp_resend_cli/repo/src/commands/segments/index.ts +36 -0
- package/temp_resend_cli/repo/src/commands/segments/list.ts +58 -0
- package/temp_resend_cli/repo/src/commands/segments/utils.ts +7 -0
- package/temp_resend_cli/repo/src/commands/teams/index.ts +10 -0
- package/temp_resend_cli/repo/src/commands/teams/list.ts +35 -0
- package/temp_resend_cli/repo/src/commands/teams/remove.ts +86 -0
- package/temp_resend_cli/repo/src/commands/teams/switch.ts +76 -0
- package/temp_resend_cli/repo/src/commands/topics/create.ts +73 -0
- package/temp_resend_cli/repo/src/commands/topics/delete.ts +47 -0
- package/temp_resend_cli/repo/src/commands/topics/get.ts +42 -0
- package/temp_resend_cli/repo/src/commands/topics/index.ts +42 -0
- package/temp_resend_cli/repo/src/commands/topics/list.ts +34 -0
- package/temp_resend_cli/repo/src/commands/topics/update.ts +59 -0
- package/temp_resend_cli/repo/src/commands/topics/utils.ts +16 -0
- package/temp_resend_cli/repo/src/commands/webhooks/create.ts +128 -0
- package/temp_resend_cli/repo/src/commands/webhooks/delete.ts +49 -0
- package/temp_resend_cli/repo/src/commands/webhooks/get.ts +42 -0
- package/temp_resend_cli/repo/src/commands/webhooks/index.ts +42 -0
- package/temp_resend_cli/repo/src/commands/webhooks/list.ts +55 -0
- package/temp_resend_cli/repo/src/commands/webhooks/listen.ts +379 -0
- package/temp_resend_cli/repo/src/commands/webhooks/update.ts +83 -0
- package/temp_resend_cli/repo/src/commands/webhooks/utils.ts +36 -0
- package/temp_resend_cli/repo/src/commands/whoami.ts +71 -0
- package/temp_resend_cli/repo/src/lib/actions.ts +157 -0
- package/temp_resend_cli/repo/src/lib/client.ts +37 -0
- package/temp_resend_cli/repo/src/lib/config.ts +217 -0
- package/temp_resend_cli/repo/src/lib/files.ts +15 -0
- package/temp_resend_cli/repo/src/lib/help-text.ts +38 -0
- package/temp_resend_cli/repo/src/lib/output.ts +56 -0
- package/temp_resend_cli/repo/src/lib/pagination.ts +36 -0
- package/temp_resend_cli/repo/src/lib/prompts.ts +149 -0
- package/temp_resend_cli/repo/src/lib/spinner.ts +100 -0
- package/temp_resend_cli/repo/src/lib/table.ts +57 -0
- package/temp_resend_cli/repo/src/lib/tty.ts +28 -0
- package/temp_resend_cli/repo/src/lib/update-check.ts +169 -0
- package/temp_resend_cli/repo/src/lib/version.ts +4 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/create.test.ts +196 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/api-keys/list.test.ts +134 -0
- package/temp_resend_cli/repo/tests/commands/auth/login.test.ts +153 -0
- package/temp_resend_cli/repo/tests/commands/auth/logout.test.ts +153 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/create.test.ts +454 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/delete.test.ts +183 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/get.test.ts +147 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/list.test.ts +199 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/send.test.ts +162 -0
- package/temp_resend_cli/repo/tests/commands/broadcasts/update.test.ts +288 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/create.test.ts +251 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/delete.test.ts +184 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/get.test.ts +145 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/list.test.ts +181 -0
- package/temp_resend_cli/repo/tests/commands/contact-properties/update.test.ts +217 -0
- package/temp_resend_cli/repo/tests/commands/contacts/add-segment.test.ts +189 -0
- package/temp_resend_cli/repo/tests/commands/contacts/create.test.ts +271 -0
- package/temp_resend_cli/repo/tests/commands/contacts/delete.test.ts +193 -0
- package/temp_resend_cli/repo/tests/commands/contacts/get.test.ts +149 -0
- package/temp_resend_cli/repo/tests/commands/contacts/list.test.ts +176 -0
- package/temp_resend_cli/repo/tests/commands/contacts/remove-segment.test.ts +167 -0
- package/temp_resend_cli/repo/tests/commands/contacts/segments.test.ts +168 -0
- package/temp_resend_cli/repo/tests/commands/contacts/topics.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/contacts/update-topics.test.ts +248 -0
- package/temp_resend_cli/repo/tests/commands/contacts/update.test.ts +206 -0
- package/temp_resend_cli/repo/tests/commands/doctor.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/domains/create.test.ts +193 -0
- package/temp_resend_cli/repo/tests/commands/domains/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/domains/get.test.ts +138 -0
- package/temp_resend_cli/repo/tests/commands/domains/list.test.ts +165 -0
- package/temp_resend_cli/repo/tests/commands/domains/update.test.ts +224 -0
- package/temp_resend_cli/repo/tests/commands/domains/verify.test.ts +118 -0
- package/temp_resend_cli/repo/tests/commands/emails/batch.test.ts +324 -0
- package/temp_resend_cli/repo/tests/commands/emails/get.test.ts +132 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/attachment.test.ts +141 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/attachments.test.ts +169 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/get.test.ts +141 -0
- package/temp_resend_cli/repo/tests/commands/emails/receiving/list.test.ts +182 -0
- package/temp_resend_cli/repo/tests/commands/emails/send.test.ts +312 -0
- package/temp_resend_cli/repo/tests/commands/segments/create.test.ts +164 -0
- package/temp_resend_cli/repo/tests/commands/segments/delete.test.ts +183 -0
- package/temp_resend_cli/repo/tests/commands/segments/get.test.ts +138 -0
- package/temp_resend_cli/repo/tests/commands/segments/list.test.ts +174 -0
- package/temp_resend_cli/repo/tests/commands/teams/list.test.ts +62 -0
- package/temp_resend_cli/repo/tests/commands/teams/remove.test.ts +110 -0
- package/temp_resend_cli/repo/tests/commands/teams/switch.test.ts +103 -0
- package/temp_resend_cli/repo/tests/commands/topics/create.test.ts +192 -0
- package/temp_resend_cli/repo/tests/commands/topics/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/topics/get.test.ts +126 -0
- package/temp_resend_cli/repo/tests/commands/topics/list.test.ts +125 -0
- package/temp_resend_cli/repo/tests/commands/topics/update.test.ts +178 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/create.test.ts +225 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/delete.test.ts +157 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/get.test.ts +126 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/list.test.ts +178 -0
- package/temp_resend_cli/repo/tests/commands/webhooks/update.test.ts +207 -0
- package/temp_resend_cli/repo/tests/commands/whoami.test.ts +98 -0
- package/temp_resend_cli/repo/tests/e2e/smoke.test.ts +93 -0
- package/temp_resend_cli/repo/tests/helpers.ts +86 -0
- package/temp_resend_cli/repo/tests/lib/client.test.ts +71 -0
- package/temp_resend_cli/repo/tests/lib/config.test.ts +451 -0
- package/temp_resend_cli/repo/tests/lib/files.test.ts +73 -0
- package/temp_resend_cli/repo/tests/lib/help-text.test.ts +97 -0
- package/temp_resend_cli/repo/tests/lib/output.test.ts +136 -0
- package/temp_resend_cli/repo/tests/lib/prompts.test.ts +185 -0
- package/temp_resend_cli/repo/tests/lib/spinner.test.ts +166 -0
- package/temp_resend_cli/repo/tests/lib/table.test.ts +63 -0
- package/temp_resend_cli/repo/tests/lib/tty.test.ts +89 -0
- package/temp_resend_cli/repo/tests/lib/update-check.test.ts +179 -0
- package/temp_resend_cli/repo/tsconfig.json +14 -0
- package/temp_resend_cli/repo/vitest.config.e2e.ts +8 -0
- package/temp_resend_cli/repo/vitest.config.ts +10 -0
- package/tests/test-mcp-browser-use-smoke.sh +28 -56
- package/tests/test-monty-smoke.sh +32 -0
- package/tests/test-resend-smoke.sh +36 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//! Bytecode VM module for Monty.
|
|
2
|
+
//!
|
|
3
|
+
//! This module contains the bytecode representation, compiler, and virtual machine
|
|
4
|
+
//! for executing Python code. The bytecode VM replaces the tree-walking interpreter
|
|
5
|
+
//! with a stack-based execution model.
|
|
6
|
+
//!
|
|
7
|
+
//! # Module Structure
|
|
8
|
+
//!
|
|
9
|
+
//! - `op` - Opcode enum definitions
|
|
10
|
+
//! - `code` - Code object containing bytecode and metadata
|
|
11
|
+
//! - `builder` - CodeBuilder for emitting bytecode during compilation
|
|
12
|
+
//! - `compiler` - AST to bytecode compiler
|
|
13
|
+
//! - `vm` - Virtual machine for bytecode execution
|
|
14
|
+
|
|
15
|
+
mod builder;
|
|
16
|
+
mod code;
|
|
17
|
+
mod compiler;
|
|
18
|
+
mod op;
|
|
19
|
+
mod vm;
|
|
20
|
+
|
|
21
|
+
pub use code::Code;
|
|
22
|
+
pub use compiler::Compiler;
|
|
23
|
+
pub(crate) use vm::CallResult;
|
|
24
|
+
pub use vm::{FrameExit, VM, VMSnapshot};
|
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
//! Opcode definitions for the bytecode VM.
|
|
2
|
+
//!
|
|
3
|
+
//! Bytecode is stored as raw `Vec<u8>` for cache efficiency. The `Opcode` enum is a pure
|
|
4
|
+
//! discriminant with no data - operands are fetched separately from the byte stream.
|
|
5
|
+
//!
|
|
6
|
+
//! # Operand Encoding
|
|
7
|
+
//!
|
|
8
|
+
//! - No suffix, 0 bytes: `BinaryAdd`, `Pop`, `LoadNone`
|
|
9
|
+
//! - No suffix, 1 byte (u8/i8): `LoadLocal`, `StoreLocal`, `LoadSmallInt`
|
|
10
|
+
//! - `W` suffix, 2 bytes (u16/i16): `LoadLocalW`, `Jump`, `LoadConst`
|
|
11
|
+
//! - Compound (multiple operands): `CallFunctionKw` (u8 + u8), `MakeClosure` (u16 + u8)
|
|
12
|
+
|
|
13
|
+
use strum::FromRepr;
|
|
14
|
+
|
|
15
|
+
/// Opcode discriminant - just identifies the instruction type.
|
|
16
|
+
///
|
|
17
|
+
/// Operands (if any) follow in the bytecode stream and are fetched separately.
|
|
18
|
+
/// With `#[repr(u8)]`, each opcode is exactly 1 byte. Uses `strum::FromRepr` for
|
|
19
|
+
/// efficient byte-to-opcode conversion (bounds check + transmute).
|
|
20
|
+
///
|
|
21
|
+
/// Opcode bytes are part of Monty's serialized `Code` format, so existing values
|
|
22
|
+
/// must remain stable across releases. Append new opcodes to the end of the enum
|
|
23
|
+
/// instead of inserting them into the middle.
|
|
24
|
+
#[repr(u8)]
|
|
25
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromRepr)]
|
|
26
|
+
pub enum Opcode {
|
|
27
|
+
// === Stack Operations (no operand) ===
|
|
28
|
+
/// Discard top of stack.
|
|
29
|
+
Pop,
|
|
30
|
+
/// Duplicate top of stack.
|
|
31
|
+
Dup,
|
|
32
|
+
/// Swap top two: [a, b] -> [b, a].
|
|
33
|
+
Rot2,
|
|
34
|
+
/// Rotate top three: [a, b, c] -> [c, a, b].
|
|
35
|
+
Rot3,
|
|
36
|
+
|
|
37
|
+
// === Constants & Literals ===
|
|
38
|
+
/// Push constant from pool. Operand: u16 const_id.
|
|
39
|
+
LoadConst,
|
|
40
|
+
/// Push None.
|
|
41
|
+
LoadNone,
|
|
42
|
+
/// Push True.
|
|
43
|
+
LoadTrue,
|
|
44
|
+
/// Push False.
|
|
45
|
+
LoadFalse,
|
|
46
|
+
/// Push small integer (-128 to 127). Operand: i8.
|
|
47
|
+
LoadSmallInt,
|
|
48
|
+
|
|
49
|
+
// === Variables ===
|
|
50
|
+
// Specialized no-operand versions for common slots (hot path)
|
|
51
|
+
/// Push local slot 0 (often 'self').
|
|
52
|
+
LoadLocal0,
|
|
53
|
+
/// Push local slot 1.
|
|
54
|
+
LoadLocal1,
|
|
55
|
+
/// Push local slot 2.
|
|
56
|
+
LoadLocal2,
|
|
57
|
+
/// Push local slot 3.
|
|
58
|
+
LoadLocal3,
|
|
59
|
+
// General versions with operand
|
|
60
|
+
/// Push local variable. Operand: u8 slot.
|
|
61
|
+
LoadLocal,
|
|
62
|
+
/// Push local (wide, slot > 255). Operand: u16 slot.
|
|
63
|
+
LoadLocalW,
|
|
64
|
+
/// Pop and store to local. Operand: u8 slot.
|
|
65
|
+
StoreLocal,
|
|
66
|
+
/// Store local (wide). Operand: u16 slot.
|
|
67
|
+
StoreLocalW,
|
|
68
|
+
/// Push from global namespace. Operand: u16 slot.
|
|
69
|
+
LoadGlobal,
|
|
70
|
+
/// Store to global. Operand: u16 slot.
|
|
71
|
+
StoreGlobal,
|
|
72
|
+
/// Load from closure cell. Operand: u16 slot.
|
|
73
|
+
LoadCell,
|
|
74
|
+
/// Store to closure cell. Operand: u16 slot.
|
|
75
|
+
StoreCell,
|
|
76
|
+
/// Delete local variable. Operand: u8 slot.
|
|
77
|
+
DeleteLocal,
|
|
78
|
+
/// Load local in call context: pushes `ExtFunction(name_id)` for undefined names
|
|
79
|
+
/// instead of yielding `NameLookup`. Operands: u8 slot, u16 name_id.
|
|
80
|
+
///
|
|
81
|
+
/// Used when compiling function calls like `foo()` where `foo` is `LocalUnassigned`.
|
|
82
|
+
/// If the variable is defined, behaves identically to `LoadLocal`.
|
|
83
|
+
/// If undefined, pushes an `ExtFunction` value so execution continues to `CallFunction`,
|
|
84
|
+
/// which naturally yields `FunctionCall` instead of `NameLookup`.
|
|
85
|
+
/// The name_id is encoded in the operand to avoid namespace lookup ambiguity.
|
|
86
|
+
LoadLocalCallable,
|
|
87
|
+
/// Wide variant of `LoadLocalCallable`. Operands: u16 slot, u16 name_id.
|
|
88
|
+
LoadLocalCallableW,
|
|
89
|
+
/// Load global in call context: pushes `ExtFunction(name_id)` for undefined names
|
|
90
|
+
/// instead of yielding `NameLookup`. Operands: u16 slot, u16 name_id.
|
|
91
|
+
///
|
|
92
|
+
/// Used when compiling function calls like `foo()` where `foo` is a global.
|
|
93
|
+
/// If the variable is defined, behaves identically to `LoadGlobal`.
|
|
94
|
+
/// If undefined, pushes an `ExtFunction` value so execution continues to `CallFunction`,
|
|
95
|
+
/// which naturally yields `FunctionCall` instead of `NameLookup`.
|
|
96
|
+
/// The name_id is encoded in the operand because global and local slot indices
|
|
97
|
+
/// belong to different namespaces — using the current frame's local_names would
|
|
98
|
+
/// return the wrong name when called from inside a function.
|
|
99
|
+
LoadGlobalCallable,
|
|
100
|
+
|
|
101
|
+
// === Binary Operations (no operand) ===
|
|
102
|
+
/// Add: a + b.
|
|
103
|
+
BinaryAdd,
|
|
104
|
+
/// Subtract: a - b.
|
|
105
|
+
BinarySub,
|
|
106
|
+
/// Multiply: a * b.
|
|
107
|
+
BinaryMul,
|
|
108
|
+
/// Divide: a / b.
|
|
109
|
+
BinaryDiv,
|
|
110
|
+
/// Floor divide: a // b.
|
|
111
|
+
BinaryFloorDiv,
|
|
112
|
+
/// Modulo: a % b.
|
|
113
|
+
BinaryMod,
|
|
114
|
+
/// Power: a ** b.
|
|
115
|
+
BinaryPow,
|
|
116
|
+
/// Bitwise AND: a & b.
|
|
117
|
+
BinaryAnd,
|
|
118
|
+
/// Bitwise OR: a | b.
|
|
119
|
+
BinaryOr,
|
|
120
|
+
/// Bitwise XOR: a ^ b.
|
|
121
|
+
BinaryXor,
|
|
122
|
+
/// Left shift: a << b.
|
|
123
|
+
BinaryLShift,
|
|
124
|
+
/// Right shift: a >> b.
|
|
125
|
+
BinaryRShift,
|
|
126
|
+
/// Matrix multiply: a @ b.
|
|
127
|
+
BinaryMatMul,
|
|
128
|
+
|
|
129
|
+
// === Comparison Operations (no operand) ===
|
|
130
|
+
/// Equal: a == b.
|
|
131
|
+
CompareEq,
|
|
132
|
+
/// Not equal: a != b.
|
|
133
|
+
CompareNe,
|
|
134
|
+
/// Less than: a < b.
|
|
135
|
+
CompareLt,
|
|
136
|
+
/// Less than or equal: a <= b.
|
|
137
|
+
CompareLe,
|
|
138
|
+
/// Greater than: a > b.
|
|
139
|
+
CompareGt,
|
|
140
|
+
/// Greater than or equal: a >= b.
|
|
141
|
+
CompareGe,
|
|
142
|
+
/// Identity: a is b.
|
|
143
|
+
CompareIs,
|
|
144
|
+
/// Not identity: a is not b.
|
|
145
|
+
CompareIsNot,
|
|
146
|
+
/// Membership: a in b.
|
|
147
|
+
CompareIn,
|
|
148
|
+
/// Not membership: a not in b.
|
|
149
|
+
CompareNotIn,
|
|
150
|
+
/// Modulo equality: a % b == k (operand: u16 constant index for k).
|
|
151
|
+
///
|
|
152
|
+
/// This is an optimization for patterns like `x % 3 == 0` which are common
|
|
153
|
+
/// in Python code. Pops b then a, computes `a % b`, then compares with k.
|
|
154
|
+
CompareModEq,
|
|
155
|
+
|
|
156
|
+
// === Unary Operations (no operand) ===
|
|
157
|
+
/// Logical not: not a.
|
|
158
|
+
UnaryNot,
|
|
159
|
+
/// Negation: -a.
|
|
160
|
+
UnaryNeg,
|
|
161
|
+
/// Positive: +a.
|
|
162
|
+
UnaryPos,
|
|
163
|
+
/// Bitwise invert: ~a.
|
|
164
|
+
UnaryInvert,
|
|
165
|
+
|
|
166
|
+
// === In-place Operations (no operand) ===
|
|
167
|
+
/// In-place add: a += b.
|
|
168
|
+
InplaceAdd,
|
|
169
|
+
/// In-place subtract: a -= b.
|
|
170
|
+
InplaceSub,
|
|
171
|
+
/// In-place multiply: a *= b.
|
|
172
|
+
InplaceMul,
|
|
173
|
+
/// In-place divide: a /= b.
|
|
174
|
+
InplaceDiv,
|
|
175
|
+
/// In-place floor divide: a //= b.
|
|
176
|
+
InplaceFloorDiv,
|
|
177
|
+
/// In-place modulo: a %= b.
|
|
178
|
+
InplaceMod,
|
|
179
|
+
/// In-place power: a **= b.
|
|
180
|
+
InplacePow,
|
|
181
|
+
/// In-place bitwise AND: a &= b.
|
|
182
|
+
InplaceAnd,
|
|
183
|
+
/// In-place bitwise OR: a |= b.
|
|
184
|
+
InplaceOr,
|
|
185
|
+
/// In-place bitwise XOR: a ^= b.
|
|
186
|
+
InplaceXor,
|
|
187
|
+
/// In-place left shift: a <<= b.
|
|
188
|
+
InplaceLShift,
|
|
189
|
+
/// In-place right shift: a >>= b.
|
|
190
|
+
InplaceRShift,
|
|
191
|
+
|
|
192
|
+
// === Collection Building ===
|
|
193
|
+
/// Pop n items, build list. Operand: u16 count.
|
|
194
|
+
BuildList,
|
|
195
|
+
/// Pop n items, build tuple. Operand: u16 count.
|
|
196
|
+
BuildTuple,
|
|
197
|
+
/// Pop 2n items (k/v pairs), build dict. Operand: u16 count.
|
|
198
|
+
BuildDict,
|
|
199
|
+
/// Pop n items, build set. Operand: u16 count.
|
|
200
|
+
BuildSet,
|
|
201
|
+
/// Format a value for f-string interpolation. Operand: u8 flags.
|
|
202
|
+
///
|
|
203
|
+
/// Flags encoding:
|
|
204
|
+
/// - bits 0-1: conversion (0=none, 1=str, 2=repr, 3=ascii)
|
|
205
|
+
/// - bit 2: has format spec on stack (pop fmt_spec first, then value)
|
|
206
|
+
/// - bit 3: has static format spec (operand includes u16 const_id after flags)
|
|
207
|
+
///
|
|
208
|
+
/// Pops the value (and optionally format spec), pushes the formatted string.
|
|
209
|
+
FormatValue,
|
|
210
|
+
/// Pop n parts, concatenate for f-string. Operand: u16 count.
|
|
211
|
+
BuildFString,
|
|
212
|
+
/// Build a slice object from stack values. No operand.
|
|
213
|
+
///
|
|
214
|
+
/// Pops 3 values from stack: step, stop, start (TOS order).
|
|
215
|
+
/// Each value can be None (for default) or an integer.
|
|
216
|
+
/// Creates a `HeapData::Slice` and pushes a `Value::Ref` to it.
|
|
217
|
+
BuildSlice,
|
|
218
|
+
/// Pop iterable, pop list, extend list with iterable items.
|
|
219
|
+
///
|
|
220
|
+
/// Used for `*args` unpacking: builds a list of positional args,
|
|
221
|
+
/// then extends it with unpacked iterables.
|
|
222
|
+
ListExtend,
|
|
223
|
+
/// Pop TOS (list), push tuple containing the same elements.
|
|
224
|
+
///
|
|
225
|
+
/// Used after building the args list to create the final args tuple
|
|
226
|
+
/// for `CallFunctionEx`.
|
|
227
|
+
ListToTuple,
|
|
228
|
+
/// Pop mapping, pop dict, update dict with mapping. Operand: u16 func_name_id.
|
|
229
|
+
///
|
|
230
|
+
/// Used for `**kwargs` unpacking. The func_name_id is used for error messages
|
|
231
|
+
/// when the mapping contains non-string keys.
|
|
232
|
+
DictMerge,
|
|
233
|
+
|
|
234
|
+
// === Comprehension Building ===
|
|
235
|
+
/// Append TOS to list for comprehension. Operand: u8 depth (number of iterators).
|
|
236
|
+
///
|
|
237
|
+
/// Stack: [..., list, iter1, ..., iterN, value] -> [..., list, iter1, ..., iterN]
|
|
238
|
+
/// Pops value (TOS), appends to list at stack position (len - 2 - depth).
|
|
239
|
+
/// Depth equals the number of nested iterators (generators) in the comprehension.
|
|
240
|
+
ListAppend,
|
|
241
|
+
/// Add TOS to set for comprehension. Operand: u8 depth (number of iterators).
|
|
242
|
+
///
|
|
243
|
+
/// Stack: [..., set, iter1, ..., iterN, value] -> [..., set, iter1, ..., iterN]
|
|
244
|
+
/// Pops value (TOS), adds to set at stack position (len - 2 - depth).
|
|
245
|
+
/// May raise TypeError if value is unhashable.
|
|
246
|
+
SetAdd,
|
|
247
|
+
/// Set dict[key] = value for comprehension. Operand: u8 depth (number of iterators).
|
|
248
|
+
///
|
|
249
|
+
/// Stack: [..., dict, iter1, ..., iterN, key, value] -> [..., dict, iter1, ..., iterN]
|
|
250
|
+
/// Pops value (TOS) and key (TOS-1), sets dict[key] = value.
|
|
251
|
+
/// Dict is at stack position (len - 3 - depth).
|
|
252
|
+
/// May raise TypeError if key is unhashable.
|
|
253
|
+
DictSetItem,
|
|
254
|
+
|
|
255
|
+
// === Subscript & Attribute ===
|
|
256
|
+
/// a[b]: pop index, pop obj, push result.
|
|
257
|
+
BinarySubscr,
|
|
258
|
+
/// a[b] = c: pop value, pop index, pop obj.
|
|
259
|
+
StoreSubscr,
|
|
260
|
+
// NOTE: DeleteSubscr removed - `del` statement not supported by parser
|
|
261
|
+
/// Pop obj, push obj.attr. Operand: u16 name_id.
|
|
262
|
+
LoadAttr,
|
|
263
|
+
/// Pop module, push module.attr for `from ... import`. Operand: u16 name_id.
|
|
264
|
+
///
|
|
265
|
+
/// Like `LoadAttr` but raises `ImportError` instead of `AttributeError`
|
|
266
|
+
/// when the attribute is not found. Used for `from module import name`.
|
|
267
|
+
LoadAttrImport,
|
|
268
|
+
/// Pop value, pop obj, set obj.attr. Operand: u16 name_id.
|
|
269
|
+
StoreAttr,
|
|
270
|
+
// NOTE: DeleteAttr removed - `del` statement not supported by parser
|
|
271
|
+
|
|
272
|
+
// === Function Calls ===
|
|
273
|
+
/// Call TOS with n positional args. Operand: u8 arg_count.
|
|
274
|
+
CallFunction,
|
|
275
|
+
/// Call a builtin function directly. Operands: u8 builtin_id, u8 arg_count.
|
|
276
|
+
///
|
|
277
|
+
/// The builtin_id is the discriminant of `BuiltinsFunctions` (via `FromRepr`).
|
|
278
|
+
/// This is an optimization over `LoadConst + CallFunction` that avoids:
|
|
279
|
+
/// - Constant pool lookup
|
|
280
|
+
/// - Pushing/popping the callable on the stack
|
|
281
|
+
/// - Runtime type dispatch in call_function
|
|
282
|
+
CallBuiltinFunction,
|
|
283
|
+
/// Call a builtin type constructor directly. Operands: u8 type_id, u8 arg_count.
|
|
284
|
+
///
|
|
285
|
+
/// The type_id is the discriminant of `BuiltinsTypes` (via `FromRepr`).
|
|
286
|
+
/// This is an optimization for type constructors like `list()`, `int()`, `str()`.
|
|
287
|
+
CallBuiltinType,
|
|
288
|
+
/// Call with positional and keyword args.
|
|
289
|
+
///
|
|
290
|
+
/// Operands: u8 pos_count, u8 kw_count, then kw_count u16 name indices.
|
|
291
|
+
///
|
|
292
|
+
/// Stack: [callable, pos_args..., kw_values...]
|
|
293
|
+
/// After the two count bytes, there are kw_count little-endian u16 values,
|
|
294
|
+
/// each being a StringId index for the corresponding keyword argument name.
|
|
295
|
+
CallFunctionKw,
|
|
296
|
+
/// Call attribute on object. Operands: u16 name_id, u8 arg_count.
|
|
297
|
+
///
|
|
298
|
+
/// This is used for both method calls (`obj.method(args)`) and module
|
|
299
|
+
/// attribute calls (`module.func(args)`). The attribute is looked up
|
|
300
|
+
/// on the object and called with the given arguments.
|
|
301
|
+
CallAttr,
|
|
302
|
+
/// Call attribute with keyword args. Operands: u16 name_id, u8 pos_count, u8 kw_count, then kw_count u16 name indices.
|
|
303
|
+
///
|
|
304
|
+
/// Stack: [obj, pos_args..., kw_values...]
|
|
305
|
+
/// After the operands, there are kw_count little-endian u16 values,
|
|
306
|
+
/// each being a StringId index for the corresponding keyword argument name.
|
|
307
|
+
CallAttrKw,
|
|
308
|
+
/// Call a defined function with *args tuple and **kwargs dict. Operand: u8 flags.
|
|
309
|
+
///
|
|
310
|
+
/// Flags:
|
|
311
|
+
/// - bit 0: has kwargs dict on stack
|
|
312
|
+
///
|
|
313
|
+
/// Stack layout (bottom to top):
|
|
314
|
+
/// - callable
|
|
315
|
+
/// - args tuple
|
|
316
|
+
/// - kwargs dict (if flag bit 0 set)
|
|
317
|
+
///
|
|
318
|
+
/// Used for calls with `*args` and/or `**kwargs` unpacking.
|
|
319
|
+
CallFunctionExtended,
|
|
320
|
+
/// Call attribute with *args tuple and **kwargs dict. Operands: u16 name_id, u8 flags.
|
|
321
|
+
///
|
|
322
|
+
/// Flags:
|
|
323
|
+
/// - bit 0: has kwargs dict on stack
|
|
324
|
+
///
|
|
325
|
+
/// Stack layout (bottom to top):
|
|
326
|
+
/// - receiver object
|
|
327
|
+
/// - args tuple
|
|
328
|
+
/// - kwargs dict (if flag bit 0 set)
|
|
329
|
+
///
|
|
330
|
+
/// Used for method calls with `*args` and/or `**kwargs` unpacking.
|
|
331
|
+
CallAttrExtended,
|
|
332
|
+
|
|
333
|
+
// === Control Flow ===
|
|
334
|
+
/// Unconditional relative jump. Operand: i16 offset.
|
|
335
|
+
Jump,
|
|
336
|
+
/// Jump if TOS truthy, always pop. Operand: i16 offset.
|
|
337
|
+
JumpIfTrue,
|
|
338
|
+
/// Jump if TOS falsy, always pop. Operand: i16 offset.
|
|
339
|
+
JumpIfFalse,
|
|
340
|
+
/// Jump if TOS truthy (keep), else pop. Operand: i16 offset.
|
|
341
|
+
JumpIfTrueOrPop,
|
|
342
|
+
/// Jump if TOS falsy (keep), else pop. Operand: i16 offset.
|
|
343
|
+
JumpIfFalseOrPop,
|
|
344
|
+
|
|
345
|
+
// === Iteration ===
|
|
346
|
+
/// Convert TOS to iterator.
|
|
347
|
+
GetIter,
|
|
348
|
+
/// Advance iterator or jump to end. Operand: i16 offset.
|
|
349
|
+
ForIter,
|
|
350
|
+
|
|
351
|
+
// === Function Definition ===
|
|
352
|
+
/// Create function object. Operand: u16 func_id.
|
|
353
|
+
MakeFunction,
|
|
354
|
+
/// Create closure. Operands: u16 func_id, u8 cell_count.
|
|
355
|
+
MakeClosure,
|
|
356
|
+
|
|
357
|
+
// === Exception Handling ===
|
|
358
|
+
// Note: No SetupTry/PopExceptHandler - we use static exception_table
|
|
359
|
+
/// Raise TOS as exception.
|
|
360
|
+
Raise,
|
|
361
|
+
// NOTE: RaiseFrom removed - `raise ... from ...` not supported by parser
|
|
362
|
+
/// Re-raise current exception (bare `raise`).
|
|
363
|
+
Reraise,
|
|
364
|
+
/// Clear current_exception when exiting except block.
|
|
365
|
+
ClearException,
|
|
366
|
+
/// Check if exception matches type for except clause.
|
|
367
|
+
///
|
|
368
|
+
/// Stack: [..., exception, exc_type] -> [..., exception, bool]
|
|
369
|
+
/// Validates that exc_type is a valid exception type (ExcType or tuple of ExcTypes).
|
|
370
|
+
/// If invalid, raises TypeError. If valid, pushes True if exception matches, else False.
|
|
371
|
+
CheckExcMatch,
|
|
372
|
+
|
|
373
|
+
// === Return ===
|
|
374
|
+
/// Return TOS from function.
|
|
375
|
+
ReturnValue,
|
|
376
|
+
|
|
377
|
+
// === Async/Await ===
|
|
378
|
+
/// Await the TOS value.
|
|
379
|
+
///
|
|
380
|
+
/// Handles `ExternalFuture`, `Coroutine`, and `GatherFuture` awaitables.
|
|
381
|
+
/// For `ExternalFuture`: if resolved, pushes result; if pending, blocks task.
|
|
382
|
+
/// For `Coroutine`: validates state is `New`, then starts execution.
|
|
383
|
+
/// For `GatherFuture`: spawns all coroutines as tasks and blocks until completion.
|
|
384
|
+
///
|
|
385
|
+
/// Raises `TypeError` if TOS is not awaitable.
|
|
386
|
+
/// Raises `RuntimeError` if coroutine/future has already been awaited.
|
|
387
|
+
Await,
|
|
388
|
+
|
|
389
|
+
// === Unpacking ===
|
|
390
|
+
/// Unpack TOS into n values. Operand: u8 count.
|
|
391
|
+
UnpackSequence,
|
|
392
|
+
/// Unpack with *rest. Operands: u8 before, u8 after.
|
|
393
|
+
UnpackEx,
|
|
394
|
+
|
|
395
|
+
// === Special ===
|
|
396
|
+
/// No operation (for patching/alignment).
|
|
397
|
+
Nop,
|
|
398
|
+
|
|
399
|
+
// === Module Operations ===
|
|
400
|
+
/// Load a built-in module onto the stack. Operand: u8 module_id.
|
|
401
|
+
///
|
|
402
|
+
/// The module_id maps to `BuiltinModule` (0=sys, 1=typing).
|
|
403
|
+
/// Creates the module on the heap and pushes a `Value::Ref` to it.
|
|
404
|
+
LoadModule,
|
|
405
|
+
/// Raises `ModuleNotFoundError` at runtime. Operand: u16 constant index for module name.
|
|
406
|
+
///
|
|
407
|
+
/// This opcode is emitted when the compiler encounters an import of an unknown module.
|
|
408
|
+
/// Instead of failing at compile time, the error is deferred to runtime so that
|
|
409
|
+
/// imports inside `if TYPE_CHECKING:` blocks or other non-executed code paths
|
|
410
|
+
/// don't cause errors.
|
|
411
|
+
///
|
|
412
|
+
/// The operand is an index into the constant pool where the module name string is stored.
|
|
413
|
+
RaiseImportError,
|
|
414
|
+
/// Duplicate the top two stack values, preserving order: `[a, b] -> [a, b, a, b]`.
|
|
415
|
+
///
|
|
416
|
+
/// Appended at the end to preserve the serialized byte values of all older opcodes.
|
|
417
|
+
Dup2,
|
|
418
|
+
/// Delete global variable (set to Undefined). Operand: u16 slot.
|
|
419
|
+
///
|
|
420
|
+
/// Appended at the end to preserve the serialized byte values of all older opcodes.
|
|
421
|
+
DeleteGlobal,
|
|
422
|
+
|
|
423
|
+
/// Pop a mapping, silently merge into the dict at `depth`. Operand: u8 depth.
|
|
424
|
+
///
|
|
425
|
+
/// Used for `**expr` unpack inside dict literals, where later keys overwrite earlier ones
|
|
426
|
+
/// (unlike `DictMerge` which raises `TypeError` on duplicate keys).
|
|
427
|
+
///
|
|
428
|
+
/// Stack: [..., dict, iter1, ..., iterN, mapping] -> [..., dict, iter1, ..., iterN]
|
|
429
|
+
/// Pops mapping (TOS), merges into dict at stack position `len - 2 - depth`.
|
|
430
|
+
/// Raises `TypeError` if `mapping` is not a dict.
|
|
431
|
+
DictUpdate,
|
|
432
|
+
/// Pop an iterable, add all items to set at `depth`. Operand: u8 depth.
|
|
433
|
+
///
|
|
434
|
+
/// Used for `*expr` unpack inside set literals (e.g., `{*a, 1}`).
|
|
435
|
+
/// Follows the same depth convention as `ListAppend`/`SetAdd`.
|
|
436
|
+
///
|
|
437
|
+
/// Stack: [..., set, iter1, ..., iterN, iterable] -> [..., set, iter1, ..., iterN]
|
|
438
|
+
/// Pops iterable (TOS), adds each item to set at stack position `len - 2 - depth`.
|
|
439
|
+
/// Raises `TypeError` if iterable is not iterable.
|
|
440
|
+
SetExtend,
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
impl TryFrom<u8> for Opcode {
|
|
444
|
+
type Error = InvalidOpcodeError;
|
|
445
|
+
|
|
446
|
+
fn try_from(byte: u8) -> Result<Self, Self::Error> {
|
|
447
|
+
Self::from_repr(byte).ok_or(InvalidOpcodeError(byte))
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
impl Opcode {
|
|
452
|
+
/// Returns the stack effect of this opcode (positive = push, negative = pop).
|
|
453
|
+
///
|
|
454
|
+
/// Some opcodes have variable effects (e.g., `BuildList` depends on its operand).
|
|
455
|
+
/// For those, this returns `None` and the caller must compute the effect.
|
|
456
|
+
///
|
|
457
|
+
/// For opcodes that have known, fixed stack effects, returns `Some(i16)`.
|
|
458
|
+
#[must_use]
|
|
459
|
+
pub const fn stack_effect(self) -> Option<i16> {
|
|
460
|
+
#![expect(clippy::allow_attributes, reason = "expect seems broken with enum_glob_use")]
|
|
461
|
+
#[allow(clippy::enum_glob_use, reason = "simplifies churn")]
|
|
462
|
+
use Opcode::*;
|
|
463
|
+
Some(match self {
|
|
464
|
+
// Stack operations
|
|
465
|
+
Pop => -1,
|
|
466
|
+
Dup => 1,
|
|
467
|
+
Dup2 => 2,
|
|
468
|
+
Rot2 | Rot3 => 0, // reorder, no net change
|
|
469
|
+
|
|
470
|
+
// Constants & Literals (all push 1)
|
|
471
|
+
LoadConst | LoadNone | LoadTrue | LoadFalse | LoadSmallInt => 1,
|
|
472
|
+
|
|
473
|
+
// Variables - loads push, stores pop
|
|
474
|
+
LoadLocal0 | LoadLocal1 | LoadLocal2 | LoadLocal3 => 1,
|
|
475
|
+
LoadLocal | LoadLocalW | LoadLocalCallable | LoadLocalCallableW | LoadGlobal | LoadGlobalCallable
|
|
476
|
+
| LoadCell => 1,
|
|
477
|
+
StoreLocal | StoreLocalW | StoreGlobal | StoreCell => -1,
|
|
478
|
+
DeleteLocal | DeleteGlobal => 0, // doesn't affect stack
|
|
479
|
+
|
|
480
|
+
// Binary operations: pop 2, push 1 = -1
|
|
481
|
+
BinaryAdd | BinarySub | BinaryMul | BinaryDiv | BinaryFloorDiv | BinaryMod | BinaryPow | BinaryAnd
|
|
482
|
+
| BinaryOr | BinaryXor | BinaryLShift | BinaryRShift | BinaryMatMul => -1,
|
|
483
|
+
|
|
484
|
+
// Comparisons: pop 2, push 1 = -1
|
|
485
|
+
CompareEq | CompareNe | CompareLt | CompareLe | CompareGt | CompareGe | CompareIs | CompareIsNot
|
|
486
|
+
| CompareIn | CompareNotIn | CompareModEq => -1,
|
|
487
|
+
|
|
488
|
+
// Unary operations: pop 1, push 1 = 0
|
|
489
|
+
UnaryNot | UnaryNeg | UnaryPos | UnaryInvert => 0,
|
|
490
|
+
|
|
491
|
+
// In-place operations: pop 1 (rhs), leave target on stack = -1
|
|
492
|
+
InplaceAdd | InplaceSub | InplaceMul | InplaceDiv | InplaceFloorDiv | InplaceMod | InplacePow
|
|
493
|
+
| InplaceAnd | InplaceOr | InplaceXor | InplaceLShift | InplaceRShift => -1,
|
|
494
|
+
|
|
495
|
+
// Collection building - depends on operand, return None
|
|
496
|
+
BuildList | BuildTuple | BuildDict | BuildSet | BuildFString => return None,
|
|
497
|
+
// FormatValue: pops 1 value (+ optional fmt_spec), pushes 1. Variable.
|
|
498
|
+
FormatValue => return None,
|
|
499
|
+
// BuildSlice: pop 3, push 1 = -2
|
|
500
|
+
BuildSlice => -2,
|
|
501
|
+
// ListExtend: pop 2 (iterable + list), push 1 (list) = -1
|
|
502
|
+
ListExtend => -1,
|
|
503
|
+
// ListToTuple: pop 1, push 1 = 0
|
|
504
|
+
ListToTuple => 0,
|
|
505
|
+
// DictMerge: pop 2, push 1 = -1
|
|
506
|
+
DictMerge => -1,
|
|
507
|
+
|
|
508
|
+
// Comprehension building - pops value, no push (stores in collection below)
|
|
509
|
+
ListAppend | SetAdd => -1,
|
|
510
|
+
DictSetItem => -2, // pops key and value
|
|
511
|
+
|
|
512
|
+
// Subscript & Attribute
|
|
513
|
+
BinarySubscr => -1, // pop 2, push 1
|
|
514
|
+
StoreSubscr => -3, // pop 3, push 0
|
|
515
|
+
LoadAttr | LoadAttrImport => 0, // pop 1, push 1
|
|
516
|
+
StoreAttr => -2, // pop 2, push 0
|
|
517
|
+
|
|
518
|
+
// Function calls - depend on arg count
|
|
519
|
+
CallFunction | CallBuiltinFunction | CallBuiltinType | CallFunctionKw | CallAttr | CallAttrKw
|
|
520
|
+
| CallFunctionExtended | CallAttrExtended => return None,
|
|
521
|
+
|
|
522
|
+
// Control flow - no stack effect (jumps don't push/pop)
|
|
523
|
+
Jump => 0,
|
|
524
|
+
JumpIfTrue | JumpIfFalse => -1, // always pop condition
|
|
525
|
+
JumpIfTrueOrPop | JumpIfFalseOrPop => return None, // variable (0 or -1)
|
|
526
|
+
|
|
527
|
+
// Iteration
|
|
528
|
+
GetIter => 0, // pop iterable, push iterator
|
|
529
|
+
ForIter => return None, // pushes value or jumps (variable)
|
|
530
|
+
|
|
531
|
+
// Async/await
|
|
532
|
+
Await => 0, // pop awaitable, push result
|
|
533
|
+
|
|
534
|
+
// Function definition - push 1 (the function/closure)
|
|
535
|
+
MakeFunction | MakeClosure => 1,
|
|
536
|
+
|
|
537
|
+
// Exception handling
|
|
538
|
+
Raise => -1, // pop exception
|
|
539
|
+
Reraise => 0, // no stack change (reads from exception_stack)
|
|
540
|
+
ClearException => 0, // clears exception_stack, no operand stack change
|
|
541
|
+
CheckExcMatch => 0, // pop exc_type, push bool (net 0, but exc stays)
|
|
542
|
+
|
|
543
|
+
// Return
|
|
544
|
+
ReturnValue => -1,
|
|
545
|
+
|
|
546
|
+
// Unpacking - depends on operand
|
|
547
|
+
UnpackSequence | UnpackEx => return None,
|
|
548
|
+
|
|
549
|
+
// Dict/set literal extensions (PEP 448):
|
|
550
|
+
// DictUpdate: pop mapping, silently merge into dict below = -1
|
|
551
|
+
DictUpdate => -1,
|
|
552
|
+
// SetExtend: pop iterable, add all items to set below = -1
|
|
553
|
+
SetExtend => -1,
|
|
554
|
+
|
|
555
|
+
// Special
|
|
556
|
+
Nop => 0,
|
|
557
|
+
|
|
558
|
+
// Module
|
|
559
|
+
LoadModule => 1, // push module
|
|
560
|
+
RaiseImportError => 0, // raises exception, no stack change before that
|
|
561
|
+
})
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/// Error returned when attempting to convert an invalid byte to an Opcode.
|
|
566
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
567
|
+
pub struct InvalidOpcodeError(pub u8);
|
|
568
|
+
|
|
569
|
+
impl std::fmt::Display for InvalidOpcodeError {
|
|
570
|
+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
571
|
+
write!(f, "invalid opcode byte: {}", self.0)
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
impl std::error::Error for InvalidOpcodeError {}
|
|
576
|
+
|
|
577
|
+
#[cfg(test)]
|
|
578
|
+
mod tests {
|
|
579
|
+
use super::*;
|
|
580
|
+
|
|
581
|
+
#[test]
|
|
582
|
+
fn test_opcode_roundtrip() {
|
|
583
|
+
// Verify that all opcodes from 0 to DeleteGlobal (last opcode) can be converted to u8 and back.
|
|
584
|
+
for byte in 0..=Opcode::DeleteGlobal as u8 {
|
|
585
|
+
let opcode = Opcode::try_from(byte).unwrap();
|
|
586
|
+
assert_eq!(opcode as u8, byte, "opcode {opcode:?} has wrong discriminant");
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
#[test]
|
|
591
|
+
fn test_serialized_opcode_values_remain_stable() {
|
|
592
|
+
// `RaiseImportError` was the tail opcode before `Dup2` was introduced. Keeping it at
|
|
593
|
+
// byte 110 preserves compatibility for serialized runners and snapshots compiled by
|
|
594
|
+
// older versions.
|
|
595
|
+
assert_eq!(Opcode::RaiseImportError as u8, 110);
|
|
596
|
+
assert_eq!(Opcode::Dup2 as u8, 111);
|
|
597
|
+
assert_eq!(Opcode::DeleteGlobal as u8, 112);
|
|
598
|
+
assert_eq!(Opcode::DictUpdate as u8, 113);
|
|
599
|
+
assert_eq!(Opcode::SetExtend as u8, 114);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
#[test]
|
|
603
|
+
fn test_invalid_opcode() {
|
|
604
|
+
// Byte just after the last valid opcode should fail
|
|
605
|
+
let result = Opcode::try_from(Opcode::SetExtend as u8 + 1);
|
|
606
|
+
assert!(result.is_err());
|
|
607
|
+
// 255 should also fail
|
|
608
|
+
let result = Opcode::try_from(255u8);
|
|
609
|
+
assert!(result.is_err());
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
#[test]
|
|
613
|
+
fn test_opcode_size() {
|
|
614
|
+
// Verify opcode is 1 byte
|
|
615
|
+
assert_eq!(std::mem::size_of::<Opcode>(), 1);
|
|
616
|
+
}
|
|
617
|
+
}
|