openscad-cpp-evaluator 0.32.0__tar.gz → 0.32.2__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 (202) hide show
  1. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/PKG-INFO +1 -1
  2. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/pyproject.toml +1 -1
  3. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/function_builtins.cpp +23 -2
  4. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_bytecode_compiler.cpp +29 -0
  5. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_control_flow.cpp +56 -0
  6. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_function_builtins.cpp +28 -1
  7. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/uv.lock +1 -1
  8. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/.github/workflows/ci.yml +0 -0
  9. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/.github/workflows/wheels.yml +0 -0
  10. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/.gitignore +0 -0
  11. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/.gitmodules +0 -0
  12. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/CLAUDE.md +0 -0
  13. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/CMakeLists.txt +0 -0
  14. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/LICENSE +0 -0
  15. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/README.md +0 -0
  16. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/bindings/CMakeLists.txt +0 -0
  17. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/bindings/ast_to_py.cpp +0 -0
  18. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/bindings/module.cpp +0 -0
  19. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/cmake/embed_font.cmake +0 -0
  20. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/examples/CMakeLists.txt +0 -0
  21. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/examples/eval_perf_benchmark.cpp +0 -0
  22. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/examples/manifold_cache_reuse.cpp +0 -0
  23. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/examples/minimal_debugger.cpp +0 -0
  24. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  25. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/.gitignore +0 -0
  26. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  27. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  28. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/README.md +0 -0
  29. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  30. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  31. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  32. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  33. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  34. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  35. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  36. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  37. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  38. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  39. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  40. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  41. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  42. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  43. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  44. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  45. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/api.cpp +0 -0
  46. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  47. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  48. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  49. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  50. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  51. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  52. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  53. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  54. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  55. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  56. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  57. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  58. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  59. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  60. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  61. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  62. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/position.cpp +0 -0
  63. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  64. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  65. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  66. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  67. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  68. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  69. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  70. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  71. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  72. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  73. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  74. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  75. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  76. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  77. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  78. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  79. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  80. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  81. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  82. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  83. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  84. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  85. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  86. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  87. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  88. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  89. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  90. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  91. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  92. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  93. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  94. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  95. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  96. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  97. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  98. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  99. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  100. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  101. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  102. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  103. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  104. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  105. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  106. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/export.hpp +0 -0
  107. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  108. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  109. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  110. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  111. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  112. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  113. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  114. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  115. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  116. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  117. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  118. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  119. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  120. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  121. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/value.hpp +0 -0
  122. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  123. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/python/openscad_cpp_evaluator/__init__.py +0 -0
  124. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/resources/fonts/LICENSE +0 -0
  125. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  126. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/CMakeLists.txt +0 -0
  127. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/booleans.cpp +0 -0
  128. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/builtins.hpp +0 -0
  129. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/call_args.cpp +0 -0
  130. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/color.cpp +0 -0
  131. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/control.cpp +0 -0
  132. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/extrude.cpp +0 -0
  133. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/import.cpp +0 -0
  134. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/modifiers.cpp +0 -0
  135. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/primitives_2d.cpp +0 -0
  136. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/primitives_3d.cpp +0 -0
  137. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/registry.cpp +0 -0
  138. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/roof.cpp +0 -0
  139. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/segments.cpp +0 -0
  140. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/surface.cpp +0 -0
  141. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/text.cpp +0 -0
  142. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/topology.cpp +0 -0
  143. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/builtins/transforms.cpp +0 -0
  144. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/bytecode_compiler.cpp +0 -0
  145. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/bytecode_vm.cpp +0 -0
  146. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/colored_body.cpp +0 -0
  147. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/csg_generate.cpp +0 -0
  148. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/csg_resolve.cpp +0 -0
  149. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/css_colors.cpp +0 -0
  150. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/debug/debug_repl.cpp +0 -0
  151. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/debug_profile.cpp +0 -0
  152. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/eval_context.cpp +0 -0
  153. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/eval_error.cpp +0 -0
  154. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/eval_use.cpp +0 -0
  155. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/export.cpp +0 -0
  156. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/expr_eval.cpp +0 -0
  157. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/import/dxf_import.cpp +0 -0
  158. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/import/mesh_import.cpp +0 -0
  159. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/import/surface_load.cpp +0 -0
  160. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/import/svg_import.cpp +0 -0
  161. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/manifold_cache.cpp +0 -0
  162. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/mesh_check.cpp +0 -0
  163. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/stmt_eval.cpp +0 -0
  164. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/text/font_match.cpp +0 -0
  165. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/text/freetype_font_provider.cpp +0 -0
  166. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/text/text_metrics.cpp +0 -0
  167. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/user_calls.cpp +0 -0
  168. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/value.cpp +0 -0
  169. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/src/zip_stored.cpp +0 -0
  170. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/CMakeLists.txt +0 -0
  171. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_booleans.cpp +0 -0
  172. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_cli.cpp +0 -0
  173. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_csg_tree.cpp +0 -0
  174. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_debug_hooks.cpp +0 -0
  175. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_dxf_svg_import.cpp +0 -0
  176. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_eval_context.cpp +0 -0
  177. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_export.cpp +0 -0
  178. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_expr_eval.cpp +0 -0
  179. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_extrude_roof.cpp +0 -0
  180. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_helpers.hpp +0 -0
  181. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_import_export.cpp +0 -0
  182. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_manifold_cache.cpp +0 -0
  183. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_mesh_check.cpp +0 -0
  184. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_multi_color_merge.cpp +0 -0
  185. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_primitives.cpp +0 -0
  186. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_profiling.cpp +0 -0
  187. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_python_bindings.py +0 -0
  188. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_scope_trail.cpp +0 -0
  189. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_scoping.cpp +0 -0
  190. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_surface.cpp +0 -0
  191. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_tail_calls.cpp +0 -0
  192. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_text.cpp +0 -0
  193. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_transforms.cpp +0 -0
  194. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_unexpected_args.cpp +0 -0
  195. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_use.cpp +0 -0
  196. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_value.cpp +0 -0
  197. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_viewport_params.cpp +0 -0
  198. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tests/test_zip_stored.cpp +0 -0
  199. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tools/cli/CMakeLists.txt +0 -0
  200. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tools/cli/cli_lib.cpp +0 -0
  201. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tools/cli/cli_lib.hpp +0 -0
  202. {openscad_cpp_evaluator-0.32.0 → openscad_cpp_evaluator-0.32.2}/tools/cli/main.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 0.32.0
3
+ Version: 0.32.2
4
4
  Summary: C++ OpenSCAD evaluator with Python bindings
5
5
  Author: NeuSCAD Contributors
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "openscad_cpp_evaluator"
7
- version = "0.32.0"
7
+ version = "0.32.2"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -691,8 +691,29 @@ Value evalBuiltinFunction(Evaluator& ev, const std::string& name, const CallArgs
691
691
  }
692
692
  return Value{false};
693
693
  }
694
- case BuiltinFnId::Version: return numList({2025.0, 1.0, 1.0});
695
- case BuiltinFnId::VersionNum: return Value{20250101.0};
694
+ // The OpenSCAD release we track. version_num() is that same
695
+ // year/month/day folded as y * 10000 + m * 100 + d, exactly like the
696
+ // reference's own builtin_version_num (builtin_functions.cc).
697
+ case BuiltinFnId::Version: return numList({2026.0, 1.0, 1.0});
698
+ case BuiltinFnId::VersionNum: {
699
+ // The optional vector argument the reference also accepts: with
700
+ // no argument this is our own version() folded; with one, it is
701
+ // whatever [y, m] / [y, m, d] the caller passed, so
702
+ // version_num([2019, 5, 0]) == 20190500 regardless of what
703
+ // release we report. A 2-element vector defaults the day to 0
704
+ // (getVec3's own defaultval), and anything else -- a non-list, a
705
+ // wrong length, a non-numeric element -- is undef.
706
+ //
707
+ // One deliberate divergence: the reference's size-2 path ignores
708
+ // getVec2's own failure and folds uninitialized doubles for e.g.
709
+ // version_num(["a", "b"]). That is undef here rather than
710
+ // whatever happened to be on the stack.
711
+ const Value* arg = args.findPositional(0);
712
+ if (!arg) return Value{20260101.0};
713
+ const auto v = allNumericList(*arg);
714
+ if (!v || (v->size() != 2 && v->size() != 3)) return Value{};
715
+ return Value{(*v)[0] * 10000.0 + (*v)[1] * 100.0 + (v->size() == 3 ? (*v)[2] : 0.0)};
716
+ }
696
717
  case BuiltinFnId::ParentModule:
697
718
  return ev.parentModuleName(static_cast<int>(toDoubleLenient(getArg(args, 0, "index", Value{0.0}))));
698
719
  }
@@ -99,6 +99,35 @@ TEST(BytecodeCompiler, TernaryAndShortCircuitLogicalOps) {
99
99
  EXPECT_EQ(runCapturingEcho("function safe(x) = is_undef(x) || x > 0;\necho(safe(undef));"), "ECHO: true");
100
100
  }
101
101
 
102
+ // TernaryAndShortCircuitLogicalOps above only asserts the RESULT, which an
103
+ // eager compiler computes just as correctly -- so it cannot actually fail if
104
+ // someone drops the JumpIfFalse/JumpIfTrue the compiler emits around the
105
+ // right operand / untaken branch. test_expr_eval.cpp's own
106
+ // RightSideNotEvaluatedWhenShortCircuited and OnlyChosenBranchEvaluates
107
+ // cover that for the AST interpreter only. These two do it for the compiled
108
+ // path, watching for a marker echo() from the side that must never run.
109
+ TEST(BytecodeCompiler, ShortCircuitDoesNotEvaluateRightOperandCompiled) {
110
+ ScopedVm vm(true);
111
+ const std::string defs = "function rhs() = echo(\"RHS RAN\") true;\n";
112
+ // Left operand already decides it -- rhs() must stay unevaluated.
113
+ EXPECT_EQ(runCapturingEcho(defs + "function f() = true || rhs();\necho(f());"), "ECHO: true");
114
+ EXPECT_EQ(runCapturingEcho(defs + "function f() = false && rhs();\necho(f());"), "ECHO: false");
115
+ // ...and the mirror image: it must still run when the left operand doesn't.
116
+ EXPECT_EQ(runCapturingEcho(defs + "function f() = false || rhs();\necho(f());"),
117
+ "ECHO: \"RHS RAN\"\nECHO: true");
118
+ EXPECT_EQ(runCapturingEcho(defs + "function f() = true && rhs();\necho(f());"),
119
+ "ECHO: \"RHS RAN\"\nECHO: true");
120
+ }
121
+
122
+ TEST(BytecodeCompiler, TernaryOnlyEvaluatesChosenBranchCompiled) {
123
+ ScopedVm vm(true);
124
+ const std::string defs = "function yes() = echo(\"TRUE-BRANCH\") 1;\n"
125
+ "function no() = echo(\"FALSE-BRANCH\") 2;\n"
126
+ "function pick(c) = c ? yes() : no();\n";
127
+ EXPECT_EQ(runCapturingEcho(defs + "echo(pick(true));"), "ECHO: \"TRUE-BRANCH\"\nECHO: 1");
128
+ EXPECT_EQ(runCapturingEcho(defs + "echo(pick(false));"), "ECHO: \"FALSE-BRANCH\"\nECHO: 2");
129
+ }
130
+
102
131
  TEST(BytecodeCompiler, PlainListLiteralCompiles) {
103
132
  ScopedVm vm(true);
104
133
  EXPECT_EQ(runCapturingEcho("function mk(x) = [x, x * 2, x * 3];\necho(mk(2));"), "ECHO: [2, 4, 6]");
@@ -279,6 +279,62 @@ TEST(ListComprehension, ForIfElseMapsBothBranches) {
279
279
  EXPECT_EQ(std::get<std::string>(items[1]), "odd");
280
280
  }
281
281
 
282
+ // The two tests above assert only the resulting LIST, which an eager
283
+ // implementation -- one that evaluated an `if` body whose condition failed,
284
+ // or both sides of an `if`/`else` -- would still get right. So they cannot
285
+ // fail if evalListElement's ListCompIf/ListCompIfElse cases (or their
286
+ // compiled counterparts in compileListElement) lose their laziness, the way
287
+ // `&&`/`||` demonstrably once did (see expr_eval.cpp's LogicalAndOp comment).
288
+ // These four watch for a marker echo() from the branch that must never run.
289
+ namespace {
290
+
291
+ // Every echo() the script emits, newline-joined -- the surrounding tests'
292
+ // own `captured = msg` lambdas keep only the last one, which is no use when
293
+ // the point of the test is exactly how MANY echoes happened.
294
+ std::string echoesFrom(const std::string& code) {
295
+ std::string captured;
296
+ runScript(code, [&](const std::string& msg) {
297
+ if (!captured.empty()) captured += "\n";
298
+ captured += msg;
299
+ });
300
+ return captured;
301
+ }
302
+
303
+ } // namespace
304
+
305
+ TEST(ListComprehension, ForIfSkipsBodyWhenConditionFailsInterpreted) {
306
+ ScopedVm vm(false);
307
+ EXPECT_EQ(echoesFrom("function mark(i) = echo(str(\"BODY\", i)) i;\n"
308
+ "x = [for (i = [0:2]) if (i == 1) mark(i)];"),
309
+ "ECHO: \"BODY1\"");
310
+ }
311
+
312
+ TEST(ListComprehension, ForIfSkipsBodyWhenConditionFailsCompiled) {
313
+ ScopedVm vm(true);
314
+ EXPECT_EQ(echoesFrom("function mark(i) = echo(str(\"BODY\", i)) i;\n"
315
+ "function mk() = [for (i = [0:2]) if (i == 1) mark(i)];\n"
316
+ "x = mk();"),
317
+ "ECHO: \"BODY1\"");
318
+ }
319
+
320
+ TEST(ListComprehension, ForIfElseEvaluatesOnlyTheChosenBranchInterpreted) {
321
+ ScopedVm vm(false);
322
+ // One echo per iteration, not two: i=0 takes `yes`, i=1 takes `no`.
323
+ EXPECT_EQ(echoesFrom("function yes() = echo(\"TRUE-BRANCH\") 1;\n"
324
+ "function no() = echo(\"FALSE-BRANCH\") 2;\n"
325
+ "x = [for (i = [0:1]) if (i == 0) yes() else no()];"),
326
+ "ECHO: \"TRUE-BRANCH\"\nECHO: \"FALSE-BRANCH\"");
327
+ }
328
+
329
+ TEST(ListComprehension, ForIfElseEvaluatesOnlyTheChosenBranchCompiled) {
330
+ ScopedVm vm(true);
331
+ EXPECT_EQ(echoesFrom("function yes() = echo(\"TRUE-BRANCH\") 1;\n"
332
+ "function no() = echo(\"FALSE-BRANCH\") 2;\n"
333
+ "function mk() = [for (i = [0:1]) if (i == 0) yes() else no()];\n"
334
+ "x = mk();"),
335
+ "ECHO: \"TRUE-BRANCH\"\nECHO: \"FALSE-BRANCH\"");
336
+ }
337
+
282
338
  TEST(ListComprehension, EachFlattensNestedLists) {
283
339
  RunResult r = runScript("x = [each [1,2], each [3,4]];");
284
340
  auto items = std::get<ListPtr>(varValue(r, "x"))->items;
@@ -369,7 +369,28 @@ TEST(StringListBuiltins, FunctionValuedObjectMemberIsCallable) {
369
369
 
370
370
  TEST(StringListBuiltins, VersionBuiltins) {
371
371
  Evaluator ev;
372
- EXPECT_DOUBLE_EQ(asNum(evalSrc("version_num()", ev)), 20250101.0);
372
+ EXPECT_DOUBLE_EQ(asNum(evalSrc("version_num()", ev)), 20260101.0);
373
+ }
374
+
375
+ // version_num() also takes the optional vector the reference's own
376
+ // builtin_version_num does -- it folds whatever y/m/d it is handed, not just
377
+ // this build's release.
378
+ TEST(StringListBuiltins, VersionNumFoldsAGivenVersionVector) {
379
+ Evaluator ev;
380
+ EXPECT_DOUBLE_EQ(asNum(evalSrc("version_num([2019, 5, 0])", ev)), 20190500.0);
381
+ EXPECT_DOUBLE_EQ(asNum(evalSrc("version_num([2021, 1, 0])", ev)), 20210100.0);
382
+ // A 2-element vector defaults the day to 0 (getVec3's own defaultval).
383
+ EXPECT_DOUBLE_EQ(asNum(evalSrc("version_num([2019, 5])", ev)), 20190500.0);
384
+ }
385
+
386
+ TEST(StringListBuiltins, VersionNumRejectsAnythingButA2Or3NumberVector) {
387
+ Evaluator ev;
388
+ EXPECT_TRUE(isUndef(evalSrc("version_num(5)", ev)));
389
+ EXPECT_TRUE(isUndef(evalSrc("version_num(undef)", ev)));
390
+ EXPECT_TRUE(isUndef(evalSrc("version_num([2019])", ev)));
391
+ EXPECT_TRUE(isUndef(evalSrc("version_num([2019, 5, 0, 7])", ev)));
392
+ EXPECT_TRUE(isUndef(evalSrc("version_num([\"a\", \"b\"])", ev)));
393
+ EXPECT_TRUE(isUndef(evalSrc("version_num([\"a\", \"b\", \"c\"])", ev)));
373
394
  }
374
395
 
375
396
  TEST(StringListBuiltins, VersionReturnsThreeElementList) {
@@ -377,6 +398,12 @@ TEST(StringListBuiltins, VersionReturnsThreeElementList) {
377
398
  Value v = evalSrc("version()", ev);
378
399
  const auto& items = asList(v);
379
400
  ASSERT_EQ(items.size(), 3u);
401
+ // Pinned to the same release version_num() reports above -- the reference
402
+ // derives one from the other (y * 10000 + m * 100 + d, see
403
+ // builtin_version_num), so the two must not drift apart here either.
404
+ EXPECT_DOUBLE_EQ(asNum(items[0]), 2026.0);
405
+ EXPECT_DOUBLE_EQ(asNum(items[1]), 1.0);
406
+ EXPECT_DOUBLE_EQ(asNum(items[2]), 1.0);
380
407
  }
381
408
 
382
409
  TEST(StringListBuiltins, IsFunctionAndIsObject) {
@@ -55,7 +55,7 @@ wheels = [
55
55
 
56
56
  [[package]]
57
57
  name = "openscad-cpp-evaluator"
58
- version = "0.32.0"
58
+ version = "0.32.2"
59
59
  source = { editable = "." }
60
60
  dependencies = [
61
61
  { name = "numpy" },