openscad-cpp-evaluator 0.46.0__tar.gz → 0.47.0__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.46.0 → openscad_cpp_evaluator-0.47.0}/CLAUDE.md +7 -3
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/bytecode_compiler.cpp +27 -7
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/user_calls.cpp +26 -16
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_function_builtins.cpp +92 -11
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/.gitignore +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/.gitmodules +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/LICENSE +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/README.md +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/builtins.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/registry.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/measure_geometry.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_children_separate.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_feature_detection.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_render_expr.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/uv.lock +0 -0
|
@@ -45,9 +45,13 @@ comprehension clause kinds, user function calls (recursion, defaults, `FunctionL
|
|
|
45
45
|
user module calls (`children()`/`children(N)`, closure detection via `callCtxFor`), list
|
|
46
46
|
indexing/swizzle member access; the full math/string/list/type-check builtin *function* dispatch
|
|
47
47
|
(`sin`/`cos`/`pow`/`search`/`lookup`/`chr`/`ord`/`is_*`/`object`/`has_key`/etc, ~43 names — a
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
same precedence rule as the builtin *modules* in `registry.cpp`: a user-defined function
|
|
49
|
+
**shadows** a same-named builtin, looked up *before* the builtin table. This was backwards until
|
|
50
|
+
0.47.0 — the port copied the old Python evaluator's `_eval_function_call` order, which had it
|
|
51
|
+
wrong; OpenSCAD 2026.02.01 echoes 999 for `function abs(x)=999; abs(-3)` and we echoed 3. Fixing
|
|
52
|
+
it needs **both** resolution sites: `evalFunctionCall` (`user_calls.cpp`) and the compiler's
|
|
53
|
+
call-site resolution (`bytecode_compiler.cpp`), which bakes builtin-vs-user in at compile time,
|
|
54
|
+
plus gating the silent `is_undef` probe on the call actually resolving to the builtin), STL/OBJ/OFF/3MF `import()` in both module (geometry) and expression
|
|
51
55
|
(VNF/JSON) contexts, and 3MF read/write; (Phase 6) `hull()`/`minkowski()` (transparent-splice
|
|
52
56
|
CSG-tree shape like union/difference/intersection, role-split via the shared `splitByRole`),
|
|
53
57
|
`linear_extrude()`/`rotate_extrude()`/`projection(cut=)`, and `roof()`; and (Phase 7) `offset()`,
|
|
@@ -567,6 +567,19 @@ public:
|
|
|
567
567
|
// evalBuiltinFunction when isImport is set.
|
|
568
568
|
site.isImport = true;
|
|
569
569
|
isStatic = true;
|
|
570
|
+
} else if (const oscad::ASTNode* userFn =
|
|
571
|
+
scope_ ? scope_->lookupFunction(calleeName) : nullptr;
|
|
572
|
+
userFn && userFn->kind() == NodeKind::FunctionDeclaration) {
|
|
573
|
+
// A user-defined function SHADOWS a same-named
|
|
574
|
+
// builtin, so this lookup runs BEFORE the builtin
|
|
575
|
+
// table -- the same reordering as
|
|
576
|
+
// evalFunctionCall's (user_calls.cpp), and it has
|
|
577
|
+
// to happen here too: this decision is baked in at
|
|
578
|
+
// COMPILE time, so leaving the builtin test first
|
|
579
|
+
// would keep the bug on the default engine no
|
|
580
|
+
// matter what the interpreter does.
|
|
581
|
+
site.decl = static_cast<const oscad::FunctionDeclaration*>(userFn);
|
|
582
|
+
isStatic = true;
|
|
570
583
|
} else if (isBuiltinFunctionName(calleeName)) {
|
|
571
584
|
// object() is already in this table -- it gets
|
|
572
585
|
// isBuiltin=true here like any other builtin, and
|
|
@@ -578,13 +591,10 @@ public:
|
|
|
578
591
|
// split positional/named CallArgs shape).
|
|
579
592
|
site.isBuiltin = true;
|
|
580
593
|
isStatic = true;
|
|
581
|
-
} else {
|
|
582
|
-
const oscad::ASTNode* found = scope_ ? scope_->lookupFunction(calleeName) : nullptr;
|
|
583
|
-
if (found && found->kind() == NodeKind::FunctionDeclaration) {
|
|
584
|
-
site.decl = static_cast<const oscad::FunctionDeclaration*>(found);
|
|
585
|
-
isStatic = true;
|
|
586
|
-
}
|
|
587
594
|
}
|
|
595
|
+
// Anything else stays dynamic: a function-literal value,
|
|
596
|
+
// or a name that is simply unknown. Op::CallDynamic
|
|
597
|
+
// resolves it (and warns) at runtime.
|
|
588
598
|
}
|
|
589
599
|
|
|
590
600
|
if (!isStatic) {
|
|
@@ -626,7 +636,17 @@ public:
|
|
|
626
636
|
// is_undef(name) probes rather than reads -- the same quiet
|
|
627
637
|
// load the interpreter uses (Evaluator::undefProbeTarget),
|
|
628
638
|
// so the two engines agree on which reads warn.
|
|
629
|
-
|
|
639
|
+
//
|
|
640
|
+
// Only when the call resolves to the BUILTIN, though. A
|
|
641
|
+
// user function named is_undef shadows it (site resolution
|
|
642
|
+
// above) and evaluates its argument the ordinary way,
|
|
643
|
+
// warnings included -- which is what OpenSCAD does. The
|
|
644
|
+
// interpreter gets this for free by testing the probe
|
|
645
|
+
// inside its builtin branch; here the two are separate, so
|
|
646
|
+
// the condition has to be spelled out.
|
|
647
|
+
const oscad::Identifier* undefProbe =
|
|
648
|
+
site.isBuiltin ? Evaluator::undefProbeTarget(n) : nullptr;
|
|
649
|
+
if (undefProbe) {
|
|
630
650
|
compileIdentifierLoad(undefProbe->name, undefProbe->position(), out, scope,
|
|
631
651
|
/*warnIfUndef=*/false);
|
|
632
652
|
site.argNames.push_back(std::nullopt);
|
|
@@ -876,11 +876,32 @@ Value Evaluator::evalFunctionCall(const oscad::PrimaryCall& node, EvalContext& c
|
|
|
876
876
|
CallArgs args = resolveArgs(*this, node.arguments, ctx);
|
|
877
877
|
return importAsValue(*this, args, node);
|
|
878
878
|
}
|
|
879
|
-
// A
|
|
880
|
-
//
|
|
881
|
-
//
|
|
882
|
-
//
|
|
883
|
-
//
|
|
879
|
+
// A user-defined function SHADOWS a same-named builtin, so the
|
|
880
|
+
// user lookup runs FIRST. Verified against OpenSCAD 2026.02.01:
|
|
881
|
+
// `function norm(x) = 999; echo(norm([3,4]));` echoes 999 there,
|
|
882
|
+
// and 5 here until this was fixed.
|
|
883
|
+
//
|
|
884
|
+
// The comment this replaces asserted the opposite order matched
|
|
885
|
+
// "the reference's _eval_function_call precedence exactly" -- but
|
|
886
|
+
// _eval_function_call / _BUILTIN_FN_NAMES are the old PYTHON
|
|
887
|
+
// evaluator, not OpenSCAD, and that prototype had it backwards.
|
|
888
|
+
// The C++ port inherited the mistake. Modules were always right
|
|
889
|
+
// (a user `module sphere()` does override the builtin); only
|
|
890
|
+
// functions resolved the wrong way round.
|
|
891
|
+
//
|
|
892
|
+
// bytecode_compiler.cpp's Op::CallFn site resolution has the same
|
|
893
|
+
// ordering and is fixed with it -- the VM is the default engine,
|
|
894
|
+
// so fixing only this one would leave the bug in place.
|
|
895
|
+
const oscad::ASTNode* decl = ctx.scope->lookupFunction(leftId->name);
|
|
896
|
+
if (decl && decl->kind() == oscad::NodeKind::FunctionDeclaration) {
|
|
897
|
+
// Call-site stop, in the CALLER's context, before descending
|
|
898
|
+
// into the callee (whose own body-entry stop comes later, from
|
|
899
|
+
// evalUserFunctionCore). Builtins deliberately get none --
|
|
900
|
+
// only the user-function and function-literal branches stop.
|
|
901
|
+
checkDebug(node, ctx, /*forced=*/false, /*exprLevel=*/false, /*callSite=*/true);
|
|
902
|
+
return evalUserFunction(leftId->name, static_cast<const oscad::FunctionDeclaration&>(*decl), node.arguments,
|
|
903
|
+
ctx, &node);
|
|
904
|
+
}
|
|
884
905
|
if (isBuiltinFunctionName(leftId->name)) {
|
|
885
906
|
// is_undef(name) is a probe: asking whether a name is defined
|
|
886
907
|
// must not itself warn that it isn't. The $-branch of
|
|
@@ -901,17 +922,6 @@ Value Evaluator::evalFunctionCall(const oscad::PrimaryCall& node, EvalContext& c
|
|
|
901
922
|
CallArgs args = resolveArgs(*this, node.arguments, ctx);
|
|
902
923
|
return evalBuiltinFunction(*this, leftId->name, args, node);
|
|
903
924
|
}
|
|
904
|
-
const oscad::ASTNode* decl = ctx.scope->lookupFunction(leftId->name);
|
|
905
|
-
if (decl && decl->kind() == oscad::NodeKind::FunctionDeclaration) {
|
|
906
|
-
// Call-site stop, in the CALLER's context, before descending
|
|
907
|
-
// into the callee (whose own body-entry stop comes later, from
|
|
908
|
-
// evalUserFunctionCore). Builtins deliberately get none --
|
|
909
|
-
// mirrors _eval_function_call, where only the user-function and
|
|
910
|
-
// function-literal branches call _check_debug.
|
|
911
|
-
checkDebug(node, ctx, /*forced=*/false, /*exprLevel=*/false, /*callSite=*/true);
|
|
912
|
-
return evalUserFunction(leftId->name, static_cast<const oscad::FunctionDeclaration&>(*decl), node.arguments,
|
|
913
|
-
ctx, &node);
|
|
914
|
-
}
|
|
915
925
|
}
|
|
916
926
|
|
|
917
927
|
// Not a builtin or user function -- check whether the callee expression
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_function_builtins.cpp
RENAMED
|
@@ -508,18 +508,99 @@ TEST(ObjectBuiltin, PositionalNonObjectNonListArgumentIsUndef) {
|
|
|
508
508
|
EXPECT_TRUE(isUndef(evalSrc("object(5)", ev)));
|
|
509
509
|
}
|
|
510
510
|
|
|
511
|
-
// -- Precedence: a
|
|
512
|
-
//
|
|
511
|
+
// -- Precedence: a user function SHADOWS a same-named builtin ------------
|
|
512
|
+
//
|
|
513
|
+
// Same rule as modules, which always got this right. It used to be
|
|
514
|
+
// backwards for functions: the builtin won, because the port copied the old
|
|
515
|
+
// Python evaluator's _eval_function_call order rather than OpenSCAD's.
|
|
516
|
+
//
|
|
517
|
+
// Read off OpenSCAD 2026.02.01:
|
|
518
|
+
// function abs(x) = 999; echo(abs(-3)); -> 999
|
|
519
|
+
// function is_undef(x) = "mine"; echo(is_undef(q)); -> "mine", and it
|
|
520
|
+
// WARNS about the unknown variable q, because a user function
|
|
521
|
+
// evaluates its arguments normally -- only the builtin probe is
|
|
522
|
+
// silent.
|
|
523
|
+
//
|
|
524
|
+
// Every case runs under both engines: the VM decides builtin-vs-user at
|
|
525
|
+
// COMPILE time (bytecode_compiler.cpp), so it needs its own fix and its
|
|
526
|
+
// own coverage.
|
|
513
527
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
528
|
+
namespace {
|
|
529
|
+
|
|
530
|
+
class ScopedVm {
|
|
531
|
+
public:
|
|
532
|
+
explicit ScopedVm(bool enabled) { Evaluator::setBytecodeVmEnabledForTesting(enabled); }
|
|
533
|
+
~ScopedVm() { Evaluator::setBytecodeVmEnabledForTesting(std::nullopt); }
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
std::vector<std::string> echoesOf(const std::string& src) {
|
|
537
|
+
std::vector<std::string> out;
|
|
538
|
+
oscadeval::test::evalSrc(src, [&](const std::string& m) { out.push_back(m); });
|
|
539
|
+
return out;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
} // namespace
|
|
543
|
+
|
|
544
|
+
TEST(FunctionBuiltinPrecedence, UserFunctionShadowsSameNamedBuiltin) {
|
|
545
|
+
for (bool vm : {false, true}) {
|
|
546
|
+
ScopedVm guard(vm);
|
|
547
|
+
const std::vector<std::string> e = echoesOf("function abs(x) = 999;\necho(abs(-3));");
|
|
548
|
+
ASSERT_EQ(e.size(), 1u) << "vm=" << vm;
|
|
549
|
+
EXPECT_NE(e[0].find("999"), std::string::npos) << "vm=" << vm << ", got " << e[0];
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
TEST(FunctionBuiltinPrecedence, TheBuiltinStillWinsWhenNobodyRedefinesIt) {
|
|
554
|
+
for (bool vm : {false, true}) {
|
|
555
|
+
ScopedVm guard(vm);
|
|
556
|
+
const std::vector<std::string> e = echoesOf("echo(abs(-3));");
|
|
557
|
+
ASSERT_EQ(e.size(), 1u) << "vm=" << vm;
|
|
558
|
+
EXPECT_NE(e[0].find("3"), std::string::npos) << "vm=" << vm << ", got " << e[0];
|
|
559
|
+
EXPECT_EQ(e[0].find("999"), std::string::npos) << "vm=" << vm;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
TEST(FunctionBuiltinPrecedence, ShadowingHoldsInsideAUserFunctionBody) {
|
|
564
|
+
// The call is inside another function, so on the VM path it is reached
|
|
565
|
+
// through a COMPILED chunk rather than the interpreter -- this is the
|
|
566
|
+
// case a compiler-side fix is needed for.
|
|
567
|
+
for (bool vm : {false, true}) {
|
|
568
|
+
ScopedVm guard(vm);
|
|
569
|
+
const std::vector<std::string> e =
|
|
570
|
+
echoesOf("function abs(x) = 999;\nfunction outer() = abs(-3);\necho(outer());");
|
|
571
|
+
ASSERT_EQ(e.size(), 1u) << "vm=" << vm;
|
|
572
|
+
EXPECT_NE(e[0].find("999"), std::string::npos) << "vm=" << vm << ", got " << e[0];
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
TEST(FunctionBuiltinPrecedence, AUserDefinedIsUndefShadowsTheProbe) {
|
|
577
|
+
// is_undef() is the one builtin with argument handling of its own (it
|
|
578
|
+
// must not warn about the name it is probing). A user's own is_undef
|
|
579
|
+
// takes over completely, arguments evaluated the ordinary way -- so the
|
|
580
|
+
// unknown-variable warning the probe suppresses DOES appear, exactly as
|
|
581
|
+
// upstream.
|
|
582
|
+
for (bool vm : {false, true}) {
|
|
583
|
+
ScopedVm guard(vm);
|
|
584
|
+
std::vector<std::string> msgs;
|
|
585
|
+
oscadeval::test::evalSrc("function is_undef(x) = \"mine\";\necho(is_undef(nothing));",
|
|
586
|
+
[&](const std::string& m) { msgs.push_back(m); });
|
|
587
|
+
bool sawMine = false, sawWarning = false;
|
|
588
|
+
for (const std::string& m : msgs) {
|
|
589
|
+
if (m.find("mine") != std::string::npos) sawMine = true;
|
|
590
|
+
if (m.find("nothing") != std::string::npos) sawWarning = true;
|
|
591
|
+
}
|
|
592
|
+
EXPECT_TRUE(sawMine) << "vm=" << vm;
|
|
593
|
+
EXPECT_TRUE(sawWarning) << "vm=" << vm << ": a user function evaluates its argument normally";
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
TEST(FunctionBuiltinPrecedence, TheIsUndefProbeIsStillSilentWhenNotRedefined) {
|
|
598
|
+
for (bool vm : {false, true}) {
|
|
599
|
+
ScopedVm guard(vm);
|
|
600
|
+
const std::vector<std::string> e = echoesOf("echo(is_undef(nothing));");
|
|
601
|
+
ASSERT_EQ(e.size(), 1u) << "vm=" << vm << ": probing must not warn";
|
|
602
|
+
EXPECT_NE(e[0].find("true"), std::string::npos) << "vm=" << vm << ", got " << e[0];
|
|
603
|
+
}
|
|
523
604
|
}
|
|
524
605
|
|
|
525
606
|
// -- Builtin argument diagnostics (reference parity) ---------------------
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/.github/workflows/wheels.yml
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.46.0 → openscad_cpp_evaluator-0.47.0}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/builtins/primitives_2d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/src/text/freetype_font_provider.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_bytecode_compiler.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_children_separate.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/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.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_feature_detection.cpp
RENAMED
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_import_export.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_manifold_cache.cpp
RENAMED
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_multi_color_merge.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/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
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_unexpected_args.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.46.0 → openscad_cpp_evaluator-0.47.0}/tests/test_viewport_params.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|