openscad-cpp-evaluator 1.49.5__tar.gz → 1.49.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/CMakeLists.txt +4 -0
  2. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/PKG-INFO +1 -1
  3. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/colored_body.hpp +6 -0
  4. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/pyproject.toml +1 -1
  5. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/booleans.cpp +5 -2
  6. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/extrude.cpp +3 -1
  7. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_extrude_roof.cpp +25 -0
  8. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_profile_time.cpp +2 -2
  9. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_python_bindings.py +7 -0
  10. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/.github/workflows/ci.yml +0 -0
  11. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/.github/workflows/wheels.yml +0 -0
  12. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/.gitignore +0 -0
  13. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/.gitmodules +0 -0
  14. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/CLAUDE.md +0 -0
  15. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/LICENSE +0 -0
  16. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/README.md +0 -0
  17. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/bindings/CMakeLists.txt +0 -0
  18. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/bindings/ast_to_py.cpp +0 -0
  19. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/bindings/module.cpp +0 -0
  20. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/cmake/embed_font.cmake +0 -0
  21. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/cmake/patch_manifold.cmake +0 -0
  22. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/examples/CMakeLists.txt +0 -0
  23. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/examples/eval_perf_benchmark.cpp +0 -0
  24. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/examples/manifold_cache_reuse.cpp +0 -0
  25. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/examples/minimal_debugger.cpp +0 -0
  26. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  27. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/.gitignore +0 -0
  28. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  29. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  30. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/LICENSE +0 -0
  31. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/README.md +0 -0
  32. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  33. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  34. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  35. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  36. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  37. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  38. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  39. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  40. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  41. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  42. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  43. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  44. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  45. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
  46. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  47. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  48. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/.DS_Store +0 -0
  49. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  50. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/api.cpp +0 -0
  51. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  52. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  53. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  54. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  55. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  56. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  57. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  58. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  59. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  60. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  61. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  62. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
  63. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  64. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  65. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  66. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  67. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/position.cpp +0 -0
  68. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  69. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  70. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  71. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  72. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  73. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  74. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  75. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  76. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  77. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
  78. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  79. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  80. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  81. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  82. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  83. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  84. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
  85. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  86. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  87. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  88. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_profile_time.cpp +0 -0
  89. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
  90. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  91. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  92. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  93. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  94. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
  95. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  96. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  97. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  98. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  99. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  100. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  101. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  102. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  103. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  104. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
  105. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  106. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  107. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  108. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  109. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  110. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  111. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  112. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  113. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  114. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  115. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/export.hpp +0 -0
  116. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  117. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  118. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
  119. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  120. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  121. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  122. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  123. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  124. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  125. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  126. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  127. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/reassign.hpp +0 -0
  128. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  129. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  130. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  131. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  132. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
  133. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/value.hpp +0 -0
  134. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  135. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/python/openscad_cpp_evaluator/__init__.py +0 -0
  136. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/resources/fonts/LICENSE +0 -0
  137. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/resources/fonts/LiberationSans-Bold.ttf +0 -0
  138. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
  139. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/resources/fonts/LiberationSans-Italic.ttf +0 -0
  140. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  141. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/CMakeLists.txt +0 -0
  142. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/builtins.hpp +0 -0
  143. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/call_args.cpp +0 -0
  144. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/color.cpp +0 -0
  145. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/control.cpp +0 -0
  146. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/dxf_dim.cpp +0 -0
  147. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/function_builtins.cpp +0 -0
  148. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/import.cpp +0 -0
  149. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/modifiers.cpp +0 -0
  150. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/primitives_2d.cpp +0 -0
  151. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/primitives_3d.cpp +0 -0
  152. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/profile_time.cpp +0 -0
  153. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/registry.cpp +0 -0
  154. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/roof.cpp +0 -0
  155. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/segments.cpp +0 -0
  156. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/surface.cpp +0 -0
  157. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/text.cpp +0 -0
  158. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/topology.cpp +0 -0
  159. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/builtins/transforms.cpp +0 -0
  160. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/bytecode_compiler.cpp +0 -0
  161. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/bytecode_vm.cpp +0 -0
  162. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/colored_body.cpp +0 -0
  163. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/coverage.cpp +0 -0
  164. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/csg_generate.cpp +0 -0
  165. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/csg_resolve.cpp +0 -0
  166. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/css_colors.cpp +0 -0
  167. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/debug/debug_repl.cpp +0 -0
  168. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/debug_profile.cpp +0 -0
  169. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/eval_context.cpp +0 -0
  170. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/eval_error.cpp +0 -0
  171. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/eval_use.cpp +0 -0
  172. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/export.cpp +0 -0
  173. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/expr_eval.cpp +0 -0
  174. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/format_closure.cpp +0 -0
  175. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/import/dxf_import.cpp +0 -0
  176. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/import/mesh_import.cpp +0 -0
  177. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/import/scene_import.cpp +0 -0
  178. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/import/surface_load.cpp +0 -0
  179. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/import/svg_import.cpp +0 -0
  180. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/manifold_cache.cpp +0 -0
  181. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/measure_geometry.cpp +0 -0
  182. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/mesh_check.cpp +0 -0
  183. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/stmt_eval.cpp +0 -0
  184. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/text/font_match.cpp +0 -0
  185. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/text/freetype_font_provider.cpp +0 -0
  186. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/text/text_metrics.cpp +0 -0
  187. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/user_calls.cpp +0 -0
  188. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/utf8.cpp +0 -0
  189. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/value.cpp +0 -0
  190. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/xkcd_colors.cpp +0 -0
  191. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/xkcd_colors.hpp +0 -0
  192. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/src/zip_stored.cpp +0 -0
  193. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/CMakeLists.txt +0 -0
  194. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_booleans.cpp +0 -0
  195. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_bytecode_compiler.cpp +0 -0
  196. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_children_separate.cpp +0 -0
  197. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_cli.cpp +0 -0
  198. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_control_flow.cpp +0 -0
  199. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_coverage.cpp +0 -0
  200. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_csg_tree.cpp +0 -0
  201. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_debug_hooks.cpp +0 -0
  202. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_discretizer.cpp +0 -0
  203. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_dxf_svg_import.cpp +0 -0
  204. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_eval_context.cpp +0 -0
  205. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_export.cpp +0 -0
  206. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_expr_eval.cpp +0 -0
  207. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_feature_detection.cpp +0 -0
  208. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_function_builtins.cpp +0 -0
  209. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_helpers.hpp +0 -0
  210. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_import_export.cpp +0 -0
  211. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_include_cache.cpp +0 -0
  212. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_manifold_cache.cpp +0 -0
  213. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_mesh_check.cpp +0 -0
  214. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_multi_color_merge.cpp +0 -0
  215. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_openscad_parity.cpp +0 -0
  216. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_primitives.cpp +0 -0
  217. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_profiling.cpp +0 -0
  218. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_render_expr.cpp +0 -0
  219. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_scope_trail.cpp +0 -0
  220. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_scoping.cpp +0 -0
  221. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_surface.cpp +0 -0
  222. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_tail_calls.cpp +0 -0
  223. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_text.cpp +0 -0
  224. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_transforms.cpp +0 -0
  225. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_undef_args.cpp +0 -0
  226. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_unexpected_args.cpp +0 -0
  227. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_use.cpp +0 -0
  228. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_value.cpp +0 -0
  229. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_viewport_params.cpp +0 -0
  230. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tests/test_zip_stored.cpp +0 -0
  231. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tools/cli/CMakeLists.txt +0 -0
  232. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tools/cli/cli_lib.cpp +0 -0
  233. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tools/cli/cli_lib.hpp +0 -0
  234. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/tools/cli/main.cpp +0 -0
  235. {openscad_cpp_evaluator-1.49.5 → openscad_cpp_evaluator-1.49.7}/uv.lock +0 -0
@@ -79,6 +79,10 @@ if(MSVC)
79
79
  # unconditionally (a POSIX extension our code already relies on), so no
80
80
  # equivalent is needed there.
81
81
  add_compile_definitions(_USE_MATH_DEFINES)
82
+ # Narrow string literals as UTF-8, as every other compiler writes them.
83
+ # Without it MSVC encodes "\u00b5" in the ANSI code page, a lone 0xB5 byte,
84
+ # and profile_time()'s "4.7 µs" failed to decode on reaching Python.
85
+ add_compile_options(/utf-8)
82
86
  # /MP: compile a target's source files in parallel. MSBuild's own /m (what
83
87
  # `cmake --build -j` passes) runs PROJECTS in parallel but each project's
84
88
  # files one at a time, and nearly everything here is one big library, so a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 1.49.5
3
+ Version: 1.49.7
4
4
  Summary: C++ OpenSCAD evaluator with Python bindings
5
5
  Author: NeuSCAD Contributors
6
6
  License-Expression: MIT AND OFL-1.1
@@ -132,6 +132,12 @@ struct ColoredBody {
132
132
  bool isDisplayOnly() const { return rawMesh.has_value(); }
133
133
  };
134
134
 
135
+ // A `%` body or a `#` operand's ghost copy: drawn, never part of the model,
136
+ // so an operation that consumes its children's geometry must skip it.
137
+ inline bool isModifierGhost(const ColoredBody& b) {
138
+ return b.role == BodyRole::Background || b.role == BodyRole::HighlightGhost;
139
+ }
140
+
135
141
  // The cached questions -- see ColoredBody::knownEmpty. Ask Manifold once per
136
142
  // body, never once per tree level.
137
143
  inline bool bodyIsEmpty(ColoredBody& b) {
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "openscad_cpp_evaluator"
7
- version = "1.49.5"
7
+ version = "1.49.7"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -64,11 +64,14 @@ RoleSplit splitByRole(const std::vector<ColoredBody>& bodies) {
64
64
 
65
65
  // Unions every 2D child into a single CrossSection; nullopt if there are no
66
66
  // 2D children at all. Mirrors _to_cross_section. Shared by
67
- // linear_extrude/rotate_extrude/roof (extrude.cpp, roof.cpp).
67
+ // linear_extrude/rotate_extrude/offset/roof (extrude.cpp, roof.cpp).
68
+ // A `%` body and a `#` operand's ghost copy are display aids, not model:
69
+ // unioning them in filled a differenced-away notch back in (BelfrySCAD
70
+ // #866). OpenSCAD shows neither under these operations, so they are dropped.
68
71
  std::optional<manifold::CrossSection> toCrossSection(const std::vector<ColoredBody>& bodies) {
69
72
  std::optional<manifold::CrossSection> cs;
70
73
  for (const ColoredBody& b : bodies) {
71
- if (!b.section) continue;
74
+ if (!b.section || isModifierGhost(b)) continue;
72
75
  cs = cs ? (*cs + *b.section) : *b.section;
73
76
  }
74
77
  return cs;
@@ -471,7 +471,9 @@ std::vector<ColoredBody> generateProjection(Evaluator&, const CSGParams& params,
471
471
  const std::vector<ColoredBody> bodies = flattenCsgTree(children);
472
472
  std::vector<ColoredBody> bodies3d;
473
473
  for (const ColoredBody& c : bodies) {
474
- if (c.body) bodies3d.push_back(c);
474
+ // Not a `%` body or a `#` ghost: projecting them drew the
475
+ // differenced-away part's outline (BelfrySCAD #866). See toCrossSection.
476
+ if (c.body && !isModifierGhost(c)) bodies3d.push_back(c);
475
477
  }
476
478
  if (bodies3d.empty()) return {};
477
479
 
@@ -260,6 +260,31 @@ TEST(Projection, CutFillsWhereAPolyhedronOverlapsItself) {
260
260
  EXPECT_NEAR(e.bodies[0].section->Area(), 6.0, 1e-6);
261
261
  }
262
262
 
263
+ // A `#` operand is drawn again as a ghost and a `%` body is drawn but not
264
+ // modelled; neither may reach the operation. Both leaked into projection()
265
+ // and every 2D-consuming operation (BelfrySCAD #866): the ghost refilled
266
+ // the cut-away corner and the `%` cube added its square.
267
+ TEST(Projection, ModifierGhostsAreNotProjected) {
268
+ for (const char* src : {
269
+ "projection() difference() { cube([4,4,1]); #translate([-1,-1,-1]) cube(3); }",
270
+ "projection() union() { difference() { cube([4,4,1]); #translate([-1,-1,-1]) cube(3); }"
271
+ " %translate([10,0,0]) cube(1); }"}) {
272
+ Evaluated e = evalSrc(src);
273
+ double area = 0;
274
+ for (const ColoredBody& b : e.bodies)
275
+ if (b.section) area += b.section->Area();
276
+ EXPECT_NEAR(area, 12.0, 1e-6) << src;
277
+ }
278
+ }
279
+
280
+ TEST(LinearExtrude, ModifierGhostsAreNotExtruded) {
281
+ Evaluated e = evalSrc("linear_extrude(1) difference() { square(4); #translate([-1,-1]) square(3); }");
282
+ double volume = 0;
283
+ for (const ColoredBody& b : e.bodies)
284
+ if (b.body) volume += b.body->Volume();
285
+ EXPECT_NEAR(volume, 12.0, 1e-6);
286
+ }
287
+
263
288
  // -- offset -----------------------------------------------------------------
264
289
 
265
290
  TEST(Offset, RoundGrowsAreaBySquarePerimeterPlusCircleCorners) {
@@ -133,7 +133,7 @@ TEST(ProfileTime, ExpressionFormRunsUnderTheBytecodeVm) {
133
133
  }
134
134
 
135
135
  TEST(ProfileTime, UnderAMillisecondIsInMicroseconds) {
136
- EXPECT_EQ(fmtMs(0.0047), "4.7 \u00b5s");
137
- EXPECT_EQ(fmtMs(0.5), "500.0 \u00b5s");
136
+ EXPECT_EQ(fmtMs(0.0047), "4.7 \xC2\xB5s"); // UTF-8 bytes, not the literal: MSVC once wrote 0xB5
137
+ EXPECT_EQ(fmtMs(0.5), "500.0 \xC2\xB5s");
138
138
  EXPECT_EQ(fmtMs(12.4), "12.40 ms");
139
139
  }
@@ -1319,3 +1319,10 @@ def test_export_of_an_empty_model_uses_openscads_words(tmp_path):
1319
1319
  export_model(str(tmp_path / "empty.stl"), ev.geometry)
1320
1320
  with pytest.raises(EvalError, match=r"Current top level object is not a 2D object\."):
1321
1321
  export_model(str(tmp_path / "empty.svg"), ev.geometry)
1322
+
1323
+
1324
+ def test_profile_time_microseconds_reach_python_as_utf8(tmp_path):
1325
+ """MSVC without /utf-8 wrote the µ as a lone cp1252 byte, and the echo
1326
+ failed to decode, aborting the script (BelfrySCAD #883's CI)."""
1327
+ out = _echoes(tmp_path, 'x = profile_time("t") 1;\n')
1328
+ assert any("µs" in e or " ms" in e for e in out), out