# 06 — GML Syntax: 4.3 → 5.x Breaking Changes

5.0 tightened the parser. Constraints persist through 5.3a. Re-injecting modern or 4.x-style GML into a 5.3a runner will trigger interpreter faults.

## Breaking changes

| Element | 4.3 | 5.3a | RE implication |
|---|---|---|---|
| **Array init** | C-style `var arr[10];` allowed | Deprecated; triggers compilation error | Decompiled code allocates dynamically on first assignment (`arr[0] = ...`) |
| **Dangling expressions** | Allowed as inert | Compilation error | Every line must be assignment or function call. Stray text after `}` fails |
| **Timeline resources** | Did not exist; alarm cascades simulated them | Native resource type | `.gmd` contains a `Timelines` block ([03-gmd-format](03-gmd-format.md)) — needs custom parser |
| **OS support** | Windows 95 kernels | Win95 dropped, targets WinXP | Extracted `.exe` may need WinXP compatibility shim under modern debuggers |

## Practical guidance

- When auto-decompiling DnD → GML, **emit dynamic array assignments**, never C-style declarations.
- Strip any auto-inserted `var` statements from modern templates.
- All statements must terminate with `;` and resolve to action or assignment.
- Timeline resources need their own emission path — they are not just alarm sugar.
- Test re-compilation in actual 5.3a IDE (or runner via LateralGM export) before declaring extraction successful.

## Debugger note

When attaching with modern tools to a 5.3a `.exe`, enable WinXP compatibility layer or run inside a WinXP VM. Symbol resolution and exception handling assume the older kernel. See [09-tool-gmd-recovery](09-tool-gmd-recovery.md) — runs in sandboxed XP VM by design.

## See also

- [05-gml-vm](05-gml-vm.md)
- [07-gml-core-functions](07-gml-core-functions.md)
- [11-tool-lateralgm](11-tool-lateralgm.md) — re-export verification
