mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-11 01:41:03 +00:00
Closes review comments 3, 5, 7, 8, 18 and 19, plus the library half of 20. These share a file, so they share a commit; each is independent of the others. - 3: ::isspace(char) is undefined for bytes above 0x7F because char is signed on our targets. Three call sites now go through one strip_whitespace() using an unsigned char cast. Line 308 parses imex_head_filament_map straight out of 3MF metadata, so a non-ASCII byte reached it without passing through the UI. - 5: an imex_head_filament_map override past the end of physical_extruder_map now falls through to the printer's own routing instead of resolving to a wrong filament. Bounded in resolve_filament_for_head, where the slot count is known, rather than at the parse site, which has no count to check against; the parse site also gains the absolute MAXIMUM_EXTRUDER_NUMBER cap its sibling already had. - 7: imex_physical_heater_for's !is_imex early return is what keeps a stock BBL profile (physical_extruder_map [1,0]) out of the heater remap, and had no test. Six cases now cover it, pinning pass-through rather than get_at()'s clamp. - 8: ImexRole::Span was missing from the imex_head_transform switch, so it warned under -Wswitch. Identity is correct, not merely convenient: a Span tool prints the primary's own zone through mid-print toolchanges and has no zone to be translated into. - 18: three positionally coupled string vectors were resolved by nine open-coded lookups using three incompatible bounds idioms. None read out of bounds, but six folded the guard into the match condition, so a ragged row did not stop the scan and a later duplicate name could win. struct ImexMode + find_imex_mode() is now the only resolution rule: the names array is the roster, first match wins, a short sibling pads to empty and sets ragged, not-found is an explicit -1. - 19: the letters P/C/M/S existed in three independent copies, one of which was the writer of the on-disk format. kImexRoleTable is now the single source, read by both parsers and the serializer. Adding a role was 14 edit sites with one compiler-enforced; it is now the enum, the table entry, and four -Wswitch switches. Verified by adding a fifth enumerator and recompiling: exactly four warnings, nothing else. - 20: imex_resolve_routing() extracts the mode/primary/routing chain that Print::validate and the plater's warning collector each derived separately. The three config keys keep their names, types and on-disk representation. This is a read-side view only; presets and 3MF files are unaffected. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
OrcaSlicer tests
Building, running and writing tests is documented on the wiki, under How to Test.
Two files here rather than there, because coding agents only read what is in the repository: