crosshair-tool 0.0.87__tar.gz → 0.0.88__tar.gz
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.
Potentially problematic release.
This version of crosshair-tool might be problematic. Click here for more details.
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/PKG-INFO +1 -1
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/__init__.py +1 -1
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_tracers.c +12 -9
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_tracers.h +6 -5
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/builtinslib.py +4 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/builtinslib_test.py +21 -11
- crosshair_tool-0.0.88/crosshair/libimpl/copylib_test.py +18 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/datetimelib.py +8 -2
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/main_test.py +1 -1
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/opcode_intercept_test.py +16 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/PKG-INFO +1 -1
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/SOURCES.txt +1 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/setup.py +1 -1
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/LICENSE +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/README.md +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/__main__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_mark_stacks.h +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_preliminaries_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_tracers_pycompat.h +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/_tracers_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/abcstring.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/auditwall.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/auditwall_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/codeconfig.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/codeconfig_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/condition_parser.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/condition_parser_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/conftest.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/copyext.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/copyext_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/core.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/core_and_libs.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/core_regestered_types_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/core_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/diff_behavior.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/diff_behavior_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/dynamic_typing.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/dynamic_typing_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/enforce.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/enforce_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/getattr_magic.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/hash_consistent_with_equals.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/shopping_cart.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/showcase.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/arith.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/chess.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/nesting_inference.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/numpy_examples.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/rolling_average.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/showcase.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/check_examples_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/deal/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/bugs_detected/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/bugs_detected/showcase.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/bugs_detected/wrong_sign.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/correct_code/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/correct_code/arith.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/correct_code/showcase.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/fnutil.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/fnutil_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/fuzz_core_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/arraylib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/binascii_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/binascii_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/binasciilib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/bisectlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/builtinslib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/codecslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/codecslib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/collectionslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/collectionslib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/collectionslib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/copylib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/datetimelib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/datetimelib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/decimallib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/decimallib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/decimallib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings/_encutil.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings/ascii.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings/latin_1.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings/utf_8.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/encodings_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/fractionlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/fractionlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/functoolslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/functoolslib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/hashliblib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/hashliblib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/heapqlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/heapqlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/importliblib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/importliblib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/iolib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/iolib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/iolib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/ipaddresslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/itertoolslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/itertoolslib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/jsonlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/jsonlib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/jsonlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/mathlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/mathlib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/mathlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/oslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/pathliblib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/randomlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/randomlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/relib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/relib_ch_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/relib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/timelib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/timelib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/typeslib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/typeslib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/unicodedatalib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/unicodedatalib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/urlliblib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/urlliblib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/weakreflib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/weakreflib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/zliblib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/libimpl/zliblib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/lsp_server.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/lsp_server_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/main.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/objectproxy.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/objectproxy_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/opcode_intercept.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/options.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/options_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/patch_equivalence_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/path_cover.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/path_cover_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/path_search.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/path_search_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/pathing_oracle.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/pure_importer.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/pure_importer_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/py.typed +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/register_contract.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/register_contract_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/simplestructs.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/simplestructs_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/smtlib.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/smtlib_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/statespace.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/statespace_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/stubs_parser.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/stubs_parser_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/test_util.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/test_util_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tools/__init__.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tools/check_help_in_doc.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tools/check_init_and_setup_coincide.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tools/generate_demo_table.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tracers.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tracers_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/type_repo.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/unicode_categories.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/unicode_categories_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/util.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/util_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/watcher.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/watcher_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/z3util.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/z3util_test.py +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/dependency_links.txt +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/entry_points.txt +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/requires.txt +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/top_level.txt +0 -0
- {crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/setup.cfg +0 -0
|
@@ -15,7 +15,7 @@ from crosshair.statespace import StateSpace
|
|
|
15
15
|
from crosshair.tracers import NoTracing, ResumedTracing
|
|
16
16
|
from crosshair.util import IgnoreAttempt, debug
|
|
17
17
|
|
|
18
|
-
__version__ = "0.0.
|
|
18
|
+
__version__ = "0.0.88" # Do not forget to update in setup.py!
|
|
19
19
|
__author__ = "Phillip Schanely"
|
|
20
20
|
__license__ = "MIT"
|
|
21
21
|
__status__ = "Alpha"
|
|
@@ -383,17 +383,19 @@ if (!self->trace_all_opcodes) {
|
|
|
383
383
|
unsigned char * code_bytes = (unsigned char *)PyBytes_AS_STRING(code_bytes_object);
|
|
384
384
|
|
|
385
385
|
self->handling = TRUE;
|
|
386
|
-
BOOL ran_handler = FALSE;
|
|
387
386
|
|
|
388
|
-
|
|
387
|
+
FrameNextIandCallbackVec* vec = &self->postop_callbacks;
|
|
389
388
|
int cb_count = vec->count;
|
|
390
389
|
if (cb_count > 0)
|
|
391
390
|
{
|
|
392
|
-
|
|
391
|
+
FrameNextIandCallback fcb = vec->items[cb_count - 1];
|
|
393
392
|
// Check that the top callback is for this frame (it might be for a caller's frame instead)
|
|
394
|
-
if (fcb.frame ==
|
|
393
|
+
if (fcb.frame == frame)
|
|
395
394
|
{
|
|
396
|
-
|
|
395
|
+
if (fcb.expected_i != PyFrame_GetLasti(frame)) {
|
|
396
|
+
// Most likely, we fell into an exception handler and should not execute the callback.
|
|
397
|
+
// fprintf(stderr, "UNEXPECTED lasti: %x %d %d, dropping callback\n", fcb.frame, fcb.expected_i, PyFrame_GetLasti(frame));
|
|
398
|
+
} else {
|
|
397
399
|
PyObject* cb = fcb.callback;
|
|
398
400
|
PyObject* result = NULL;
|
|
399
401
|
result = PyObject_CallObject(cb, NULL);
|
|
@@ -406,6 +408,7 @@ if (!self->trace_all_opcodes) {
|
|
|
406
408
|
Py_DECREF(result);
|
|
407
409
|
vec->count--;
|
|
408
410
|
Py_DECREF(cb);
|
|
411
|
+
}
|
|
409
412
|
}
|
|
410
413
|
}
|
|
411
414
|
|
|
@@ -423,7 +426,6 @@ if (!self->trace_all_opcodes) {
|
|
|
423
426
|
if (handler == NULL) {
|
|
424
427
|
continue;
|
|
425
428
|
}
|
|
426
|
-
ran_handler = TRUE;
|
|
427
429
|
|
|
428
430
|
PyObject * arglist = Py_BuildValue("Osi", frame, "opcode", opcode);
|
|
429
431
|
if (arglist == NULL) // (out of memory)
|
|
@@ -441,7 +443,7 @@ if (!self->trace_all_opcodes) {
|
|
|
441
443
|
Py_DECREF(result);
|
|
442
444
|
}
|
|
443
445
|
// repr_print(frame);
|
|
444
|
-
// printf("lasti %d, line %d, cb_count %d,
|
|
446
|
+
// printf("lasti %d, line %d, cb_count %d, ret %d\n", lasti, PyFrame_GetLineNumber(frame), cb_count, ret);
|
|
445
447
|
self->handling = FALSE;
|
|
446
448
|
Py_XDECREF(code_bytes_object);
|
|
447
449
|
|
|
@@ -603,7 +605,7 @@ done:
|
|
|
603
605
|
static PyObject *
|
|
604
606
|
CTracer_push_postop_callback(CTracer *self, PyObject *args)
|
|
605
607
|
{
|
|
606
|
-
|
|
608
|
+
PyFrameObject *frame;
|
|
607
609
|
PyObject *callback;
|
|
608
610
|
if (!PyArg_ParseTuple(args, "OO", &frame, &callback)) {
|
|
609
611
|
return NULL;
|
|
@@ -615,7 +617,8 @@ CTracer_push_postop_callback(CTracer *self, PyObject *args)
|
|
|
615
617
|
}
|
|
616
618
|
#endif
|
|
617
619
|
Py_INCREF(callback);
|
|
618
|
-
|
|
620
|
+
// TODO: if we add branching opcodes, there will be two possible next instruction locations:
|
|
621
|
+
FrameNextIandCallback fcb = {frame, PyFrame_GetLasti(frame) + 2, callback};
|
|
619
622
|
push_framecb(&self->postop_callbacks, fcb);
|
|
620
623
|
Py_RETURN_NONE;
|
|
621
624
|
}
|
|
@@ -50,10 +50,11 @@ typedef struct HandlerTable {
|
|
|
50
50
|
} HandlerTable;
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
typedef struct
|
|
54
|
-
|
|
53
|
+
typedef struct FrameNextIandCallback {
|
|
54
|
+
PyFrameObject* frame;
|
|
55
|
+
int expected_i;
|
|
55
56
|
PyObject* callback;
|
|
56
|
-
}
|
|
57
|
+
} FrameNextIandCallback;
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
typedef struct CodeAndStacks {
|
|
@@ -62,7 +63,7 @@ typedef struct CodeAndStacks {
|
|
|
62
63
|
} CodeAndStacks;
|
|
63
64
|
|
|
64
65
|
|
|
65
|
-
DEFINE_VEC(
|
|
66
|
+
DEFINE_VEC(FrameNextIandCallbackVec, FrameNextIandCallback, init_framecbvec, push_framecb);
|
|
66
67
|
DEFINE_VEC(ModuleVec, PyObject*, init_modulevec, push_module);
|
|
67
68
|
DEFINE_VEC(TableVec, HandlerTable, init_tablevec, push_table_entry)
|
|
68
69
|
|
|
@@ -70,7 +71,7 @@ typedef struct CTracer {
|
|
|
70
71
|
PyObject_HEAD
|
|
71
72
|
ModuleVec modules;
|
|
72
73
|
TableVec handlers;
|
|
73
|
-
|
|
74
|
+
FrameNextIandCallbackVec postop_callbacks;
|
|
74
75
|
BOOL enabled;
|
|
75
76
|
BOOL handling;
|
|
76
77
|
BOOL trace_all_opcodes;
|
|
@@ -1425,6 +1425,10 @@ class PreciseIeeeSymbolicFloat(SymbolicFloat):
|
|
|
1425
1425
|
# __hash__ has to be explicitly reassigned because we define __eq__
|
|
1426
1426
|
__hash__ = SymbolicFloat.__hash__
|
|
1427
1427
|
|
|
1428
|
+
def __bool__(self):
|
|
1429
|
+
with NoTracing():
|
|
1430
|
+
return not SymbolicBool(z3.fpIsZero(self.var))
|
|
1431
|
+
|
|
1428
1432
|
def __ne__(self, other):
|
|
1429
1433
|
with NoTracing():
|
|
1430
1434
|
coerced = type(self)._coerce_to_smt_sort(other)
|
|
@@ -85,7 +85,6 @@ from crosshair.util import (
|
|
|
85
85
|
CrossHairValue,
|
|
86
86
|
IgnoreAttempt,
|
|
87
87
|
UnknownSatisfiability,
|
|
88
|
-
set_debug,
|
|
89
88
|
)
|
|
90
89
|
|
|
91
90
|
|
|
@@ -3618,18 +3617,29 @@ def test_deep_realization(space, typ):
|
|
|
3618
3617
|
assert concrete == symbolic
|
|
3619
3618
|
|
|
3620
3619
|
|
|
3621
|
-
def
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3620
|
+
def test_float_round_to_zero(space):
|
|
3621
|
+
space.extra(ModelingDirector).global_representations[
|
|
3622
|
+
float
|
|
3623
|
+
] = PreciseIeeeSymbolicFloat
|
|
3624
|
+
n = proxy_for_type(float, "n")
|
|
3625
|
+
d = proxy_for_type(float, "d")
|
|
3626
|
+
with ResumedTracing():
|
|
3627
|
+
space.add(d != 0.0)
|
|
3628
|
+
# This is possible for floats, but not reals:
|
|
3629
|
+
assert space.is_possible(n / d != 0.0)
|
|
3630
|
+
assert space.is_possible(n / d == 0.0)
|
|
3627
3631
|
|
|
3628
|
-
Postcondition holds in a math-sense, but not when floating point precision
|
|
3629
|
-
comes into play (e.g. it's false for 13 / 99)
|
|
3630
|
-
"""
|
|
3631
3632
|
|
|
3632
|
-
|
|
3633
|
+
def test_float_neg_zero_is_falsey(space):
|
|
3634
|
+
space.extra(ModelingDirector).global_representations[
|
|
3635
|
+
float
|
|
3636
|
+
] = PreciseIeeeSymbolicFloat
|
|
3637
|
+
x = proxy_for_type(float, "x")
|
|
3638
|
+
with ResumedTracing():
|
|
3639
|
+
space.add(x == -10.0)
|
|
3640
|
+
negzero = x / math.inf
|
|
3641
|
+
assert not space.is_possible(negzero != 0.0)
|
|
3642
|
+
assert bool(negzero) is False
|
|
3633
3643
|
|
|
3634
3644
|
|
|
3635
3645
|
def TODO_test_int_mod_float():
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import copy
|
|
2
|
+
import datetime
|
|
3
|
+
|
|
4
|
+
from crosshair.core import proxy_for_type
|
|
5
|
+
from crosshair.statespace import StateSpace
|
|
6
|
+
from crosshair.tracers import ResumedTracing
|
|
7
|
+
from crosshair.util import debug
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_date_copy(space: StateSpace) -> None:
|
|
11
|
+
concrete_date = datetime.date(2000, 2, 3)
|
|
12
|
+
symbolic_date = proxy_for_type(datetime.date, "d")
|
|
13
|
+
with ResumedTracing():
|
|
14
|
+
copied_symbolic = copy.deepcopy(symbolic_date)
|
|
15
|
+
copied_concrete = copy.deepcopy(concrete_date)
|
|
16
|
+
assert not space.is_possible(copied_concrete != concrete_date)
|
|
17
|
+
assert not space.is_possible(copied_concrete != datetime.date(2000, 2, 3))
|
|
18
|
+
assert not space.is_possible(copied_symbolic != symbolic_date)
|
|
@@ -855,7 +855,7 @@ class date:
|
|
|
855
855
|
|
|
856
856
|
"""
|
|
857
857
|
|
|
858
|
-
def __init__(self, year, month, day):
|
|
858
|
+
def __init__(self, year, month=None, day=None):
|
|
859
859
|
"""
|
|
860
860
|
Constructor.
|
|
861
861
|
|
|
@@ -863,7 +863,13 @@ class date:
|
|
|
863
863
|
:param month: month, starting at 1
|
|
864
864
|
:param day: day, starting at 1
|
|
865
865
|
"""
|
|
866
|
-
|
|
866
|
+
if month is None:
|
|
867
|
+
# We can receive a string/bytes single argument when unpickling a concrete date
|
|
868
|
+
with NoTracing():
|
|
869
|
+
dt = real_date(realize(year)) # type: ignore
|
|
870
|
+
year, month, day = dt.year, dt.month, dt.day
|
|
871
|
+
else:
|
|
872
|
+
year, month, day = _check_date_fields(year, month, day)
|
|
867
873
|
self._year = year
|
|
868
874
|
self._month = month
|
|
869
875
|
self._day = day
|
|
@@ -515,7 +515,7 @@ def test_mypycrosshair_command():
|
|
|
515
515
|
capture_output=True,
|
|
516
516
|
text=True,
|
|
517
517
|
)
|
|
518
|
-
assert completion.stderr.strip() == ""
|
|
518
|
+
assert completion.stderr.strip() == "", f"stderr was '''{completion.stderr}'''"
|
|
519
519
|
if completion.returncode != 1:
|
|
520
520
|
print(completion.stdout)
|
|
521
521
|
assert False, f"Return code was {completion.returncode}"
|
|
@@ -286,3 +286,19 @@ def test_identity_operator_does_not_realize_on_differing_types():
|
|
|
286
286
|
fourty_two = 42 # assignment just to avoid lint errors
|
|
287
287
|
b1 is fourty_two
|
|
288
288
|
assert len(space.choices_made) == choices_made_at_start
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
class IExplodeOnRepr:
|
|
292
|
+
def __repr__(self):
|
|
293
|
+
raise ValueError("boom")
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def test_postop_callback_skipped_on_exception_handler_jump(space):
|
|
297
|
+
with ResumedTracing():
|
|
298
|
+
elements = IExplodeOnRepr()
|
|
299
|
+
try:
|
|
300
|
+
ret = f"these are them: {elements!r}"
|
|
301
|
+
except ValueError: # pragma: no cover
|
|
302
|
+
ret = None
|
|
303
|
+
# need to do something(anything) with elements so that it's on the stack:
|
|
304
|
+
type(elements)
|
|
@@ -113,6 +113,7 @@ crosshair/libimpl/collectionslib.py
|
|
|
113
113
|
crosshair/libimpl/collectionslib_ch_test.py
|
|
114
114
|
crosshair/libimpl/collectionslib_test.py
|
|
115
115
|
crosshair/libimpl/copylib.py
|
|
116
|
+
crosshair/libimpl/copylib_test.py
|
|
116
117
|
crosshair/libimpl/datetimelib.py
|
|
117
118
|
crosshair/libimpl/datetimelib_ch_test.py
|
|
118
119
|
crosshair/libimpl/datetimelib_test.py
|
|
@@ -14,7 +14,7 @@ from setuptools import Extension, find_packages, setup # type: ignore
|
|
|
14
14
|
# the pre-commit checks through check_init_and_setup_coincide.py.
|
|
15
15
|
setup(
|
|
16
16
|
name="crosshair-tool",
|
|
17
|
-
version="0.0.
|
|
17
|
+
version="0.0.88", # Update this in crosshair/__init__.py too
|
|
18
18
|
author="Phillip Schanely",
|
|
19
19
|
author_email="pschanely+vE7F@gmail.com",
|
|
20
20
|
ext_modules=[
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/bugs_detected/showcase.py
RENAMED
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/__init__.py
RENAMED
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/arith.py
RENAMED
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/chess.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/PEP316/correct_code/showcase.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/examples/icontract/correct_code/arith.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair/tools/check_init_and_setup_coincide.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{crosshair_tool-0.0.87 → crosshair_tool-0.0.88}/crosshair_tool.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|