openscad-cpp-evaluator 1.4.0__tar.gz → 1.4.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 (214) hide show
  1. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/PKG-INFO +1 -1
  2. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +12 -0
  3. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/scope.cpp +16 -6
  4. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/pyproject.toml +1 -1
  5. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/eval_use.cpp +32 -7
  6. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_include_cache.cpp +29 -0
  7. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/.github/workflows/ci.yml +0 -0
  8. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/.github/workflows/wheels.yml +0 -0
  9. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/.gitignore +0 -0
  10. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/.gitmodules +0 -0
  11. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/CLAUDE.md +0 -0
  12. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/CMakeLists.txt +0 -0
  13. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/LICENSE +0 -0
  14. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/README.md +0 -0
  15. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/bindings/CMakeLists.txt +0 -0
  16. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/bindings/ast_to_py.cpp +0 -0
  17. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/bindings/module.cpp +0 -0
  18. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/cmake/embed_font.cmake +0 -0
  19. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/examples/CMakeLists.txt +0 -0
  20. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/examples/eval_perf_benchmark.cpp +0 -0
  21. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/examples/manifold_cache_reuse.cpp +0 -0
  22. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/examples/minimal_debugger.cpp +0 -0
  23. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  24. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/.gitignore +0 -0
  25. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  26. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  27. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/README.md +0 -0
  28. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  29. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  30. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  31. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  32. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  33. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  34. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  35. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  36. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  37. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  38. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  39. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  40. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
  41. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  42. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  43. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  44. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/api.cpp +0 -0
  45. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  46. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  47. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  48. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  49. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  50. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  51. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  52. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  53. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  54. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  55. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  56. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  57. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  58. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  59. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  60. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  61. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/position.cpp +0 -0
  62. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  63. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  64. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  65. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  66. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  67. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  68. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  69. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  70. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  71. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  72. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  73. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  74. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  75. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  76. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  77. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  78. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  79. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  80. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
  81. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  82. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  83. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  84. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  85. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  86. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  87. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  88. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  89. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  90. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  91. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  92. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  93. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  94. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  95. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  96. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  97. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  98. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  99. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  100. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  101. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  102. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  103. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  104. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  105. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/export.hpp +0 -0
  106. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  107. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  108. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
  109. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  110. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  111. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  112. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  113. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  114. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  115. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  116. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  117. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  118. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  119. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  120. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  121. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
  122. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/value.hpp +0 -0
  123. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  124. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/python/openscad_cpp_evaluator/__init__.py +0 -0
  125. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/resources/fonts/LICENSE +0 -0
  126. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  127. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/CMakeLists.txt +0 -0
  128. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/booleans.cpp +0 -0
  129. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/builtins.hpp +0 -0
  130. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/call_args.cpp +0 -0
  131. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/color.cpp +0 -0
  132. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/control.cpp +0 -0
  133. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/dxf_dim.cpp +0 -0
  134. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/extrude.cpp +0 -0
  135. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/function_builtins.cpp +0 -0
  136. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/import.cpp +0 -0
  137. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/modifiers.cpp +0 -0
  138. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/primitives_2d.cpp +0 -0
  139. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/primitives_3d.cpp +0 -0
  140. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/registry.cpp +0 -0
  141. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/roof.cpp +0 -0
  142. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/segments.cpp +0 -0
  143. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/surface.cpp +0 -0
  144. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/text.cpp +0 -0
  145. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/topology.cpp +0 -0
  146. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/builtins/transforms.cpp +0 -0
  147. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/bytecode_compiler.cpp +0 -0
  148. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/bytecode_vm.cpp +0 -0
  149. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/colored_body.cpp +0 -0
  150. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/csg_generate.cpp +0 -0
  151. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/csg_resolve.cpp +0 -0
  152. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/css_colors.cpp +0 -0
  153. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/debug/debug_repl.cpp +0 -0
  154. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/debug_profile.cpp +0 -0
  155. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/eval_context.cpp +0 -0
  156. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/eval_error.cpp +0 -0
  157. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/export.cpp +0 -0
  158. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/expr_eval.cpp +0 -0
  159. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/format_closure.cpp +0 -0
  160. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/import/dxf_import.cpp +0 -0
  161. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/import/mesh_import.cpp +0 -0
  162. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/import/surface_load.cpp +0 -0
  163. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/import/svg_import.cpp +0 -0
  164. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/manifold_cache.cpp +0 -0
  165. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/measure_geometry.cpp +0 -0
  166. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/mesh_check.cpp +0 -0
  167. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/stmt_eval.cpp +0 -0
  168. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/text/font_match.cpp +0 -0
  169. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/text/freetype_font_provider.cpp +0 -0
  170. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/text/text_metrics.cpp +0 -0
  171. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/user_calls.cpp +0 -0
  172. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/utf8.cpp +0 -0
  173. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/value.cpp +0 -0
  174. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/src/zip_stored.cpp +0 -0
  175. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/CMakeLists.txt +0 -0
  176. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_booleans.cpp +0 -0
  177. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_bytecode_compiler.cpp +0 -0
  178. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_children_separate.cpp +0 -0
  179. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_cli.cpp +0 -0
  180. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_control_flow.cpp +0 -0
  181. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_csg_tree.cpp +0 -0
  182. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_debug_hooks.cpp +0 -0
  183. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_dxf_svg_import.cpp +0 -0
  184. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_eval_context.cpp +0 -0
  185. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_export.cpp +0 -0
  186. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_expr_eval.cpp +0 -0
  187. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_extrude_roof.cpp +0 -0
  188. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_feature_detection.cpp +0 -0
  189. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_function_builtins.cpp +0 -0
  190. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_helpers.hpp +0 -0
  191. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_import_export.cpp +0 -0
  192. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_manifold_cache.cpp +0 -0
  193. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_mesh_check.cpp +0 -0
  194. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_multi_color_merge.cpp +0 -0
  195. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_primitives.cpp +0 -0
  196. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_profiling.cpp +0 -0
  197. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_python_bindings.py +0 -0
  198. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_render_expr.cpp +0 -0
  199. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_scope_trail.cpp +0 -0
  200. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_scoping.cpp +0 -0
  201. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_surface.cpp +0 -0
  202. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_tail_calls.cpp +0 -0
  203. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_text.cpp +0 -0
  204. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_transforms.cpp +0 -0
  205. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_unexpected_args.cpp +0 -0
  206. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_use.cpp +0 -0
  207. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_value.cpp +0 -0
  208. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_viewport_params.cpp +0 -0
  209. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tests/test_zip_stored.cpp +0 -0
  210. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tools/cli/CMakeLists.txt +0 -0
  211. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tools/cli/cli_lib.cpp +0 -0
  212. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tools/cli/cli_lib.hpp +0 -0
  213. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/tools/cli/main.cpp +0 -0
  214. {openscad_cpp_evaluator-1.4.0 → openscad_cpp_evaluator-1.4.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 1.4.0
3
+ Version: 1.4.1
4
4
  Summary: C++ OpenSCAD evaluator with Python bindings
5
5
  Author: NeuSCAD Contributors
6
6
  License-Expression: MIT
@@ -48,6 +48,18 @@ std::unique_ptr<Scope> buildScopes(const std::vector<std::unique_ptr<ASTNode>>&
48
48
  // why this exists. Never takes ownership.
49
49
  std::unique_ptr<Scope> buildScopes(const std::vector<ASTNode*>& ast);
50
50
 
51
+ // Same, but recording into a table the CALLER owns, and not attaching it to
52
+ // the returned root.
53
+ //
54
+ // For a resolution that spans several files: `use <file>` builds a separate
55
+ // root Scope per used file, but all of them are read back through one
56
+ // evaluation, so their nodes' scopes have to land in ONE table. A per-root
57
+ // table would leave the outer evaluation unable to see anything the nested
58
+ // resolutions recorded -- every node of a used file would read back as
59
+ // having no scope.
60
+ std::unique_ptr<Scope> buildScopesInto(const std::vector<std::unique_ptr<ASTNode>>& ast, ScopeTable& table);
61
+ std::unique_ptr<Scope> buildScopesInto(const std::vector<ASTNode*>& ast, ScopeTable& table);
62
+
51
63
  // Parses `code`. Throws ParseError (with the full caret diagnostic) on a
52
64
  // syntax error.
53
65
  //
@@ -8,26 +8,36 @@
8
8
 
9
9
  namespace oscad {
10
10
 
11
- std::unique_ptr<Scope> buildScopes(const std::vector<std::unique_ptr<ASTNode>>& ast) {
12
- auto owned = std::make_unique<ScopeTable>();
13
- ScopeTableScope recording(*owned);
11
+ std::unique_ptr<Scope> buildScopesInto(const std::vector<std::unique_ptr<ASTNode>>& ast, ScopeTable& table) {
12
+ ScopeTableScope recording(table);
14
13
  auto root = std::make_unique<Scope>();
15
14
  collectHoistedDeclarations(ast, *root);
16
15
  for (auto& node : ast) {
17
16
  node->buildScope(*root);
18
17
  }
19
- root->adoptTable(std::move(owned));
20
18
  return root;
21
19
  }
22
20
 
23
- std::unique_ptr<Scope> buildScopes(const std::vector<ASTNode*>& ast) {
21
+ std::unique_ptr<Scope> buildScopes(const std::vector<std::unique_ptr<ASTNode>>& ast) {
24
22
  auto owned = std::make_unique<ScopeTable>();
25
- ScopeTableScope recording(*owned);
23
+ auto root = buildScopesInto(ast, *owned);
24
+ root->adoptTable(std::move(owned));
25
+ return root;
26
+ }
27
+
28
+ std::unique_ptr<Scope> buildScopesInto(const std::vector<ASTNode*>& ast, ScopeTable& table) {
29
+ ScopeTableScope recording(table);
26
30
  auto root = std::make_unique<Scope>();
27
31
  collectHoistedDeclarations(ast, *root);
28
32
  for (ASTNode* node : ast) {
29
33
  node->buildScope(*root);
30
34
  }
35
+ return root;
36
+ }
37
+
38
+ std::unique_ptr<Scope> buildScopes(const std::vector<ASTNode*>& ast) {
39
+ auto owned = std::make_unique<ScopeTable>();
40
+ auto root = buildScopesInto(ast, *owned);
31
41
  root->adoptTable(std::move(owned));
32
42
  return root;
33
43
  }
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "openscad_cpp_evaluator"
7
- version = "1.4.0"
7
+ version = "1.4.1"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -17,8 +17,19 @@ ResolvedUseScopes resolveUseScopes(const std::vector<std::unique_ptr<oscad::ASTN
17
17
  return resolveUseScopes(borrowed, currentFile, logFn);
18
18
  }
19
19
 
20
- ResolvedUseScopes resolveUseScopes(const std::vector<const oscad::ASTNode*>& ownNodes,
21
- const std::string& currentFile, const std::function<void(const std::string&)>& logFn) {
20
+ namespace {
21
+
22
+ // The recursion. `table` is threaded through every level rather than each
23
+ // level building its own: `use <file>` gives each used file its own root
24
+ // Scope, but one evaluation reads all of them back, so every node's scope
25
+ // has to land in ONE table. A table per level meant the outer evaluation
26
+ // could not see anything a nested resolution recorded -- every node of a
27
+ // used file read back as having no scope, and `use` silently resolved to
28
+ // undef. BelfrySCAD's own suite caught that; this repo's did not.
29
+ ResolvedUseScopes resolveUseScopesInto(const std::vector<const oscad::ASTNode*>& ownNodes,
30
+ const std::string& currentFile,
31
+ const std::function<void(const std::string&)>& logFn,
32
+ oscad::ScopeTable& table) {
22
33
  ResolvedUseScopes result;
23
34
 
24
35
  std::vector<const oscad::ASTNode*> injected;
@@ -56,7 +67,10 @@ ResolvedUseScopes resolveUseScopes(const std::vector<const oscad::ASTNode*>& own
56
67
  result.usedFileAsts.push_back(std::move(lib.ast));
57
68
  const std::vector<std::unique_ptr<oscad::ASTNode>>& libAst = result.usedFileAsts.back();
58
69
 
59
- ResolvedUseScopes nested = resolveUseScopes(libAst, lib.resolvedPath, logFn);
70
+ std::vector<const oscad::ASTNode*> libBorrowed;
71
+ libBorrowed.reserve(libAst.size());
72
+ for (const auto& n : libAst) libBorrowed.push_back(n.get());
73
+ ResolvedUseScopes nested = resolveUseScopesInto(libBorrowed, lib.resolvedPath, logFn, table);
60
74
 
61
75
  std::vector<const oscad::ASTNode*> libInjected;
62
76
  for (const oscad::ASTNode* n : nested.ownNodesFiltered) {
@@ -92,12 +106,11 @@ ResolvedUseScopes resolveUseScopes(const std::vector<const oscad::ASTNode*>& own
92
106
  std::vector<oscad::ASTNode*> mutableProcessed;
93
107
  mutableProcessed.reserve(result.processedNodes.size());
94
108
  for (const oscad::ASTNode* n : result.processedNodes) mutableProcessed.push_back(const_cast<oscad::ASTNode*>(n));
95
- result.rootScope = oscad::buildScopes(mutableProcessed);
109
+ result.rootScope = oscad::buildScopesInto(mutableProcessed, table);
96
110
 
97
111
  {
98
- // Re-anchoring writes scopes too, into the same table buildScopes()
99
- // just filled -- which the root scope now owns.
100
- oscad::ScopeTableScope recording(*const_cast<oscad::ScopeTable*>(result.rootScope->table()));
112
+ // Re-anchoring writes scopes too, into the same shared table.
113
+ oscad::ScopeTableScope recording(table);
101
114
  for (const auto& [libInjected, libRootScope] : reanchor) {
102
115
  for (const oscad::ASTNode* n : libInjected) const_cast<oscad::ASTNode*>(n)->buildScope(*libRootScope);
103
116
  }
@@ -106,4 +119,16 @@ ResolvedUseScopes resolveUseScopes(const std::vector<const oscad::ASTNode*>& own
106
119
  return result;
107
120
  }
108
121
 
122
+ } // namespace
123
+
124
+ ResolvedUseScopes resolveUseScopes(const std::vector<const oscad::ASTNode*>& ownNodes, const std::string& currentFile,
125
+ const std::function<void(const std::string&)>& logFn) {
126
+ // One table for the whole resolution, handed to the root scope at the
127
+ // end so it lives exactly as long as the scopes it points into.
128
+ auto table = std::make_unique<oscad::ScopeTable>();
129
+ ResolvedUseScopes result = resolveUseScopesInto(ownNodes, currentFile, logFn, *table);
130
+ if (result.rootScope) result.rootScope->adoptTable(std::move(table));
131
+ return result;
132
+ }
133
+
109
134
  } // namespace oscadeval
@@ -130,3 +130,32 @@ TEST(IncludeCache, ADerivedContextKeepsTheScopeTable) {
130
130
  ev.evaluate(used.processedNodes, ctx, {}, /*generate=*/false);
131
131
  for (const std::string& m : logs) EXPECT_EQ(m.find("Recursion"), std::string::npos) << m;
132
132
  }
133
+
134
+
135
+ TEST(IncludeCache, NestedUseKeepsItsScopesInTheSharedTable) {
136
+ // `use <file>` gives each used file its own root Scope, and a used file
137
+ // may itself `use` another. All of them are read back by ONE
138
+ // evaluation, so every node's scope has to land in ONE ScopeTable.
139
+ //
140
+ // The version of this that built a table per recursion level threw the
141
+ // nested ones away: the outer evaluation then saw no scope at all for a
142
+ // used file's nodes, and combo() below resolved to undef instead of
143
+ // 107. Every C++ test here passed anyway -- BelfrySCAD's suite is what
144
+ // caught it -- so this is that case, kept where the code lives.
145
+ writeFile("inner.scad", "inner_val = 100;\nfunction get_inner() = inner_val;\n");
146
+ writeFile("lib2.scad",
147
+ "use <oscad_inccache_inner.scad>\n"
148
+ "lib2_val = 7;\n"
149
+ "function combo() = get_inner() + lib2_val;\n");
150
+ const auto main2 = writeFile("main2.scad",
151
+ "use <oscad_inccache_lib2.scad>\n"
152
+ "echo(combo());\n"
153
+ "echo(is_undef(inner_val));\n");
154
+
155
+ const std::vector<std::string> echoes = echoesOf(main2);
156
+ ASSERT_EQ(echoes.size(), 2u);
157
+ // combo() reaches through lib2's own nested use into inner.scad.
158
+ EXPECT_EQ(echoes[0], "ECHO: 107");
159
+ // ...while inner.scad's own declarations stay invisible to main2.
160
+ EXPECT_EQ(echoes[1], "ECHO: true");
161
+ }