openscad-cpp-evaluator 0.4.9__tar.gz → 0.4.10__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.9 → openscad_cpp_evaluator-0.4.10}/PKG-INFO +1 -1
  2. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/pyproject.toml +1 -1
  3. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/bytecode_compiler.cpp +21 -0
  4. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/bytecode_vm.cpp +12 -1
  5. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_bytecode_compiler.cpp +56 -0
  6. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.github/workflows/ci.yml +0 -0
  7. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.github/workflows/wheels.yml +0 -0
  8. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.gitignore +0 -0
  9. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/.gitmodules +0 -0
  10. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/CLAUDE.md +0 -0
  11. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/CMakeLists.txt +0 -0
  12. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/LICENSE +0 -0
  13. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/README.md +0 -0
  14. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/bindings/CMakeLists.txt +0 -0
  15. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/bindings/module.cpp +0 -0
  16. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/cmake/embed_font.cmake +0 -0
  17. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/CMakeLists.txt +0 -0
  18. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/eval_perf_benchmark.cpp +0 -0
  19. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/manifold_cache_reuse.cpp +0 -0
  20. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/examples/minimal_debugger.cpp +0 -0
  21. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  22. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/.gitignore +0 -0
  23. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  24. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  25. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/README.md +0 -0
  26. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  27. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  28. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  29. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  30. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  31. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  32. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  33. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  34. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  35. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  36. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  37. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  38. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  39. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  40. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  41. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  42. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/api.cpp +0 -0
  43. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  44. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  45. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  46. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  47. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  48. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  49. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  50. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  51. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  52. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  53. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  54. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  55. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  56. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  57. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  58. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  59. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/position.cpp +0 -0
  60. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  61. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  62. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  63. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  64. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  65. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  66. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  67. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  68. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  69. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  70. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  71. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  72. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  73. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  74. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  75. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  76. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  77. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  78. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  79. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  80. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  81. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  82. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  83. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  84. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  85. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  86. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  87. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  88. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  89. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  90. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  91. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  92. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  93. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  94. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  95. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  96. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  97. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  98. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  99. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  100. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  101. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  102. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  103. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/export.hpp +0 -0
  104. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  105. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  106. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  107. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  108. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  109. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  110. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  111. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  112. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  113. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/stb_font_provider.hpp +0 -0
  114. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  115. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  116. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/value.hpp +0 -0
  117. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  118. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/python/openscad_cpp_evaluator/__init__.py +0 -0
  119. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/resources/fonts/LICENSE +0 -0
  120. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  121. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/CMakeLists.txt +0 -0
  122. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/booleans.cpp +0 -0
  123. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/builtins.hpp +0 -0
  124. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/call_args.cpp +0 -0
  125. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/color.cpp +0 -0
  126. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/control.cpp +0 -0
  127. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/extrude.cpp +0 -0
  128. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/function_builtins.cpp +0 -0
  129. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/import.cpp +0 -0
  130. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/modifiers.cpp +0 -0
  131. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_2d.cpp +0 -0
  132. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/primitives_3d.cpp +0 -0
  133. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/registry.cpp +0 -0
  134. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/roof.cpp +0 -0
  135. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/segments.cpp +0 -0
  136. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/surface.cpp +0 -0
  137. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/text.cpp +0 -0
  138. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/topology.cpp +0 -0
  139. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/builtins/transforms.cpp +0 -0
  140. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/colored_body.cpp +0 -0
  141. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/csg_generate.cpp +0 -0
  142. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/csg_resolve.cpp +0 -0
  143. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/css_colors.cpp +0 -0
  144. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/debug/debug_repl.cpp +0 -0
  145. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/debug_profile.cpp +0 -0
  146. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_context.cpp +0 -0
  147. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_error.cpp +0 -0
  148. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/eval_use.cpp +0 -0
  149. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/export.cpp +0 -0
  150. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/expr_eval.cpp +0 -0
  151. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/dxf_import.cpp +0 -0
  152. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/mesh_import.cpp +0 -0
  153. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/surface_load.cpp +0 -0
  154. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/import/svg_import.cpp +0 -0
  155. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/manifold_cache.cpp +0 -0
  156. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/stmt_eval.cpp +0 -0
  157. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/text/stb_font_provider.cpp +0 -0
  158. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/text/text_metrics.cpp +0 -0
  159. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/user_calls.cpp +0 -0
  160. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/value.cpp +0 -0
  161. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/src/zip_stored.cpp +0 -0
  162. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/CMakeLists.txt +0 -0
  163. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_booleans.cpp +0 -0
  164. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_cli.cpp +0 -0
  165. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_control_flow.cpp +0 -0
  166. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_csg_tree.cpp +0 -0
  167. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_debug_hooks.cpp +0 -0
  168. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_dxf_svg_import.cpp +0 -0
  169. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_eval_context.cpp +0 -0
  170. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_export.cpp +0 -0
  171. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_expr_eval.cpp +0 -0
  172. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_extrude_roof.cpp +0 -0
  173. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_function_builtins.cpp +0 -0
  174. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_helpers.hpp +0 -0
  175. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_import_export.cpp +0 -0
  176. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_manifold_cache.cpp +0 -0
  177. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_multi_color_merge.cpp +0 -0
  178. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_primitives.cpp +0 -0
  179. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_profiling.cpp +0 -0
  180. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_python_bindings.py +0 -0
  181. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_scope_trail.cpp +0 -0
  182. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_scoping.cpp +0 -0
  183. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_surface.cpp +0 -0
  184. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_tail_calls.cpp +0 -0
  185. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_text.cpp +0 -0
  186. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_transforms.cpp +0 -0
  187. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_use.cpp +0 -0
  188. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_value.cpp +0 -0
  189. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_viewport_params.cpp +0 -0
  190. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tests/test_zip_stored.cpp +0 -0
  191. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/CMakeLists.txt +0 -0
  192. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/cli_lib.cpp +0 -0
  193. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/tools/cli/cli_lib.hpp +0 -0
  194. {openscad_cpp_evaluator-0.4.9 → openscad_cpp_evaluator-0.4.10}/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.9
3
+ Version: 0.4.10
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.9"
7
+ version = "0.4.10"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -676,6 +676,27 @@ public:
676
676
  int slot = declareLocal(scope, assign->name->name);
677
677
  out.push_back({Op::StoreLocal, slot, 0, &assign->position()});
678
678
  }
679
+ // Pre-declare every incr-list name NOW, before compiling the
680
+ // condition/body/incr expressions below -- an incr name
681
+ // introduced fresh (not in the init list, e.g. BOSL2's
682
+ // skin.scad: `best_i = result[0]<bestcost ? i : best_i,`)
683
+ // can be READ, including by its OWN incr assignment's RHS
684
+ // (a self-reference to its prior iteration's value) or by
685
+ // the loop body, before its OWN StoreLocal below would
686
+ // otherwise have declared it. Without this, that read
687
+ // compiles to Op::LoadFree (the "not a known local/upvalue/
688
+ // dyn-var, might be dynamic, warn if truly missing"
689
+ // fallback) -- permanently, since compilation happens once
690
+ // but the resulting instruction runs every iteration: every
691
+ // read silently misses the real value stored into the
692
+ // local slot moments later at runtime, not just an extra
693
+ // warning but a genuinely wrong result (confirmed: BOSL2's
694
+ // own best_i accumulator came back undef on every read).
695
+ // Declaring the slot here first means the SAME reads below
696
+ // resolve as ordinary Op::LoadLocal instead.
697
+ for (const auto& assign : n.incrs) {
698
+ if (!scope.resolve(assign->name->name)) declareLocal(scope, assign->name->name);
699
+ }
679
700
  int counterSlot = nextSlot_++;
680
701
  out.push_back({Op::PushConst, internConst(Value{0.0}), 0, nullptr});
681
702
  out.push_back({Op::StoreLocal, counterSlot, 0, nullptr});
@@ -40,6 +40,16 @@ private:
40
40
  struct IterList {
41
41
  IterableValues values;
42
42
  size_t index = 0;
43
+ // Cached once at IterMaterialize time -- IterableValues::size() is O(1)
44
+ // for a list/owned vector, but walks a RANGE's whole sequence from
45
+ // scratch every call (its own doc comment: "no caller in this codebase
46
+ // actually calls size() on a range today" -- Op::IterNext, below, used
47
+ // to be exactly that stale caller). Recomputing it once per IterNext
48
+ // call turned a single range-based for()/list-comp `for` into an O(n^2)
49
+ // walk (a 100,000-element range: interpreter ~0.03s, VM ~9.5s) -- caught
50
+ // via a BOSL2 corpus sweep (test_math.scadtest's own gaussian_rands(),
51
+ // which builds a 100,000-element list via `count()`).
52
+ size_t total = 0;
43
53
  };
44
54
 
45
55
  // Shared by Op::CallFn's isBuiltin (evalBuiltinFunction) and isImport
@@ -244,6 +254,7 @@ Value runChunk(Evaluator& ev, const CompiledChunk& chunk, const std::vector<Inst
244
254
  ev.warn("Bad range parameter in for statement: too many elements (" + std::to_string(count) + ")", ins.pos);
245
255
  });
246
256
  il.index = 0;
257
+ il.total = il.values.size(); // once here, never per-iteration -- see IterList's own doc comment
247
258
  ++pc;
248
259
  break;
249
260
  }
@@ -254,7 +265,7 @@ Value runChunk(Evaluator& ev, const CompiledChunk& chunk, const std::vector<Inst
254
265
  }
255
266
  case Op::IterNext: {
256
267
  IterList& il = iterLists[static_cast<size_t>(ins.b)];
257
- if (il.index < il.values.size()) {
268
+ if (il.index < il.total) {
258
269
  slots[static_cast<size_t>(ins.a)] = il.values[il.index];
259
270
  ++il.index;
260
271
  ++pc;
@@ -4,6 +4,7 @@
4
4
 
5
5
  #include "test_helpers.hpp"
6
6
 
7
+ #include <chrono>
7
8
  #include <filesystem>
8
9
  #include <fstream>
9
10
  #include <gtest/gtest.h>
@@ -721,3 +722,58 @@ TEST(BytecodeCompiler, VmOffAndVmOnAgreeOnEchoAssertImportObjectCases) {
721
722
  EXPECT_EQ(offResult, onResult);
722
723
  std::filesystem::remove(path);
723
724
  }
725
+
726
+ TEST(BytecodeCompiler, RangeBasedForListCompDoesNotReMaterializeRangeSizePerIteration) {
727
+ ScopedVm vm(true);
728
+ // Op::IterNext used to bound-check via `il.index < il.values.size()`
729
+ // every single iteration. IterableValues::size() is O(1) for a
730
+ // materialized list, but for a RANGE it walks the whole sequence from
731
+ // scratch (its own doc comment already flagged this as a stale
732
+ // assumption: "no caller in this codebase actually calls size() on a
733
+ // range today" -- Op::IterNext was exactly that caller). Recomputing an
734
+ // O(n) size every one of n iterations is O(n^2) overall -- a
735
+ // 100,000-element range list comprehension took ~9.5s compiled vs
736
+ // ~0.03s interpreted before the fix (caught via a BOSL2 corpus sweep,
737
+ // test_math.scadtest's gaussian_rands()). Fixed by caching the size
738
+ // once at IterMaterialize time (IterList::total). 200,000 elements
739
+ // finishes in well under a second now; the old behavior would have
740
+ // taken tens of seconds, so a generous 5s bound cleanly separates
741
+ // "fixed" from "regressed" without making this test itself slow.
742
+ const auto start = std::chrono::steady_clock::now();
743
+ EXPECT_EQ(runCapturingEcho("function myrange(n) = [for (i=[0:1:n-1]) i];\n"
744
+ "r = myrange(200000);\n"
745
+ "echo(len(r));"),
746
+ "ECHO: 200000");
747
+ const auto elapsed = std::chrono::steady_clock::now() - start;
748
+ EXPECT_LT(std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count(), 5000);
749
+ }
750
+
751
+ TEST(BytecodeCompiler, CStyleForIncrNameCanReadItsOwnPriorValueInTheSameAssignment) {
752
+ ScopedVm vm(true);
753
+ // A C-style for's incr list can introduce a name that reads its OWN
754
+ // not-yet-assigned-this-iteration value on the right-hand side (its
755
+ // prior iteration's value) -- e.g. BOSL2's skin.scad: `best_i =
756
+ // result[0]<bestcost ? i : best_i,`. The compiler used to compile each
757
+ // incr assignment's RHS BEFORE declaring that assignment's own local
758
+ // slot (declareLocal ran only after compileExpr), so a self-reference
759
+ // like this -- and the loop BODY's own read, compiled even earlier --
760
+ // resolved via Op::LoadFree (the "not a known local, might be dynamic"
761
+ // fallback) instead of Op::LoadLocal. That's not just an extra
762
+ // "unknown variable" warning: LoadFree runs identically on every
763
+ // iteration once compiled, so it NEVER saw what Op::StoreLocal had
764
+ // written moments earlier at runtime -- a genuinely wrong final
765
+ // result (undef), not merely a cosmetic warning-count mismatch. Real
766
+ // OpenSCAD gives [4] here (one "unknown variable" warning for the
767
+ // first, genuinely-unassigned read, then the accumulator works
768
+ // correctly from there). Fixed by pre-declaring every incr name's slot
769
+ // before compiling the condition/body/incr expressions at all.
770
+ EXPECT_EQ(runCapturingEcho("function myloop(n) =\n"
771
+ " [for (i=0, bestcost=1/0;\n"
772
+ " i<=n;\n"
773
+ " bestcost = (i==2||i==4) ? i : bestcost,\n"
774
+ " best_i = (i==2||i==4) ? i : best_i,\n"
775
+ " i=i+1)\n"
776
+ " if (i==n) best_i];\n"
777
+ "echo(myloop(5));"),
778
+ "ECHO: [4]");
779
+ }