openscad-cpp-evaluator 0.4.9__tar.gz → 0.4.10__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.
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/bytecode_compiler.cpp +21 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/bytecode_vm.cpp +12 -1
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_bytecode_compiler.cpp +56 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.gitignore +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.gitmodules +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/LICENSE +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/README.md +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/stb_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/builtins.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/registry.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/text/stb_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/main.cpp +0 -0
|
@@ -676,6 +676,27 @@ public:
|
|
|
676
676
|
int slot = declareLocal(scope, assign->name->name);
|
|
677
677
|
out.push_back({Op::StoreLocal, slot, 0, &assign->position()});
|
|
678
678
|
}
|
|
679
|
+
// Pre-declare every incr-list name NOW, before compiling the
|
|
680
|
+
// condition/body/incr expressions below -- an incr name
|
|
681
|
+
// introduced fresh (not in the init list, e.g. BOSL2's
|
|
682
|
+
// skin.scad: `best_i = result[0]<bestcost ? i : best_i,`)
|
|
683
|
+
// can be READ, including by its OWN incr assignment's RHS
|
|
684
|
+
// (a self-reference to its prior iteration's value) or by
|
|
685
|
+
// the loop body, before its OWN StoreLocal below would
|
|
686
|
+
// otherwise have declared it. Without this, that read
|
|
687
|
+
// compiles to Op::LoadFree (the "not a known local/upvalue/
|
|
688
|
+
// dyn-var, might be dynamic, warn if truly missing"
|
|
689
|
+
// fallback) -- permanently, since compilation happens once
|
|
690
|
+
// but the resulting instruction runs every iteration: every
|
|
691
|
+
// read silently misses the real value stored into the
|
|
692
|
+
// local slot moments later at runtime, not just an extra
|
|
693
|
+
// warning but a genuinely wrong result (confirmed: BOSL2's
|
|
694
|
+
// own best_i accumulator came back undef on every read).
|
|
695
|
+
// Declaring the slot here first means the SAME reads below
|
|
696
|
+
// resolve as ordinary Op::LoadLocal instead.
|
|
697
|
+
for (const auto& assign : n.incrs) {
|
|
698
|
+
if (!scope.resolve(assign->name->name)) declareLocal(scope, assign->name->name);
|
|
699
|
+
}
|
|
679
700
|
int counterSlot = nextSlot_++;
|
|
680
701
|
out.push_back({Op::PushConst, internConst(Value{0.0}), 0, nullptr});
|
|
681
702
|
out.push_back({Op::StoreLocal, counterSlot, 0, nullptr});
|
|
@@ -40,6 +40,16 @@ private:
|
|
|
40
40
|
struct IterList {
|
|
41
41
|
IterableValues values;
|
|
42
42
|
size_t index = 0;
|
|
43
|
+
// Cached once at IterMaterialize time -- IterableValues::size() is O(1)
|
|
44
|
+
// for a list/owned vector, but walks a RANGE's whole sequence from
|
|
45
|
+
// scratch every call (its own doc comment: "no caller in this codebase
|
|
46
|
+
// actually calls size() on a range today" -- Op::IterNext, below, used
|
|
47
|
+
// to be exactly that stale caller). Recomputing it once per IterNext
|
|
48
|
+
// call turned a single range-based for()/list-comp `for` into an O(n^2)
|
|
49
|
+
// walk (a 100,000-element range: interpreter ~0.03s, VM ~9.5s) -- caught
|
|
50
|
+
// via a BOSL2 corpus sweep (test_math.scadtest's own gaussian_rands(),
|
|
51
|
+
// which builds a 100,000-element list via `count()`).
|
|
52
|
+
size_t total = 0;
|
|
43
53
|
};
|
|
44
54
|
|
|
45
55
|
// Shared by Op::CallFn's isBuiltin (evalBuiltinFunction) and isImport
|
|
@@ -244,6 +254,7 @@ Value runChunk(Evaluator& ev, const CompiledChunk& chunk, const std::vector<Inst
|
|
|
244
254
|
ev.warn("Bad range parameter in for statement: too many elements (" + std::to_string(count) + ")", ins.pos);
|
|
245
255
|
});
|
|
246
256
|
il.index = 0;
|
|
257
|
+
il.total = il.values.size(); // once here, never per-iteration -- see IterList's own doc comment
|
|
247
258
|
++pc;
|
|
248
259
|
break;
|
|
249
260
|
}
|
|
@@ -254,7 +265,7 @@ Value runChunk(Evaluator& ev, const CompiledChunk& chunk, const std::vector<Inst
|
|
|
254
265
|
}
|
|
255
266
|
case Op::IterNext: {
|
|
256
267
|
IterList& il = iterLists[static_cast<size_t>(ins.b)];
|
|
257
|
-
if (il.index < il.
|
|
268
|
+
if (il.index < il.total) {
|
|
258
269
|
slots[static_cast<size_t>(ins.a)] = il.values[il.index];
|
|
259
270
|
++il.index;
|
|
260
271
|
++pc;
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_bytecode_compiler.cpp
RENAMED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
#include "test_helpers.hpp"
|
|
6
6
|
|
|
7
|
+
#include <chrono>
|
|
7
8
|
#include <filesystem>
|
|
8
9
|
#include <fstream>
|
|
9
10
|
#include <gtest/gtest.h>
|
|
@@ -721,3 +722,58 @@ TEST(BytecodeCompiler, VmOffAndVmOnAgreeOnEchoAssertImportObjectCases) {
|
|
|
721
722
|
EXPECT_EQ(offResult, onResult);
|
|
722
723
|
std::filesystem::remove(path);
|
|
723
724
|
}
|
|
725
|
+
|
|
726
|
+
TEST(BytecodeCompiler, RangeBasedForListCompDoesNotReMaterializeRangeSizePerIteration) {
|
|
727
|
+
ScopedVm vm(true);
|
|
728
|
+
// Op::IterNext used to bound-check via `il.index < il.values.size()`
|
|
729
|
+
// every single iteration. IterableValues::size() is O(1) for a
|
|
730
|
+
// materialized list, but for a RANGE it walks the whole sequence from
|
|
731
|
+
// scratch (its own doc comment already flagged this as a stale
|
|
732
|
+
// assumption: "no caller in this codebase actually calls size() on a
|
|
733
|
+
// range today" -- Op::IterNext was exactly that caller). Recomputing an
|
|
734
|
+
// O(n) size every one of n iterations is O(n^2) overall -- a
|
|
735
|
+
// 100,000-element range list comprehension took ~9.5s compiled vs
|
|
736
|
+
// ~0.03s interpreted before the fix (caught via a BOSL2 corpus sweep,
|
|
737
|
+
// test_math.scadtest's gaussian_rands()). Fixed by caching the size
|
|
738
|
+
// once at IterMaterialize time (IterList::total). 200,000 elements
|
|
739
|
+
// finishes in well under a second now; the old behavior would have
|
|
740
|
+
// taken tens of seconds, so a generous 5s bound cleanly separates
|
|
741
|
+
// "fixed" from "regressed" without making this test itself slow.
|
|
742
|
+
const auto start = std::chrono::steady_clock::now();
|
|
743
|
+
EXPECT_EQ(runCapturingEcho("function myrange(n) = [for (i=[0:1:n-1]) i];\n"
|
|
744
|
+
"r = myrange(200000);\n"
|
|
745
|
+
"echo(len(r));"),
|
|
746
|
+
"ECHO: 200000");
|
|
747
|
+
const auto elapsed = std::chrono::steady_clock::now() - start;
|
|
748
|
+
EXPECT_LT(std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count(), 5000);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
TEST(BytecodeCompiler, CStyleForIncrNameCanReadItsOwnPriorValueInTheSameAssignment) {
|
|
752
|
+
ScopedVm vm(true);
|
|
753
|
+
// A C-style for's incr list can introduce a name that reads its OWN
|
|
754
|
+
// not-yet-assigned-this-iteration value on the right-hand side (its
|
|
755
|
+
// prior iteration's value) -- e.g. BOSL2's skin.scad: `best_i =
|
|
756
|
+
// result[0]<bestcost ? i : best_i,`. The compiler used to compile each
|
|
757
|
+
// incr assignment's RHS BEFORE declaring that assignment's own local
|
|
758
|
+
// slot (declareLocal ran only after compileExpr), so a self-reference
|
|
759
|
+
// like this -- and the loop BODY's own read, compiled even earlier --
|
|
760
|
+
// resolved via Op::LoadFree (the "not a known local, might be dynamic"
|
|
761
|
+
// fallback) instead of Op::LoadLocal. That's not just an extra
|
|
762
|
+
// "unknown variable" warning: LoadFree runs identically on every
|
|
763
|
+
// iteration once compiled, so it NEVER saw what Op::StoreLocal had
|
|
764
|
+
// written moments earlier at runtime -- a genuinely wrong final
|
|
765
|
+
// result (undef), not merely a cosmetic warning-count mismatch. Real
|
|
766
|
+
// OpenSCAD gives [4] here (one "unknown variable" warning for the
|
|
767
|
+
// first, genuinely-unassigned read, then the accumulator works
|
|
768
|
+
// correctly from there). Fixed by pre-declaring every incr name's slot
|
|
769
|
+
// before compiling the condition/body/incr expressions at all.
|
|
770
|
+
EXPECT_EQ(runCapturingEcho("function myloop(n) =\n"
|
|
771
|
+
" [for (i=0, bestcost=1/0;\n"
|
|
772
|
+
" i<=n;\n"
|
|
773
|
+
" bestcost = (i==2||i==4) ? i : bestcost,\n"
|
|
774
|
+
" best_i = (i==2||i==4) ? i : best_i,\n"
|
|
775
|
+
" i=i+1)\n"
|
|
776
|
+
" if (i==n) best_i];\n"
|
|
777
|
+
"echo(myloop(5));"),
|
|
778
|
+
"ECHO: [4]");
|
|
779
|
+
}
|
|
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
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/minimal_debugger.cpp
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_2d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_3d.cpp
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
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/text/stb_font_provider.cpp
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
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_dxf_svg_import.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_manifold_cache.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_multi_color_merge.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_python_bindings.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
|
{openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_viewport_params.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|