openscad-cpp-evaluator 0.4.5__tar.gz → 0.4.7__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 (194) hide show
  1. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/PKG-INFO +1 -1
  2. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/pyproject.toml +1 -1
  3. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/bytecode_compiler.cpp +14 -5
  4. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/expr_eval.cpp +17 -1
  5. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_bytecode_compiler.cpp +16 -0
  6. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_expr_eval.cpp +17 -0
  7. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/.github/workflows/ci.yml +0 -0
  8. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/.github/workflows/wheels.yml +0 -0
  9. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/.gitignore +0 -0
  10. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/.gitmodules +0 -0
  11. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/CLAUDE.md +0 -0
  12. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/CMakeLists.txt +0 -0
  13. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/LICENSE +0 -0
  14. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/README.md +0 -0
  15. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/bindings/CMakeLists.txt +0 -0
  16. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/bindings/module.cpp +0 -0
  17. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/cmake/embed_font.cmake +0 -0
  18. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/examples/CMakeLists.txt +0 -0
  19. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/examples/eval_perf_benchmark.cpp +0 -0
  20. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/examples/manifold_cache_reuse.cpp +0 -0
  21. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/examples/minimal_debugger.cpp +0 -0
  22. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  23. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/.gitignore +0 -0
  24. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  25. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  26. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/README.md +0 -0
  27. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  28. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  29. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  30. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  31. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  32. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  33. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  34. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  35. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  36. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  37. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  38. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  39. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  40. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  41. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  42. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  43. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/api.cpp +0 -0
  44. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  45. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  46. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  47. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  48. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  49. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  50. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  51. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  52. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  53. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  54. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  55. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  56. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  57. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  58. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  59. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  60. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/position.cpp +0 -0
  61. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  62. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  63. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  64. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  65. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  66. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  67. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  68. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  69. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  70. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  71. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  72. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  73. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  74. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  75. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  76. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  77. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  78. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  79. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  80. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  81. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  82. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  83. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  84. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  85. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  86. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  87. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  88. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  89. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  90. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  91. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  92. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  93. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  94. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  95. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  96. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  97. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  98. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  99. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  100. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  101. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  102. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  103. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  104. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/export.hpp +0 -0
  105. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  106. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  107. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  108. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  109. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  110. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  111. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  112. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  113. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  114. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/stb_font_provider.hpp +0 -0
  115. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  116. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  117. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/value.hpp +0 -0
  118. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  119. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/python/openscad_cpp_evaluator/__init__.py +0 -0
  120. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/resources/fonts/LICENSE +0 -0
  121. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  122. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/CMakeLists.txt +0 -0
  123. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/booleans.cpp +0 -0
  124. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/builtins.hpp +0 -0
  125. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/call_args.cpp +0 -0
  126. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/color.cpp +0 -0
  127. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/control.cpp +0 -0
  128. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/extrude.cpp +0 -0
  129. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/function_builtins.cpp +0 -0
  130. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/import.cpp +0 -0
  131. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/modifiers.cpp +0 -0
  132. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/primitives_2d.cpp +0 -0
  133. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/primitives_3d.cpp +0 -0
  134. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/registry.cpp +0 -0
  135. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/roof.cpp +0 -0
  136. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/segments.cpp +0 -0
  137. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/surface.cpp +0 -0
  138. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/text.cpp +0 -0
  139. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/topology.cpp +0 -0
  140. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/builtins/transforms.cpp +0 -0
  141. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/bytecode_vm.cpp +0 -0
  142. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/colored_body.cpp +0 -0
  143. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/csg_generate.cpp +0 -0
  144. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/csg_resolve.cpp +0 -0
  145. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/css_colors.cpp +0 -0
  146. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/debug/debug_repl.cpp +0 -0
  147. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/debug_profile.cpp +0 -0
  148. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/eval_context.cpp +0 -0
  149. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/eval_error.cpp +0 -0
  150. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/eval_use.cpp +0 -0
  151. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/export.cpp +0 -0
  152. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/import/dxf_import.cpp +0 -0
  153. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/import/mesh_import.cpp +0 -0
  154. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/import/surface_load.cpp +0 -0
  155. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/import/svg_import.cpp +0 -0
  156. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/manifold_cache.cpp +0 -0
  157. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/stmt_eval.cpp +0 -0
  158. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/text/stb_font_provider.cpp +0 -0
  159. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/text/text_metrics.cpp +0 -0
  160. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/user_calls.cpp +0 -0
  161. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/value.cpp +0 -0
  162. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/src/zip_stored.cpp +0 -0
  163. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/CMakeLists.txt +0 -0
  164. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_booleans.cpp +0 -0
  165. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_cli.cpp +0 -0
  166. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_control_flow.cpp +0 -0
  167. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_csg_tree.cpp +0 -0
  168. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_debug_hooks.cpp +0 -0
  169. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_dxf_svg_import.cpp +0 -0
  170. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_eval_context.cpp +0 -0
  171. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_export.cpp +0 -0
  172. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_extrude_roof.cpp +0 -0
  173. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_function_builtins.cpp +0 -0
  174. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_helpers.hpp +0 -0
  175. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_import_export.cpp +0 -0
  176. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_manifold_cache.cpp +0 -0
  177. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_multi_color_merge.cpp +0 -0
  178. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_primitives.cpp +0 -0
  179. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_profiling.cpp +0 -0
  180. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_python_bindings.py +0 -0
  181. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_scope_trail.cpp +0 -0
  182. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_scoping.cpp +0 -0
  183. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_surface.cpp +0 -0
  184. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_tail_calls.cpp +0 -0
  185. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_text.cpp +0 -0
  186. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_transforms.cpp +0 -0
  187. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_use.cpp +0 -0
  188. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_value.cpp +0 -0
  189. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_viewport_params.cpp +0 -0
  190. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tests/test_zip_stored.cpp +0 -0
  191. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tools/cli/CMakeLists.txt +0 -0
  192. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tools/cli/cli_lib.cpp +0 -0
  193. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/tools/cli/cli_lib.hpp +0 -0
  194. {openscad_cpp_evaluator-0.4.5 → openscad_cpp_evaluator-0.4.7}/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.4.5
3
+ Version: 0.4.7
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.4.5"
7
+ version = "0.4.7"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -675,11 +675,20 @@ public:
675
675
  for (const auto& assign : n.incrs) {
676
676
  compileExpr(*assign->expr, out, scope);
677
677
  auto slot = scope.resolve(assign->name->name);
678
- // incrs always reference an already-declared init name
679
- // (real OpenSCAD grammar guarantees this); resolve()
680
- // returning nullopt would mean a malformed AST, not a
681
- // reachable runtime state.
682
- out.push_back({Op::StoreLocal, *slot, 0, &assign->position()});
678
+ // An incr assignment can introduce a brand-new name
679
+ // never present in the init list, then have a LATER
680
+ // incr expression in the same list read it -- e.g.
681
+ // BOSL2's nurbs.scad: `inc_k = ...; kind = inc_k ? ...
682
+ // : kind;` (verified against real OpenSCAD and this
683
+ // port's own AST interpreter, evalListElement's
684
+ // ListCompCFor case in expr_eval.cpp -- both handle it
685
+ // correctly). The old assumption here ("incrs always
686
+ // reference an already-declared init name") was wrong
687
+ // and silently dereferenced a disengaged optional (UB)
688
+ // whenever it didn't hold. Declare a fresh slot on
689
+ // first appearance, exactly like an init assignment.
690
+ int resolvedSlot = slot ? *slot : declareLocal(scope, assign->name->name);
691
+ out.push_back({Op::StoreLocal, resolvedSlot, 0, &assign->position()});
683
692
  }
684
693
  out.push_back({Op::Jump, static_cast<int>(loopStart), 0, nullptr});
685
694
  out[jend].a = static_cast<int>(out.size());
@@ -103,7 +103,23 @@ Value Evaluator::evalIdentifier(const std::string& name, const oscad::Position*
103
103
  if (const Value* v = ctx.let_->find(name)) return *v;
104
104
 
105
105
  if (!name.empty() && name[0] == '$') {
106
- if (const Value* v = ctx.dyn->find(name)) return *v;
106
+ // $-prefixed names are dynamic variables: a completely separate
107
+ // namespace from lexically-scoped identifiers, never requiring a
108
+ // scope declaration (unlike a bare identifier). Found via
109
+ // BelfrySCAD/BOSL2's constants.scad `get_slop()`
110
+ // (`is_undef($slop) ? 0 : $slop` with $slop never assigned
111
+ // anywhere) producing a spurious "Ignoring unknown variable
112
+ // '$slop'" warning here but not through the bytecode VM's
113
+ // Op::LoadDyn (bytecode_vm.cpp), which already does exactly
114
+ // this -- find in ctx.dyn, undef if absent, no scope-lookup
115
+ // fallback, no warning, ever. Verified against real OpenSCAD.app:
116
+ // no warning for a never-set $-variable. Must return here
117
+ // unconditionally rather than falling through to the
118
+ // scope->lookupVariable() check below, which can never resolve a
119
+ // $-name anyway (dynamic variables aren't scope-declarable) and
120
+ // exists only for plain identifiers.
121
+ const Value* v = ctx.dyn->find(name);
122
+ return v ? *v : Value{};
107
123
  }
108
124
 
109
125
  if (name == "PI") return Value{std::numbers::pi};
@@ -243,6 +243,22 @@ TEST(BytecodeCompiler, CStyleForAccumulates) {
243
243
  "ECHO: [0, 0, 1, 3, 6]");
244
244
  }
245
245
 
246
+ TEST(BytecodeCompiler, CStyleForIncrCanIntroduceAndUseANewNameInTheSamePass) {
247
+ // Real bug found via BOSL2's nurbs.scad hanging in BelfrySCAD (produced
248
+ // no geometry there, silently, until traced to this): the compiler
249
+ // assumed every incr assignment's target name was already declared in
250
+ // the init list, dereferencing a disengaged scope.resolve() optional
251
+ // (UB) whenever an incr introduced a brand-new name -- e.g. `k` here,
252
+ // read by the very next incr in the same list. Verified against real
253
+ // OpenSCAD and this port's own AST interpreter (both handle it
254
+ // correctly) before fixing the compiler to match.
255
+ ScopedVm vm(true);
256
+ EXPECT_EQ(runCapturingEcho(
257
+ "function f() = [for (a = 0, i = 0; i < 5; k = i >= 2, a = k ? a + 10 : a + 1, i = i + 1) a];\n"
258
+ "echo(f());"),
259
+ "ECHO: [0, 1, 2, 12, 22]");
260
+ }
261
+
246
262
  TEST(BytecodeCompiler, CStyleForExceedingMaxIterationsThrows) {
247
263
  ScopedVm vm(true);
248
264
  EXPECT_THROW(runCapturingEcho("function f() = [for (a = 0; true; a = a + 1) a];\necho(f());"), EvalError);
@@ -52,6 +52,23 @@ TEST(ExprEvalIdentifiers, UnknownVariableWarnsAndIsUndef) {
52
52
  EXPECT_NE(lastWarning.find("Ignoring unknown variable 'nope'"), std::string::npos);
53
53
  }
54
54
 
55
+ TEST(ExprEvalIdentifiers, UndefinedDollarVariableIsUndefWithNoWarning) {
56
+ // Found via BOSL2's constants.scad: `function get_slop() = is_undef($slop)
57
+ // ? 0 : $slop;` with $slop never assigned anywhere in the script. Real
58
+ // OpenSCAD.app produces no warning at all -- $-prefixed names are a
59
+ // separate, always-implicitly-available namespace, never requiring a
60
+ // scope declaration the way a bare identifier does. This port's
61
+ // bytecode VM (Op::LoadDyn, bytecode_vm.cpp) already got this right by
62
+ // construction; the plain interpreter incorrectly fell through to the
63
+ // same "Ignoring unknown variable" path a genuinely undeclared bare
64
+ // identifier hits.
65
+ std::string lastWarning;
66
+ Evaluator ev([&](const std::string& msg) { lastWarning = msg; });
67
+ Value v = evalSrc("$slop", ev);
68
+ EXPECT_TRUE(std::holds_alternative<std::monostate>(v));
69
+ EXPECT_TRUE(lastWarning.empty());
70
+ }
71
+
55
72
  TEST(ExprEvalIdentifiers, ResolvesViaScopeFallbackWhenNotEagerlyBound) {
56
73
  // "a" is a real top-level declaration but evalChildren() was never run,
57
74
  // so ctx.let_ has no eager binding for it -- this exercises