openscad-cpp-evaluator 1.36.0__tar.gz → 1.37.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-1.36.0 → openscad_cpp_evaluator-1.37.0}/CLAUDE.md +8 -1
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/call_args.hpp +12 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/call_args.cpp +19 -2
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/extrude.cpp +4 -2
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/registry.cpp +2 -2
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/CMakeLists.txt +1 -0
- openscad_cpp_evaluator-1.37.0/tests/test_undef_args.cpp +100 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/uv.lock +1 -1
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/.gitignore +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/.gitmodules +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/LICENSE +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/README.md +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/cmake/patch_manifold.cmake +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/.DS_Store +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/resources/fonts/LiberationSans-Bold.ttf +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/resources/fonts/LiberationSans-Italic.ttf +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/format_closure.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/import/scene_import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/measure_geometry.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/utf8.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/xkcd_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/xkcd_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_children_separate.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_discretizer.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_feature_detection.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_include_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_render_expr.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/tools/cli/main.cpp +0 -0
|
@@ -730,7 +730,14 @@ grep for `ponytail:`.
|
|
|
730
730
|
parameter names live in `builtinParamNames` (`registry.cpp`): each list is the union of real
|
|
731
731
|
OpenSCAD's own `Parameters::parse` declaration and any extra name this port reads via `getArg`,
|
|
732
732
|
so the port never warns about an argument it goes on to honour — **add to it whenever a builtin
|
|
733
|
-
gains a parameter**, or that parameter starts warning.
|
|
733
|
+
gains a parameter**, or that parameter starts warning. **An argument given as `undef` is not given**: `getArg`
|
|
734
|
+
returns the default for it, as every upstream builtin does (`if (v.isDefined())`). Wrappers
|
|
735
|
+
forward their own optional parameters as undef -- BOSL2's `rotate_extrude` override passes
|
|
736
|
+
`angle=angle`, and reading that as 0 degrees flattened every plain `rotate_extrude()` (#680).
|
|
737
|
+
Checked argument by argument against OpenSCAD 2026.02 (47 cases, `tests/test_undef_args.cpp`).
|
|
738
|
+
Aliases (`linear_extrude`'s `h`, `rotate_extrude`'s `a`) go through `getArgOrAlias`, which
|
|
739
|
+
warns `Specified both "height" and "h"` as upstream and lets the primary name win.
|
|
740
|
+
`linear_extrude`'s default height is 100, upstream's (it was 1). Builtin *functions* deliberately have no
|
|
734
741
|
entries beyond `textmetrics`/`fontmetrics`: upstream reads their arguments positionally without
|
|
735
742
|
`Parameters::parse`, so `sin(bogus=30)` warns about nothing there (verified against 2022.08.22)
|
|
736
743
|
and warning here would be a divergence. Not ported: the reference's `argument X supplied more
|
|
@@ -69,8 +69,20 @@ ResolvedCallArgs resolveCallArgs(Evaluator& ev, const std::vector<std::unique_pt
|
|
|
69
69
|
// wins). `pos = std::nullopt` for an argument with no positional slot at
|
|
70
70
|
// all (e.g. sphere's `d`, only ever named -- a later phase's need, plumbed
|
|
71
71
|
// through now since the signature shape matters more than early callers).
|
|
72
|
+
//
|
|
73
|
+
// An argument given as undef counts as not given, as in every upstream
|
|
74
|
+
// builtin (`if (v.isDefined()) ...`): rotate_extrude(angle=undef) is 360
|
|
75
|
+
// degrees, not 0. It matters for wrappers that forward their own optional
|
|
76
|
+
// parameters -- BOSL2's rotate_extrude override passes `angle=angle`, which
|
|
77
|
+
// flattened every plain rotate_extrude() into its profile (#680).
|
|
72
78
|
Value getArg(const CallArgs& args, std::optional<int> pos, const std::string& name, Value defaultValue = Value{});
|
|
73
79
|
|
|
80
|
+
// getArg for a parameter with an alternative name (linear_extrude's
|
|
81
|
+
// height/h, rotate_extrude's angle/a): `name` wins when both are given,
|
|
82
|
+
// with upstream's warning.
|
|
83
|
+
Value getArgOrAlias(Evaluator& ev, const oscad::Position* where, const CallArgs& args, std::optional<int> pos,
|
|
84
|
+
const std::string& name, const std::string& alias, Value defaultValue);
|
|
85
|
+
|
|
74
86
|
// Encodes a CallArgs as a single Value (positional -> a list indexed 0..N,
|
|
75
87
|
// named -> an object) so a resolve function can carry a call's raw
|
|
76
88
|
// arguments across into CSGParams (which only holds Value) for a generate
|
|
@@ -56,14 +56,31 @@ CallArgs resolveArgs(Evaluator& ev, const std::vector<std::unique_ptr<oscad::Arg
|
|
|
56
56
|
return result;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
namespace {
|
|
60
|
+
bool isUndef(const Value& v) { return std::holds_alternative<std::monostate>(v); }
|
|
61
|
+
} // namespace
|
|
62
|
+
|
|
59
63
|
Value getArg(const CallArgs& args, std::optional<int> pos, const std::string& name, Value defaultValue) {
|
|
60
|
-
if (const Value* named = args.findNamed(name)) return *named;
|
|
64
|
+
if (const Value* named = args.findNamed(name); named && !isUndef(*named)) return *named;
|
|
61
65
|
if (pos.has_value()) {
|
|
62
|
-
if (const Value* positional = args.findPositional(*pos)
|
|
66
|
+
if (const Value* positional = args.findPositional(*pos); positional && !isUndef(*positional))
|
|
67
|
+
return *positional;
|
|
63
68
|
}
|
|
64
69
|
return defaultValue;
|
|
65
70
|
}
|
|
66
71
|
|
|
72
|
+
Value getArgOrAlias(Evaluator& ev, const oscad::Position* where, const CallArgs& args, std::optional<int> pos,
|
|
73
|
+
const std::string& name, const std::string& alias, Value defaultValue) {
|
|
74
|
+
const Value primary = getArg(args, pos, name, Value{});
|
|
75
|
+
const Value other = getArg(args, std::nullopt, alias, Value{});
|
|
76
|
+
if (!isUndef(primary)) {
|
|
77
|
+
if (!isUndef(other))
|
|
78
|
+
ev.warn("Specified both \"" + name + "\" and \"" + alias + "\"", where);
|
|
79
|
+
return primary;
|
|
80
|
+
}
|
|
81
|
+
return isUndef(other) ? defaultValue : other;
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
ResolvedCallArgs resolveCallArgs(Evaluator& ev, const std::vector<std::unique_ptr<oscad::Argument>>& arguments,
|
|
68
85
|
EvalContext& ctx) {
|
|
69
86
|
CallArgs args = resolveArgs(ev, arguments, ctx);
|
|
@@ -118,7 +118,9 @@ manifold::Manifold extrudeTwisted(const manifold::Polygons& polys, double height
|
|
|
118
118
|
BuiltinWrapParams computeLinearExtrudeParams(Evaluator& ev, const oscad::ModularCall& node, EvalContext& ctx) {
|
|
119
119
|
auto [args, effCtx] = resolveCallArgs(ev, node.arguments, ctx);
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
// 100 when not given, as upstream (the old 1 was a guess), and `h` as
|
|
122
|
+
// upstream's alias -- BOSL2's linear_extrude override forwards it.
|
|
123
|
+
const double height = toDoubleLenient(getArgOrAlias(ev, &node.position(), args, 0, "height", "h", Value{100.0}));
|
|
122
124
|
const bool center = truthy(getArg(args, std::nullopt, "center", Value{false}));
|
|
123
125
|
const double twist = toDoubleLenient(getArg(args, std::nullopt, "twist", Value{0.0}));
|
|
124
126
|
// Upstream's validate_integral: any finite number counts as given, and is
|
|
@@ -239,7 +241,7 @@ std::vector<ColoredBody> generateLinearExtrude(Evaluator& ev, const CSGParams& p
|
|
|
239
241
|
BuiltinWrapParams computeRotateExtrudeParams(Evaluator& ev, const oscad::ModularCall& node, EvalContext& ctx) {
|
|
240
242
|
auto [args, effCtx] = resolveCallArgs(ev, node.arguments, ctx);
|
|
241
243
|
|
|
242
|
-
const double angle = toDoubleLenient(
|
|
244
|
+
const double angle = toDoubleLenient(getArgOrAlias(ev, &node.position(), args, 0, "angle", "a", Value{360.0}));
|
|
243
245
|
|
|
244
246
|
CSGParams params;
|
|
245
247
|
params["angle"] = Value{angle};
|
|
@@ -125,8 +125,8 @@ const std::vector<std::string>* builtinParamNames(const std::string& name) {
|
|
|
125
125
|
{"import",
|
|
126
126
|
{"file", "layer", "convexity", "origin", "scale", "width", "height", "filename", "layername", "center", "dpi",
|
|
127
127
|
"id", "class", "repair", "tolerance"}},
|
|
128
|
-
{"linear_extrude", {"height", "v", "scale", "center", "twist", "slices", "segments", "convexity"}},
|
|
129
|
-
{"rotate_extrude", {"angle", "start", "convexity"}},
|
|
128
|
+
{"linear_extrude", {"height", "h", "v", "scale", "center", "twist", "slices", "segments", "convexity"}},
|
|
129
|
+
{"rotate_extrude", {"angle", "a", "start", "convexity"}},
|
|
130
130
|
{"projection", {"cut", "convexity"}},
|
|
131
131
|
{"roof", {"method", "convexity"}},
|
|
132
132
|
{"fill", {}},
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// A builtin argument given as undef means "not given" (#680), and the
|
|
2
|
+
// height/h and angle/a aliases, as upstream OpenSCAD -- each checked
|
|
3
|
+
// against OpenSCAD 2026.02 before being written down here.
|
|
4
|
+
//
|
|
5
|
+
// Wrappers forward their own optional parameters: BOSL2's rotate_extrude
|
|
6
|
+
// override passes angle=angle, undef when the user gave none, and taking
|
|
7
|
+
// that undef as 0 degrees flattened every plain rotate_extrude() into its
|
|
8
|
+
// profile.
|
|
9
|
+
|
|
10
|
+
#include "test_helpers.hpp"
|
|
11
|
+
|
|
12
|
+
#include <gtest/gtest.h>
|
|
13
|
+
|
|
14
|
+
#include <string>
|
|
15
|
+
#include <vector>
|
|
16
|
+
|
|
17
|
+
using namespace oscadeval;
|
|
18
|
+
using namespace oscadeval::test;
|
|
19
|
+
|
|
20
|
+
namespace {
|
|
21
|
+
|
|
22
|
+
struct Shape {
|
|
23
|
+
double volume;
|
|
24
|
+
manifold::Box box;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
Shape shapeOf(const std::string& code) {
|
|
28
|
+
Evaluated e = evalSrc(code);
|
|
29
|
+
EXPECT_EQ(e.bodies.size(), 1u) << code;
|
|
30
|
+
if (e.bodies.empty() || !e.bodies[0].body.has_value()) return {0.0, {}};
|
|
31
|
+
return {e.bodies[0].body->Volume(), e.bodies[0].body->BoundingBox()};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void expectSameShape(const std::string& a, const std::string& b) {
|
|
35
|
+
const Shape x = shapeOf(a), y = shapeOf(b);
|
|
36
|
+
EXPECT_GT(x.volume, 0.0) << a;
|
|
37
|
+
EXPECT_NEAR(x.volume, y.volume, 1e-6) << a << " vs " << b;
|
|
38
|
+
EXPECT_NEAR(x.box.max.x, y.box.max.x, 1e-6) << a;
|
|
39
|
+
EXPECT_NEAR(x.box.max.y, y.box.max.y, 1e-6) << a;
|
|
40
|
+
EXPECT_NEAR(x.box.max.z, y.box.max.z, 1e-6) << a;
|
|
41
|
+
EXPECT_NEAR(x.box.min.x, y.box.min.x, 1e-6) << a;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
std::vector<std::string> warningsFor(const std::string& code) {
|
|
45
|
+
std::vector<std::string> out;
|
|
46
|
+
Evaluated e = evalSrc(code, [&](const std::string& msg) {
|
|
47
|
+
if (msg.rfind("WARNING: ", 0) == 0) out.push_back(msg);
|
|
48
|
+
});
|
|
49
|
+
(void)e;
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
} // namespace
|
|
54
|
+
|
|
55
|
+
// Every argument that took an explicit undef as a value rather than as absent.
|
|
56
|
+
TEST(UndefArgs, AnUndefArgumentIsTheDefault) {
|
|
57
|
+
expectSameShape("rotate_extrude(angle=undef) translate([10,0]) square(5);",
|
|
58
|
+
"rotate_extrude() translate([10,0]) square(5);");
|
|
59
|
+
expectSameShape("linear_extrude(height=undef) square(5);", "linear_extrude() square(5);");
|
|
60
|
+
expectSameShape("cylinder(h=undef, r=2);", "cylinder(r=2);");
|
|
61
|
+
expectSameShape("linear_extrude(1) square(size=undef);", "linear_extrude(1) square();");
|
|
62
|
+
expectSameShape("linear_extrude(1) text(\"A\", size=undef);", "linear_extrude(1) text(\"A\");");
|
|
63
|
+
expectSameShape("linear_extrude(1) text(\"AB\", spacing=undef);", "linear_extrude(1) text(\"AB\");");
|
|
64
|
+
// Positional undef too.
|
|
65
|
+
expectSameShape("rotate_extrude(undef) translate([10,0]) square(5);",
|
|
66
|
+
"rotate_extrude() translate([10,0]) square(5);");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
TEST(UndefArgs, AWrapperForwardingItsOwnOptionalAngleStillRevolvesFully) {
|
|
70
|
+
expectSameShape("module re(angle) rotate_extrude(angle=angle) children();\n"
|
|
71
|
+
"re() translate([10,0]) square(5);",
|
|
72
|
+
"rotate_extrude() translate([10,0]) square(5);");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
TEST(UndefArgs, LinearExtrudeDefaultsToAHeightOfOneHundred) {
|
|
76
|
+
EXPECT_NEAR(shapeOf("linear_extrude() square(5);").box.max.z, 100.0, 1e-9);
|
|
77
|
+
const Shape centred = shapeOf("linear_extrude(center=true) square(5);");
|
|
78
|
+
EXPECT_NEAR(centred.box.min.z, -50.0, 1e-9);
|
|
79
|
+
EXPECT_NEAR(centred.box.max.z, 50.0, 1e-9);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
TEST(UndefArgs, HIsHeightAndAIsAngle) {
|
|
83
|
+
EXPECT_NEAR(shapeOf("linear_extrude(h=7) square(5);").box.max.z, 7.0, 1e-9);
|
|
84
|
+
expectSameShape("rotate_extrude(a=90) translate([10,0]) square(5);",
|
|
85
|
+
"rotate_extrude(angle=90) translate([10,0]) square(5);");
|
|
86
|
+
EXPECT_TRUE(warningsFor("linear_extrude(h=7) square(5);").empty());
|
|
87
|
+
EXPECT_TRUE(warningsFor("rotate_extrude(a=90) translate([10,0]) square(5);").empty());
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
TEST(UndefArgs, BothNamesGivenWarnsAndThePrimaryWins) {
|
|
91
|
+
EXPECT_NEAR(shapeOf("linear_extrude(height=3, h=7) square(5);").box.max.z, 3.0, 1e-9);
|
|
92
|
+
const auto w = warningsFor("linear_extrude(height=3, h=7) square(5);");
|
|
93
|
+
ASSERT_EQ(w.size(), 1u);
|
|
94
|
+
EXPECT_NE(w[0].find("Specified both \"height\" and \"h\""), std::string::npos) << w[0];
|
|
95
|
+
expectSameShape("rotate_extrude(angle=45, a=90) translate([10,0]) square(5);",
|
|
96
|
+
"rotate_extrude(angle=45) translate([10,0]) square(5);");
|
|
97
|
+
const auto wa = warningsFor("rotate_extrude(angle=45, a=90) translate([10,0]) square(5);");
|
|
98
|
+
ASSERT_EQ(wa.size(), 1u);
|
|
99
|
+
EXPECT_NE(wa[0].find("Specified both \"angle\" and \"a\""), std::string::npos) << wa[0];
|
|
100
|
+
}
|
|
File without changes
|
{openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.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
|
|
File without changes
|
{openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.0}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.36.0 → openscad_cpp_evaluator-1.37.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|