openscad-cpp-evaluator 0.13.0__tar.gz → 0.13.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 (194) hide show
  1. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/PKG-INFO +1 -1
  2. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/pyproject.toml +1 -1
  3. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/bytecode_vm.cpp +26 -5
  4. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_debug_hooks.cpp +47 -0
  5. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/.github/workflows/ci.yml +0 -0
  6. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/.github/workflows/wheels.yml +0 -0
  7. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/.gitignore +0 -0
  8. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/.gitmodules +0 -0
  9. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/CLAUDE.md +0 -0
  10. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/CMakeLists.txt +0 -0
  11. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/LICENSE +0 -0
  12. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/README.md +0 -0
  13. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/bindings/CMakeLists.txt +0 -0
  14. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/bindings/module.cpp +0 -0
  15. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/cmake/embed_font.cmake +0 -0
  16. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/examples/CMakeLists.txt +0 -0
  17. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/examples/eval_perf_benchmark.cpp +0 -0
  18. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/examples/manifold_cache_reuse.cpp +0 -0
  19. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/examples/minimal_debugger.cpp +0 -0
  20. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  21. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/.gitignore +0 -0
  22. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  23. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  24. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/README.md +0 -0
  25. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  26. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  27. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  28. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  29. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  30. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  31. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  32. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  33. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  34. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  35. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  36. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  37. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  38. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  39. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  40. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  41. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/api.cpp +0 -0
  42. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  43. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  44. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  45. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  46. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  47. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  48. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  49. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  50. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  51. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  52. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  53. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  54. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  55. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  56. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  57. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  58. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/position.cpp +0 -0
  59. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  60. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  61. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  62. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  63. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  64. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  65. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  66. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  67. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  68. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  69. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  70. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  71. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  72. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  73. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  74. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  75. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  76. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  77. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  78. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  79. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  80. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  81. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  82. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  83. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  84. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  85. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  86. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  87. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  88. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  89. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  90. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  91. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  92. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  93. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  94. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  95. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  96. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  97. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  98. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  99. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  100. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  101. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  102. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/export.hpp +0 -0
  103. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  104. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  105. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  106. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  107. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  108. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  109. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  110. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  111. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  112. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/stb_font_provider.hpp +0 -0
  113. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  114. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  115. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/value.hpp +0 -0
  116. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  117. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/python/openscad_cpp_evaluator/__init__.py +0 -0
  118. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/resources/fonts/LICENSE +0 -0
  119. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  120. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/CMakeLists.txt +0 -0
  121. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/booleans.cpp +0 -0
  122. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/builtins.hpp +0 -0
  123. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/call_args.cpp +0 -0
  124. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/color.cpp +0 -0
  125. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/control.cpp +0 -0
  126. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/extrude.cpp +0 -0
  127. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/function_builtins.cpp +0 -0
  128. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/import.cpp +0 -0
  129. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/modifiers.cpp +0 -0
  130. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/primitives_2d.cpp +0 -0
  131. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/primitives_3d.cpp +0 -0
  132. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/registry.cpp +0 -0
  133. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/roof.cpp +0 -0
  134. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/segments.cpp +0 -0
  135. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/surface.cpp +0 -0
  136. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/text.cpp +0 -0
  137. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/topology.cpp +0 -0
  138. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/builtins/transforms.cpp +0 -0
  139. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/bytecode_compiler.cpp +0 -0
  140. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/colored_body.cpp +0 -0
  141. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/csg_generate.cpp +0 -0
  142. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/csg_resolve.cpp +0 -0
  143. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/css_colors.cpp +0 -0
  144. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/debug/debug_repl.cpp +0 -0
  145. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/debug_profile.cpp +0 -0
  146. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/eval_context.cpp +0 -0
  147. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/eval_error.cpp +0 -0
  148. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/eval_use.cpp +0 -0
  149. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/export.cpp +0 -0
  150. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/expr_eval.cpp +0 -0
  151. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/import/dxf_import.cpp +0 -0
  152. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/import/mesh_import.cpp +0 -0
  153. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/import/surface_load.cpp +0 -0
  154. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/import/svg_import.cpp +0 -0
  155. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/manifold_cache.cpp +0 -0
  156. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/stmt_eval.cpp +0 -0
  157. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/text/stb_font_provider.cpp +0 -0
  158. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/text/text_metrics.cpp +0 -0
  159. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/user_calls.cpp +0 -0
  160. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/value.cpp +0 -0
  161. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/src/zip_stored.cpp +0 -0
  162. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/CMakeLists.txt +0 -0
  163. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_booleans.cpp +0 -0
  164. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_bytecode_compiler.cpp +0 -0
  165. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_cli.cpp +0 -0
  166. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_control_flow.cpp +0 -0
  167. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_csg_tree.cpp +0 -0
  168. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_dxf_svg_import.cpp +0 -0
  169. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_eval_context.cpp +0 -0
  170. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_export.cpp +0 -0
  171. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_expr_eval.cpp +0 -0
  172. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_extrude_roof.cpp +0 -0
  173. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_function_builtins.cpp +0 -0
  174. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_helpers.hpp +0 -0
  175. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_import_export.cpp +0 -0
  176. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_manifold_cache.cpp +0 -0
  177. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_multi_color_merge.cpp +0 -0
  178. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_primitives.cpp +0 -0
  179. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_profiling.cpp +0 -0
  180. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_python_bindings.py +0 -0
  181. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_scope_trail.cpp +0 -0
  182. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_scoping.cpp +0 -0
  183. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_surface.cpp +0 -0
  184. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_tail_calls.cpp +0 -0
  185. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_text.cpp +0 -0
  186. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_transforms.cpp +0 -0
  187. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_use.cpp +0 -0
  188. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_value.cpp +0 -0
  189. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_viewport_params.cpp +0 -0
  190. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tests/test_zip_stored.cpp +0 -0
  191. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tools/cli/CMakeLists.txt +0 -0
  192. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tools/cli/cli_lib.cpp +0 -0
  193. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/tools/cli/cli_lib.hpp +0 -0
  194. {openscad_cpp_evaluator-0.13.0 → openscad_cpp_evaluator-0.13.1}/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.13.0
3
+ Version: 0.13.1
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.13.0"
7
+ version = "0.13.1"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -234,8 +234,6 @@ void pushBracketedCallFrame(Evaluator& ev, const CompiledChunk& chunk, const osc
234
234
  bool usedChildCtx = false;
235
235
  EvalContext childCtx = ev.callCtxFor(declNode, callerCtx, fnScope, nullptr, nullptr, &usedChildCtx, capturedLet);
236
236
  const int upvalueParent = usedChildCtx ? callerFrameIdx : -1;
237
- Evaluator::UserCallHandle handle =
238
- ev.enterUserCall(name, declNode, &bodyExpr, childCtx, callPos, upvalueParent, /*skipDepthGuard=*/true);
239
237
 
240
238
  auto frame = ev.acquireVmFrame();
241
239
  frame->chunk = &chunk;
@@ -253,6 +251,23 @@ void pushBracketedCallFrame(Evaluator& ev, const CompiledChunk& chunk, const osc
253
251
  frame->hopEligible = true; // just pushed a fresh, correctly-named callStack_ entry
254
252
  bindBoundArgsIntoFrame(chunk, bound, *frame);
255
253
  applyCompiledDefaultsToFrame(ev, chunk, *frame);
254
+
255
+ // enterUserCall's own bodyCtx must point at frame->ctxChain's OWN
256
+ // storage (stable: this VmFrame lives behind a unique_ptr, so its
257
+ // address never moves even if vmCallStack_ itself reallocates), not
258
+ // a plain local -- a local `childCtx` here would be destroyed the
259
+ // instant this function returns, but CallStackFrame::bodyCtx is read
260
+ // LATER, by ANY subsequent checkDebug() call (this call's own nested
261
+ // calls, or an unrelated sibling's) that walks the WHOLE call stack
262
+ // to build per-frame debugger locals (Evaluator::buildDebugFrames) --
263
+ // reading a dangling pointer there segfaults. Real bug, caught via a
264
+ // targeted ASan build reproducing BelfrySCAD's own "step over a call,
265
+ // but honor a breakpoint set inside it" debug scenario: pausing deep
266
+ // inside a native (interpreter-forced, due to the breakpoint) callee
267
+ // walks the WHOLE call stack, including this compiled caller's own
268
+ // now-stale frame.
269
+ Evaluator::UserCallHandle handle = ev.enterUserCall(name, declNode, &bodyExpr, frame->ctxChain.back(), callPos,
270
+ upvalueParent, /*skipDepthGuard=*/true);
256
271
  ev.vmCallStack_.push_back(std::move(frame));
257
272
  ev.vmCallBrackets_.push_back(std::move(handle));
258
273
  }
@@ -277,9 +292,6 @@ void pushBracketedModuleFrame(Evaluator& ev, const CompiledChunk& chunk, const o
277
292
  if (ev.vmCallStack_.size() >= Evaluator::kMaxVmCallStackDepth) {
278
293
  ev.error("Recursion too deep while calling module '" + decl.name->name + "'", decl);
279
294
  }
280
- Evaluator::UserCallHandle handle = ev.enterUserCall(decl.name->name, decl, /*bodyExpr=*/nullptr, childCtx, callPos,
281
- /*upvalueParent=*/-1, /*skipDepthGuard=*/true,
282
- CallStackFrame::Kind::Module);
283
295
  auto frame = ev.acquireVmFrame();
284
296
  frame->chunk = &chunk;
285
297
  frame->code = &chunk.bodyCode;
@@ -298,6 +310,15 @@ void pushBracketedModuleFrame(Evaluator& ev, const CompiledChunk& chunk, const o
298
310
  frame->tailHopGuard = 0;
299
311
  frame->logicalName = decl.name->name;
300
312
  frame->ownsModuleSplice = true;
313
+ // enterUserCall's own bodyCtx must point at frame->ctxChain's OWN
314
+ // storage, not the caller's own (about-to-be-destroyed) local
315
+ // `childCtx` -- see pushBracketedCallFrame's own doc comment, above,
316
+ // for the full dangling-pointer hazard this avoids (same fix, same
317
+ // root cause, module side).
318
+ Evaluator::UserCallHandle handle = ev.enterUserCall(decl.name->name, decl, /*bodyExpr=*/nullptr,
319
+ frame->ctxChain.back(), callPos,
320
+ /*upvalueParent=*/-1, /*skipDepthGuard=*/true,
321
+ CallStackFrame::Kind::Module);
301
322
  frame->moduleRandsBefore = randsBefore;
302
323
  frame->moduleSpliceCallNode = &callNode;
303
324
  ev.vmCallStack_.push_back(std::move(frame));
@@ -384,6 +384,53 @@ TEST(DebugHooks, ForcedBreakpointBuiltinAlwaysFiresEvenInHookSkippableMode) {
384
384
  EXPECT_EQ(normalCalls, 0); // cube/breakpoint()-as-statement/sphere: no breakpoint line matches, all skipped
385
385
  }
386
386
 
387
+ // Regression test for a real dangling-pointer bug (found via a targeted
388
+ // ASan build reproducing BelfrySCAD's own "step over a call, but honor a
389
+ // breakpoint set inside it" debug scenario): pushBracketedCallFrame/
390
+ // pushBracketedModuleFrame (bytecode_vm.cpp) used to point
391
+ // CallStackFrame::bodyCtx at their own LOCAL `childCtx` variable, which is
392
+ // destroyed the instant they return -- but bodyCtx is read LATER, by any
393
+ // subsequent checkDebug() call that walks the WHOLE call stack to build
394
+ // per-frame debugger locals (getFrame(), below). A compiled caller
395
+ // (`stepped_over`, no breakpoint of its own, so it runs compiled) calling
396
+ // a callee forced into the interpreter by an active breakpoint on ITS OWN
397
+ // line (`heavy`) reproduces this exactly: pausing deep inside `heavy` and
398
+ // calling getFrame() used to segfault reading the compiled caller's own
399
+ // already-dangling frame.
400
+ TEST(DebugHooks, GetFrameDoesNotCrashWalkingACompiledCallerAboveAForcedInterpretedCallee) {
401
+ ScopedVm vm(true);
402
+ std::vector<size_t> frameCountsAtLine1;
403
+ DebugHooks hooks;
404
+ hooks.debugHook = [&](int line, int depth, bool, bool exprLevel, const std::string&,
405
+ const std::vector<CallStackFrame>& callStack, const DebugFramesFn& getFrame) {
406
+ if (line == 1 && depth == 2 && !exprLevel) {
407
+ std::vector<DebugFrame> frames = getFrame();
408
+ frameCountsAtLine1.push_back(frames.size());
409
+ EXPECT_EQ(callStack.size(), 2u);
410
+ }
411
+ return DebugAction{};
412
+ };
413
+ Evaluator ev(EchoFn{}, nullptr, nullptr, hooks);
414
+ // Mirrors BelfrySCAD's own _apply_fast_continue for an active step:
415
+ // a real breakpoint set (on heavy's own line 1, forcing IT specifically
416
+ // to stay interpreted via chunkEligibleNow) with hookSkippable=false.
417
+ ev.setFastContinueBreakpoints(std::unordered_map<std::string, std::set<int>>{{"<string>", {1}}},
418
+ /*hookSkippable=*/false);
419
+ auto ast = parseSrc("function heavy(n) = [for (i=[0:1:n-1]) i*i];\n"
420
+ "function stepped_over() = let(r = heavy(3)) len(r);\n"
421
+ "b = stepped_over();\n");
422
+ auto scope = oscad::buildScopes(ast);
423
+ EvalContext ctx = EvalContext::makeRoot(scope.get());
424
+ ev.evaluate(ast, ctx);
425
+ // The actual point of this test is that getFrame() doesn't crash
426
+ // reading the compiled `stepped_over` frame's own (previously
427
+ // dangling) bodyCtx -- a consistent, non-empty frame list is enough
428
+ // evidence it read something real rather than garbage each time.
429
+ ASSERT_FALSE(frameCountsAtLine1.empty());
430
+ for (size_t count : frameCountsAtLine1) EXPECT_EQ(count, frameCountsAtLine1.front());
431
+ EXPECT_GT(frameCountsAtLine1.front(), 0u);
432
+ }
433
+
387
434
  // ---------------------------------------------------------------------------
388
435
  // Full parity with the Python reference's _check_debug call sites.
389
436
  //