openscad-cpp-evaluator 0.42.0__tar.gz → 0.42.1__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.
Files changed (207) hide show
  1. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/CLAUDE.md +4 -1
  2. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/PKG-INFO +1 -1
  3. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/evaluator.hpp +6 -1
  4. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/pyproject.toml +1 -1
  5. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/bytecode_vm.cpp +7 -2
  6. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/csg_resolve.cpp +15 -3
  7. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_children_separate.cpp +24 -6
  8. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/.github/workflows/ci.yml +0 -0
  9. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/.github/workflows/wheels.yml +0 -0
  10. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/.gitignore +0 -0
  11. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/.gitmodules +0 -0
  12. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/CMakeLists.txt +0 -0
  13. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/LICENSE +0 -0
  14. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/README.md +0 -0
  15. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/bindings/CMakeLists.txt +0 -0
  16. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/bindings/ast_to_py.cpp +0 -0
  17. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/bindings/module.cpp +0 -0
  18. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/cmake/embed_font.cmake +0 -0
  19. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/examples/CMakeLists.txt +0 -0
  20. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/examples/eval_perf_benchmark.cpp +0 -0
  21. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/examples/manifold_cache_reuse.cpp +0 -0
  22. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/examples/minimal_debugger.cpp +0 -0
  23. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  24. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/.gitignore +0 -0
  25. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  26. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  27. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/README.md +0 -0
  28. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  29. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  30. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  31. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  32. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  33. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  34. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  35. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  36. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  37. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  38. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  39. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  40. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  41. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  42. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  43. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  44. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/api.cpp +0 -0
  45. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  46. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  47. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  48. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  49. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  50. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  51. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  52. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  53. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  54. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  55. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  56. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  57. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  58. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  59. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  60. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  61. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/position.cpp +0 -0
  62. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  63. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  64. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  65. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  66. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  67. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  68. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  69. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  70. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  71. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  72. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  73. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  74. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  75. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  76. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  77. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  78. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  79. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  80. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  81. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
  82. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  83. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  84. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  85. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  86. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  87. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  88. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  89. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  90. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  91. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  92. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  93. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  94. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  95. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  96. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  97. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  98. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  99. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  100. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  101. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  102. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  103. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  104. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  105. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/export.hpp +0 -0
  106. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  107. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  108. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  109. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  110. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  111. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  112. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  113. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  114. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  115. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  116. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  117. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  118. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  119. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  120. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/value.hpp +0 -0
  121. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  122. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/python/openscad_cpp_evaluator/__init__.py +0 -0
  123. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/resources/fonts/LICENSE +0 -0
  124. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  125. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/CMakeLists.txt +0 -0
  126. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/booleans.cpp +0 -0
  127. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/builtins.hpp +0 -0
  128. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/call_args.cpp +0 -0
  129. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/color.cpp +0 -0
  130. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/control.cpp +0 -0
  131. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/dxf_dim.cpp +0 -0
  132. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/extrude.cpp +0 -0
  133. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/function_builtins.cpp +0 -0
  134. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/import.cpp +0 -0
  135. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/modifiers.cpp +0 -0
  136. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/primitives_2d.cpp +0 -0
  137. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/primitives_3d.cpp +0 -0
  138. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/registry.cpp +0 -0
  139. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/roof.cpp +0 -0
  140. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/segments.cpp +0 -0
  141. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/surface.cpp +0 -0
  142. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/text.cpp +0 -0
  143. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/topology.cpp +0 -0
  144. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/builtins/transforms.cpp +0 -0
  145. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/bytecode_compiler.cpp +0 -0
  146. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/colored_body.cpp +0 -0
  147. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/csg_generate.cpp +0 -0
  148. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/css_colors.cpp +0 -0
  149. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/debug/debug_repl.cpp +0 -0
  150. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/debug_profile.cpp +0 -0
  151. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/eval_context.cpp +0 -0
  152. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/eval_error.cpp +0 -0
  153. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/eval_use.cpp +0 -0
  154. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/export.cpp +0 -0
  155. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/expr_eval.cpp +0 -0
  156. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/import/dxf_import.cpp +0 -0
  157. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/import/mesh_import.cpp +0 -0
  158. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/import/surface_load.cpp +0 -0
  159. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/import/svg_import.cpp +0 -0
  160. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/manifold_cache.cpp +0 -0
  161. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/measure_geometry.cpp +0 -0
  162. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/mesh_check.cpp +0 -0
  163. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/stmt_eval.cpp +0 -0
  164. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/text/font_match.cpp +0 -0
  165. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/text/freetype_font_provider.cpp +0 -0
  166. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/text/text_metrics.cpp +0 -0
  167. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/user_calls.cpp +0 -0
  168. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/value.cpp +0 -0
  169. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/src/zip_stored.cpp +0 -0
  170. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/CMakeLists.txt +0 -0
  171. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_booleans.cpp +0 -0
  172. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_bytecode_compiler.cpp +0 -0
  173. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_cli.cpp +0 -0
  174. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_control_flow.cpp +0 -0
  175. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_csg_tree.cpp +0 -0
  176. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_debug_hooks.cpp +0 -0
  177. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_dxf_svg_import.cpp +0 -0
  178. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_eval_context.cpp +0 -0
  179. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_export.cpp +0 -0
  180. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_expr_eval.cpp +0 -0
  181. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_extrude_roof.cpp +0 -0
  182. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_function_builtins.cpp +0 -0
  183. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_helpers.hpp +0 -0
  184. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_import_export.cpp +0 -0
  185. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_manifold_cache.cpp +0 -0
  186. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_mesh_check.cpp +0 -0
  187. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_multi_color_merge.cpp +0 -0
  188. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_primitives.cpp +0 -0
  189. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_profiling.cpp +0 -0
  190. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_python_bindings.py +0 -0
  191. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_render_expr.cpp +0 -0
  192. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_scope_trail.cpp +0 -0
  193. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_scoping.cpp +0 -0
  194. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_surface.cpp +0 -0
  195. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_tail_calls.cpp +0 -0
  196. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_text.cpp +0 -0
  197. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_transforms.cpp +0 -0
  198. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_unexpected_args.cpp +0 -0
  199. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_use.cpp +0 -0
  200. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_value.cpp +0 -0
  201. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_viewport_params.cpp +0 -0
  202. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tests/test_zip_stored.cpp +0 -0
  203. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tools/cli/CMakeLists.txt +0 -0
  204. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tools/cli/cli_lib.cpp +0 -0
  205. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tools/cli/cli_lib.hpp +0 -0
  206. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/tools/cli/main.cpp +0 -0
  207. {openscad_cpp_evaluator-0.42.0 → openscad_cpp_evaluator-0.42.1}/uv.lock +0 -0
@@ -484,7 +484,10 @@ grep for `ponytail:`.
484
484
  and `builtinChildren` (children()/children(N), deferred evaluation; `children(separate=true)`
485
485
  additionally marks each forwarded node `separateOperand` so the enclosing
486
486
  union/difference/intersection treats them as separate operands rather than one grouped one --
487
- a BelfrySCAD extension, see `Evaluator::appendGroupSizes`). `evalFunctionCall`'s
487
+ a BelfrySCAD extension, see `Evaluator::appendGroupSizes`. The marks stop at a user-module
488
+ boundary: only the children() call's own splice honours them
489
+ (`spliceModuleChildren`'s `honorSeparateMarks`), so a module wrapping such a call wraps its
490
+ children as usual and its own caller sees one operand). `evalFunctionCall`'s
488
491
  precedence order (checked in this exact sequence): `import` (special-cased, its own
489
492
  module/expression-context split) → `isBuiltinFunctionName` (function_builtins.hpp — always wins
490
493
  if true) → user function lookup → function-literal *value* probe → "unknown function" warning.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 0.42.0
3
+ Version: 0.42.1
4
4
  Summary: C++ OpenSCAD evaluator with Python bindings
5
5
  Author: NeuSCAD Contributors
6
6
  License-Expression: MIT
@@ -999,8 +999,13 @@ public:
999
999
  // (evalModularCall's OWN "is this splice or wrap-as-a-tagged-node"
1000
1000
  // branch already decided `splice` before ever reaching a user module,
1001
1001
  // so this helper never needs that decision itself).
1002
+ // `honorSeparateMarks` is true only for a children() call's OWN splice.
1003
+ // A user module's splice passes false, so it wraps its marked children
1004
+ // as usual and the marks stop there -- children(separate=true) applies
1005
+ // to the operator enclosing that call, not to whatever encloses the
1006
+ // module the call happens to sit in.
1002
1007
  void spliceModuleChildren(std::vector<std::unique_ptr<CSGNode>> children, std::uint64_t randsBefore,
1003
- const oscad::ASTNode& callNode);
1008
+ const oscad::ASTNode& callNode, bool honorSeparateMarks = false);
1004
1009
  private:
1005
1010
  Value evalUserFunction(const std::string& name, const oscad::FunctionDeclaration& decl,
1006
1011
  const std::vector<std::unique_ptr<oscad::Argument>>& arguments, EvalContext& ctx,
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "openscad_cpp_evaluator"
7
- version = "0.42.0"
7
+ version = "0.42.1"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -516,8 +516,12 @@ Value driveVm(Evaluator& ev, size_t floor) {
516
516
  if (isModule && ownsModuleSplice) {
517
517
  std::vector<std::unique_ptr<CSGNode>> children = std::move(ev.treeStack_.back());
518
518
  ev.treeStack_.pop_back();
519
+ // separateChildren is set only by pushChildrenForwardFrame,
520
+ // so it also answers "is this a children() splice?" -- a
521
+ // user module's frame always passes false and wraps.
519
522
  if (separateChildren) markSeparateOperands(children, 0);
520
- ev.spliceModuleChildren(std::move(children), moduleRandsBefore, *moduleSpliceCallNode);
523
+ ev.spliceModuleChildren(std::move(children), moduleRandsBefore, *moduleSpliceCallNode,
524
+ /*honorSeparateMarks=*/separateChildren);
521
525
  }
522
526
  if (isFloorFrame) {
523
527
  finalResult = std::move(result); // unused by a module caller (runCompiledModuleBody ignores it)
@@ -1076,7 +1080,8 @@ Value driveVm(Evaluator& ev, size_t floor) {
1076
1080
  std::vector<std::unique_ptr<CSGNode>> children = std::move(ev.treeStack_.back());
1077
1081
  ev.treeStack_.pop_back();
1078
1082
  if (separate) markSeparateOperands(children, 0);
1079
- ev.spliceModuleChildren(std::move(children), randsBefore, *callNode);
1083
+ ev.spliceModuleChildren(std::move(children), randsBefore, *callNode,
1084
+ /*honorSeparateMarks=*/true);
1080
1085
  ++f.pc;
1081
1086
  }
1082
1087
  break;
@@ -126,9 +126,10 @@ void Evaluator::evalModularCall(const oscad::ModularCall& node, EvalContext& ctx
126
126
  // under a synthetic (display-only, is_builtin=false) "union" node so
127
127
  // the tree still reads as one shape at this call site. Mirrors
128
128
  // _eval_statement's splice branch exactly.
129
- const bool splice = (name == "children" && isBuiltin) || !isBuiltin;
129
+ const bool isChildrenCall = (name == "children" && isBuiltin);
130
+ const bool splice = isChildrenCall || !isBuiltin;
130
131
  if (splice) {
131
- spliceModuleChildren(std::move(children), randsBefore, node);
132
+ spliceModuleChildren(std::move(children), randsBefore, node, isChildrenCall);
132
133
  return;
133
134
  }
134
135
 
@@ -147,7 +148,7 @@ void Evaluator::evalModularCall(const oscad::ModularCall& node, EvalContext& ctx
147
148
  }
148
149
 
149
150
  void Evaluator::spliceModuleChildren(std::vector<std::unique_ptr<CSGNode>> children, std::uint64_t randsBefore,
150
- const oscad::ASTNode& callNode) {
151
+ const oscad::ASTNode& callNode, bool honorSeparateMarks) {
151
152
  if (randsCallCount_ != randsBefore) {
152
153
  // rands() fired directly during *this* call's own resolve (e.g. an
153
154
  // assignment before any geometry statement in a user module's
@@ -161,7 +162,18 @@ void Evaluator::spliceModuleChildren(std::vector<std::unique_ptr<CSGNode>> child
161
162
  // children(separate=true) marked these to start their own operand
162
163
  // groups, and the group walk only inspects the enclosing frame's top
163
164
  // level -- so the wrapper would hide the marks. Splice instead.
165
+ //
166
+ // Only for the children() call's own splice. A USER MODULE wrapping
167
+ // such a call wraps as usual, which hides the marks and is exactly what
168
+ // makes separateness stop at the module boundary:
169
+ //
170
+ // module pass() { children(separate=true); }
171
+ // difference() pass() { a; b; } // a | b, not a - b
172
+ //
173
+ // pass() is its own shape; that it happens to forward its children
174
+ // separately is its business, not its caller's.
164
175
  const bool anySeparate =
176
+ honorSeparateMarks &&
165
177
  std::any_of(children.begin(), children.end(), [](const auto& c) { return c->separateOperand; });
166
178
  if (children.size() > 1 && !anySeparate) {
167
179
  auto unionNode = std::make_unique<CSGNode>();
@@ -179,16 +179,34 @@ TEST(ChildrenSeparate, DoesNotAffectALaterUnrelatedDifference) {
179
179
  }
180
180
  }
181
181
 
182
- TEST(ChildrenSeparate, PropagatesThroughAUserModuleWrapper) {
183
- // A judgement call, pinned so it cannot drift silently: the mark rides
184
- // on the nodes, so a module whose whole body is children(separate=true)
185
- // passes the separateness outward to whatever encloses the call.
186
- // Retreating to "stop at the module boundary" is any_of -> all_of in
187
- // spliceModuleChildren.
182
+ TEST(ChildrenSeparate, StopsAtAUserModuleBoundary) {
183
+ // separate=true applies to the operator enclosing THAT children() call,
184
+ // not to whatever encloses the module the call sits in. pass() is its
185
+ // own shape; that it forwards its children separately is its business,
186
+ // and difference() outside it still sees one operand.
187
+ //
188
+ // Mechanically: a user module's splice wraps its children as usual,
189
+ // which hides the marks from the group walk. Only the children() call's
190
+ // own splice honours them (spliceModuleChildren's honorSeparateMarks).
188
191
  for (bool vm : {false, true}) {
189
192
  ScopedVm guard(vm);
190
193
  Evaluated e = evalSrc(std::string("module pass() { children(separate=true); }\n"
191
194
  "difference() pass() ") + kThreeChildren);
195
+ EXPECT_NEAR(totalVolume(e.bodies), kCube, 1e-6) << "vm=" << vm;
196
+ }
197
+ }
198
+
199
+ TEST(ChildrenSeparate, StillWorksInsideTheModuleThatAsksForIt) {
200
+ // The other half of the boundary rule: a module that puts the operator
201
+ // and the children(separate=true) call together still works, however
202
+ // deeply that module is itself nested.
203
+ for (bool vm : {false, true}) {
204
+ ScopedVm guard(vm);
205
+ Evaluated e = evalSrc(std::string("module frame() { difference() children(separate=true); }\n"
206
+ "module outer() { frame() { cube(50, center=true);"
207
+ " translate([-15,0,0]) cube(10, center=true);"
208
+ " translate([ 15,0,0]) cube(10, center=true); } }\n"
209
+ "outer();"));
192
210
  EXPECT_NEAR(totalVolume(e.bodies), kCube - 2 * kSmall, 1e-6) << "vm=" << vm;
193
211
  }
194
212
  }