Support Piklib 6.1/7.1: CMC_Scene::resolve factory + tag-based types
Earlier text-script engines (Piklib 6.1/7.1, added text scripts in 6.1) keep the type factory on CMC_Scene::resolve, not CMC_ObjectsContainer::resolve — so the extractor bailed with "resolve not found". find_factory() now tries both anchors. 6.1's factory is also tag-based: each branch is operator==(NAME) -> new(0x74) -> store tag -> jmp, with the ctor in a separate tag switch (no inline ctor). extract_types gains a pre-emit: when the next operator== arrives still armed, it records the pending type by name (size known, ctor/cpp_class not). The 8.x inline-ctor factory clears `armed` first, so it's untouched (golden pair unchanged). Per-version reality: 6.1 = 23 types / 0 methods (no prepareMthHashSet yet) / 103 events / 80 fields; 7.1 = 26 / 322 / 102 / 86 / 288 dispatch (full); type names line up across 6.1->7.1->8.x so version diffs work. - snapshots/PIKLib61 + PIKLIB71 added as golden fixtures (evolution chain) - tests/test_versions.py: 6.1 partial surface, 7.1 full, 61->71 diff -> 38/38 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -101,7 +101,7 @@ działa na MSVC6 (Piklib) i MSVC8 (BlooMoo) mimo różnego kodu wynikowego.
|
||||
|
||||
| Co | Kotwica w Ghidrze | Status |
|
||||
|----|-------------------|--------|
|
||||
| Typy | `CMC_ObjectsContainer::resolve`: `operator==("NAME")` → `operator_new(SIZE)` → `CMC_X::CMC_X` | ✅ (+ `dispatch_addr`, `via_module_iface`) |
|
||||
| Typy | `CMC_ObjectsContainer::resolve` (8.x/BlooMoo) lub `CMC_Scene::resolve` (Piklib 6.1/7.1): `operator==("NAME")` → `operator_new(SIZE)` → ctor | ✅ (8.x inline; 6.1 tag-based = nazwy bez ctora) |
|
||||
| Metody | `CMC_*_Runner::prepareMthHashSet`: `CInteger(id)` + `CStringHashCode("NAME")` + `CHashtable::put` | ✅ (+ `method_inheritance`) |
|
||||
| Eventy | `CMC_*::getBehavioursList`: lista literałów `CXString` | ✅ (lista per klasa, bez dziedziczenia) |
|
||||
| Pola (skryptowe) | ctory `CMC_*`: literały czytane przez `CMElement::getProperty<T>Value` → nazwa + typ pola (FPS, PRELOAD, VISIBLE…) | ✅ (+ `field_inheritance`) |
|
||||
|
||||
Reference in New Issue
Block a user