diff --git a/BOOTSTRAP.md b/BOOTSTRAP.md index 7dfbe2f0..377d36ae 100644 --- a/BOOTSTRAP.md +++ b/BOOTSTRAP.md @@ -110,7 +110,7 @@ All verified. A compiler needs each of these, and each one works today. | Heap allocation | ✅ | `mem_alloc`, `mem_free`, `mem_copy`, `mem_set`; 1 MiB alloc verified | | Byte-level memory | ✅ | `peek8`/`poke8`, `peek32`/`poke32`, `peekp`/`pokep`, `ptr_add` | | `ptr` locals, params, returns | ✅ | `fn make(n: int) -> ptr` | -| `ptr` in a component field | ✅ | `component Nd { kind: int = 0, a: ptr = ptr_null() }` | +| `ptr` in a property field | ✅ | `property Nd { kind: int = 0, a: ptr = ptr_null() }` | | String literals as readable bytes | ✅ | `peek8("hello", 1)` → `101` | | `str` accepted where `ptr` expected | ✅ | `f("A")` into `fn f(p: ptr)` | | String comparison, **hand-written in Ludic** | ✅ | `streq` over `peek8` | @@ -186,10 +186,10 @@ records. Today there are two workarounds, and both are bad at compiler scale: what `truetype.ludic` does, and it works, but every field access becomes a magic number. Across a 6,000-line compiler this is the difference between maintainable and not. -- **ECS entities as nodes** — verified working (`component Nd { kind, a: ptr }`), +- **ECS entities as nodes** — verified working (`property Nd { kind, a: ptr }`), and initially seductive because queries give you free traversal. **Do not do this.** `LUDIC_MAX_ENT` is 1024 in `native.c:18`; the entity world is a fixed - array of per-component storage. A compiler needs hundreds of thousands of + array of per-property storage. A compiler needs hundreds of thousands of nodes. This is a dead end, and it is worth writing down because it is the obvious wrong turn. @@ -211,11 +211,11 @@ No copying, no by-value passing, no nested-struct inlining — a `struct` value a layout table. **Lowering.** This is largely already built. `native.c` already emits -`%Cmp_` LLVM struct types for components and already resolves +`%Cmp_` LLVM struct types for properties and already resolves `a.b` through `ll_member_addr` with `getelementptr`. A `struct` is a `%Cmp_`-style type *without* the parallel entity arrays: `new` is `malloc(sizeof)` plus a default-seeding memset/store sequence, and `.field` is -the existing `getelementptr` path. Reusing the component machinery is why this +the existing `getelementptr` path. Reusing the property machinery is why this is far cheaper than it looks. **Cost.** ~250 lines of C across `ludicc.c` (parse) and `native.c` (layout, @@ -423,7 +423,7 @@ confident nonsense. | **No silent no-ops** | If the language accepts a construct it must either honour it or reject it. Accepting-and-ignoring teaches a falsehood (see R6 — the worst thing in the audit). | | **Recoverable structure** — explicit terminators | A slightly-wrong generation fails *locally*, with an error pointing at the mistake, instead of cascading into a confusing error 40 lines later. | | **Locality** — meaning readable from the construct | No action-at-a-distance. Ludic is already strong here; keep it. | -| **Greppable unique anchors** | `component Pos` is findable. Retrieval quality is a language design property. | +| **Greppable unique anchors** | `property Pos` is findable. Retrieval quality is a language design property. | | **Errors that name the fix** | Already partly true: a missing builtin errors naming `rt_`. Extend that everywhere. | **Folklore, and false:** @@ -452,12 +452,12 @@ Each row verified by compiling a probe, not by reading docs. | **R1** | **No statement terminator at all.** `block()` is `skipnl(); stmt()` in a loop. A newline *stops* an expression (it lexes as `T_NL`, and `binlevel` only continues on `T_OP`) but is never *required*. `let x = 1 x = x + 1 print_int(x)` on one line is three legal statements — verified compiling. | `ludicc.c` `block()`, `binlevel` | The reader cannot see where a statement ends without re-deriving operator precedence. Blocks error recovery entirely. | | **R2** | **Commas are optional everywhere.** `if(isop(",")) pi++` appears in `comp()`, `arche()`, `fn` params and `spawn`. `{ x: int = 0 y: int = 0 }` and the comma'd form both compile. | 4 parser sites | Two spellings, zero semantic difference. | | ~~**R3**~~ | ~~**`and`/`or` alias `&&`/`\|\|`.**~~ **RESOLVED** — `and`/`or`/`not` are the only boolean operators; `&&`, `\|\|` and `!` are each rejected with a diagnostic naming the fix, and all three words are reserved. `!=` is unaffected. | landed via S3 | — | -| **R4** | **`{ }` means seven different things** — statement block; component fields (`n: T = e`); archetype list (bare idents); spawn initialisers (`N = { … }`); ui props + children (`k=v` juxtaposed, no commas); match arms (`p, p => …`); machine states (`state N = v { … }`). | `block/comp/arche/spawn/parse_widget/match/machine` | The delimiter carries no information. You must already know the head keyword to know the inner grammar. | +| **R4** | **`{ }` means seven different things** — statement block; property fields (`n: T = e`); model list (bare idents); spawn initialisers (`N = { … }`); ui props + children (`k=v` juxtaposed, no commas); match arms (`p, p => …`); machine states (`state N = v { … }`). | `block/comp/arche/spawn/parse_widget/match/machine` | The delimiter carries no information. You must already know the head keyword to know the inner grammar. | | **R5** | **Contextual keywords, not reserved.** `phase`, `query`, `reads`, `writes`, `needs`, `uses`, `where`, `in`, `on`, `layer`, `state`, `start` are matched with `isid()` — ordinary identifiers. `let query = 5 let phase = 6` compiles and prints `11`. | `sys()`, `scene_decl()` | A local named `enter` or `match` produces a baffling error far from the cause. | | **R6** | **Contracts are parsed and thrown away.** `requires`/`ensures`/`invariant` parse an expression and **discard it** (`pi++; expr();`). `reads`/`writes`/`needs`/`uses`/`effects` are `skip_brackets()`. `pure` is consumed and ignored. Verified: `fn half(n: int) -> int requires n > 100000 ensures false` compiles, and `half(8)` returns `4`. Verified: a system declaring `reads [Pos]` that **writes** `p.x = 99` compiles. | `fn()`, `sys()` | **The worst item in the audit.** The language accepts a contract and does nothing. A model writing `requires n > 0` is rewarded with a clean compile and zero enforcement — it learns a lie, and so does a human reader trusting the annotation. | | **R7** | **`str + str` typechecks, then emits invalid IR.** | verified (§4 B2) | The front-end accepts what the backend cannot lower. | | **R8** | **Two formatters, opposite philosophies, both called "format".** `ludicc --fmt` canonicalises hard (one statement per line, `and`→`&&`, full parenthesisation) but drops comments and inlines imports. `ludic-fmt` is token-based and preserves comments — but **normalises nothing**: handed the one-line `let a = 1 a = a + 1 if true and false { … }`, it returned it unchanged. | verified side-by-side | **Neither tool enforces a single spelling.** The canonicaliser is unusable on real source; the source formatter has no opinion. | -| **R9** | **Two ways to spell a tag** — `component Player { }` (empty component) or `archetype`. | LANGUAGE.md | | +| **R9** | **Two ways to spell a tag** — `property Player { }` (empty property) or `model`. | LANGUAGE.md | | | **R10** | **Stale docs are stale training data.** LANGUAGE.md still says "the current compiler is a tree-to-C translator" (it emits LLVM IR) and lists arrays under "Not yet implemented" beside things never planned. | LANGUAGE.md | Docs are the highest-leverage model input in the repo. A wrong doc is worse than a missing one. | ### 5.4 Proposals @@ -497,7 +497,7 @@ point of the mistake. *Fixes R5. Cost:* ~40 lines. section.** Two honest options per construct, no third: - `reads` / `writes`: **implement them.** The compiler already knows every - component a system touches — it builds the query and walks the body. Checking + property a system touches — it builds the query and walks the body. Checking the declaration against actual access is a genuine static analysis the language claims to have and doesn't. This converts dead syntax into a real guarantee, which is exactly what an "AI-first" language should offer a model @@ -542,7 +542,7 @@ Recording these so they are not relitigated: - **Braces, not indentation** (§5.2). - **`#` comments** — unambiguous, one spelling already. -- **The ECS vocabulary** — `component` / `system` / `query` / `phase` are +- **The ECS vocabulary** — `property` / `system` / `query` / `phase` are unusually self-describing and greppable. This is the language's best existing readability asset. - **`fixed` / Q16.16** — determinism is a design constraint, not a style choice. @@ -598,7 +598,7 @@ The self-host compiler (`selfhost/`) implements the **compiler-subset**: `struct (reference), `[]T` slices with `push`/`len`, functions, a plain `main` entry, the full control flow, the operators (with short-circuit `and`/`or`), and the low-level intrinsics. It deliberately does **not** implement the game half of -Ludic — ECS, queries, archetypes, scenes, UI, save/load, `match`/`machine`, +Ludic — ECS, queries, models, scenes, UI, save/load, `match`/`machine`, fixed-point. It targets native (macOS/clang) and emits LLVM IR text that clang assembles, exactly the posture the C `ludicc` has. @@ -634,8 +634,8 @@ compiler is now a historical seed, not a dependency. ### Stage 4+ — `ludicc.c` is deleted -The self-host compiler was extended to the **whole** language — components, -archetypes, systems, phases, `for … in query` (with `where`), spawn/despawn, +The self-host compiler was extended to the **whole** language — properties, +models, systems, phases, `for … in query` (with `where`), spawn/despawn, `self()`, `machine`/`become`, `match`, `save`/`load` snapshots, the retained `ui` widget tree, multi-file `import`, fixed-point Q16.16, and every runtime intrinsic. It auto-splices the Ludic runtime exactly as the C compiler did. @@ -791,7 +791,7 @@ existing framing ("the same floor Rust and Swift stand on") already covers it. ## 8. Risks and gotchas - **Do not build the AST out of ECS entities.** `LUDIC_MAX_ENT` is 1024 - (`native.c:18`) and component storage is fixed arrays. It compiles, it looks + (`native.c:18`) and property storage is fixed arrays. It compiles, it looks elegant, and it caps the compiler at 1024 nodes. Use `struct` (A2). - **Do not inherit the C compiler's fixed caps.** `ludicc.c:22` has `g_srcpath[128]`; `native.c:161` has `Val a[8]`. The Ludic port should grow @@ -852,9 +852,9 @@ current tree (`./test.sh` = 64/64). **Recursion** ✅ → `55` ```ludic -game P { +program P { fn fib(n: int) -> int { if n < 2 { return n }; return fib(n-1) + fib(n-2) } - system B phase Start { print_int(fib(10)); quit() } + handler B phase Start { print_int(fib(10)); quit() } } ``` @@ -908,19 +908,19 @@ spelling is equally legal (§5.3). **R1 — statements now require a separator (Rule B, syntax-redesign Phase 2)** → parse error ```ludic # doc-check: skip — intentionally rejected under Rule B: needs a newline or ';' -game P { system B phase Start { let x = 1 x = x + 1 print_int(x) quit() } } +program P { handler B phase Start { let x = 1 x = x + 1 print_int(x) quit() } } ``` Statements no longer sit adjacent with only spaces between them; the compiler reports `expected newline or ';' between statements`. Put each on its own line, or separate them with `;` (both lex to the same separator token): ```ludic -game P { system B phase Start { let x = 1; x = x + 1; print_int(x); quit() } } +program P { handler B phase Start { let x = 1; x = x + 1; print_int(x); quit() } } ``` **R2 — commas omitted throughout** → `7` ```ludic # doc-check: skip — composite: declaration plus statements -component Pos { x: int = 0 y: int = 0 } +property Pos { x: int = 0 y: int = 0 } spawn Hero { Pos { x: 7 y: 2 } } ``` @@ -950,11 +950,11 @@ print_int(half(8)) ``` And a system may declare read-only access, then write — also compiles: ```ludic -system Violate phase Update reads [Pos] query (p) [Pos] { p.x = 99 } +handler Violate phase Update reads [Pos] query (p) [Pos] { p.x = 99 } ``` **R8 — the two formatters disagree about what "format" means.** Given -`component Pos { x: int = 0 y: int = 0 }` and a multi-statement one-liner, +`property Pos { x: int = 0 y: int = 0 }` and a multi-statement one-liner, `ludicc --fmt` rewrites both (one statement per line, `and`→`&&`, full parenthesisation) while `ludic-fmt` returns the input **unchanged**. diff --git a/COMPILING.md b/COMPILING.md index f859fe75..312f95e1 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -37,7 +37,7 @@ and find your program rewritten in another language. app.ludic │ ludicc — lex, parse, check, lower (compiler/ludicc.c, ▼ compiler/native.c) - app.ll LLVM IR: your systems, your components, your runtime + app.ll LLVM IR: your systems, your properties, your runtime │ IR assembler (compiler/driver.c) ▼ app.o Mach-O / ELF / COFF object code @@ -91,7 +91,7 @@ A source file opens with `game Name { … }` or `module Name { … }`. ```ludic # doc-check: skip — illustrative: elided body -module Combat { +program Combat { @export fn damage(attack: int, armour: int, roll: int) -> int { … } fn curve(level: int) -> int { … } # private: not a symbol } @@ -216,7 +216,7 @@ python3 -m http.server -d build/web 8000 # then open http://localhost:8000/ itch.io — and the game runs. It needs no server-side anything, and no cross-origin isolation headers. -**No game logic passes through JavaScript.** The systems, the queries, the +**No game logic passes through JavaScript.** The handlers, the queries, the fixed-point arithmetic, the PNG decoder, the TrueType rasteriser and the UI are all compiled Ludic executing as wasm. `platform.js` is 300 lines and implements the same five-function window protocol `cocoa.ll` implements, plus the host @@ -248,7 +248,7 @@ A browser tab cannot be held inside that loop — it would never paint, and the key events the loop is waiting on would never be delivered. So a web build exports those four functions instead of `main`, and `platform.js` calls `ludic_frame` from `requestAnimationFrame`. Both targets emit the four from the -same code in `ll_emit_loop_parts`, so the systems that run, and the phase order +same code in `ll_emit_loop_parts`, so the handlers that run, and the phase order they run in, are identical; only the owner of the loop differs. ### The floor @@ -302,8 +302,8 @@ asserts exactly that, which is a much stronger check on the backend than ## What a build contains -Everything: components and archetypes, spawn/despawn, queries with bindings, -`where` filters and archetype filters, `match`, `machine`/`become`, +Everything: properties and models, spawn/despawn, queries with bindings, +`where` filters and model filters, `match`, `machine`/`become`, `scene`/`layer`/`enter`, module state (`var`), `const`, int and Q16.16 fixed-point arithmetic, control flow, functions, `extern fn` FFI, strings, the entity allocator, save/load snapshots, the frame loop, the window, and the whole diff --git a/LANGUAGE.md b/LANGUAGE.md index bda12977..8e61ccc8 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -12,23 +12,23 @@ program.ludic ──ludicc──▶ program.ll ──▶ program.o ──▶ nat `ludicc` lowers Ludic to **LLVM IR itself** and links the result — see [COMPILING.md](COMPILING.md) for the pipeline, `module`/`export`, and cross-targets. There is one backend: no C is generated, compiled or linked at -any point, and the runtime a game calls is itself written in Ludic. +any point, and the runtime a program calls is itself written in Ludic. ## Program structure -A program is one `game` block containing declarations: +A program is one `program` block containing declarations: ```ludic # doc-check: skip — illustrative: elided import list -game Name { +program Name { import ... # pull declarations in from another file - component ... # data (per entity) + property ... # data (per entity) struct ... # a plain record, not tied to an entity - archetype ... # a named entity KIND (bundle of components) + model ... # a named entity KIND (bundle of properties) const ... # compile-time constants fn ... # functions extern fn ... # bind a C library symbol (FFI) - system ... # behavior, grouped into phases + handler ... # behavior, grouped into phases } ``` @@ -36,43 +36,43 @@ game Name { ```ludic # doc-check: skip — paths resolve only inside the repo -game ChronoRift { +program ChronoRift { import "chronorift/world.ludic" # path is relative to THIS file import "chronorift/combat.ludic" } ``` -An imported file is a **fragment**: bare declarations, no `game` wrapper. Its +An imported file is a **fragment**: bare declarations, no `program` wrapper. Its declarations are spliced into the importing program. Imports may appear inside -the `game` block or before it, they may nest (a fragment may import fragments), +the `program` block or before it, they may nest (a fragment may import fragments), and each resolved path is **include-guarded**, so importing the same file twice (even via different chains) pulls it in once. Diagnostics report the true file: ``` error: line 1: unknown type 'nope' for field Pos.x - chronorift/world.ludic:1 | component Pos { x: nope = 0 } + chronorift/world.ludic:1 | property Pos { x: nope = 0 } ``` -## Archetypes (entity kinds) +## Models (entity kinds) -An `archetype` names a *kind* of entity and the fixed set of components it -carries. It replaces the empty "tag component" idiom: identity is stored as one +An `model` names a *kind* of entity and the fixed set of properties it +carries. It replaces the empty "tag property" idiom: identity is stored as one integer per entity, not a parallel boolean array. ```ludic # doc-check: skip — composite: declarations and statements together -component Pos { x: int = 0, y: int = 0 } -component Stats { hp: int = 10 } +property Pos { x: int = 0, y: int = 0 } +property Stats { hp: int = 10 } -archetype Player { Pos, Stats } # Player IS a kind, not a component -archetype Enemy { Pos, Stats } +model Player { Pos, Stats } # Player IS a kind, not a property +model Enemy { Pos, Stats } -spawn Player { Pos { x: 5 } } # attaches every listed component +spawn Player { Pos { x: 5 } } # attaches every listed property # (seeding field defaults), then overrides for (p, s) in query [Pos, Stats, {Player}] { ... } # {Player} filters by kind ``` -Use `{Name}` (tag position) to filter a query by archetype — an archetype can't +Use `{Name}` (tag position) to filter a query by model — an model can't be *bound* to a variable since it has no fields of its own. Entity kind is part of the saved snapshot. @@ -82,7 +82,7 @@ The 5×7 bitmap `text` stays for zero-asset programs. For real typography, load TrueType font and draw UTF-8: ```ludic -let f = font_load("/System/Library/Fonts/Supplemental/Arial.ttf") +let f = font_load("/Handler/Library/Fonts/Supplemental/Arial.ttf") text_ttf(f, 20, 20, "Héllo — Καλημέρα — Привет", 0xffffff, 28) # anti-aliased let w = text_w(f, "measure me", 28) # pixel width ``` @@ -115,22 +115,22 @@ ui MainMenu { Widget types: `panel` (container + optional skin/bg/border), `col` / `row` (pure stacks), `label`, `button` (focusable), `image`, `spacer`. Props are -evaluated at build time, so `font: reg(R_FONT)` reads a value the game set first. +evaluated at build time, so `font: reg(R_FONT)` reads a value the program set first. Each `id: Name` mints a `UI_Name` handle (the `ui` block name too), used from -systems: +handlers: ```ludic -system Boot phase Start { +handler Boot phase Start { setreg(R_FONT, font_load("…Arial.ttf")) ui_build() # construct the tree (loads skins/images) ui_open(UI_MainMenu) # make it active, focus the first button } -system Nav phase Update { +handler Nav phase Update { ui_tick(key()) # w/s move focus, space/enter activate if ui_clicked(UI_Quit) { quit() } ui_set_int(UI_HpLabel, hp) # poke dynamic values by id } -system Draw phase Render { clear(0x0e0e16); ui_render(); present() } +handler Draw phase Render { clear(0x0e0e16); ui_render(); present() } ``` See `examples/menu.ludic` for a complete title screen. @@ -151,12 +151,12 @@ point (`1.5`) is `fixed`. Arithmetic on two `fixed` values lowers to `fxmul`/`fxdiv`; mixing `int` and `fixed` promotes the `int`. Convert with `fx(i)` (int→fixed) and `flr(f)` (fixed→int). -## Components, entities, queries +## Properties, entities, queries ```ludic # doc-check: skip — composite: declarations and statements together -component Pos { x: int = 0, y: int = 0 } # typed fields with defaults -component Player { } # a tag (no fields) +property Pos { x: int = 0, y: int = 0 } # typed fields with defaults +property Player { } # a tag (no fields) spawn Hero { # create an entity Pos { x: 10, y: 5 } @@ -164,44 +164,44 @@ spawn Hero { # create an entity } despawn self() # remove the current entity -# iterate every entity that has all listed components: +# iterate every entity that has all listed properties: for (p) in query [Pos, {Player}] { p.x = p.x + 1 } # {Tag} filters, doesn't bind for (a, b) in query [Pos, Vel] where a.x > 0 { ... } # one var per non-tag term ``` -Entities are integer handles; component storage and slot reuse are generated per +Entities are integer handles; property storage and slot reuse are generated per program. `self()` yields the entity of the innermost `query` loop. -## Systems & phases +## Handlers & phases ```ludic -system Move @deterministic +handler Move @deterministic reads [Vel] # declared data access (parsed and reserved; not yet writes [Pos] # consumed by any analysis pass — see "Not yet implemented") phase FixedUpdate - query (p, v) [Pos, Vel] # the entities this system operates on + query (p, v) [Pos, Vel] # the entities this handler operates on { p.x = p.x + v.dx } ``` Phases run in this order every frame: **`Start`** (once at boot), then each frame **`Input` → `FixedUpdate` → `Update` → `LateUpdate` → `Render`**. -`@edge` in front of a `system` marks one that touches the outside world. +`@edge` in front of a `handler` marks one that touches the outside world. Declaration modifiers are `@annotations` written in front of the declaration — -`@export fn …` (a C-ABI-exported function), `@edge system …`, `@deterministic`, +`@export fn …` (a C-ABI-exported function), `@edge handler …`, `@deterministic`, `@pure`. They parse into one uniform channel rather than a set of prefix keywords. (`@export` sets the export flag; the others parse but have no codegen effect in the self-hosted compiler yet.) ### The `query` clause -A system declares the entities it works on, alongside its phase. The body then -runs **once per matching entity**, with the components bound and `self()` giving +A handler declares the entities it works on, alongside its phase. The body then +runs **once per matching entity**, with the properties bound and `self()` giving that entity — the query header is simply hoisted out of the body into the signature: ```ludic -system CleanBattle phase LateUpdate +handler CleanBattle phase LateUpdate query (b, p) [Battle, Pos, {Enemy}] where b.hp <= 0 { despawn self() } ``` @@ -209,32 +209,32 @@ system CleanBattle phase LateUpdate is the same program as ```ludic -system CleanBattle phase LateUpdate { +handler CleanBattle phase LateUpdate { for (b, p) in query [Battle, Pos, {Enemy}] where b.hp <= 0 { despawn self() } } ``` -Drop `(vars)` when nothing binds: `query [{Enemy}]`. A system declares at most +Drop `(vars)` when nothing binds: `query [{Enemy}]`. A handler declares at most one query, and the number of variables must equal the number of binding terms -(`{Tag}` terms filter without binding, so they don't count). A system with no +(`{Tag}` terms filter without binding, so they don't count). A handler with no `query` clause runs once per tick, as before. ### Conditions -A query selects on more than *which* components an entity has. `where` is an +A query selects on more than *which* properties an entity has. `where` is an ordinary expression evaluated with the bindings in scope, so entities can be matched on their field values: ```ludic -# doc-check: skip — a bare system clause, not a whole declaration +# doc-check: skip — a bare handler clause, not a whole declaration query (b, s) [Battle, Stats] where b.hp <= 0 and s.level > 3 ``` The same `where` works on an inline `for (…) in query […]`. `where` is evaluated **per candidate entity**, so it is the wrong place for a -guard that concerns the whole system (`where reg(R_MODE) != 1` would re-read the -register for every entity). Keep whole-system guards in the body of a system +guard that concerns the whole handler (`where reg(R_MODE) != 1` would re-read the +register for every entity). Keep whole-handler guards in the body of a handler with no `query` clause, wrapping an inline query — as `CleanBattle` does in `examples/chronorift/combat.ludic`. @@ -247,6 +247,46 @@ there is no per-tick array of matched entities. Consequences worth knowing: * An entity **spawned during the loop at a higher id is visited in the same tick**. Spawn into a later phase if you don't want that. +## Annotations + +Declarations carry `@annotations` in front of them — `@export`, `@edge`, `@pure`, +`@deterministic` — one uniform channel rather than a set of prefix keywords. Two +annotations replace a clause with a decorator. + +**`@Queries` — a handler's query as a decorator.** Instead of the `query (v) […]` +clause, a handler annotates its query, with each property's constraints written +inline and the model given as `on:`: + +```ludic +# doc-check: skip — composite: a handler plus its property/model declarations +property Transform { x: int = 0, scale: int = 1 } +property Velocity { dx: int = 0, dy: int = 0 } +model Actor { Transform, Velocity } + +@Queries(these: [Transform{scale > 0}, Velocity{dx > 0 or dy > 0}], on: Actor) +handler Move phase Update { + Transform.x = Transform.x + Velocity.dx # each property is bound by its name +} +``` + +It desugars to the ordinary loop + +```ludic +# doc-check: skip — the desugaring of the @Queries above +for (Transform, Velocity) in query [Transform, Velocity, {Actor}] + where Transform.scale > 0 and (Velocity.dx > 0 or Velocity.dy > 0) { … } +``` + +— each listed property becomes a binding **named after itself**, a +`Prop{constraint}` block reads its bare names as fields of `Prop`, and `on: Model` +adds a `{Model}` tag filter. The body runs once per matching entity. + +**`@Handles` — the handlers a program drives.** Written in front of the +`program`, `@Handles(Move)` names the handlers it uses. It parses and reads as +documentation; every declared handler still runs (registration is implicit). + +See [`examples/annotations.ludic`](examples/annotations.ludic). + ## Structs, arrays and slices `struct` is the aggregate that is *not* tied to an entity — a plain record, for @@ -255,7 +295,7 @@ the data a program keeps outside the ECS. ```ludic struct Tok { kind: int = 0, line: int = 0, next: Tok } -system Lex phase Update { +handler Lex phase Update { let t = new Tok # allocates; every field seeded from its default t.kind = 1 } @@ -269,7 +309,7 @@ struct Tok { kind: int = 0, line: int = 0, next: Tok } fn bump(t: Tok) -> void { t.kind = t.kind + 1 } -system Share phase Update { +handler Share phase Update { let a = new Tok let b = a # b and a are the SAME object b.kind = 9 @@ -283,7 +323,7 @@ Fields chain, so a struct can refer to its own type and be walked without temporaries — which is what an AST or a linked list needs: ```ludic -system Walk phase Update { +handler Walk phase Update { let a = new Tok let b = new Tok a.next = b @@ -300,7 +340,7 @@ snippet below does not compile today. Programs use `[]T` slices for now. ```ludic # doc-check: skip — [T; N] fixed arrays are not yet implemented (design target) var table: [int; 8] # module-level storage -system S phase Update { +handler S phase Update { let buf: [int; 4] # a local; no initializer needed buf[0] = 10 table[2] = buf[0] @@ -312,7 +352,7 @@ capacity. `push` appends, doubling the storage when it is full; because the header never moves, an append is visible to everything holding that slice. ```ludic -system Collect phase Update { +handler Collect phase Update { let toks = new []Tok push(toks, new Tok) for i in 0 .. len(toks) { print_int(toks[i].kind) } @@ -442,7 +482,7 @@ ints (`0xff8800`). # ui_focus(id) ui_focused()->int ui_visible(id,bool) # assets load_png(path)->id (decodes a PNG; returns a 16x16 sprite id) # input key()->int (current frame's key code, 0 if none) -# state reg(i)->int setreg(i,v) (64 integer resources shared by systems) +# state reg(i)->int setreg(i,v) (64 integer resources shared by handlers) # entity self()->entity # save save() load()->bool (binary snapshot of the whole ECS World) # control quit() print_int(i) @@ -453,10 +493,10 @@ ints (`0xff8800`). ## Tooling ```bash -ludicc game.ludic -o build/game # native binary (windowed for a game) -ludicc game.ludic --headless -o g # headless build (renders out.ppm; reads stdin) -ludicc game.ludic --emit-llvm -o g.ll # stop at LLVM IR -ludic game.ludic # compile AND run (forwards the exit code) +ludicc app.ludic -o build/app # native binary (windowed for a game) +ludicc app.ludic --headless -o app # headless build (renders out.ppm; reads stdin) +ludicc app.ludic --emit-llvm -o app.ll # stop at LLVM IR +ludic app.ludic # compile AND run (forwards the exit code) ``` `ludicc` (compile) and `ludic` (compile-and-run) are one multi-call binary built @@ -464,7 +504,7 @@ by `./build-cli.sh`. **[COMPILING.md](COMPILING.md) is the authoritative CLI reference** — the full flag set (`-o`, `--windowed`, `--headless`, `--emit-llvm`, `--save-temps`, `--run`), the `LUDIC_HOME` / `LUDIC_CC` environment variables, and the IR-to-stdout bootstrap contract (no `-o`, invoked as `ludicc`) that -`build.sh` / `reseed.sh` rely on. The default mode is auto: a file with `system`s +`build.sh` / `reseed.sh` rely on. The default mode is auto: a file with `handler`s links windowed, otherwise headless; an explicit flag always wins. The retired C driver's `--shared`, `--fmt`, `-c`, cross-compile (`--target`) and @@ -502,7 +542,7 @@ Emacs, Sublime and Zed, are in `tools/editors/` — see - `examples/chronorift.ludic` — a co-op JRPG (overworld, dungeon, boss, shop, save) using CC0 Kenney sprites. Split across `chronorift/*.ludic` via `import`, - built on archetypes. + built on models. - `examples/menu.ludic` — a retained-UI title screen (9-slice panel, TrueType labels, focusable buttons). - `examples/snake.ludic` — Snake, no assets — same compiler, proving generality. @@ -519,7 +559,7 @@ are future work. - **`scene` / `layer` / `on enter` / `on exit`** — the state-machine-over-scenes sugar is documented above but not parsed by the self-hosted compiler yet. -- **`reads` / `writes` clauses** — parsed and reserved on the system node, but no +- **`reads` / `writes` clauses** — parsed and reserved on the handler node, but no analysis pass consumes them. - **`[T; N]` fixed arrays** — documented above, but `ptype` parses only `[]T` slices; fixed inline arrays are not accepted yet. Use `[]T` slices. @@ -542,9 +582,9 @@ as near-term — are now implemented and self-hosting; their lowerings are in > `machine`, as `examples/chronorift` does. This section describes the intended > syntax for when scene support lands. -A game is usually several mutually-exclusive states — a title screen, the +A program is usually several mutually-exclusive states — a title screen, the overworld, a battle — and the usual way to write that is a mode register -consulted at the top of every system. `scene` makes it structure instead: +consulted at the top of every handler. `scene` makes it structure instead: ```ludic # doc-check: skip — illustrative: elided bodies @@ -553,7 +593,7 @@ scene Title start { on exit { ui_visible(UI_Menu, 0) } layer Main { - system Choose phase Update { + handler Choose phase Update { if ui_clicked(UI_NewGame) { enter Overworld } } } @@ -562,34 +602,34 @@ scene Title start { scene Overworld { on enter { spawn_party() } - layer World { system Move phase Update { … } } - layer Hud { system Draw phase Render { … } } + layer World { handler Move phase Update { … } } + layer Hud { handler Draw phase Render { … } } } ``` - Exactly **one scene is active**. The one marked `start` runs first (or the first declared, if none is marked). -- A scene's systems only run while it is active. Systems declared outside any +- A scene's handlers only run while it is active. Handlers declared outside any scene are global and run every frame regardless. -- **Layers group systems and declaration order is draw order**: within a phase, - global systems run first, then the active scene's layers in the order they +- **Layers group handlers and declaration order is draw order**: within a phase, + global handlers run first, then the active scene's layers in the order they were written — so `Hud`'s `Render` paints over `World`'s. - `on enter` / `on exit` are lifecycle hooks, not phases. Scene setup goes in - `on enter`; a layer system may not use phase `Start`. + `on enter`; a layer handler may not use phase `Start`. - `enter Name` transitions: the current scene's `on exit` runs, the active scene - becomes `Name`, and its `on enter` runs. Inside a layer system the compiler + becomes `Name`, and its `on enter` runs. Inside a layer handler the compiler knows which scene is leaving, so a transition costs two direct calls and a store — there is no dispatch table. `examples/scenes.ludic` is a runnable demonstration of the ordering rules. -## Queries in a system signature +## Queries in a handler signature -When a system's whole body is one query loop, the loop header can move into the +When a handler's whole body is one query loop, the loop header can move into the declaration: ```ludic -system CleanBattle phase LateUpdate +handler CleanBattle phase LateUpdate query (b, p) [Battle, Pos, {Foe}] where b.hp <= 0 { despawn self() diff --git a/README.md b/README.md index afaf5b29..2ed3f74b 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ self-hosted native toolchain.) | `runtime/web/platform.js` | the browser's window — the same five `win_*` functions `cocoa.ll` implements, against a `` | | `runtime/web/index.html` | the page a web build is served from | | `tools/ludic-web/run.mjs` | runs a headless wasm build under Node, so native and wasm output can be diffed | -| `examples/chronorift.ludic` | the JRPG written in Ludic (multi-file via `import`, archetype-based) | +| `examples/chronorift.ludic` | the JRPG written in Ludic (multi-file via `import`, model-based) | | `examples/menu.ludic` | a retained-UI title screen (9-slice, TrueType, focusable buttons) | | `examples/snake.ludic` | a second, unrelated game — proves the language is general (same toolchain, no engine hardcoding) | | `build.sh` | `./build.sh examples/.ludic` | @@ -119,10 +119,10 @@ same highlighting, checking and formatting as the source tree. ## Language features implemented -- `component` (typed fields + defaults), `system` (`phase`, `@annotations`, +- `property` (typed fields + defaults), `system` (`phase`, `@annotations`, `reads`/`writes` clauses), `const`, `fn` (with `requires`/`ensures` parsed). -- `archetype` — named entity **kinds** (bundles of components); identity is one - int per entity, replacing empty tag components. Filter with `{Kind}`. +- `model` — named entity **kinds** (bundles of properties); identity is one + int per entity, replacing empty tag properties. Filter with `{Kind}`. - `import "file"` — multi-file programs (fragments spliced in, include-guarded, per-file diagnostics). - ECS queries: `for (a, b) in query [A, B, {Tag}] where { … }`. @@ -165,7 +165,7 @@ Controls: - [x] Compiler pipeline: Ludic → LLVM IR → native binary / shared library - [x] No C generated, compiled or linked in a build; runtime written in Ludic - [x] Cross-compilation to ELF (x86-64, aarch64) and Windows COFF -- [x] ECS runtime (components, systems, phases, queries, entity pooling) +- [x] ECS runtime (properties, systems, phases, queries, entity pooling) - [x] Windowed 2D rendering (Cocoa driven from LLVM IR) + headless PPM verification - [x] CC0 Kenney PNG sprites (`load_png`, decoder written in Ludic) + scrolling camera - [x] Overworld: tilemap, movement, collision diff --git a/SYNTAX-REDESIGN.md b/SYNTAX-REDESIGN.md index 569a5739..8062b6a5 100644 --- a/SYNTAX-REDESIGN.md +++ b/SYNTAX-REDESIGN.md @@ -112,11 +112,11 @@ alternative if the paren form is disliked: keep whitespace separation but coloni ```ludic # doc-check: skip — illustrative redesign snippet (proposed / partial syntax) # before -edge system Move @deterministic reads [Vel] writes [Pos] phase FixedUpdate +edge handler Move @deterministic reads [Vel] writes [Pos] phase FixedUpdate query (p, v) [Pos, Vel] where a.x > 0 { … } # after @edge @deterministic -system Move +handler Move phase FixedUpdate reads [Vel] writes [Pos] query (p, v) [Pos, Vel] where p.x > 0 @@ -343,7 +343,23 @@ Full generation-from-one-list (emit the editor files from a manifest) was not needed: the bidirectional *checks* give the same guarantee — nothing can drift without CI failing — without a code-generation step to maintain. -**Phases 1–5 are complete.** All thirteen findings are resolved or resolved by an +**Phases 1–5 are complete.** + +### Phase 6 — vocabulary rename + annotation DSL ✅ DONE (follow-on request) +Renamed the core nouns: `game`/`module` → `program`, `main` → `entry`, +`component` → `property`, `archetype` → `model`, `system` → `handler`. Done via a +transitional self-hosting bootstrap (accept both → reseed → move the compiler's +own source to new keywords + tighten → reseed); old keywords now rejected. +Token-safe corpus migration ([rename_kw.c](tools/ludic-tools/rename_kw.c)), goldens +byte-identical. Reconciled the LSP indexer, editor vocab, check-docs wrapper, and +docs; fixed two pre-existing toolchain bugs (a `set -e` bug in build-tools.sh that +blocked all editor-binary rebuilds, and a stale LSP test offset). + +Added an **annotation DSL**: `@Queries(these: [Prop{constraint}, …], on: Model)` on +a handler desugars to the existing `S_QUERY` loop (each property binds by its own +name; a `Prop{…}` constraint qualifies its bare fields; `on:` adds a `{Model}` +tag), and `@Handles(…)` on a program parses as documentation. See +[examples/annotations.ludic](examples/annotations.ludic); test.sh 15/15. All thirteen findings are resolved or resolved by an explicit, documented decision. --- diff --git a/examples/annotations.ludic b/examples/annotations.ludic new file mode 100644 index 00000000..6701d1a6 --- /dev/null +++ b/examples/annotations.ludic @@ -0,0 +1,30 @@ +# annotations.ludic — the annotation-first style. A handler's query is an +# @Queries decorator instead of a clause, and the program lists the handlers it +# drives with @Handles. Both lower to the same code the older spellings did. + +@Handles(Move) +program RPG2D { + property Transform { x: int = 0, y: int = 0, scale: int = 1 } + property Velocity { dx: int = 0, dy: int = 0 } + model Actor { Transform, Velocity } + + handler Spawn phase Start { + spawn Actor { Transform { x: 0, scale: 2 } Velocity { dx: 3, dy: 1 } } + spawn Actor { Transform { x: 0, scale: 0 } Velocity { dx: 9, dy: 9 } } + } + + # Move every Actor whose scale is positive and that is actually moving. The + # query lives in the annotation; each bound property is addressed by its own + # name in the body (`Transform`, `Velocity`), and a constraint like + # `Transform{scale > 0}` reads `scale` as a field of Transform. + @Queries(these: [Transform{scale > 0}, Velocity{dx > 0 or dy > 0}], on: Actor) + handler Move phase Update { + Transform.x = Transform.x + Velocity.dx + Transform.y = Transform.y + Velocity.dy + } + + handler Report phase Render { + for (t) in query [Transform] { print_int(t.x); print_int(t.y) } + quit() + } +} diff --git a/examples/chronorift.ludic b/examples/chronorift.ludic index 2f6fd3b7..1e28fbac 100644 --- a/examples/chronorift.ludic +++ b/examples/chronorift.ludic @@ -7,7 +7,7 @@ # chronorift/, pulled in with `import`. Paths resolve relative to this file, and # each import is include-guarded so re-imports are free. # ============================================================================ -game ChronoRift { +program ChronoRift { import "chronorift/world.ludic" # components, entity archetypes, constants import "chronorift/rules.ludic" # pure rules + map data (functions) import "chronorift/overworld.ludic" # boot, movement, encounters, shop diff --git a/examples/chronorift/combat.ludic b/examples/chronorift/combat.ludic index 492d17e9..3358ecb1 100644 --- a/examples/chronorift/combat.ludic +++ b/examples/chronorift/combat.ludic @@ -8,7 +8,7 @@ enum KnightAct { Attack, Guard, Item, Flee } enum MageAct { Attack, Heal, Guard } -system Battle phase Update { +handler Battle phase Update { if reg(R_MODE) == 1 { let k = key() for (e) in query [Stats, {Enemy}] { @@ -144,7 +144,7 @@ system Battle phase Update { } } -system CleanBattle phase LateUpdate { +handler CleanBattle phase LateUpdate { if reg(R_MODE) != 1 { for (e) in query [Stats, {Enemy}] { despawn self() @@ -152,7 +152,7 @@ system CleanBattle phase LateUpdate { } } -system Meta phase Update { +handler Meta phase Update { let k = key() if reg(R_MODE) == 2 { if k == 0 { setreg(R_ACK, 1) } diff --git a/examples/chronorift/draw.ludic b/examples/chronorift/draw.ludic index 13259b71..58d6f27d 100644 --- a/examples/chronorift/draw.ludic +++ b/examples/chronorift/draw.ludic @@ -1,6 +1,6 @@ # draw.ludic — the Render system (overworld, battle, and overlay screens). -system Draw phase Render { +handler Draw phase Render { let m = reg(R_MODE) clear(0x101018) diff --git a/examples/chronorift/overworld.ludic b/examples/chronorift/overworld.ludic index cce32a93..20af0156 100644 --- a/examples/chronorift/overworld.ludic +++ b/examples/chronorift/overworld.ludic @@ -1,6 +1,6 @@ # overworld.ludic — boot, movement/encounter input, and the shop system. -system Boot phase Start { +handler Boot phase Start { load_png("assets/kenney/tiny-town/Tiles/tile_0000.png") # 0 grass load_png("assets/kenney/tiny-town/Tiles/tile_0004.png") # 1 tree load_png("assets/kenney/tiny-town/Tiles/tile_0025.png") # 2 path @@ -33,7 +33,7 @@ system Boot phase Start { setreg(R_POTION, 2) } -system Control phase Input { +handler Control phase Input { if reg(R_MODE) == 0 { for (p) in query [Pos, {Player}] { let k = key() @@ -122,7 +122,7 @@ system Control phase Input { } # shop (at the house 'h' tile): buy potions with gold -system Shop phase Update { +handler Shop phase Update { if reg(R_MODE) == 4 { let k = key() if k == 'w' { setreg(R_CUR, max(0, reg(R_CUR) - 1)) } diff --git a/examples/chronorift/world.ludic b/examples/chronorift/world.ludic index 457d87ee..94b34793 100644 --- a/examples/chronorift/world.ludic +++ b/examples/chronorift/world.ludic @@ -1,17 +1,17 @@ # world.ludic — the data model: components, entity archetypes, constants. # Imported by examples/chronorift.ludic. No `game` wrapper (this is a fragment). -component Pos { x: int = 0, y: int = 0 } -component Actor { kind: int = 0 } -component Stats { hp: int = 1, maxhp: int = 1, mp: int = 0, maxmp: int = 0, +property Pos { x: int = 0, y: int = 0 } +property Actor { kind: int = 0 } +property Stats { hp: int = 1, maxhp: int = 1, mp: int = 0, maxmp: int = 0, atk: int = 1, def: int = 0, lvl: int = 1, xp: int = 0, guard: int = 0 } -component Party { slot: int = 0 } +property Party { slot: int = 0 } # Entity KINDS. Identity is stored as one integer per entity (L_kind), not as # an empty marker component. Query membership with {Player} / {Enemy}. -archetype Player { Pos, Actor, Party, Stats } # the controllable knight -archetype Ally { Party, Stats } # backline mage (no overworld body) -archetype Enemy { Actor, Stats } # battle foe +model Player { Pos, Actor, Party, Stats } # the controllable knight +model Ally { Party, Stats } # backline mage (no overworld body) +model Enemy { Actor, Stats } # battle foe const MW: int = 40 const MH: int = 18 diff --git a/examples/hello.ludic b/examples/hello.ludic index 2544a6f1..f6eb978b 100644 --- a/examples/hello.ludic +++ b/examples/hello.ludic @@ -1,10 +1,10 @@ # hello.ludic — smallest program that exercises the ECS pipeline -game Hello { +program Hello { - component Pos { x: int = 0, y: int = 0 } - component Vel { dx: int = 0, dy: int = 0 } + property Pos { x: int = 0, y: int = 0 } + property Vel { dx: int = 0, dy: int = 0 } - system Boot phase Start { + handler Boot phase Start { spawn Mob { Pos { x: 3, y: 4 } Vel { dx: 1, dy: 0 } @@ -17,14 +17,14 @@ game Hello { # a system can declare the entities it operates on: the body then runs once # per match, with the components bound and self() giving that entity. - system Move phase FixedUpdate + handler Move phase FixedUpdate query (p, v) [Pos, Vel] { p.x = p.x + v.dx p.y = p.y + v.dy } - system Report phase Update { + handler Report phase Update { for (p) in query [Pos] { print_int(p.x) print_int(p.y) diff --git a/examples/lib/arena.ludic b/examples/lib/arena.ludic index 02d87ccb..089386c7 100644 --- a/examples/lib/arena.ludic +++ b/examples/lib/arena.ludic @@ -9,20 +9,20 @@ # that: the same declaration binds a C, Rust or Zig library just as well. This # is how Ludic reaches the outside world without a C shim. # ============================================================================ -game Arena { +program Arena { extern fn damage(attack: int, armour: int, roll: int) -> int = "damage" extern fn hits_to_kill(hp: int, attack: int, armour: int) -> int = "hits_to_kill" extern fn xp_for(level: int, kills: int) -> int = "xp_for" - component Fighter { hp: int = 30, attack: int = 9, armour: int = 2 } + property Fighter { hp: int = 30, attack: int = 9, armour: int = 2 } - system Boot phase Start { + handler Boot phase Start { spawn Hero { Fighter { hp: 40, attack: 12, armour: 3 } } spawn Orc { Fighter { hp: 24, attack: 7, armour: 1 } } } - system Fight phase Update { + handler Fight phase Update { for (f) in query [Fighter] { print_int(damage(f.attack, f.armour, 0)) print_int(damage(f.attack, f.armour, 20)) diff --git a/examples/lib/combat.ludic b/examples/lib/combat.ludic index b694eb9e..7dfab92e 100644 --- a/examples/lib/combat.ludic +++ b/examples/lib/combat.ludic @@ -11,7 +11,7 @@ # engine, a test harness, a scripting host. Non-exported functions stay private # to the library. # ============================================================================ -module Combat { +program Combat { const CRIT_MULT: int = 2 diff --git a/examples/menu.ludic b/examples/menu.ludic index 39886324..8d4cebad 100644 --- a/examples/menu.ludic +++ b/examples/menu.ludic @@ -2,7 +2,7 @@ # block); the engine lays it out (stacked panel, padding/gap/alignment), draws # it (background, TrueType labels, focusable buttons), and routes keyboard focus # and activation. The game only loads a font, opens the UI, and reads clicks. -game Menu { +program Menu { const R_FONT: int = 0 const R_MSG: int = 1 @@ -19,13 +19,13 @@ game Menu { } } - system Boot phase Start { + handler Boot phase Start { setreg(R_FONT, font_load("/System/Library/Fonts/Supplemental/Arial.ttf")) ui_build() ui_open(UI_MainMenu) } - system Nav phase Update { + handler Nav phase Update { ui_tick(key()) if ui_clicked(UI_NewGame) { ui_set_text(UI_NewGame, "Starting...") } if ui_clicked(UI_Continue) { ui_set_text(UI_Continue, "No save") } @@ -33,7 +33,7 @@ game Menu { if ui_clicked(UI_Quit) { quit() } } - system Draw phase Render { + handler Draw phase Render { clear(0x0e0e16) ui_render() present() diff --git a/examples/qdecl.ludic b/examples/qdecl.ludic index 5d66fb13..8d7d2cf5 100644 --- a/examples/qdecl.ludic +++ b/examples/qdecl.ludic @@ -9,29 +9,29 @@ # the whole body — the loop header just moves into the declaration. The body runs # once per matching entity, and self() is that entity. # ============================================================================ -game QueryDecl { - component Battle { hp: int = 0, side: int = 0 } - component Pos { x: int = 0, y: int = 0 } - archetype Foe { Battle, Pos } +program QueryDecl { + property Battle { hp: int = 0, side: int = 0 } + property Pos { x: int = 0, y: int = 0 } + model Foe { Battle, Pos } - system Seed phase Start { + handler Seed phase Start { spawn Foe { Battle { hp: 3, side: 1 } } spawn Foe { Battle { hp: 0, side: 1 } } spawn Foe { Battle { hp: -2, side: 0 } } } - system CleanBattle phase LateUpdate + handler CleanBattle phase LateUpdate query (b, p) [Battle, Pos, {Foe}] where b.hp <= 0 and b.side == 1 { print_int(p.x) despawn self() } - system Census phase Render + handler Census phase Render query (b) [Battle] { print_int(b.hp) } - system Bye phase Render { quit() } + handler Bye phase Render { quit() } } diff --git a/examples/scenes.ludic b/examples/scenes.ludic index 0a1d4c87..9f9f6449 100644 --- a/examples/scenes.ludic +++ b/examples/scenes.ludic @@ -4,16 +4,16 @@ # LANGUAGE.md §"Scenes & layers"). It is deliberately excluded from test.sh. # Games that need scene-like states use a mode register + `machine` today, as # examples/chronorift does. -game SceneDemo { +program SceneDemo { const R_N: int = 0 - system Boot phase Start { setreg(R_N, 0); print_int(1000) } + handler Boot phase Start { setreg(R_N, 0); print_int(1000) } scene Title start { on enter { print_int(1) } on exit { print_int(2) } layer Main { - system Tick phase Update { + handler Tick phase Update { setreg(R_N, reg(R_N) + 1) print_int(100 + reg(R_N)) if reg(R_N) >= 2 { enter Play } @@ -25,14 +25,14 @@ game SceneDemo { on enter { print_int(3); setreg(R_N, 0) } on exit { print_int(4) } layer World { - system Step phase Update { + handler Step phase Update { setreg(R_N, reg(R_N) + 1) print_int(200 + reg(R_N)) if reg(R_N) >= 2 { quit() } } } layer Hud { - system Draw phase Render { print_int(900) } + handler Draw phase Render { print_int(900) } } } } diff --git a/examples/snake.ludic b/examples/snake.ludic index 15d03ff8..1ad4d34f 100644 --- a/examples/snake.ludic +++ b/examples/snake.ludic @@ -3,10 +3,10 @@ # general: compiled by the SAME unmodified ludicc + runtime as the JRPG. # No sprites/assets — pure primitives. Build: ./build.sh examples/snake.ludic # ============================================================================ -game Snake { +program Snake { - component Pos { x: int = 0, y: int = 0 } - component Seg { order: int = 0 } + property Pos { x: int = 0, y: int = 0 } + property Seg { order: int = 0 } const GW: int = 20 const GH: int = 15 @@ -39,9 +39,9 @@ game Snake { return 0 } - system Boot phase Start { reset(0) } + handler Boot phase Start { reset(0) } - system Input phase Input { + handler Input phase Input { let k = key() if reg(R_MODE) == 0 { if k == 'w' { if reg(R_DIR) != 1 { setreg(R_DIR, 0) } } @@ -55,7 +55,7 @@ game Snake { } } - system Move phase Update { + handler Move phase Update { if reg(R_MODE) == 0 { setreg(R_TICK, reg(R_TICK) + 1) if reg(R_TICK) >= 6 { @@ -110,7 +110,7 @@ game Snake { } } - system Draw phase Render { + handler Draw phase Render { clear(0x0d1020) for gy in 0 .. GH { for gx in 0 .. GW { diff --git a/selfhost/bootstrap-cfree.sh b/selfhost/bootstrap-cfree.sh index 45ed1077..2b23b48f 100755 --- a/selfhost/bootstrap-cfree.sh +++ b/selfhost/bootstrap-cfree.sh @@ -24,7 +24,7 @@ FRAGS="selfhost/str.ludic selfhost/buf.ludic selfhost/io.ludic selfhost/ast.ludi selfhost/lex.ludic selfhost/parse.ludic selfhost/parse_game.ludic selfhost/emit_core.ludic selfhost/emit_head.ludic selfhost/emit_addr.ludic selfhost/emit_intrin.ludic selfhost/emit_intrin2.ludic selfhost/emit_math.ludic selfhost/emit_new.ludic selfhost/emit_expr.ludic selfhost/emit_stmt.ludic selfhost/emit_ecs.ludic selfhost/emit_query.ludic selfhost/emit_spawn.ludic selfhost/emit_game.ludic selfhost/emit_machine.ludic selfhost/emit_save.ludic selfhost/emit_ui.ludic selfhost/emit_decl.ludic selfhost/main.ludic" -{ echo "game SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" +{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" # the seed-built compiler compiles its own source "$B/sh_seed" "$B/selfhost.ludic" > "$B/out.ll" 2>/dev/null || { echo "FAIL: seed compiler self-compile"; exit 1; } diff --git a/selfhost/build.sh b/selfhost/build.sh index b2050eb5..b32c5374 100755 --- a/selfhost/build.sh +++ b/selfhost/build.sh @@ -33,7 +33,7 @@ selfhost/emit_ui.ludic selfhost/emit_decl.ludic selfhost/main.ludic" SRC=build/selfhost.ludic -{ echo "game SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$SRC" +{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$SRC" # the compiler emits IR to stdout; clang assembles and links it "$LC" "$SRC" > "$OUT.ll" 2>/dev/null && ${LUDIC_CC:-clang} "$OUT.ll" -o "$OUT" 2>/dev/null rc=$?; rm -f "$OUT.ll"; [ $rc -eq 0 ] diff --git a/selfhost/emit_spawn.ludic b/selfhost/emit_spawn.ludic index c6ceddff..a7a2f858 100644 --- a/selfhost/emit_spawn.ludic +++ b/selfhost/emit_spawn.ludic @@ -4,7 +4,7 @@ fn emit_init_component(e: ptr, comp: ptr, rec: Node) -> void { let me = itoa(MAX_ENT) let c = find_comp(comp) - if ptr_is_null(c) { perr(sconcat("spawn: unknown component ", comp)) } + if ptr_is_null(c) { perr(sconcat("spawn: unknown property ", comp)) } let hp = nreg(); emit(" "); emit(hp); emit(" = getelementptr inbounds ["); emit(me); emit(" x i8], ptr @H_"); emit(comp); emit(", i32 0, i32 "); emit(e); emit("\n") emit(" store i8 1, ptr "); emit(hp); emit("\n") let slot = nreg() diff --git a/selfhost/ludicc.seed.ll b/selfhost/ludicc.seed.ll index f955917d..1ef6c92c 100644 --- a/selfhost/ludicc.seed.ll +++ b/selfhost/ludicc.seed.ll @@ -173,661 +173,661 @@ declare void @win_close() @.str104 = private unnamed_addr constant [1 x i8] c"\00" @.str105 = private unnamed_addr constant [2 x i8] c"@\00" @.str106 = private unnamed_addr constant [7 x i8] c"export\00" -@.str107 = private unnamed_addr constant [2 x i8] c"(\00" +@.str107 = private unnamed_addr constant [8 x i8] c"Queries\00" @.str108 = private unnamed_addr constant [2 x i8] c"(\00" -@.str109 = private unnamed_addr constant [2 x i8] c")\00" -@.str110 = private unnamed_addr constant [7 x i8] c"import\00" -@.str111 = private unnamed_addr constant [29 x i8] c"expected \22path\22 after import\00" -@.str112 = private unnamed_addr constant [7 x i8] c"struct\00" -@.str113 = private unnamed_addr constant [5 x i8] c"enum\00" -@.str114 = private unnamed_addr constant [10 x i8] c"component\00" -@.str115 = private unnamed_addr constant [10 x i8] c"archetype\00" -@.str116 = private unnamed_addr constant [7 x i8] c"system\00" -@.str117 = private unnamed_addr constant [3 x i8] c"ui\00" -@.str118 = private unnamed_addr constant [4 x i8] c"var\00" -@.str119 = private unnamed_addr constant [6 x i8] c"const\00" -@.str120 = private unnamed_addr constant [3 x i8] c"fn\00" -@.str121 = private unnamed_addr constant [7 x i8] c"extern\00" -@.str122 = private unnamed_addr constant [5 x i8] c"main\00" -@.str123 = private unnamed_addr constant [21 x i8] c"expected declaration\00" -@.str124 = private unnamed_addr constant [20 x i8] c"cannot open import \00" -@.str125 = private unnamed_addr constant [1 x i8] c"\00" -@.str126 = private unnamed_addr constant [26 x i8] c"runtime/native/core.ludic\00" -@.str127 = private unnamed_addr constant [6 x i8] c"Ludic\00" -@.str128 = private unnamed_addr constant [7 x i8] c"import\00" -@.str129 = private unnamed_addr constant [5 x i8] c"game\00" -@.str130 = private unnamed_addr constant [7 x i8] c"module\00" -@.str131 = private unnamed_addr constant [2 x i8] c"{\00" -@.str132 = private unnamed_addr constant [2 x i8] c"}\00" -@.str133 = private unnamed_addr constant [2 x i8] c"{\00" -@.str134 = private unnamed_addr constant [2 x i8] c"}\00" -@.str135 = private unnamed_addr constant [2 x i8] c":\00" -@.str136 = private unnamed_addr constant [2 x i8] c"=\00" -@.str137 = private unnamed_addr constant [2 x i8] c",\00" +@.str109 = private unnamed_addr constant [2 x i8] c"(\00" +@.str110 = private unnamed_addr constant [2 x i8] c")\00" +@.str111 = private unnamed_addr constant [7 x i8] c"import\00" +@.str112 = private unnamed_addr constant [29 x i8] c"expected \22path\22 after import\00" +@.str113 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str114 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str115 = private unnamed_addr constant [9 x i8] c"property\00" +@.str116 = private unnamed_addr constant [6 x i8] c"model\00" +@.str117 = private unnamed_addr constant [8 x i8] c"handler\00" +@.str118 = private unnamed_addr constant [3 x i8] c"ui\00" +@.str119 = private unnamed_addr constant [4 x i8] c"var\00" +@.str120 = private unnamed_addr constant [6 x i8] c"const\00" +@.str121 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str122 = private unnamed_addr constant [7 x i8] c"extern\00" +@.str123 = private unnamed_addr constant [6 x i8] c"entry\00" +@.str124 = private unnamed_addr constant [21 x i8] c"expected declaration\00" +@.str125 = private unnamed_addr constant [20 x i8] c"cannot open import \00" +@.str126 = private unnamed_addr constant [1 x i8] c"\00" +@.str127 = private unnamed_addr constant [26 x i8] c"runtime/native/core.ludic\00" +@.str128 = private unnamed_addr constant [6 x i8] c"Ludic\00" +@.str129 = private unnamed_addr constant [7 x i8] c"import\00" +@.str130 = private unnamed_addr constant [2 x i8] c"@\00" +@.str131 = private unnamed_addr constant [2 x i8] c"(\00" +@.str132 = private unnamed_addr constant [2 x i8] c"(\00" +@.str133 = private unnamed_addr constant [2 x i8] c")\00" +@.str134 = private unnamed_addr constant [8 x i8] c"program\00" +@.str135 = private unnamed_addr constant [2 x i8] c"{\00" +@.str136 = private unnamed_addr constant [2 x i8] c"}\00" +@.str137 = private unnamed_addr constant [2 x i8] c"{\00" @.str138 = private unnamed_addr constant [2 x i8] c"}\00" -@.str139 = private unnamed_addr constant [2 x i8] c"[\00" -@.str140 = private unnamed_addr constant [2 x i8] c"[\00" -@.str141 = private unnamed_addr constant [2 x i8] c"]\00" -@.str142 = private unnamed_addr constant [7 x i8] c"Update\00" -@.str143 = private unnamed_addr constant [2 x i8] c"@\00" -@.str144 = private unnamed_addr constant [2 x i8] c"(\00" -@.str145 = private unnamed_addr constant [2 x i8] c"(\00" -@.str146 = private unnamed_addr constant [2 x i8] c")\00" -@.str147 = private unnamed_addr constant [6 x i8] c"phase\00" -@.str148 = private unnamed_addr constant [6 x i8] c"reads\00" -@.str149 = private unnamed_addr constant [7 x i8] c"writes\00" -@.str150 = private unnamed_addr constant [6 x i8] c"query\00" -@.str151 = private unnamed_addr constant [2 x i8] c"(\00" -@.str152 = private unnamed_addr constant [2 x i8] c"(\00" -@.str153 = private unnamed_addr constant [2 x i8] c")\00" -@.str154 = private unnamed_addr constant [2 x i8] c",\00" -@.str155 = private unnamed_addr constant [2 x i8] c")\00" -@.str156 = private unnamed_addr constant [2 x i8] c"[\00" -@.str157 = private unnamed_addr constant [2 x i8] c"]\00" -@.str158 = private unnamed_addr constant [2 x i8] c"{\00" -@.str159 = private unnamed_addr constant [2 x i8] c"}\00" -@.str160 = private unnamed_addr constant [2 x i8] c",\00" +@.str139 = private unnamed_addr constant [2 x i8] c":\00" +@.str140 = private unnamed_addr constant [2 x i8] c"=\00" +@.str141 = private unnamed_addr constant [2 x i8] c",\00" +@.str142 = private unnamed_addr constant [2 x i8] c"}\00" +@.str143 = private unnamed_addr constant [2 x i8] c"[\00" +@.str144 = private unnamed_addr constant [2 x i8] c"[\00" +@.str145 = private unnamed_addr constant [2 x i8] c"]\00" +@.str146 = private unnamed_addr constant [7 x i8] c"Update\00" +@.str147 = private unnamed_addr constant [2 x i8] c"@\00" +@.str148 = private unnamed_addr constant [2 x i8] c"(\00" +@.str149 = private unnamed_addr constant [2 x i8] c"(\00" +@.str150 = private unnamed_addr constant [2 x i8] c")\00" +@.str151 = private unnamed_addr constant [6 x i8] c"phase\00" +@.str152 = private unnamed_addr constant [6 x i8] c"reads\00" +@.str153 = private unnamed_addr constant [7 x i8] c"writes\00" +@.str154 = private unnamed_addr constant [6 x i8] c"query\00" +@.str155 = private unnamed_addr constant [2 x i8] c"(\00" +@.str156 = private unnamed_addr constant [2 x i8] c"(\00" +@.str157 = private unnamed_addr constant [2 x i8] c")\00" +@.str158 = private unnamed_addr constant [2 x i8] c",\00" +@.str159 = private unnamed_addr constant [2 x i8] c")\00" +@.str160 = private unnamed_addr constant [2 x i8] c"[\00" @.str161 = private unnamed_addr constant [2 x i8] c"]\00" -@.str162 = private unnamed_addr constant [6 x i8] c"where\00" -@.str163 = private unnamed_addr constant [2 x i8] c"(\00" -@.str164 = private unnamed_addr constant [2 x i8] c")\00" -@.str165 = private unnamed_addr constant [2 x i8] c",\00" -@.str166 = private unnamed_addr constant [2 x i8] c")\00" -@.str167 = private unnamed_addr constant [2 x i8] c"{\00" -@.str168 = private unnamed_addr constant [2 x i8] c"}\00" +@.str162 = private unnamed_addr constant [2 x i8] c"{\00" +@.str163 = private unnamed_addr constant [2 x i8] c"}\00" +@.str164 = private unnamed_addr constant [2 x i8] c",\00" +@.str165 = private unnamed_addr constant [2 x i8] c"]\00" +@.str166 = private unnamed_addr constant [6 x i8] c"where\00" +@.str167 = private unnamed_addr constant [2 x i8] c"(\00" +@.str168 = private unnamed_addr constant [2 x i8] c")\00" @.str169 = private unnamed_addr constant [2 x i8] c",\00" -@.str170 = private unnamed_addr constant [2 x i8] c"}\00" -@.str171 = private unnamed_addr constant [2 x i8] c"{\00" -@.str172 = private unnamed_addr constant [2 x i8] c"}\00" -@.str173 = private unnamed_addr constant [2 x i8] c",\00" -@.str174 = private unnamed_addr constant [2 x i8] c"}\00" -@.str175 = private unnamed_addr constant [2 x i8] c"{\00" -@.str176 = private unnamed_addr constant [2 x i8] c"}\00" -@.str177 = private unnamed_addr constant [2 x i8] c",\00" -@.str178 = private unnamed_addr constant [2 x i8] c"}\00" -@.str179 = private unnamed_addr constant [2 x i8] c"(\00" -@.str180 = private unnamed_addr constant [2 x i8] c")\00" -@.str181 = private unnamed_addr constant [2 x i8] c":\00" -@.str182 = private unnamed_addr constant [2 x i8] c",\00" -@.str183 = private unnamed_addr constant [2 x i8] c")\00" -@.str184 = private unnamed_addr constant [5 x i8] c"void\00" -@.str185 = private unnamed_addr constant [3 x i8] c"->\00" -@.str186 = private unnamed_addr constant [2 x i8] c"=\00" -@.str187 = private unnamed_addr constant [2 x i8] c":\00" -@.str188 = private unnamed_addr constant [2 x i8] c":\00" -@.str189 = private unnamed_addr constant [2 x i8] c"{\00" -@.str190 = private unnamed_addr constant [2 x i8] c"}\00" +@.str170 = private unnamed_addr constant [2 x i8] c")\00" +@.str171 = private unnamed_addr constant [4 x i8] c"and\00" +@.str172 = private unnamed_addr constant [2 x i8] c"(\00" +@.str173 = private unnamed_addr constant [2 x i8] c")\00" +@.str174 = private unnamed_addr constant [2 x i8] c")\00" +@.str175 = private unnamed_addr constant [2 x i8] c":\00" +@.str176 = private unnamed_addr constant [6 x i8] c"these\00" +@.str177 = private unnamed_addr constant [2 x i8] c"[\00" +@.str178 = private unnamed_addr constant [2 x i8] c"]\00" +@.str179 = private unnamed_addr constant [2 x i8] c"{\00" +@.str180 = private unnamed_addr constant [2 x i8] c"}\00" +@.str181 = private unnamed_addr constant [2 x i8] c",\00" +@.str182 = private unnamed_addr constant [2 x i8] c"]\00" +@.str183 = private unnamed_addr constant [3 x i8] c"on\00" +@.str184 = private unnamed_addr constant [2 x i8] c",\00" +@.str185 = private unnamed_addr constant [2 x i8] c")\00" +@.str186 = private unnamed_addr constant [2 x i8] c"{\00" +@.str187 = private unnamed_addr constant [2 x i8] c"}\00" +@.str188 = private unnamed_addr constant [2 x i8] c",\00" +@.str189 = private unnamed_addr constant [2 x i8] c"}\00" +@.str190 = private unnamed_addr constant [2 x i8] c"{\00" @.str191 = private unnamed_addr constant [2 x i8] c"}\00" -@.str192 = private unnamed_addr constant [2 x i8] c"{\00" +@.str192 = private unnamed_addr constant [2 x i8] c",\00" @.str193 = private unnamed_addr constant [2 x i8] c"}\00" -@.str194 = private unnamed_addr constant [3 x i8] c"%t\00" -@.str195 = private unnamed_addr constant [3 x i8] c" \00" -@.str196 = private unnamed_addr constant [11 x i8] c" = alloca \00" -@.str197 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str198 = private unnamed_addr constant [3 x i8] c"%t\00" -@.str199 = private unnamed_addr constant [4 x i8] c"int\00" -@.str200 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str201 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str202 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str194 = private unnamed_addr constant [2 x i8] c"{\00" +@.str195 = private unnamed_addr constant [2 x i8] c"}\00" +@.str196 = private unnamed_addr constant [2 x i8] c",\00" +@.str197 = private unnamed_addr constant [2 x i8] c"}\00" +@.str198 = private unnamed_addr constant [2 x i8] c"(\00" +@.str199 = private unnamed_addr constant [2 x i8] c")\00" +@.str200 = private unnamed_addr constant [2 x i8] c":\00" +@.str201 = private unnamed_addr constant [2 x i8] c",\00" +@.str202 = private unnamed_addr constant [2 x i8] c")\00" @.str203 = private unnamed_addr constant [5 x i8] c"void\00" -@.str204 = private unnamed_addr constant [5 x i8] c"void\00" -@.str205 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str206 = private unnamed_addr constant [6 x i8] c"%Str_\00" -@.str207 = private unnamed_addr constant [6 x i8] c"%Cmp_\00" -@.str208 = private unnamed_addr constant [4 x i8] c"int\00" -@.str209 = private unnamed_addr constant [6 x i8] c"@.str\00" -@.str210 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" -@.str211 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" -@.str212 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" -@.str213 = private unnamed_addr constant [3 x i8] c" \00" -@.str214 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" -@.str215 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str204 = private unnamed_addr constant [3 x i8] c"->\00" +@.str205 = private unnamed_addr constant [2 x i8] c"=\00" +@.str206 = private unnamed_addr constant [2 x i8] c":\00" +@.str207 = private unnamed_addr constant [2 x i8] c":\00" +@.str208 = private unnamed_addr constant [2 x i8] c"{\00" +@.str209 = private unnamed_addr constant [2 x i8] c"}\00" +@.str210 = private unnamed_addr constant [2 x i8] c"}\00" +@.str211 = private unnamed_addr constant [2 x i8] c"{\00" +@.str212 = private unnamed_addr constant [2 x i8] c"}\00" +@.str213 = private unnamed_addr constant [3 x i8] c"%t\00" +@.str214 = private unnamed_addr constant [3 x i8] c" \00" +@.str215 = private unnamed_addr constant [11 x i8] c" = alloca \00" @.str216 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str217 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str218 = private unnamed_addr constant [5 x i8] c"null\00" -@.str219 = private unnamed_addr constant [2 x i8] c"0\00" -@.str220 = private unnamed_addr constant [2 x i8] c"-\00" -@.str221 = private unnamed_addr constant [2 x i8] c"-\00" -@.str222 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str223 = private unnamed_addr constant [5 x i8] c"null\00" -@.str224 = private unnamed_addr constant [2 x i8] c"0\00" -@.str225 = private unnamed_addr constant [34 x i8] c"; Ludic (self-hosted) -> LLVM IR\0A\00" -@.str226 = private unnamed_addr constant [31 x i8] c"declare i32 @printf(ptr, ...)\0A\00" -@.str227 = private unnamed_addr constant [26 x i8] c"declare ptr @malloc(i64)\0A\00" -@.str228 = private unnamed_addr constant [32 x i8] c"declare ptr @realloc(ptr, i64)\0A\00" -@.str229 = private unnamed_addr constant [25 x i8] c"declare void @free(ptr)\0A\00" -@.str230 = private unnamed_addr constant [30 x i8] c"declare ptr @fopen(ptr, ptr)\0A\00" -@.str231 = private unnamed_addr constant [40 x i8] c"declare i64 @fread(ptr, i64, i64, ptr)\0A\00" -@.str232 = private unnamed_addr constant [41 x i8] c"declare i64 @fwrite(ptr, i64, i64, ptr)\0A\00" -@.str233 = private unnamed_addr constant [35 x i8] c"declare i32 @fseek(ptr, i64, i32)\0A\00" -@.str234 = private unnamed_addr constant [25 x i8] c"declare i64 @ftell(ptr)\0A\00" -@.str235 = private unnamed_addr constant [26 x i8] c"declare i32 @fclose(ptr)\0A\00" -@.str236 = private unnamed_addr constant [25 x i8] c"declare void @exit(i32)\0A\00" -@.str237 = private unnamed_addr constant [26 x i8] c"declare i32 @system(ptr)\0A\00" -@.str238 = private unnamed_addr constant [26 x i8] c"declare ptr @getenv(ptr)\0A\00" -@.str239 = private unnamed_addr constant [36 x i8] c"declare ptr @memcpy(ptr, ptr, i64)\0A\00" -@.str240 = private unnamed_addr constant [36 x i8] c"declare ptr @memset(ptr, i32, i64)\0A\00" -@.str241 = private unnamed_addr constant [26 x i8] c"declare i64 @strlen(ptr)\0A\00" -@.str242 = private unnamed_addr constant [24 x i8] c"declare i32 @getchar()\0A\00" -@.str243 = private unnamed_addr constant [27 x i8] c"declare i32 @putchar(i32)\0A\00" -@.str244 = private unnamed_addr constant [24 x i8] c"declare i64 @time(ptr)\0A\00" -@.str245 = private unnamed_addr constant [44 x i8] c"declare void @win_open(i32, i32, i32, ptr)\0A\00" -@.str246 = private unnamed_addr constant [25 x i8] c"declare i32 @win_poll()\0A\00" -@.str247 = private unnamed_addr constant [42 x i8] c"declare void @win_present(ptr, i32, i32)\0A\00" -@.str248 = private unnamed_addr constant [28 x i8] c"declare i32 @win_running()\0A\00" -@.str249 = private unnamed_addr constant [27 x i8] c"declare void @win_close()\0A\00" -@.str250 = private unnamed_addr constant [34 x i8] c"@__stderrp = external global ptr\0A\00" -@.str251 = private unnamed_addr constant [61 x i8] c"@.fmt_str = private unnamed_addr constant [3 x i8] c\22%s\5C00\22\0A\00" -@.str252 = private unnamed_addr constant [64 x i8] c"@.fmt_int = private unnamed_addr constant [4 x i8] c\22%d\5C0A\5C00\22\0A\00" -@.str253 = private unnamed_addr constant [33 x i8] c"@L_argc = internal global i32 0\0A\00" -@.str254 = private unnamed_addr constant [36 x i8] c"@L_argv = internal global ptr null\0A\00" -@.str255 = private unnamed_addr constant [46 x i8] c"@.gametitle = private unnamed_addr constant [\00" -@.str256 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" -@.str257 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" -@.str258 = private unnamed_addr constant [34 x i8] c"%LSlice = type { ptr, i32, i32 }\0A\00" -@.str259 = private unnamed_addr constant [6 x i8] c"%Str_\00" -@.str260 = private unnamed_addr constant [11 x i8] c" = type { \00" -@.str261 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str262 = private unnamed_addr constant [3 x i8] c", \00" -@.str263 = private unnamed_addr constant [4 x i8] c" }\0A\00" -@.str264 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str265 = private unnamed_addr constant [20 x i8] c" = internal global \00" -@.str266 = private unnamed_addr constant [2 x i8] c" \00" -@.str267 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str268 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" -@.str269 = private unnamed_addr constant [15 x i8] c"no such field \00" -@.str270 = private unnamed_addr constant [3 x i8] c" \00" -@.str271 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str272 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str273 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str274 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str275 = private unnamed_addr constant [21 x i8] c"indexing a non-slice\00" -@.str276 = private unnamed_addr constant [3 x i8] c" \00" -@.str277 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str278 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" -@.str279 = private unnamed_addr constant [3 x i8] c" \00" -@.str280 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" -@.str281 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str282 = private unnamed_addr constant [3 x i8] c" \00" -@.str283 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str284 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str285 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str217 = private unnamed_addr constant [3 x i8] c"%t\00" +@.str218 = private unnamed_addr constant [4 x i8] c"int\00" +@.str219 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str220 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str221 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str222 = private unnamed_addr constant [5 x i8] c"void\00" +@.str223 = private unnamed_addr constant [5 x i8] c"void\00" +@.str224 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str225 = private unnamed_addr constant [6 x i8] c"%Str_\00" +@.str226 = private unnamed_addr constant [6 x i8] c"%Cmp_\00" +@.str227 = private unnamed_addr constant [4 x i8] c"int\00" +@.str228 = private unnamed_addr constant [6 x i8] c"@.str\00" +@.str229 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" +@.str230 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str231 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" +@.str232 = private unnamed_addr constant [3 x i8] c" \00" +@.str233 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" +@.str234 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str235 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str236 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str237 = private unnamed_addr constant [5 x i8] c"null\00" +@.str238 = private unnamed_addr constant [2 x i8] c"0\00" +@.str239 = private unnamed_addr constant [2 x i8] c"-\00" +@.str240 = private unnamed_addr constant [2 x i8] c"-\00" +@.str241 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str242 = private unnamed_addr constant [5 x i8] c"null\00" +@.str243 = private unnamed_addr constant [2 x i8] c"0\00" +@.str244 = private unnamed_addr constant [34 x i8] c"; Ludic (self-hosted) -> LLVM IR\0A\00" +@.str245 = private unnamed_addr constant [31 x i8] c"declare i32 @printf(ptr, ...)\0A\00" +@.str246 = private unnamed_addr constant [26 x i8] c"declare ptr @malloc(i64)\0A\00" +@.str247 = private unnamed_addr constant [32 x i8] c"declare ptr @realloc(ptr, i64)\0A\00" +@.str248 = private unnamed_addr constant [25 x i8] c"declare void @free(ptr)\0A\00" +@.str249 = private unnamed_addr constant [30 x i8] c"declare ptr @fopen(ptr, ptr)\0A\00" +@.str250 = private unnamed_addr constant [40 x i8] c"declare i64 @fread(ptr, i64, i64, ptr)\0A\00" +@.str251 = private unnamed_addr constant [41 x i8] c"declare i64 @fwrite(ptr, i64, i64, ptr)\0A\00" +@.str252 = private unnamed_addr constant [35 x i8] c"declare i32 @fseek(ptr, i64, i32)\0A\00" +@.str253 = private unnamed_addr constant [25 x i8] c"declare i64 @ftell(ptr)\0A\00" +@.str254 = private unnamed_addr constant [26 x i8] c"declare i32 @fclose(ptr)\0A\00" +@.str255 = private unnamed_addr constant [25 x i8] c"declare void @exit(i32)\0A\00" +@.str256 = private unnamed_addr constant [26 x i8] c"declare i32 @system(ptr)\0A\00" +@.str257 = private unnamed_addr constant [26 x i8] c"declare ptr @getenv(ptr)\0A\00" +@.str258 = private unnamed_addr constant [36 x i8] c"declare ptr @memcpy(ptr, ptr, i64)\0A\00" +@.str259 = private unnamed_addr constant [36 x i8] c"declare ptr @memset(ptr, i32, i64)\0A\00" +@.str260 = private unnamed_addr constant [26 x i8] c"declare i64 @strlen(ptr)\0A\00" +@.str261 = private unnamed_addr constant [24 x i8] c"declare i32 @getchar()\0A\00" +@.str262 = private unnamed_addr constant [27 x i8] c"declare i32 @putchar(i32)\0A\00" +@.str263 = private unnamed_addr constant [24 x i8] c"declare i64 @time(ptr)\0A\00" +@.str264 = private unnamed_addr constant [44 x i8] c"declare void @win_open(i32, i32, i32, ptr)\0A\00" +@.str265 = private unnamed_addr constant [25 x i8] c"declare i32 @win_poll()\0A\00" +@.str266 = private unnamed_addr constant [42 x i8] c"declare void @win_present(ptr, i32, i32)\0A\00" +@.str267 = private unnamed_addr constant [28 x i8] c"declare i32 @win_running()\0A\00" +@.str268 = private unnamed_addr constant [27 x i8] c"declare void @win_close()\0A\00" +@.str269 = private unnamed_addr constant [34 x i8] c"@__stderrp = external global ptr\0A\00" +@.str270 = private unnamed_addr constant [61 x i8] c"@.fmt_str = private unnamed_addr constant [3 x i8] c\22%s\5C00\22\0A\00" +@.str271 = private unnamed_addr constant [64 x i8] c"@.fmt_int = private unnamed_addr constant [4 x i8] c\22%d\5C0A\5C00\22\0A\00" +@.str272 = private unnamed_addr constant [33 x i8] c"@L_argc = internal global i32 0\0A\00" +@.str273 = private unnamed_addr constant [36 x i8] c"@L_argv = internal global ptr null\0A\00" +@.str274 = private unnamed_addr constant [46 x i8] c"@.gametitle = private unnamed_addr constant [\00" +@.str275 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str276 = private unnamed_addr constant [6 x i8] c"\5C00\22\0A\00" +@.str277 = private unnamed_addr constant [34 x i8] c"%LSlice = type { ptr, i32, i32 }\0A\00" +@.str278 = private unnamed_addr constant [6 x i8] c"%Str_\00" +@.str279 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str280 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str281 = private unnamed_addr constant [3 x i8] c", \00" +@.str282 = private unnamed_addr constant [4 x i8] c" }\0A\00" +@.str283 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str284 = private unnamed_addr constant [20 x i8] c" = internal global \00" +@.str285 = private unnamed_addr constant [2 x i8] c" \00" @.str286 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str287 = private unnamed_addr constant [9 x i8] c"ptr_null\00" -@.str288 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" -@.str289 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" -@.str290 = private unnamed_addr constant [6 x i8] c"peek8\00" -@.str291 = private unnamed_addr constant [6 x i8] c"poke8\00" -@.str292 = private unnamed_addr constant [12 x i8] c"ptr_is_null\00" -@.str293 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str294 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str295 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str296 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str297 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str298 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str299 = private unnamed_addr constant [10 x i8] c"print_str\00" -@.str300 = private unnamed_addr constant [10 x i8] c"print_int\00" -@.str301 = private unnamed_addr constant [8 x i8] c"os_argc\00" -@.str302 = private unnamed_addr constant [7 x i8] c"os_arg\00" -@.str303 = private unnamed_addr constant [8 x i8] c"os_exit\00" -@.str304 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str305 = private unnamed_addr constant [10 x i8] c"os_system\00" -@.str306 = private unnamed_addr constant [10 x i8] c"os_getenv\00" -@.str307 = private unnamed_addr constant [4 x i8] c"shl\00" -@.str308 = private unnamed_addr constant [4 x i8] c"shr\00" -@.str309 = private unnamed_addr constant [5 x i8] c"band\00" -@.str310 = private unnamed_addr constant [4 x i8] c"bor\00" -@.str311 = private unnamed_addr constant [5 x i8] c"bxor\00" -@.str312 = private unnamed_addr constant [5 x i8] c"bnot\00" -@.str313 = private unnamed_addr constant [7 x i8] c"peek32\00" -@.str314 = private unnamed_addr constant [7 x i8] c"poke32\00" -@.str315 = private unnamed_addr constant [3 x i8] c" \00" -@.str316 = private unnamed_addr constant [4 x i8] c" = \00" -@.str317 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str318 = private unnamed_addr constant [9 x i8] c"ptr_null\00" -@.str319 = private unnamed_addr constant [5 x i8] c"null\00" -@.str320 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str321 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" -@.str322 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str323 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str324 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str325 = private unnamed_addr constant [2 x i8] c")\00" -@.str326 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str327 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" -@.str328 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str329 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str330 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" -@.str331 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str332 = private unnamed_addr constant [2 x i8] c")\00" -@.str333 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str334 = private unnamed_addr constant [6 x i8] c"peek8\00" -@.str335 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str336 = private unnamed_addr constant [9 x i8] c"zext i8 \00" -@.str337 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str338 = private unnamed_addr constant [4 x i8] c"int\00" -@.str339 = private unnamed_addr constant [6 x i8] c"poke8\00" -@.str340 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" -@.str341 = private unnamed_addr constant [7 x i8] c" to i8\00" -@.str342 = private unnamed_addr constant [12 x i8] c" store i8 \00" -@.str343 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str344 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str345 = private unnamed_addr constant [2 x i8] c"0\00" -@.str346 = private unnamed_addr constant [5 x i8] c"void\00" -@.str347 = private unnamed_addr constant [12 x i8] c"ptr_is_null\00" -@.str348 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" -@.str349 = private unnamed_addr constant [7 x i8] c", null\00" -@.str350 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str351 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str352 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str353 = private unnamed_addr constant [10 x i8] c"file_open\00" -@.str354 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" -@.str355 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str356 = private unnamed_addr constant [2 x i8] c")\00" -@.str357 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str358 = private unnamed_addr constant [10 x i8] c"file_read\00" -@.str359 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str360 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str361 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str362 = private unnamed_addr constant [7 x i8] c"@fread\00" -@.str363 = private unnamed_addr constant [11 x i8] c"file_write\00" -@.str364 = private unnamed_addr constant [8 x i8] c"@fwrite\00" -@.str365 = private unnamed_addr constant [10 x i8] c"call i64 \00" -@.str366 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str367 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str368 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str369 = private unnamed_addr constant [2 x i8] c")\00" -@.str370 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str371 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str372 = private unnamed_addr constant [4 x i8] c"int\00" -@.str373 = private unnamed_addr constant [10 x i8] c"file_seek\00" -@.str374 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str375 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str376 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" -@.str377 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str378 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str379 = private unnamed_addr constant [2 x i8] c")\00" -@.str380 = private unnamed_addr constant [4 x i8] c"int\00" -@.str381 = private unnamed_addr constant [10 x i8] c"file_tell\00" -@.str382 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" -@.str383 = private unnamed_addr constant [2 x i8] c")\00" -@.str384 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str385 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str386 = private unnamed_addr constant [4 x i8] c"int\00" -@.str387 = private unnamed_addr constant [11 x i8] c"file_close\00" -@.str388 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" -@.str389 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str390 = private unnamed_addr constant [2 x i8] c"0\00" -@.str391 = private unnamed_addr constant [5 x i8] c"void\00" -@.str392 = private unnamed_addr constant [10 x i8] c"print_str\00" -@.str393 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_str, ptr \00" -@.str394 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str395 = private unnamed_addr constant [2 x i8] c"0\00" -@.str396 = private unnamed_addr constant [5 x i8] c"void\00" -@.str397 = private unnamed_addr constant [10 x i8] c"print_int\00" -@.str398 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" -@.str399 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str400 = private unnamed_addr constant [2 x i8] c"0\00" -@.str401 = private unnamed_addr constant [5 x i8] c"void\00" -@.str402 = private unnamed_addr constant [8 x i8] c"os_argc\00" -@.str403 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" -@.str404 = private unnamed_addr constant [4 x i8] c"int\00" -@.str405 = private unnamed_addr constant [7 x i8] c"os_arg\00" -@.str406 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" -@.str407 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" -@.str408 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str409 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str410 = private unnamed_addr constant [4 x i8] c"str\00" -@.str411 = private unnamed_addr constant [8 x i8] c"os_exit\00" -@.str412 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" +@.str287 = private unnamed_addr constant [32 x i8] c"member access on non-aggregate \00" +@.str288 = private unnamed_addr constant [15 x i8] c"no such field \00" +@.str289 = private unnamed_addr constant [3 x i8] c" \00" +@.str290 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str291 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str292 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str293 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str294 = private unnamed_addr constant [21 x i8] c"indexing a non-slice\00" +@.str295 = private unnamed_addr constant [3 x i8] c" \00" +@.str296 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str297 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str298 = private unnamed_addr constant [3 x i8] c" \00" +@.str299 = private unnamed_addr constant [18 x i8] c" = load ptr, ptr \00" +@.str300 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str301 = private unnamed_addr constant [3 x i8] c" \00" +@.str302 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str303 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str304 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str305 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str306 = private unnamed_addr constant [9 x i8] c"ptr_null\00" +@.str307 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" +@.str308 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" +@.str309 = private unnamed_addr constant [6 x i8] c"peek8\00" +@.str310 = private unnamed_addr constant [6 x i8] c"poke8\00" +@.str311 = private unnamed_addr constant [12 x i8] c"ptr_is_null\00" +@.str312 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str313 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str314 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str315 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str316 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str317 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str318 = private unnamed_addr constant [10 x i8] c"print_str\00" +@.str319 = private unnamed_addr constant [10 x i8] c"print_int\00" +@.str320 = private unnamed_addr constant [8 x i8] c"os_argc\00" +@.str321 = private unnamed_addr constant [7 x i8] c"os_arg\00" +@.str322 = private unnamed_addr constant [8 x i8] c"os_exit\00" +@.str323 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str324 = private unnamed_addr constant [10 x i8] c"os_system\00" +@.str325 = private unnamed_addr constant [10 x i8] c"os_getenv\00" +@.str326 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str327 = private unnamed_addr constant [4 x i8] c"shr\00" +@.str328 = private unnamed_addr constant [5 x i8] c"band\00" +@.str329 = private unnamed_addr constant [4 x i8] c"bor\00" +@.str330 = private unnamed_addr constant [5 x i8] c"bxor\00" +@.str331 = private unnamed_addr constant [5 x i8] c"bnot\00" +@.str332 = private unnamed_addr constant [7 x i8] c"peek32\00" +@.str333 = private unnamed_addr constant [7 x i8] c"poke32\00" +@.str334 = private unnamed_addr constant [3 x i8] c" \00" +@.str335 = private unnamed_addr constant [4 x i8] c" = \00" +@.str336 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str337 = private unnamed_addr constant [9 x i8] c"ptr_null\00" +@.str338 = private unnamed_addr constant [5 x i8] c"null\00" +@.str339 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str340 = private unnamed_addr constant [10 x i8] c"mem_alloc\00" +@.str341 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str342 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str343 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str344 = private unnamed_addr constant [2 x i8] c")\00" +@.str345 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str346 = private unnamed_addr constant [12 x i8] c"mem_realloc\00" +@.str347 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str348 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str349 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str350 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str351 = private unnamed_addr constant [2 x i8] c")\00" +@.str352 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str353 = private unnamed_addr constant [6 x i8] c"peek8\00" +@.str354 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str355 = private unnamed_addr constant [9 x i8] c"zext i8 \00" +@.str356 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str357 = private unnamed_addr constant [4 x i8] c"int\00" +@.str358 = private unnamed_addr constant [6 x i8] c"poke8\00" +@.str359 = private unnamed_addr constant [11 x i8] c"trunc i32 \00" +@.str360 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str361 = private unnamed_addr constant [12 x i8] c" store i8 \00" +@.str362 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str363 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str364 = private unnamed_addr constant [2 x i8] c"0\00" +@.str365 = private unnamed_addr constant [5 x i8] c"void\00" +@.str366 = private unnamed_addr constant [12 x i8] c"ptr_is_null\00" +@.str367 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str368 = private unnamed_addr constant [7 x i8] c", null\00" +@.str369 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str370 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str371 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str372 = private unnamed_addr constant [10 x i8] c"file_open\00" +@.str373 = private unnamed_addr constant [21 x i8] c"call ptr @fopen(ptr \00" +@.str374 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str375 = private unnamed_addr constant [2 x i8] c")\00" +@.str376 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str377 = private unnamed_addr constant [10 x i8] c"file_read\00" +@.str378 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str379 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str380 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str381 = private unnamed_addr constant [7 x i8] c"@fread\00" +@.str382 = private unnamed_addr constant [11 x i8] c"file_write\00" +@.str383 = private unnamed_addr constant [8 x i8] c"@fwrite\00" +@.str384 = private unnamed_addr constant [10 x i8] c"call i64 \00" +@.str385 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str386 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str387 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str388 = private unnamed_addr constant [2 x i8] c")\00" +@.str389 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str390 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str391 = private unnamed_addr constant [4 x i8] c"int\00" +@.str392 = private unnamed_addr constant [10 x i8] c"file_seek\00" +@.str393 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str394 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str395 = private unnamed_addr constant [21 x i8] c"call i32 @fseek(ptr \00" +@.str396 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str397 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str398 = private unnamed_addr constant [2 x i8] c")\00" +@.str399 = private unnamed_addr constant [4 x i8] c"int\00" +@.str400 = private unnamed_addr constant [10 x i8] c"file_tell\00" +@.str401 = private unnamed_addr constant [21 x i8] c"call i64 @ftell(ptr \00" +@.str402 = private unnamed_addr constant [2 x i8] c")\00" +@.str403 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str404 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str405 = private unnamed_addr constant [4 x i8] c"int\00" +@.str406 = private unnamed_addr constant [11 x i8] c"file_close\00" +@.str407 = private unnamed_addr constant [24 x i8] c" call i32 @fclose(ptr \00" +@.str408 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str409 = private unnamed_addr constant [2 x i8] c"0\00" +@.str410 = private unnamed_addr constant [5 x i8] c"void\00" +@.str411 = private unnamed_addr constant [10 x i8] c"print_str\00" +@.str412 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_str, ptr \00" @.str413 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str414 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" -@.str415 = private unnamed_addr constant [2 x i8] c"0\00" -@.str416 = private unnamed_addr constant [5 x i8] c"void\00" -@.str417 = private unnamed_addr constant [12 x i8] c"file_stderr\00" -@.str418 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" -@.str419 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str420 = private unnamed_addr constant [10 x i8] c"os_system\00" -@.str421 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" -@.str422 = private unnamed_addr constant [2 x i8] c")\00" +@.str414 = private unnamed_addr constant [2 x i8] c"0\00" +@.str415 = private unnamed_addr constant [5 x i8] c"void\00" +@.str416 = private unnamed_addr constant [10 x i8] c"print_int\00" +@.str417 = private unnamed_addr constant [50 x i8] c" call i32 (ptr, ...) @printf(ptr @.fmt_int, i32 \00" +@.str418 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str419 = private unnamed_addr constant [2 x i8] c"0\00" +@.str420 = private unnamed_addr constant [5 x i8] c"void\00" +@.str421 = private unnamed_addr constant [8 x i8] c"os_argc\00" +@.str422 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_argc\00" @.str423 = private unnamed_addr constant [4 x i8] c"int\00" -@.str424 = private unnamed_addr constant [10 x i8] c"os_getenv\00" -@.str425 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" -@.str426 = private unnamed_addr constant [2 x i8] c")\00" -@.str427 = private unnamed_addr constant [4 x i8] c"str\00" -@.str428 = private unnamed_addr constant [5 x i8] c"bnot\00" -@.str429 = private unnamed_addr constant [9 x i8] c"xor i32 \00" -@.str430 = private unnamed_addr constant [5 x i8] c", -1\00" -@.str431 = private unnamed_addr constant [4 x i8] c"int\00" -@.str432 = private unnamed_addr constant [4 x i8] c"shl\00" -@.str433 = private unnamed_addr constant [4 x i8] c"shr\00" -@.str434 = private unnamed_addr constant [5 x i8] c"band\00" -@.str435 = private unnamed_addr constant [4 x i8] c"bor\00" -@.str436 = private unnamed_addr constant [5 x i8] c"bxor\00" -@.str437 = private unnamed_addr constant [4 x i8] c"shl\00" -@.str438 = private unnamed_addr constant [4 x i8] c"shr\00" -@.str439 = private unnamed_addr constant [5 x i8] c"lshr\00" -@.str440 = private unnamed_addr constant [5 x i8] c"band\00" -@.str441 = private unnamed_addr constant [4 x i8] c"and\00" -@.str442 = private unnamed_addr constant [4 x i8] c"bor\00" -@.str443 = private unnamed_addr constant [3 x i8] c"or\00" -@.str444 = private unnamed_addr constant [5 x i8] c"bxor\00" -@.str445 = private unnamed_addr constant [4 x i8] c"xor\00" -@.str446 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str447 = private unnamed_addr constant [3 x i8] c", \00" -@.str448 = private unnamed_addr constant [4 x i8] c"int\00" -@.str449 = private unnamed_addr constant [7 x i8] c"peek32\00" -@.str450 = private unnamed_addr constant [3 x i8] c" \00" -@.str451 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str452 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str453 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str454 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str455 = private unnamed_addr constant [4 x i8] c"int\00" -@.str456 = private unnamed_addr constant [7 x i8] c"poke32\00" -@.str457 = private unnamed_addr constant [3 x i8] c" \00" -@.str458 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str459 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str460 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str461 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str462 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str463 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str464 = private unnamed_addr constant [2 x i8] c"0\00" -@.str465 = private unnamed_addr constant [5 x i8] c"void\00" -@.str466 = private unnamed_addr constant [2 x i8] c"0\00" -@.str467 = private unnamed_addr constant [5 x i8] c"void\00" -@.str468 = private unnamed_addr constant [9 x i8] c"mem_free\00" -@.str469 = private unnamed_addr constant [9 x i8] c"mem_copy\00" -@.str470 = private unnamed_addr constant [8 x i8] c"mem_set\00" -@.str471 = private unnamed_addr constant [8 x i8] c"ptr_add\00" -@.str472 = private unnamed_addr constant [10 x i8] c"read_byte\00" -@.str473 = private unnamed_addr constant [11 x i8] c"write_byte\00" -@.str474 = private unnamed_addr constant [8 x i8] c"str_len\00" -@.str475 = private unnamed_addr constant [8 x i8] c"os_time\00" -@.str476 = private unnamed_addr constant [6 x i8] c"peekf\00" -@.str477 = private unnamed_addr constant [6 x i8] c"pokef\00" -@.str478 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str479 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str480 = private unnamed_addr constant [6 x i8] c"peekp\00" -@.str481 = private unnamed_addr constant [6 x i8] c"pokep\00" -@.str482 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str483 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str484 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str485 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str486 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str487 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str488 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str489 = private unnamed_addr constant [9 x i8] c"mem_free\00" -@.str490 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" -@.str491 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str492 = private unnamed_addr constant [2 x i8] c"0\00" -@.str493 = private unnamed_addr constant [5 x i8] c"void\00" -@.str494 = private unnamed_addr constant [9 x i8] c"mem_copy\00" -@.str495 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str496 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str497 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" -@.str498 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str499 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str500 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str501 = private unnamed_addr constant [2 x i8] c"0\00" -@.str502 = private unnamed_addr constant [5 x i8] c"void\00" -@.str503 = private unnamed_addr constant [8 x i8] c"mem_set\00" -@.str504 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str505 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str506 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" -@.str507 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str508 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str509 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str510 = private unnamed_addr constant [2 x i8] c"0\00" -@.str511 = private unnamed_addr constant [5 x i8] c"void\00" -@.str512 = private unnamed_addr constant [8 x i8] c"ptr_add\00" -@.str513 = private unnamed_addr constant [3 x i8] c" \00" -@.str514 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" -@.str515 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str516 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str517 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str518 = private unnamed_addr constant [10 x i8] c"read_byte\00" -@.str519 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" -@.str520 = private unnamed_addr constant [4 x i8] c"int\00" -@.str521 = private unnamed_addr constant [11 x i8] c"write_byte\00" -@.str522 = private unnamed_addr constant [25 x i8] c" call i32 @putchar(i32 \00" -@.str523 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str524 = private unnamed_addr constant [2 x i8] c"0\00" -@.str525 = private unnamed_addr constant [5 x i8] c"void\00" -@.str526 = private unnamed_addr constant [8 x i8] c"str_len\00" -@.str527 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" -@.str528 = private unnamed_addr constant [2 x i8] c")\00" -@.str529 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str530 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str531 = private unnamed_addr constant [4 x i8] c"int\00" -@.str532 = private unnamed_addr constant [8 x i8] c"os_time\00" -@.str533 = private unnamed_addr constant [25 x i8] c"call i64 @time(ptr null)\00" -@.str534 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str535 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str536 = private unnamed_addr constant [4 x i8] c"int\00" -@.str537 = private unnamed_addr constant [6 x i8] c"peekf\00" -@.str538 = private unnamed_addr constant [3 x i8] c" \00" -@.str539 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str540 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str541 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str542 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str543 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str544 = private unnamed_addr constant [6 x i8] c"pokef\00" -@.str545 = private unnamed_addr constant [3 x i8] c" \00" -@.str546 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" -@.str547 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str548 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str549 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str550 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str551 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str552 = private unnamed_addr constant [2 x i8] c"0\00" -@.str553 = private unnamed_addr constant [5 x i8] c"void\00" -@.str554 = private unnamed_addr constant [6 x i8] c"peekp\00" -@.str555 = private unnamed_addr constant [3 x i8] c" \00" -@.str556 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" -@.str557 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str558 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str559 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str560 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str561 = private unnamed_addr constant [6 x i8] c"pokep\00" -@.str562 = private unnamed_addr constant [3 x i8] c" \00" -@.str563 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" -@.str564 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str565 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str566 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str567 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str568 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str569 = private unnamed_addr constant [2 x i8] c"0\00" -@.str570 = private unnamed_addr constant [5 x i8] c"void\00" -@.str571 = private unnamed_addr constant [9 x i8] c"as_fixed\00" -@.str572 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str573 = private unnamed_addr constant [7 x i8] c"as_int\00" -@.str574 = private unnamed_addr constant [4 x i8] c"int\00" -@.str575 = private unnamed_addr constant [12 x i8] c"is_windowed\00" -@.str576 = private unnamed_addr constant [2 x i8] c"1\00" -@.str577 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str578 = private unnamed_addr constant [2 x i8] c"0\00" -@.str579 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str580 = private unnamed_addr constant [11 x i8] c"game_title\00" -@.str581 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" -@.str582 = private unnamed_addr constant [4 x i8] c"str\00" -@.str583 = private unnamed_addr constant [9 x i8] c"win_poll\00" -@.str584 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" -@.str585 = private unnamed_addr constant [4 x i8] c"int\00" -@.str586 = private unnamed_addr constant [12 x i8] c"win_running\00" -@.str587 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" -@.str588 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str589 = private unnamed_addr constant [9 x i8] c"win_open\00" -@.str590 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" -@.str591 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str592 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str593 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str594 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str595 = private unnamed_addr constant [2 x i8] c"0\00" -@.str596 = private unnamed_addr constant [5 x i8] c"void\00" -@.str597 = private unnamed_addr constant [12 x i8] c"win_present\00" -@.str598 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" -@.str599 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str600 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str601 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str602 = private unnamed_addr constant [2 x i8] c"0\00" -@.str603 = private unnamed_addr constant [5 x i8] c"void\00" -@.str604 = private unnamed_addr constant [10 x i8] c"win_close\00" -@.str605 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" -@.str606 = private unnamed_addr constant [2 x i8] c"0\00" -@.str607 = private unnamed_addr constant [5 x i8] c"void\00" -@.str608 = private unnamed_addr constant [2 x i8] c"0\00" -@.str609 = private unnamed_addr constant [5 x i8] c"void\00" -@.str610 = private unnamed_addr constant [4 x i8] c"min\00" -@.str611 = private unnamed_addr constant [4 x i8] c"max\00" -@.str612 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str613 = private unnamed_addr constant [6 x i8] c"clamp\00" -@.str614 = private unnamed_addr constant [4 x i8] c"abs\00" -@.str615 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str616 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str617 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str618 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str424 = private unnamed_addr constant [7 x i8] c"os_arg\00" +@.str425 = private unnamed_addr constant [22 x i8] c"load ptr, ptr @L_argv\00" +@.str426 = private unnamed_addr constant [24 x i8] c"getelementptr ptr, ptr \00" +@.str427 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str428 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str429 = private unnamed_addr constant [4 x i8] c"str\00" +@.str430 = private unnamed_addr constant [8 x i8] c"os_exit\00" +@.str431 = private unnamed_addr constant [23 x i8] c" call void @exit(i32 \00" +@.str432 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str433 = private unnamed_addr constant [15 x i8] c" unreachable\0A\00" +@.str434 = private unnamed_addr constant [2 x i8] c"0\00" +@.str435 = private unnamed_addr constant [5 x i8] c"void\00" +@.str436 = private unnamed_addr constant [12 x i8] c"file_stderr\00" +@.str437 = private unnamed_addr constant [25 x i8] c"load ptr, ptr @__stderrp\00" +@.str438 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str439 = private unnamed_addr constant [10 x i8] c"os_system\00" +@.str440 = private unnamed_addr constant [22 x i8] c"call i32 @system(ptr \00" +@.str441 = private unnamed_addr constant [2 x i8] c")\00" +@.str442 = private unnamed_addr constant [4 x i8] c"int\00" +@.str443 = private unnamed_addr constant [10 x i8] c"os_getenv\00" +@.str444 = private unnamed_addr constant [22 x i8] c"call ptr @getenv(ptr \00" +@.str445 = private unnamed_addr constant [2 x i8] c")\00" +@.str446 = private unnamed_addr constant [4 x i8] c"str\00" +@.str447 = private unnamed_addr constant [5 x i8] c"bnot\00" +@.str448 = private unnamed_addr constant [9 x i8] c"xor i32 \00" +@.str449 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str450 = private unnamed_addr constant [4 x i8] c"int\00" +@.str451 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str452 = private unnamed_addr constant [4 x i8] c"shr\00" +@.str453 = private unnamed_addr constant [5 x i8] c"band\00" +@.str454 = private unnamed_addr constant [4 x i8] c"bor\00" +@.str455 = private unnamed_addr constant [5 x i8] c"bxor\00" +@.str456 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str457 = private unnamed_addr constant [4 x i8] c"shr\00" +@.str458 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str459 = private unnamed_addr constant [5 x i8] c"band\00" +@.str460 = private unnamed_addr constant [4 x i8] c"and\00" +@.str461 = private unnamed_addr constant [4 x i8] c"bor\00" +@.str462 = private unnamed_addr constant [3 x i8] c"or\00" +@.str463 = private unnamed_addr constant [5 x i8] c"bxor\00" +@.str464 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str465 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str466 = private unnamed_addr constant [3 x i8] c", \00" +@.str467 = private unnamed_addr constant [4 x i8] c"int\00" +@.str468 = private unnamed_addr constant [7 x i8] c"peek32\00" +@.str469 = private unnamed_addr constant [3 x i8] c" \00" +@.str470 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str471 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str472 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str473 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str474 = private unnamed_addr constant [4 x i8] c"int\00" +@.str475 = private unnamed_addr constant [7 x i8] c"poke32\00" +@.str476 = private unnamed_addr constant [3 x i8] c" \00" +@.str477 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str478 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str479 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str480 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str481 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str482 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str483 = private unnamed_addr constant [2 x i8] c"0\00" +@.str484 = private unnamed_addr constant [5 x i8] c"void\00" +@.str485 = private unnamed_addr constant [2 x i8] c"0\00" +@.str486 = private unnamed_addr constant [5 x i8] c"void\00" +@.str487 = private unnamed_addr constant [9 x i8] c"mem_free\00" +@.str488 = private unnamed_addr constant [9 x i8] c"mem_copy\00" +@.str489 = private unnamed_addr constant [8 x i8] c"mem_set\00" +@.str490 = private unnamed_addr constant [8 x i8] c"ptr_add\00" +@.str491 = private unnamed_addr constant [10 x i8] c"read_byte\00" +@.str492 = private unnamed_addr constant [11 x i8] c"write_byte\00" +@.str493 = private unnamed_addr constant [8 x i8] c"str_len\00" +@.str494 = private unnamed_addr constant [8 x i8] c"os_time\00" +@.str495 = private unnamed_addr constant [6 x i8] c"peekf\00" +@.str496 = private unnamed_addr constant [6 x i8] c"pokef\00" +@.str497 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str498 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str499 = private unnamed_addr constant [6 x i8] c"peekp\00" +@.str500 = private unnamed_addr constant [6 x i8] c"pokep\00" +@.str501 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str502 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str503 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str504 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str505 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str506 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str507 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str508 = private unnamed_addr constant [9 x i8] c"mem_free\00" +@.str509 = private unnamed_addr constant [23 x i8] c" call void @free(ptr \00" +@.str510 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str511 = private unnamed_addr constant [2 x i8] c"0\00" +@.str512 = private unnamed_addr constant [5 x i8] c"void\00" +@.str513 = private unnamed_addr constant [9 x i8] c"mem_copy\00" +@.str514 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str515 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str516 = private unnamed_addr constant [24 x i8] c" call ptr @memcpy(ptr \00" +@.str517 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str518 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str519 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str520 = private unnamed_addr constant [2 x i8] c"0\00" +@.str521 = private unnamed_addr constant [5 x i8] c"void\00" +@.str522 = private unnamed_addr constant [8 x i8] c"mem_set\00" +@.str523 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str524 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str525 = private unnamed_addr constant [24 x i8] c" call ptr @memset(ptr \00" +@.str526 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str527 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str528 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str529 = private unnamed_addr constant [2 x i8] c"0\00" +@.str530 = private unnamed_addr constant [5 x i8] c"void\00" +@.str531 = private unnamed_addr constant [8 x i8] c"ptr_add\00" +@.str532 = private unnamed_addr constant [3 x i8] c" \00" +@.str533 = private unnamed_addr constant [35 x i8] c" = getelementptr inbounds i8, ptr \00" +@.str534 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str535 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str536 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str537 = private unnamed_addr constant [10 x i8] c"read_byte\00" +@.str538 = private unnamed_addr constant [20 x i8] c"call i32 @getchar()\00" +@.str539 = private unnamed_addr constant [4 x i8] c"int\00" +@.str540 = private unnamed_addr constant [11 x i8] c"write_byte\00" +@.str541 = private unnamed_addr constant [25 x i8] c" call i32 @putchar(i32 \00" +@.str542 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str543 = private unnamed_addr constant [2 x i8] c"0\00" +@.str544 = private unnamed_addr constant [5 x i8] c"void\00" +@.str545 = private unnamed_addr constant [8 x i8] c"str_len\00" +@.str546 = private unnamed_addr constant [22 x i8] c"call i64 @strlen(ptr \00" +@.str547 = private unnamed_addr constant [2 x i8] c")\00" +@.str548 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str549 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str550 = private unnamed_addr constant [4 x i8] c"int\00" +@.str551 = private unnamed_addr constant [8 x i8] c"os_time\00" +@.str552 = private unnamed_addr constant [25 x i8] c"call i64 @time(ptr null)\00" +@.str553 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str554 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str555 = private unnamed_addr constant [4 x i8] c"int\00" +@.str556 = private unnamed_addr constant [6 x i8] c"peekf\00" +@.str557 = private unnamed_addr constant [3 x i8] c" \00" +@.str558 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str559 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str560 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str561 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str562 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str563 = private unnamed_addr constant [6 x i8] c"pokef\00" +@.str564 = private unnamed_addr constant [3 x i8] c" \00" +@.str565 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds i32, ptr \00" +@.str566 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str567 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str568 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str569 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str570 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str571 = private unnamed_addr constant [2 x i8] c"0\00" +@.str572 = private unnamed_addr constant [5 x i8] c"void\00" +@.str573 = private unnamed_addr constant [6 x i8] c"peekp\00" +@.str574 = private unnamed_addr constant [3 x i8] c" \00" +@.str575 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" +@.str576 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str577 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str578 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str579 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str580 = private unnamed_addr constant [6 x i8] c"pokep\00" +@.str581 = private unnamed_addr constant [3 x i8] c" \00" +@.str582 = private unnamed_addr constant [36 x i8] c" = getelementptr inbounds ptr, ptr \00" +@.str583 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str584 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str585 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str586 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str587 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str588 = private unnamed_addr constant [2 x i8] c"0\00" +@.str589 = private unnamed_addr constant [5 x i8] c"void\00" +@.str590 = private unnamed_addr constant [9 x i8] c"as_fixed\00" +@.str591 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str592 = private unnamed_addr constant [7 x i8] c"as_int\00" +@.str593 = private unnamed_addr constant [4 x i8] c"int\00" +@.str594 = private unnamed_addr constant [12 x i8] c"is_windowed\00" +@.str595 = private unnamed_addr constant [2 x i8] c"1\00" +@.str596 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str597 = private unnamed_addr constant [2 x i8] c"0\00" +@.str598 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str599 = private unnamed_addr constant [11 x i8] c"game_title\00" +@.str600 = private unnamed_addr constant [12 x i8] c"@.gametitle\00" +@.str601 = private unnamed_addr constant [4 x i8] c"str\00" +@.str602 = private unnamed_addr constant [9 x i8] c"win_poll\00" +@.str603 = private unnamed_addr constant [21 x i8] c"call i32 @win_poll()\00" +@.str604 = private unnamed_addr constant [4 x i8] c"int\00" +@.str605 = private unnamed_addr constant [12 x i8] c"win_running\00" +@.str606 = private unnamed_addr constant [24 x i8] c"call i32 @win_running()\00" +@.str607 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str608 = private unnamed_addr constant [9 x i8] c"win_open\00" +@.str609 = private unnamed_addr constant [27 x i8] c" call void @win_open(i32 \00" +@.str610 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str611 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str612 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str613 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str614 = private unnamed_addr constant [2 x i8] c"0\00" +@.str615 = private unnamed_addr constant [5 x i8] c"void\00" +@.str616 = private unnamed_addr constant [12 x i8] c"win_present\00" +@.str617 = private unnamed_addr constant [30 x i8] c" call void @win_present(ptr \00" +@.str618 = private unnamed_addr constant [7 x i8] c", i32 \00" @.str619 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str620 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str621 = private unnamed_addr constant [4 x i8] c"int\00" -@.str622 = private unnamed_addr constant [4 x i8] c"min\00" -@.str623 = private unnamed_addr constant [4 x i8] c"max\00" -@.str624 = private unnamed_addr constant [4 x i8] c"slt\00" -@.str625 = private unnamed_addr constant [4 x i8] c"max\00" -@.str626 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str627 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str628 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str629 = private unnamed_addr constant [3 x i8] c", \00" -@.str630 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str631 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str632 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str633 = private unnamed_addr constant [4 x i8] c"int\00" +@.str620 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str621 = private unnamed_addr constant [2 x i8] c"0\00" +@.str622 = private unnamed_addr constant [5 x i8] c"void\00" +@.str623 = private unnamed_addr constant [10 x i8] c"win_close\00" +@.str624 = private unnamed_addr constant [26 x i8] c" call void @win_close()\0A\00" +@.str625 = private unnamed_addr constant [2 x i8] c"0\00" +@.str626 = private unnamed_addr constant [5 x i8] c"void\00" +@.str627 = private unnamed_addr constant [2 x i8] c"0\00" +@.str628 = private unnamed_addr constant [5 x i8] c"void\00" +@.str629 = private unnamed_addr constant [4 x i8] c"min\00" +@.str630 = private unnamed_addr constant [4 x i8] c"max\00" +@.str631 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str632 = private unnamed_addr constant [6 x i8] c"clamp\00" +@.str633 = private unnamed_addr constant [4 x i8] c"abs\00" @.str634 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str635 = private unnamed_addr constant [3 x i8] c", \00" -@.str636 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str637 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str635 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str636 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str637 = private unnamed_addr constant [11 x i8] c"select i1 \00" @.str638 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str639 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" -@.str640 = private unnamed_addr constant [3 x i8] c", \00" -@.str641 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str642 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str643 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str644 = private unnamed_addr constant [4 x i8] c"int\00" -@.str645 = private unnamed_addr constant [15 x i8] c"getelementptr \00" -@.str646 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" -@.str647 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" -@.str648 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str649 = private unnamed_addr constant [22 x i8] c"unknown struct in new\00" -@.str650 = private unnamed_addr constant [6 x i8] c"%Str_\00" -@.str651 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str652 = private unnamed_addr constant [2 x i8] c")\00" -@.str653 = private unnamed_addr constant [3 x i8] c" \00" -@.str654 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Str_\00" -@.str655 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str656 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str657 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str658 = private unnamed_addr constant [2 x i8] c"0\00" -@.str659 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str660 = private unnamed_addr constant [5 x i8] c"null\00" -@.str661 = private unnamed_addr constant [9 x i8] c" store \00" -@.str662 = private unnamed_addr constant [2 x i8] c" \00" -@.str663 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str664 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str665 = private unnamed_addr constant [8 x i8] c"%LSlice\00" -@.str666 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" -@.str667 = private unnamed_addr constant [2 x i8] c")\00" -@.str668 = private unnamed_addr constant [3 x i8] c" \00" -@.str669 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str670 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" -@.str671 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" -@.str672 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str673 = private unnamed_addr constant [3 x i8] c" \00" -@.str674 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str675 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" -@.str676 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str677 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str678 = private unnamed_addr constant [3 x i8] c" \00" -@.str679 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str680 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" -@.str681 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" -@.str682 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str683 = private unnamed_addr constant [3 x i8] c" \00" -@.str684 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" -@.str685 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str686 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str687 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str688 = private unnamed_addr constant [4 x i8] c"int\00" -@.str689 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str690 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str691 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" -@.str692 = private unnamed_addr constant [3 x i8] c", \00" -@.str693 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str694 = private unnamed_addr constant [4 x i8] c"put\00" -@.str695 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str696 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str697 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str698 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str699 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str700 = private unnamed_addr constant [9 x i8] c"mul i32 \00" -@.str701 = private unnamed_addr constant [4 x i8] c", 2\00" -@.str702 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str703 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str704 = private unnamed_addr constant [11 x i8] c"select i1 \00" -@.str705 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" -@.str706 = private unnamed_addr constant [10 x i8] c"zext i32 \00" -@.str707 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str708 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str709 = private unnamed_addr constant [3 x i8] c", \00" -@.str710 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str711 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" -@.str712 = private unnamed_addr constant [7 x i8] c", i64 \00" -@.str713 = private unnamed_addr constant [2 x i8] c")\00" -@.str714 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str715 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str716 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str717 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str718 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str719 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str720 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str721 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str722 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str723 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" -@.str724 = private unnamed_addr constant [3 x i8] c" \00" -@.str725 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" -@.str726 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str727 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str728 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str729 = private unnamed_addr constant [9 x i8] c" store \00" -@.str730 = private unnamed_addr constant [2 x i8] c" \00" -@.str731 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str732 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str733 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str734 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str735 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str736 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str737 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str738 = private unnamed_addr constant [2 x i8] c"0\00" -@.str739 = private unnamed_addr constant [5 x i8] c"void\00" -@.str740 = private unnamed_addr constant [6 x i8] c"load \00" -@.str741 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str742 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str743 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str744 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str745 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str746 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str747 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str748 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str749 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str750 = private unnamed_addr constant [3 x i8] c"sc\00" -@.str751 = private unnamed_addr constant [6 x i8] c"scend\00" -@.str752 = private unnamed_addr constant [4 x i8] c"and\00" -@.str753 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str754 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str755 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str639 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str640 = private unnamed_addr constant [4 x i8] c"int\00" +@.str641 = private unnamed_addr constant [4 x i8] c"min\00" +@.str642 = private unnamed_addr constant [4 x i8] c"max\00" +@.str643 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str644 = private unnamed_addr constant [4 x i8] c"max\00" +@.str645 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str646 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str647 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str648 = private unnamed_addr constant [3 x i8] c", \00" +@.str649 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str650 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str651 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str652 = private unnamed_addr constant [4 x i8] c"int\00" +@.str653 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str654 = private unnamed_addr constant [3 x i8] c", \00" +@.str655 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str656 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str657 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str658 = private unnamed_addr constant [14 x i8] c"icmp sgt i32 \00" +@.str659 = private unnamed_addr constant [3 x i8] c", \00" +@.str660 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str661 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str662 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str663 = private unnamed_addr constant [4 x i8] c"int\00" +@.str664 = private unnamed_addr constant [15 x i8] c"getelementptr \00" +@.str665 = private unnamed_addr constant [18 x i8] c", ptr null, i32 1\00" +@.str666 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str667 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str668 = private unnamed_addr constant [22 x i8] c"unknown struct in new\00" +@.str669 = private unnamed_addr constant [6 x i8] c"%Str_\00" +@.str670 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str671 = private unnamed_addr constant [2 x i8] c")\00" +@.str672 = private unnamed_addr constant [3 x i8] c" \00" +@.str673 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Str_\00" +@.str674 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str675 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str676 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str677 = private unnamed_addr constant [2 x i8] c"0\00" +@.str678 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str679 = private unnamed_addr constant [5 x i8] c"null\00" +@.str680 = private unnamed_addr constant [9 x i8] c" store \00" +@.str681 = private unnamed_addr constant [2 x i8] c" \00" +@.str682 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str683 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str684 = private unnamed_addr constant [8 x i8] c"%LSlice\00" +@.str685 = private unnamed_addr constant [22 x i8] c"call ptr @malloc(i64 \00" +@.str686 = private unnamed_addr constant [2 x i8] c")\00" +@.str687 = private unnamed_addr constant [3 x i8] c" \00" +@.str688 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str689 = private unnamed_addr constant [16 x i8] c", i32 0, i32 0\0A\00" +@.str690 = private unnamed_addr constant [23 x i8] c" store ptr null, ptr \00" +@.str691 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str692 = private unnamed_addr constant [3 x i8] c" \00" +@.str693 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str694 = private unnamed_addr constant [16 x i8] c", i32 0, i32 1\0A\00" +@.str695 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str696 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str697 = private unnamed_addr constant [3 x i8] c" \00" +@.str698 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str699 = private unnamed_addr constant [16 x i8] c", i32 0, i32 2\0A\00" +@.str700 = private unnamed_addr constant [20 x i8] c" store i32 0, ptr \00" +@.str701 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str702 = private unnamed_addr constant [3 x i8] c" \00" +@.str703 = private unnamed_addr constant [40 x i8] c" = getelementptr inbounds %LSlice, ptr \00" +@.str704 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str705 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str706 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str707 = private unnamed_addr constant [4 x i8] c"int\00" +@.str708 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str709 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str710 = private unnamed_addr constant [14 x i8] c"icmp sge i32 \00" +@.str711 = private unnamed_addr constant [3 x i8] c", \00" +@.str712 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str713 = private unnamed_addr constant [4 x i8] c"put\00" +@.str714 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str715 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str716 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str717 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str718 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str719 = private unnamed_addr constant [9 x i8] c"mul i32 \00" +@.str720 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str721 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str722 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str723 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str724 = private unnamed_addr constant [14 x i8] c", i32 8, i32 \00" +@.str725 = private unnamed_addr constant [10 x i8] c"zext i32 \00" +@.str726 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str727 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str728 = private unnamed_addr constant [3 x i8] c", \00" +@.str729 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str730 = private unnamed_addr constant [23 x i8] c"call ptr @realloc(ptr \00" +@.str731 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str732 = private unnamed_addr constant [2 x i8] c")\00" +@.str733 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str734 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str735 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str736 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str737 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str738 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str739 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str740 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str741 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str742 = private unnamed_addr constant [15 x i8] c"load ptr, ptr \00" +@.str743 = private unnamed_addr constant [3 x i8] c" \00" +@.str744 = private unnamed_addr constant [27 x i8] c" = getelementptr inbounds \00" +@.str745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str746 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str747 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str748 = private unnamed_addr constant [9 x i8] c" store \00" +@.str749 = private unnamed_addr constant [2 x i8] c" \00" +@.str750 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str751 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str752 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str753 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str754 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str755 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str756 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str757 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str758 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str759 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str760 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str761 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str757 = private unnamed_addr constant [2 x i8] c"0\00" +@.str758 = private unnamed_addr constant [5 x i8] c"void\00" +@.str759 = private unnamed_addr constant [6 x i8] c"load \00" +@.str760 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str761 = private unnamed_addr constant [4 x i8] c"i32\00" @.str762 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" @.str763 = private unnamed_addr constant [4 x i8] c", 0\00" @.str764 = private unnamed_addr constant [9 x i8] c"zext i1 \00" @@ -835,197 +835,197 @@ declare void @win_close() @.str766 = private unnamed_addr constant [13 x i8] c" store i32 \00" @.str767 = private unnamed_addr constant [7 x i8] c", ptr \00" @.str768 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str769 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str770 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str771 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str772 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str773 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str774 = private unnamed_addr constant [2 x i8] c"<\00" -@.str775 = private unnamed_addr constant [4 x i8] c"slt\00" -@.str776 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str777 = private unnamed_addr constant [4 x i8] c"sle\00" -@.str778 = private unnamed_addr constant [2 x i8] c">\00" -@.str779 = private unnamed_addr constant [4 x i8] c"sgt\00" -@.str780 = private unnamed_addr constant [3 x i8] c">=\00" -@.str781 = private unnamed_addr constant [4 x i8] c"sge\00" -@.str782 = private unnamed_addr constant [3 x i8] c"==\00" -@.str783 = private unnamed_addr constant [3 x i8] c"eq\00" -@.str784 = private unnamed_addr constant [3 x i8] c"ne\00" -@.str785 = private unnamed_addr constant [2 x i8] c"<\00" -@.str786 = private unnamed_addr constant [3 x i8] c"<=\00" -@.str787 = private unnamed_addr constant [2 x i8] c">\00" -@.str788 = private unnamed_addr constant [3 x i8] c">=\00" -@.str789 = private unnamed_addr constant [3 x i8] c"==\00" -@.str790 = private unnamed_addr constant [3 x i8] c"!=\00" -@.str791 = private unnamed_addr constant [2 x i8] c"+\00" -@.str792 = private unnamed_addr constant [4 x i8] c"add\00" -@.str793 = private unnamed_addr constant [2 x i8] c"-\00" -@.str794 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str795 = private unnamed_addr constant [2 x i8] c"*\00" -@.str796 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str797 = private unnamed_addr constant [2 x i8] c"/\00" -@.str798 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str799 = private unnamed_addr constant [5 x i8] c"srem\00" -@.str800 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str801 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str802 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str803 = private unnamed_addr constant [4 x i8] c"and\00" -@.str804 = private unnamed_addr constant [3 x i8] c"or\00" -@.str805 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str806 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str807 = private unnamed_addr constant [6 x i8] c"icmp \00" -@.str808 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str809 = private unnamed_addr constant [3 x i8] c", \00" -@.str810 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str811 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str812 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str813 = private unnamed_addr constant [2 x i8] c"*\00" -@.str814 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str815 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str816 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str817 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str818 = private unnamed_addr constant [9 x i8] c"mul i64 \00" -@.str819 = private unnamed_addr constant [3 x i8] c", \00" -@.str820 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" +@.str769 = private unnamed_addr constant [3 x i8] c"sc\00" +@.str770 = private unnamed_addr constant [6 x i8] c"scend\00" +@.str771 = private unnamed_addr constant [4 x i8] c"and\00" +@.str772 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str773 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str774 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str775 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str776 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str777 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str778 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str779 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str780 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str781 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str782 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str783 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str784 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str785 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str786 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str787 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str788 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str789 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str790 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str791 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str792 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str793 = private unnamed_addr constant [2 x i8] c"<\00" +@.str794 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str795 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str796 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str797 = private unnamed_addr constant [2 x i8] c">\00" +@.str798 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str799 = private unnamed_addr constant [3 x i8] c">=\00" +@.str800 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str801 = private unnamed_addr constant [3 x i8] c"==\00" +@.str802 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str803 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str804 = private unnamed_addr constant [2 x i8] c"<\00" +@.str805 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str806 = private unnamed_addr constant [2 x i8] c">\00" +@.str807 = private unnamed_addr constant [3 x i8] c">=\00" +@.str808 = private unnamed_addr constant [3 x i8] c"==\00" +@.str809 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str810 = private unnamed_addr constant [2 x i8] c"+\00" +@.str811 = private unnamed_addr constant [4 x i8] c"add\00" +@.str812 = private unnamed_addr constant [2 x i8] c"-\00" +@.str813 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str814 = private unnamed_addr constant [2 x i8] c"*\00" +@.str815 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str816 = private unnamed_addr constant [2 x i8] c"/\00" +@.str817 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str818 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str819 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str820 = private unnamed_addr constant [9 x i8] c"shl i32 \00" @.str821 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str822 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str823 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str822 = private unnamed_addr constant [4 x i8] c"and\00" +@.str823 = private unnamed_addr constant [3 x i8] c"or\00" @.str824 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str825 = private unnamed_addr constant [2 x i8] c"/\00" -@.str826 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str827 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str828 = private unnamed_addr constant [9 x i8] c"shl i64 \00" -@.str829 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str830 = private unnamed_addr constant [10 x i8] c"sext i32 \00" -@.str831 = private unnamed_addr constant [8 x i8] c" to i64\00" -@.str832 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" -@.str833 = private unnamed_addr constant [3 x i8] c", \00" -@.str834 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" -@.str835 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str836 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str837 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str825 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str826 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str827 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str828 = private unnamed_addr constant [3 x i8] c", \00" +@.str829 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str830 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str831 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str832 = private unnamed_addr constant [2 x i8] c"*\00" +@.str833 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str834 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str835 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str836 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str837 = private unnamed_addr constant [9 x i8] c"mul i64 \00" @.str838 = private unnamed_addr constant [3 x i8] c", \00" -@.str839 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str840 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str841 = private unnamed_addr constant [3 x i8] c", \00" -@.str842 = private unnamed_addr constant [4 x i8] c"int\00" -@.str843 = private unnamed_addr constant [5 x i8] c"self\00" -@.str844 = private unnamed_addr constant [2 x i8] c"0\00" -@.str845 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str846 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str847 = private unnamed_addr constant [7 x i8] c"entity\00" -@.str848 = private unnamed_addr constant [4 x i8] c"key\00" -@.str849 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" -@.str850 = private unnamed_addr constant [4 x i8] c"int\00" -@.str851 = private unnamed_addr constant [5 x i8] c"save\00" -@.str852 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" -@.str853 = private unnamed_addr constant [2 x i8] c"0\00" -@.str854 = private unnamed_addr constant [5 x i8] c"void\00" -@.str855 = private unnamed_addr constant [9 x i8] c"ui_build\00" -@.str856 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" -@.str857 = private unnamed_addr constant [2 x i8] c"0\00" -@.str858 = private unnamed_addr constant [5 x i8] c"void\00" -@.str859 = private unnamed_addr constant [5 x i8] c"load\00" -@.str860 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" -@.str861 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str862 = private unnamed_addr constant [5 x i8] c"quit\00" -@.str863 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" -@.str864 = private unnamed_addr constant [2 x i8] c"0\00" -@.str865 = private unnamed_addr constant [5 x i8] c"void\00" -@.str866 = private unnamed_addr constant [4 x i8] c"len\00" -@.str867 = private unnamed_addr constant [5 x i8] c"push\00" -@.str868 = private unnamed_addr constant [3 x i8] c"fx\00" -@.str869 = private unnamed_addr constant [9 x i8] c"shl i32 \00" -@.str870 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str871 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str872 = private unnamed_addr constant [4 x i8] c"flr\00" -@.str873 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" -@.str874 = private unnamed_addr constant [5 x i8] c", 16\00" -@.str875 = private unnamed_addr constant [4 x i8] c"int\00" -@.str876 = private unnamed_addr constant [4 x i8] c"rt_\00" -@.str877 = private unnamed_addr constant [18 x i8] c"unknown function \00" -@.str878 = private unnamed_addr constant [3 x i8] c" \00" -@.str879 = private unnamed_addr constant [2 x i8] c"0\00" -@.str880 = private unnamed_addr constant [5 x i8] c"void\00" -@.str881 = private unnamed_addr constant [4 x i8] c" = \00" -@.str882 = private unnamed_addr constant [6 x i8] c"call \00" -@.str883 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str884 = private unnamed_addr constant [2 x i8] c"(\00" -@.str885 = private unnamed_addr constant [3 x i8] c", \00" -@.str886 = private unnamed_addr constant [2 x i8] c" \00" -@.str887 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str888 = private unnamed_addr constant [2 x i8] c"0\00" -@.str889 = private unnamed_addr constant [4 x i8] c"int\00" -@.str890 = private unnamed_addr constant [4 x i8] c"int\00" -@.str891 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str892 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str893 = private unnamed_addr constant [4 x i8] c"str\00" +@.str839 = private unnamed_addr constant [10 x i8] c"ashr i64 \00" +@.str840 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str841 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str842 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str843 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str844 = private unnamed_addr constant [2 x i8] c"/\00" +@.str845 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str846 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str847 = private unnamed_addr constant [9 x i8] c"shl i64 \00" +@.str848 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str849 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str850 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str851 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str852 = private unnamed_addr constant [3 x i8] c", \00" +@.str853 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str854 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str855 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str856 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str857 = private unnamed_addr constant [3 x i8] c", \00" +@.str858 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str859 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str860 = private unnamed_addr constant [3 x i8] c", \00" +@.str861 = private unnamed_addr constant [4 x i8] c"int\00" +@.str862 = private unnamed_addr constant [5 x i8] c"self\00" +@.str863 = private unnamed_addr constant [2 x i8] c"0\00" +@.str864 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str865 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str866 = private unnamed_addr constant [7 x i8] c"entity\00" +@.str867 = private unnamed_addr constant [4 x i8] c"key\00" +@.str868 = private unnamed_addr constant [21 x i8] c"load i32, ptr @L_key\00" +@.str869 = private unnamed_addr constant [4 x i8] c"int\00" +@.str870 = private unnamed_addr constant [5 x i8] c"save\00" +@.str871 = private unnamed_addr constant [23 x i8] c" call void @L_save()\0A\00" +@.str872 = private unnamed_addr constant [2 x i8] c"0\00" +@.str873 = private unnamed_addr constant [5 x i8] c"void\00" +@.str874 = private unnamed_addr constant [9 x i8] c"ui_build\00" +@.str875 = private unnamed_addr constant [25 x i8] c" call void @ui_build()\0A\00" +@.str876 = private unnamed_addr constant [2 x i8] c"0\00" +@.str877 = private unnamed_addr constant [5 x i8] c"void\00" +@.str878 = private unnamed_addr constant [5 x i8] c"load\00" +@.str879 = private unnamed_addr constant [19 x i8] c"call i32 @L_load()\00" +@.str880 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str881 = private unnamed_addr constant [5 x i8] c"quit\00" +@.str882 = private unnamed_addr constant [31 x i8] c" store i32 0, ptr @L_running\0A\00" +@.str883 = private unnamed_addr constant [2 x i8] c"0\00" +@.str884 = private unnamed_addr constant [5 x i8] c"void\00" +@.str885 = private unnamed_addr constant [4 x i8] c"len\00" +@.str886 = private unnamed_addr constant [5 x i8] c"push\00" +@.str887 = private unnamed_addr constant [3 x i8] c"fx\00" +@.str888 = private unnamed_addr constant [9 x i8] c"shl i32 \00" +@.str889 = private unnamed_addr constant [5 x i8] c", 16\00" +@.str890 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str891 = private unnamed_addr constant [4 x i8] c"flr\00" +@.str892 = private unnamed_addr constant [10 x i8] c"ashr i32 \00" +@.str893 = private unnamed_addr constant [5 x i8] c", 16\00" @.str894 = private unnamed_addr constant [4 x i8] c"int\00" -@.str895 = private unnamed_addr constant [6 x i8] c"load \00" -@.str896 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" -@.str897 = private unnamed_addr constant [4 x i8] c"int\00" -@.str898 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" -@.str899 = private unnamed_addr constant [4 x i8] c"int\00" -@.str900 = private unnamed_addr constant [2 x i8] c"-\00" -@.str901 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" -@.str902 = private unnamed_addr constant [4 x i8] c"int\00" -@.str903 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str904 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str905 = private unnamed_addr constant [9 x i8] c"zext i1 \00" -@.str906 = private unnamed_addr constant [8 x i8] c" to i32\00" -@.str907 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str908 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" -@.str909 = private unnamed_addr constant [2 x i8] c"0\00" -@.str910 = private unnamed_addr constant [4 x i8] c"int\00" -@.str911 = private unnamed_addr constant [9 x i8] c" store \00" -@.str912 = private unnamed_addr constant [2 x i8] c" \00" -@.str913 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str914 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str915 = private unnamed_addr constant [2 x i8] c"0\00" +@.str895 = private unnamed_addr constant [4 x i8] c"rt_\00" +@.str896 = private unnamed_addr constant [18 x i8] c"unknown function \00" +@.str897 = private unnamed_addr constant [3 x i8] c" \00" +@.str898 = private unnamed_addr constant [2 x i8] c"0\00" +@.str899 = private unnamed_addr constant [5 x i8] c"void\00" +@.str900 = private unnamed_addr constant [4 x i8] c" = \00" +@.str901 = private unnamed_addr constant [6 x i8] c"call \00" +@.str902 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str903 = private unnamed_addr constant [2 x i8] c"(\00" +@.str904 = private unnamed_addr constant [3 x i8] c", \00" +@.str905 = private unnamed_addr constant [2 x i8] c" \00" +@.str906 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str907 = private unnamed_addr constant [2 x i8] c"0\00" +@.str908 = private unnamed_addr constant [4 x i8] c"int\00" +@.str909 = private unnamed_addr constant [4 x i8] c"int\00" +@.str910 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str911 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str912 = private unnamed_addr constant [4 x i8] c"str\00" +@.str913 = private unnamed_addr constant [4 x i8] c"int\00" +@.str914 = private unnamed_addr constant [6 x i8] c"load \00" +@.str915 = private unnamed_addr constant [10 x i8] c", ptr @g_\00" @.str916 = private unnamed_addr constant [4 x i8] c"int\00" -@.str917 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" -@.str918 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str919 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" -@.str920 = private unnamed_addr constant [2 x i8] c"=\00" -@.str921 = private unnamed_addr constant [6 x i8] c"load \00" -@.str922 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str923 = private unnamed_addr constant [4 x i8] c"add\00" -@.str924 = private unnamed_addr constant [3 x i8] c"-=\00" -@.str925 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str926 = private unnamed_addr constant [3 x i8] c"*=\00" -@.str927 = private unnamed_addr constant [4 x i8] c"mul\00" -@.str928 = private unnamed_addr constant [3 x i8] c"/=\00" -@.str929 = private unnamed_addr constant [5 x i8] c"sdiv\00" -@.str930 = private unnamed_addr constant [6 x i8] c" i32 \00" -@.str931 = private unnamed_addr constant [3 x i8] c", \00" -@.str932 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str933 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str934 = private unnamed_addr constant [5 x i8] c"then\00" -@.str935 = private unnamed_addr constant [5 x i8] c"else\00" -@.str936 = private unnamed_addr constant [6 x i8] c"ifend\00" -@.str937 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str938 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str939 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str940 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str941 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str942 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str943 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str944 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str945 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str946 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str947 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str948 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str949 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str950 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str951 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str952 = private unnamed_addr constant [6 x i8] c"wcond\00" -@.str953 = private unnamed_addr constant [6 x i8] c"wbody\00" -@.str954 = private unnamed_addr constant [5 x i8] c"wend\00" -@.str955 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str956 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str957 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str958 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str959 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str917 = private unnamed_addr constant [20 x i8] c"unknown identifier \00" +@.str918 = private unnamed_addr constant [4 x i8] c"int\00" +@.str919 = private unnamed_addr constant [2 x i8] c"-\00" +@.str920 = private unnamed_addr constant [12 x i8] c"sub i32 0, \00" +@.str921 = private unnamed_addr constant [4 x i8] c"int\00" +@.str922 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str923 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str924 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str925 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str926 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str927 = private unnamed_addr constant [23 x i8] c"cannot emit expression\00" +@.str928 = private unnamed_addr constant [2 x i8] c"0\00" +@.str929 = private unnamed_addr constant [4 x i8] c"int\00" +@.str930 = private unnamed_addr constant [9 x i8] c" store \00" +@.str931 = private unnamed_addr constant [2 x i8] c" \00" +@.str932 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str933 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str934 = private unnamed_addr constant [2 x i8] c"0\00" +@.str935 = private unnamed_addr constant [4 x i8] c"int\00" +@.str936 = private unnamed_addr constant [19 x i8] c"assign to unknown \00" +@.str937 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str938 = private unnamed_addr constant [22 x i8] c"bad assignment target\00" +@.str939 = private unnamed_addr constant [2 x i8] c"=\00" +@.str940 = private unnamed_addr constant [6 x i8] c"load \00" +@.str941 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str942 = private unnamed_addr constant [4 x i8] c"add\00" +@.str943 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str944 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str945 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str946 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str947 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str948 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str949 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str950 = private unnamed_addr constant [3 x i8] c", \00" +@.str951 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str952 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str953 = private unnamed_addr constant [5 x i8] c"then\00" +@.str954 = private unnamed_addr constant [5 x i8] c"else\00" +@.str955 = private unnamed_addr constant [6 x i8] c"ifend\00" +@.str956 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str957 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str958 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str959 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str960 = private unnamed_addr constant [9 x i8] c" br i1 \00" @.str961 = private unnamed_addr constant [10 x i8] c", label %\00" @.str962 = private unnamed_addr constant [10 x i8] c", label %\00" @@ -1034,482 +1034,501 @@ declare void @win_close() @.str965 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str966 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str967 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str968 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str969 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str970 = private unnamed_addr constant [4 x i8] c"int\00" -@.str971 = private unnamed_addr constant [6 x i8] c"fcond\00" -@.str972 = private unnamed_addr constant [6 x i8] c"fbody\00" -@.str973 = private unnamed_addr constant [6 x i8] c"fcont\00" -@.str974 = private unnamed_addr constant [5 x i8] c"fend\00" -@.str975 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str976 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str977 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str978 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str979 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str980 = private unnamed_addr constant [3 x i8] c", \00" -@.str981 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str982 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str983 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str984 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str985 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str986 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str987 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str988 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str989 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str990 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str991 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str992 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str993 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str994 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str995 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str996 = private unnamed_addr constant [8 x i8] c"%retval\00" -@.str997 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str998 = private unnamed_addr constant [2 x i8] c"_\00" -@.str999 = private unnamed_addr constant [5 x i8] c"mend\00" -@.str1000 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1001 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1002 = private unnamed_addr constant [3 x i8] c", \00" -@.str1003 = private unnamed_addr constant [7 x i8] c"or i1 \00" -@.str1004 = private unnamed_addr constant [3 x i8] c", \00" -@.str1005 = private unnamed_addr constant [6 x i8] c"mbody\00" -@.str1006 = private unnamed_addr constant [5 x i8] c"marm\00" -@.str1007 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1008 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1009 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1010 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1011 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str968 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str969 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str970 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str971 = private unnamed_addr constant [6 x i8] c"wcond\00" +@.str972 = private unnamed_addr constant [6 x i8] c"wbody\00" +@.str973 = private unnamed_addr constant [5 x i8] c"wend\00" +@.str974 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str975 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str976 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str977 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str978 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str979 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str980 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str981 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str982 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str983 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str984 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str985 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str986 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str987 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str988 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str989 = private unnamed_addr constant [4 x i8] c"int\00" +@.str990 = private unnamed_addr constant [6 x i8] c"fcond\00" +@.str991 = private unnamed_addr constant [6 x i8] c"fbody\00" +@.str992 = private unnamed_addr constant [6 x i8] c"fcont\00" +@.str993 = private unnamed_addr constant [5 x i8] c"fend\00" +@.str994 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str995 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str996 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str997 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str998 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str999 = private unnamed_addr constant [3 x i8] c", \00" +@.str1000 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1001 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1002 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1003 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1004 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1005 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1006 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1007 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1008 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1009 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1010 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1011 = private unnamed_addr constant [4 x i8] c"i32\00" @.str1012 = private unnamed_addr constant [13 x i8] c" br label %\00" @.str1013 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str1014 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1015 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1016 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1017 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1018 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1019 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1020 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1021 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1022 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1023 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1024 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1025 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" -@.str1026 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" -@.str1027 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" -@.str1028 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" -@.str1029 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" -@.str1030 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1031 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" -@.str1032 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1033 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" -@.str1034 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" -@.str1035 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" -@.str1036 = private unnamed_addr constant [6 x i8] c"%Cmp_\00" -@.str1037 = private unnamed_addr constant [11 x i8] c" = type { \00" -@.str1038 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1039 = private unnamed_addr constant [3 x i8] c", \00" -@.str1040 = private unnamed_addr constant [4 x i8] c" }\0A\00" -@.str1041 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str1042 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1043 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1044 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" -@.str1045 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str1046 = private unnamed_addr constant [21 x i8] c" = internal global [\00" -@.str1047 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" -@.str1048 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" -@.str1049 = private unnamed_addr constant [3 x i8] c"%h\00" -@.str1050 = private unnamed_addr constant [3 x i8] c" \00" -@.str1051 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1052 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1053 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" -@.str1054 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" -@.str1055 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1056 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" -@.str1057 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" -@.str1058 = private unnamed_addr constant [37 x i8] c" store i32 0, ptr %k\0A ret void\0A}\0A\0A\00" -@.str1059 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" -@.str1060 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1061 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" -@.str1062 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" -@.str1063 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" -@.str1064 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" -@.str1065 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1066 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1067 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" -@.str1068 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" -@.str1069 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1070 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" -@.str1071 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" -@.str1072 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" -@.str1073 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" -@.str1074 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" -@.str1075 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str1076 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" -@.str1077 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1078 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1079 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1080 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" -@.str1081 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" -@.str1082 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" -@.str1083 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" -@.str1084 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" -@.str1085 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" -@.str1086 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" -@.str1087 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" -@.str1088 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" -@.str1089 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" -@.str1090 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" -@.str1091 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" -@.str1092 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" -@.str1093 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1094 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1095 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1096 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1097 = private unnamed_addr constant [6 x i8] c"qcond\00" -@.str1098 = private unnamed_addr constant [6 x i8] c"qbody\00" -@.str1099 = private unnamed_addr constant [6 x i8] c"qnext\00" -@.str1100 = private unnamed_addr constant [5 x i8] c"qend\00" -@.str1101 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1102 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1103 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1104 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1105 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" -@.str1106 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" -@.str1107 = private unnamed_addr constant [3 x i8] c", \00" -@.str1108 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1109 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1110 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1111 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1112 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1113 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1114 = private unnamed_addr constant [3 x i8] c" \00" -@.str1115 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1116 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" -@.str1117 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1118 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1119 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1120 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1121 = private unnamed_addr constant [3 x i8] c"qa\00" -@.str1122 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1123 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1124 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1125 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1126 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1127 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1128 = private unnamed_addr constant [3 x i8] c" \00" -@.str1129 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1130 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1131 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1015 = private unnamed_addr constant [8 x i8] c"%retval\00" +@.str1016 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1017 = private unnamed_addr constant [2 x i8] c"_\00" +@.str1018 = private unnamed_addr constant [5 x i8] c"mend\00" +@.str1019 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1020 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1021 = private unnamed_addr constant [3 x i8] c", \00" +@.str1022 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str1023 = private unnamed_addr constant [3 x i8] c", \00" +@.str1024 = private unnamed_addr constant [6 x i8] c"mbody\00" +@.str1025 = private unnamed_addr constant [5 x i8] c"marm\00" +@.str1026 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1027 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1028 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1029 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1030 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1031 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1032 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1033 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1034 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1035 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1036 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1037 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1038 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1039 = private unnamed_addr constant [5 x i8] c"null\00" +@.str1040 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1041 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1042 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1043 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1044 = private unnamed_addr constant [22 x i8] c"cannot emit statement\00" +@.str1045 = private unnamed_addr constant [36 x i8] c"@L_running = internal global i32 1\0A\00" +@.str1046 = private unnamed_addr constant [32 x i8] c"@L_key = internal global i32 0\0A\00" +@.str1047 = private unnamed_addr constant [33 x i8] c"@L_entc = internal global i32 0\0A\00" +@.str1048 = private unnamed_addr constant [29 x i8] c"@L_alive = internal global [\00" +@.str1049 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1050 = private unnamed_addr constant [28 x i8] c"@L_kind = internal global [\00" +@.str1051 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1052 = private unnamed_addr constant [32 x i8] c"@L_freelist = internal global [\00" +@.str1053 = private unnamed_addr constant [25 x i8] c" x i32] zeroinitializer\0A\00" +@.str1054 = private unnamed_addr constant [34 x i8] c"@L_freen = internal global i32 0\0A\00" +@.str1055 = private unnamed_addr constant [6 x i8] c"%Cmp_\00" +@.str1056 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str1057 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1058 = private unnamed_addr constant [3 x i8] c", \00" +@.str1059 = private unnamed_addr constant [4 x i8] c" }\0A\00" +@.str1060 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str1061 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str1062 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1063 = private unnamed_addr constant [19 x i8] c"] zeroinitializer\0A\00" +@.str1064 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str1065 = private unnamed_addr constant [21 x i8] c" = internal global [\00" +@.str1066 = private unnamed_addr constant [24 x i8] c" x i8] zeroinitializer\0A\00" +@.str1067 = private unnamed_addr constant [39 x i8] c"define void @L_reset(i32 %e) {\0Aentry:\0A\00" +@.str1068 = private unnamed_addr constant [3 x i8] c"%h\00" +@.str1069 = private unnamed_addr constant [3 x i8] c" \00" +@.str1070 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1071 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1072 = private unnamed_addr constant [17 x i8] c", i32 0, i32 %e\0A\00" +@.str1073 = private unnamed_addr constant [19 x i8] c" store i8 0, ptr \00" +@.str1074 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1075 = private unnamed_addr constant [32 x i8] c" %k = getelementptr inbounds [\00" +@.str1076 = private unnamed_addr constant [37 x i8] c" x i32], ptr @L_kind, i32 0, i32 %e\0A\00" +@.str1077 = private unnamed_addr constant [37 x i8] c" store i32 0, ptr %k\0A ret void\0A}\0A\0A\00" +@.str1078 = private unnamed_addr constant [32 x i8] c"define i32 @L_alloc() {\0Aentry:\0A\00" +@.str1079 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str1080 = private unnamed_addr constant [30 x i8] c" %has = icmp sgt i32 %fn, 0\0A\00" +@.str1081 = private unnamed_addr constant [42 x i8] c" br i1 %has, label %reuse, label %fresh\0A\00" +@.str1082 = private unnamed_addr constant [8 x i8] c"reuse:\0A\00" +@.str1083 = private unnamed_addr constant [25 x i8] c" %fn1 = sub i32 %fn, 1\0A\00" +@.str1084 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str1085 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str1086 = private unnamed_addr constant [43 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn1\0A\00" +@.str1087 = private unnamed_addr constant [27 x i8] c" %re = load i32, ptr %fp\0A\00" +@.str1088 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str1089 = private unnamed_addr constant [8 x i8] c"fresh:\0A\00" +@.str1090 = private unnamed_addr constant [31 x i8] c" %ec = load i32, ptr @L_entc\0A\00" +@.str1091 = private unnamed_addr constant [25 x i8] c" %ec1 = add i32 %ec, 1\0A\00" +@.str1092 = private unnamed_addr constant [31 x i8] c" store i32 %ec1, ptr @L_entc\0A\00" +@.str1093 = private unnamed_addr constant [18 x i8] c" br label %done\0A\00" +@.str1094 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1095 = private unnamed_addr constant [49 x i8] c" %e = phi i32 [ %re, %reuse ], [ %ec, %fresh ]\0A\00" +@.str1096 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str1097 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str1098 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str1099 = private unnamed_addr constant [24 x i8] c" store i32 1, ptr %ap\0A\00" +@.str1100 = private unnamed_addr constant [17 x i8] c" ret i32 %e\0A}\0A\0A\00" +@.str1101 = private unnamed_addr constant [45 x i8] c"define void @L_free_entity(i32 %e) {\0Aentry:\0A\00" +@.str1102 = private unnamed_addr constant [33 x i8] c" %ap = getelementptr inbounds [\00" +@.str1103 = private unnamed_addr constant [38 x i8] c" x i32], ptr @L_alive, i32 0, i32 %e\0A\00" +@.str1104 = private unnamed_addr constant [24 x i8] c" store i32 0, ptr %ap\0A\00" +@.str1105 = private unnamed_addr constant [30 x i8] c" call void @L_reset(i32 %e)\0A\00" +@.str1106 = private unnamed_addr constant [32 x i8] c" %fn = load i32, ptr @L_freen\0A\00" +@.str1107 = private unnamed_addr constant [33 x i8] c" %fp = getelementptr inbounds [\00" +@.str1108 = private unnamed_addr constant [42 x i8] c" x i32], ptr @L_freelist, i32 0, i32 %fn\0A\00" +@.str1109 = private unnamed_addr constant [25 x i8] c" store i32 %e, ptr %fp\0A\00" +@.str1110 = private unnamed_addr constant [25 x i8] c" %fn1 = add i32 %fn, 1\0A\00" +@.str1111 = private unnamed_addr constant [32 x i8] c" store i32 %fn1, ptr @L_freen\0A\00" +@.str1112 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str1113 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1114 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1115 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1116 = private unnamed_addr constant [6 x i8] c"qcond\00" +@.str1117 = private unnamed_addr constant [6 x i8] c"qbody\00" +@.str1118 = private unnamed_addr constant [6 x i8] c"qnext\00" +@.str1119 = private unnamed_addr constant [5 x i8] c"qend\00" +@.str1120 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1121 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1122 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1123 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1124 = private unnamed_addr constant [22 x i8] c"load i32, ptr @L_entc\00" +@.str1125 = private unnamed_addr constant [14 x i8] c"icmp slt i32 \00" +@.str1126 = private unnamed_addr constant [3 x i8] c", \00" +@.str1127 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1128 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1129 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1130 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1131 = private unnamed_addr constant [3 x i8] c":\0A\00" @.str1132 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1133 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1134 = private unnamed_addr constant [3 x i8] c", \00" -@.str1135 = private unnamed_addr constant [3 x i8] c" \00" -@.str1136 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1137 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1138 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1139 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1140 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" -@.str1141 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" -@.str1142 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1143 = private unnamed_addr constant [3 x i8] c"qt\00" -@.str1144 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1145 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1146 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1147 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1148 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1149 = private unnamed_addr constant [3 x i8] c" \00" -@.str1150 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1151 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1152 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1153 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1154 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1155 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1156 = private unnamed_addr constant [13 x i8] c" store ptr \00" -@.str1157 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1133 = private unnamed_addr constant [3 x i8] c" \00" +@.str1134 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1135 = private unnamed_addr constant [35 x i8] c" x i32], ptr @L_alive, i32 0, i32 \00" +@.str1136 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1137 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1138 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1139 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1140 = private unnamed_addr constant [3 x i8] c"qa\00" +@.str1141 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1142 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1143 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1144 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1145 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1146 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1147 = private unnamed_addr constant [3 x i8] c" \00" +@.str1148 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1149 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str1150 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1151 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1152 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1153 = private unnamed_addr constant [3 x i8] c", \00" +@.str1154 = private unnamed_addr constant [3 x i8] c" \00" +@.str1155 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1156 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1157 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" @.str1158 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1159 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1160 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1161 = private unnamed_addr constant [3 x i8] c"qw\00" -@.str1162 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1163 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1159 = private unnamed_addr constant [14 x i8] c"load i8, ptr \00" +@.str1160 = private unnamed_addr constant [12 x i8] c"icmp ne i8 \00" +@.str1161 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1162 = private unnamed_addr constant [3 x i8] c"qt\00" +@.str1163 = private unnamed_addr constant [9 x i8] c" br i1 \00" @.str1164 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1165 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1166 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1167 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1168 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1169 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1170 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" -@.str1171 = private unnamed_addr constant [9 x i8] c"add i32 \00" -@.str1172 = private unnamed_addr constant [4 x i8] c", 1\00" -@.str1173 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str1174 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1175 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1176 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1177 = private unnamed_addr constant [26 x i8] c"spawn: unknown component \00" -@.str1178 = private unnamed_addr constant [3 x i8] c" \00" -@.str1179 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1180 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" -@.str1181 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1182 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1183 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" +@.str1165 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1166 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1167 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1168 = private unnamed_addr constant [3 x i8] c" \00" +@.str1169 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1170 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1171 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1172 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1173 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1174 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1175 = private unnamed_addr constant [13 x i8] c" store ptr \00" +@.str1176 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1177 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1178 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1179 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1180 = private unnamed_addr constant [3 x i8] c"qw\00" +@.str1181 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1182 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1183 = private unnamed_addr constant [10 x i8] c", label %\00" @.str1184 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1185 = private unnamed_addr constant [3 x i8] c" \00" -@.str1186 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1187 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" -@.str1188 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" -@.str1189 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1190 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1191 = private unnamed_addr constant [3 x i8] c" \00" -@.str1192 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1193 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1194 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1195 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1196 = private unnamed_addr constant [2 x i8] c"0\00" -@.str1197 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str1198 = private unnamed_addr constant [5 x i8] c"null\00" -@.str1199 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1200 = private unnamed_addr constant [2 x i8] c" \00" -@.str1201 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1202 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1203 = private unnamed_addr constant [3 x i8] c" \00" -@.str1204 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" -@.str1205 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1206 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" -@.str1207 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1208 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1209 = private unnamed_addr constant [2 x i8] c" \00" -@.str1210 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1211 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1212 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" -@.str1213 = private unnamed_addr constant [3 x i8] c" \00" -@.str1214 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" -@.str1215 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" -@.str1216 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1217 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1218 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1219 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1220 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" -@.str1221 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1222 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1223 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1224 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" -@.str1225 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" -@.str1226 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" -@.str1227 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str1228 = private unnamed_addr constant [18 x i8] c" call void @sys_\00" -@.str1229 = private unnamed_addr constant [4 x i8] c"()\0A\00" -@.str1230 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str1231 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str1232 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str1233 = private unnamed_addr constant [8 x i8] c"rt_init\00" -@.str1234 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" -@.str1235 = private unnamed_addr constant [6 x i8] c"Start\00" -@.str1236 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str1237 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" -@.str1238 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" -@.str1239 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1240 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1241 = private unnamed_addr constant [11 x i8] c"rt_running\00" -@.str1242 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" -@.str1243 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" -@.str1244 = private unnamed_addr constant [4 x i8] c", 0\00" -@.str1245 = private unnamed_addr constant [8 x i8] c"and i1 \00" -@.str1246 = private unnamed_addr constant [3 x i8] c", \00" -@.str1247 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1248 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str1249 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1250 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" -@.str1251 = private unnamed_addr constant [7 x i8] c"body:\0A\00" -@.str1252 = private unnamed_addr constant [8 x i8] c"rt_poll\00" -@.str1253 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" -@.str1254 = private unnamed_addr constant [13 x i8] c" store i32 \00" -@.str1255 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" -@.str1256 = private unnamed_addr constant [6 x i8] c"Input\00" -@.str1257 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" -@.str1258 = private unnamed_addr constant [7 x i8] c"Update\00" -@.str1259 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" -@.str1260 = private unnamed_addr constant [7 x i8] c"Render\00" -@.str1261 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" -@.str1262 = private unnamed_addr constant [7 x i8] c"done:\0A\00" -@.str1263 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" -@.str1264 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" -@.str1265 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" -@.str1266 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" -@.str1267 = private unnamed_addr constant [2 x i8] c")\00" -@.str1268 = private unnamed_addr constant [6 x i8] c"smend\00" -@.str1269 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" -@.str1270 = private unnamed_addr constant [3 x i8] c", \00" -@.str1271 = private unnamed_addr constant [6 x i8] c"sbody\00" -@.str1272 = private unnamed_addr constant [5 x i8] c"sarm\00" -@.str1273 = private unnamed_addr constant [9 x i8] c" br i1 \00" -@.str1274 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1275 = private unnamed_addr constant [10 x i8] c", label %\00" -@.str1276 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1277 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1278 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1279 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1280 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1281 = private unnamed_addr constant [13 x i8] c" br label %\00" -@.str1282 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1283 = private unnamed_addr constant [3 x i8] c":\0A\00" -@.str1284 = private unnamed_addr constant [27 x i8] c"'become' outside a machine\00" -@.str1285 = private unnamed_addr constant [18 x i8] c"become: no state \00" -@.str1286 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_setreg(i32 \00" -@.str1287 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1288 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1289 = private unnamed_addr constant [4 x i8] c"%io\00" -@.str1290 = private unnamed_addr constant [3 x i8] c" \00" -@.str1291 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" -@.str1292 = private unnamed_addr constant [6 x i8] c"(ptr \00" -@.str1293 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" -@.str1294 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" -@.str1295 = private unnamed_addr constant [8 x i8] c"@L_entc\00" -@.str1296 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1297 = private unnamed_addr constant [9 x i8] c"@L_freen\00" -@.str1298 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1299 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" -@.str1300 = private unnamed_addr constant [5 x i8] c", 4\0A\00" -@.str1301 = private unnamed_addr constant [9 x i8] c"@L_alive\00" -@.str1302 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1303 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" -@.str1304 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1305 = private unnamed_addr constant [8 x i8] c"@L_kind\00" -@.str1306 = private unnamed_addr constant [8 x i8] c"%nalive\00" -@.str1307 = private unnamed_addr constant [4 x i8] c"@g_\00" -@.str1308 = private unnamed_addr constant [2 x i8] c"4\00" -@.str1309 = private unnamed_addr constant [5 x i8] c"%csz\00" -@.str1310 = private unnamed_addr constant [3 x i8] c" \00" -@.str1311 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" -@.str1312 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" -@.str1313 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" -@.str1314 = private unnamed_addr constant [4 x i8] c"@S_\00" -@.str1315 = private unnamed_addr constant [4 x i8] c"@H_\00" -@.str1316 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" -@.str1317 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" -@.str1318 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" -@.str1319 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" -@.str1320 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" -@.str1321 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" -@.str1322 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" -@.str1323 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str1324 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" -@.str1325 = private unnamed_addr constant [7 x i8] c"fwrite\00" -@.str1326 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" -@.str1327 = private unnamed_addr constant [68 x i8] c" %c = call i32 @fclose(ptr %f)\0A br label %out\0Aout:\0A ret void\0A}\0A\0A\00" -@.str1328 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" -@.str1329 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" -@.str1330 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" -@.str1331 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" -@.str1332 = private unnamed_addr constant [6 x i8] c"fread\00" -@.str1333 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" -@.str1334 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" -@.str1335 = private unnamed_addr constant [6 x i8] c"panel\00" -@.str1336 = private unnamed_addr constant [4 x i8] c"col\00" -@.str1337 = private unnamed_addr constant [4 x i8] c"row\00" -@.str1338 = private unnamed_addr constant [6 x i8] c"label\00" -@.str1339 = private unnamed_addr constant [7 x i8] c"button\00" -@.str1340 = private unnamed_addr constant [6 x i8] c"image\00" -@.str1341 = private unnamed_addr constant [7 x i8] c"spacer\00" -@.str1342 = private unnamed_addr constant [3 x i8] c"id\00" -@.str1343 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" -@.str1344 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1345 = private unnamed_addr constant [7 x i8] c", i32 \00" -@.str1346 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1347 = private unnamed_addr constant [2 x i8] c"w\00" -@.str1348 = private unnamed_addr constant [2 x i8] c"h\00" -@.str1349 = private unnamed_addr constant [2 x i8] c"x\00" -@.str1350 = private unnamed_addr constant [2 x i8] c"y\00" -@.str1351 = private unnamed_addr constant [4 x i8] c"pad\00" -@.str1352 = private unnamed_addr constant [4 x i8] c"gap\00" -@.str1353 = private unnamed_addr constant [3 x i8] c"bg\00" -@.str1354 = private unnamed_addr constant [3 x i8] c"fg\00" -@.str1355 = private unnamed_addr constant [7 x i8] c"border\00" -@.str1356 = private unnamed_addr constant [5 x i8] c"grow\00" -@.str1357 = private unnamed_addr constant [5 x i8] c"font\00" -@.str1358 = private unnamed_addr constant [5 x i8] c"size\00" -@.str1359 = private unnamed_addr constant [6 x i8] c"inset\00" -@.str1360 = private unnamed_addr constant [6 x i8] c"focus\00" -@.str1361 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" -@.str1362 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1363 = private unnamed_addr constant [2 x i8] c"1\00" -@.str1364 = private unnamed_addr constant [3 x i8] c"id\00" -@.str1365 = private unnamed_addr constant [5 x i8] c"text\00" -@.str1366 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" -@.str1367 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1368 = private unnamed_addr constant [3 x i8] c")\0A\00" -@.str1369 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str1370 = private unnamed_addr constant [6 x i8] c"image\00" -@.str1371 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" -@.str1372 = private unnamed_addr constant [2 x i8] c")\00" -@.str1373 = private unnamed_addr constant [5 x i8] c"skin\00" -@.str1374 = private unnamed_addr constant [6 x i8] c"align\00" -@.str1375 = private unnamed_addr constant [7 x i8] c"center\00" -@.str1376 = private unnamed_addr constant [4 x i8] c"end\00" -@.str1377 = private unnamed_addr constant [2 x i8] c"1\00" -@.str1378 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" -@.str1379 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" -@.str1380 = private unnamed_addr constant [3 x i8] c", \00" -@.str1381 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str1382 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1383 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" -@.str1384 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1385 = private unnamed_addr constant [9 x i8] c" store \00" -@.str1386 = private unnamed_addr constant [7 x i8] c" %arg_\00" -@.str1387 = private unnamed_addr constant [7 x i8] c", ptr \00" -@.str1388 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1389 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" -@.str1390 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str1391 = private unnamed_addr constant [5 x i8] c"void\00" -@.str1392 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" -@.str1393 = private unnamed_addr constant [6 x i8] c"load \00" -@.str1394 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" -@.str1395 = private unnamed_addr constant [7 x i8] c" ret \00" -@.str1396 = private unnamed_addr constant [2 x i8] c" \00" -@.str1397 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1398 = private unnamed_addr constant [8 x i8] c"define \00" -@.str1399 = private unnamed_addr constant [6 x i8] c" @fn_\00" -@.str1400 = private unnamed_addr constant [2 x i8] c"(\00" -@.str1401 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" -@.str1402 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" -@.str1403 = private unnamed_addr constant [4 x i8] c"int\00" -@.str1404 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" -@.str1405 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" -@.str1406 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" -@.str1407 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" +@.str1185 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1186 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1187 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1188 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1189 = private unnamed_addr constant [15 x i8] c"load i32, ptr \00" +@.str1190 = private unnamed_addr constant [9 x i8] c"add i32 \00" +@.str1191 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str1192 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str1193 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1194 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1195 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1196 = private unnamed_addr constant [25 x i8] c"spawn: unknown property \00" +@.str1197 = private unnamed_addr constant [3 x i8] c" \00" +@.str1198 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1199 = private unnamed_addr constant [16 x i8] c" x i8], ptr @H_\00" +@.str1200 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1201 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1202 = private unnamed_addr constant [19 x i8] c" store i8 1, ptr \00" +@.str1203 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1204 = private unnamed_addr constant [3 x i8] c" \00" +@.str1205 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1206 = private unnamed_addr constant [9 x i8] c" x %Cmp_\00" +@.str1207 = private unnamed_addr constant [11 x i8] c"], ptr @S_\00" +@.str1208 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1209 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1210 = private unnamed_addr constant [3 x i8] c" \00" +@.str1211 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str1212 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1213 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1214 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1215 = private unnamed_addr constant [2 x i8] c"0\00" +@.str1216 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str1217 = private unnamed_addr constant [5 x i8] c"null\00" +@.str1218 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1219 = private unnamed_addr constant [2 x i8] c" \00" +@.str1220 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1221 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1222 = private unnamed_addr constant [3 x i8] c" \00" +@.str1223 = private unnamed_addr constant [32 x i8] c" = getelementptr inbounds %Cmp_\00" +@.str1224 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1225 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str1226 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1227 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1228 = private unnamed_addr constant [2 x i8] c" \00" +@.str1229 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1230 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1231 = private unnamed_addr constant [20 x i8] c"call i32 @L_alloc()\00" +@.str1232 = private unnamed_addr constant [3 x i8] c" \00" +@.str1233 = private unnamed_addr constant [28 x i8] c" = getelementptr inbounds [\00" +@.str1234 = private unnamed_addr constant [34 x i8] c" x i32], ptr @L_kind, i32 0, i32 \00" +@.str1235 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1236 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1237 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1239 = private unnamed_addr constant [32 x i8] c" call void @L_free_entity(i32 \00" +@.str1240 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1241 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1242 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1243 = private unnamed_addr constant [17 x i8] c"ret:\0A ret void\0A\00" +@.str1244 = private unnamed_addr constant [18 x i8] c"define void @sys_\00" +@.str1245 = private unnamed_addr constant [13 x i8] c"() {\0Aentry:\0A\00" +@.str1246 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str1247 = private unnamed_addr constant [18 x i8] c" call void @sys_\00" +@.str1248 = private unnamed_addr constant [4 x i8] c"()\0A\00" +@.str1249 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str1250 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str1251 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str1252 = private unnamed_addr constant [8 x i8] c"rt_init\00" +@.str1253 = private unnamed_addr constant [27 x i8] c" call void @fn_rt_init()\0A\00" +@.str1254 = private unnamed_addr constant [6 x i8] c"Start\00" +@.str1255 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str1256 = private unnamed_addr constant [7 x i8] c"loop:\0A\00" +@.str1257 = private unnamed_addr constant [25 x i8] c"load i32, ptr @L_running\00" +@.str1258 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1259 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1260 = private unnamed_addr constant [11 x i8] c"rt_running\00" +@.str1261 = private unnamed_addr constant [26 x i8] c"call i32 @fn_rt_running()\00" +@.str1262 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str1263 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str1264 = private unnamed_addr constant [8 x i8] c"and i1 \00" +@.str1265 = private unnamed_addr constant [3 x i8] c", \00" +@.str1266 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1267 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str1268 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1269 = private unnamed_addr constant [28 x i8] c", label %body, label %done\0A\00" +@.str1270 = private unnamed_addr constant [7 x i8] c"body:\0A\00" +@.str1271 = private unnamed_addr constant [8 x i8] c"rt_poll\00" +@.str1272 = private unnamed_addr constant [23 x i8] c"call i32 @fn_rt_poll()\00" +@.str1273 = private unnamed_addr constant [13 x i8] c" store i32 \00" +@.str1274 = private unnamed_addr constant [14 x i8] c", ptr @L_key\0A\00" +@.str1275 = private unnamed_addr constant [6 x i8] c"Input\00" +@.str1276 = private unnamed_addr constant [12 x i8] c"FixedUpdate\00" +@.str1277 = private unnamed_addr constant [7 x i8] c"Update\00" +@.str1278 = private unnamed_addr constant [11 x i8] c"LateUpdate\00" +@.str1279 = private unnamed_addr constant [7 x i8] c"Render\00" +@.str1280 = private unnamed_addr constant [18 x i8] c" br label %loop\0A\00" +@.str1281 = private unnamed_addr constant [7 x i8] c"done:\0A\00" +@.str1282 = private unnamed_addr constant [12 x i8] c"rt_shutdown\00" +@.str1283 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_shutdown()\0A\00" +@.str1284 = private unnamed_addr constant [15 x i8] c" ret i32 0\0A}\0A\00" +@.str1285 = private unnamed_addr constant [25 x i8] c"call i32 @fn_rt_reg(i32 \00" +@.str1286 = private unnamed_addr constant [2 x i8] c")\00" +@.str1287 = private unnamed_addr constant [6 x i8] c"smend\00" +@.str1288 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str1289 = private unnamed_addr constant [3 x i8] c", \00" +@.str1290 = private unnamed_addr constant [6 x i8] c"sbody\00" +@.str1291 = private unnamed_addr constant [5 x i8] c"sarm\00" +@.str1292 = private unnamed_addr constant [9 x i8] c" br i1 \00" +@.str1293 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1294 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str1295 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1296 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1297 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1298 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1299 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1300 = private unnamed_addr constant [13 x i8] c" br label %\00" +@.str1301 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1302 = private unnamed_addr constant [3 x i8] c":\0A\00" +@.str1303 = private unnamed_addr constant [27 x i8] c"'become' outside a machine\00" +@.str1304 = private unnamed_addr constant [18 x i8] c"become: no state \00" +@.str1305 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_setreg(i32 \00" +@.str1306 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1307 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1308 = private unnamed_addr constant [4 x i8] c"%io\00" +@.str1309 = private unnamed_addr constant [3 x i8] c" \00" +@.str1310 = private unnamed_addr constant [14 x i8] c" = call i64 @\00" +@.str1311 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str1312 = private unnamed_addr constant [14 x i8] c", i64 1, i64 \00" +@.str1313 = private unnamed_addr constant [11 x i8] c", ptr %f)\0A\00" +@.str1314 = private unnamed_addr constant [8 x i8] c"@L_entc\00" +@.str1315 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1316 = private unnamed_addr constant [9 x i8] c"@L_freen\00" +@.str1317 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1318 = private unnamed_addr constant [21 x i8] c" %nalive = mul i64 \00" +@.str1319 = private unnamed_addr constant [5 x i8] c", 4\0A\00" +@.str1320 = private unnamed_addr constant [9 x i8] c"@L_alive\00" +@.str1321 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1322 = private unnamed_addr constant [12 x i8] c"@L_freelist\00" +@.str1323 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1324 = private unnamed_addr constant [8 x i8] c"@L_kind\00" +@.str1325 = private unnamed_addr constant [8 x i8] c"%nalive\00" +@.str1326 = private unnamed_addr constant [4 x i8] c"@g_\00" +@.str1327 = private unnamed_addr constant [2 x i8] c"4\00" +@.str1328 = private unnamed_addr constant [5 x i8] c"%csz\00" +@.str1329 = private unnamed_addr constant [3 x i8] c" \00" +@.str1330 = private unnamed_addr constant [37 x i8] c" = ptrtoint ptr getelementptr (%Cmp_\00" +@.str1331 = private unnamed_addr constant [17 x i8] c", ptr null, i32 \00" +@.str1332 = private unnamed_addr constant [10 x i8] c") to i64\0A\00" +@.str1333 = private unnamed_addr constant [4 x i8] c"@S_\00" +@.str1334 = private unnamed_addr constant [4 x i8] c"@H_\00" +@.str1335 = private unnamed_addr constant [70 x i8] c"@.sav_path = private unnamed_addr constant [10 x i8] c\22ludic.sav\5C00\22\0A\00" +@.str1336 = private unnamed_addr constant [60 x i8] c"@.sav_wb = private unnamed_addr constant [3 x i8] c\22wb\5C00\22\0A\00" +@.str1337 = private unnamed_addr constant [60 x i8] c"@.sav_rb = private unnamed_addr constant [3 x i8] c\22rb\5C00\22\0A\00" +@.str1338 = private unnamed_addr constant [14 x i8] c"rt_save_state\00" +@.str1339 = private unnamed_addr constant [14 x i8] c"rt_load_state\00" +@.str1340 = private unnamed_addr constant [32 x i8] c"define void @L_save() {\0Aentry:\0A\00" +@.str1341 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_wb)\0A\00" +@.str1342 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str1343 = private unnamed_addr constant [41 x i8] c" br i1 %bad, label %out, label %go\0Ago:\0A\00" +@.str1344 = private unnamed_addr constant [7 x i8] c"fwrite\00" +@.str1345 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_save_state(ptr %f)\0A\00" +@.str1346 = private unnamed_addr constant [68 x i8] c" %c = call i32 @fclose(ptr %f)\0A br label %out\0Aout:\0A ret void\0A}\0A\0A\00" +@.str1347 = private unnamed_addr constant [31 x i8] c"define i32 @L_load() {\0Aentry:\0A\00" +@.str1348 = private unnamed_addr constant [54 x i8] c" %f = call ptr @fopen(ptr @.sav_path, ptr @.sav_rb)\0A\00" +@.str1349 = private unnamed_addr constant [31 x i8] c" %bad = icmp eq ptr %f, null\0A\00" +@.str1350 = private unnamed_addr constant [60 x i8] c" br i1 %bad, label %miss, label %go\0Amiss:\0A ret i32 0\0Ago:\0A\00" +@.str1351 = private unnamed_addr constant [6 x i8] c"fread\00" +@.str1352 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_load_state(ptr %f)\0A\00" +@.str1353 = private unnamed_addr constant [48 x i8] c" %c = call i32 @fclose(ptr %f)\0A ret i32 1\0A}\0A\0A\00" +@.str1354 = private unnamed_addr constant [6 x i8] c"panel\00" +@.str1355 = private unnamed_addr constant [4 x i8] c"col\00" +@.str1356 = private unnamed_addr constant [4 x i8] c"row\00" +@.str1357 = private unnamed_addr constant [6 x i8] c"label\00" +@.str1358 = private unnamed_addr constant [7 x i8] c"button\00" +@.str1359 = private unnamed_addr constant [6 x i8] c"image\00" +@.str1360 = private unnamed_addr constant [7 x i8] c"spacer\00" +@.str1361 = private unnamed_addr constant [3 x i8] c"id\00" +@.str1362 = private unnamed_addr constant [31 x i8] c" call void @fn_rt_ui_set(i32 \00" +@.str1363 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1364 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str1365 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1366 = private unnamed_addr constant [2 x i8] c"w\00" +@.str1367 = private unnamed_addr constant [2 x i8] c"h\00" +@.str1368 = private unnamed_addr constant [2 x i8] c"x\00" +@.str1369 = private unnamed_addr constant [2 x i8] c"y\00" +@.str1370 = private unnamed_addr constant [4 x i8] c"pad\00" +@.str1371 = private unnamed_addr constant [4 x i8] c"gap\00" +@.str1372 = private unnamed_addr constant [3 x i8] c"bg\00" +@.str1373 = private unnamed_addr constant [3 x i8] c"fg\00" +@.str1374 = private unnamed_addr constant [7 x i8] c"border\00" +@.str1375 = private unnamed_addr constant [5 x i8] c"grow\00" +@.str1376 = private unnamed_addr constant [5 x i8] c"font\00" +@.str1377 = private unnamed_addr constant [5 x i8] c"size\00" +@.str1378 = private unnamed_addr constant [6 x i8] c"inset\00" +@.str1379 = private unnamed_addr constant [6 x i8] c"focus\00" +@.str1380 = private unnamed_addr constant [33 x i8] c" call void @fn_rt_ui_reset(i32 \00" +@.str1381 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1382 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1383 = private unnamed_addr constant [3 x i8] c"id\00" +@.str1384 = private unnamed_addr constant [5 x i8] c"text\00" +@.str1385 = private unnamed_addr constant [39 x i8] c" call void @fn_rt_ui_static_text(i32 \00" +@.str1386 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1387 = private unnamed_addr constant [3 x i8] c")\0A\00" +@.str1388 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str1389 = private unnamed_addr constant [6 x i8] c"image\00" +@.str1390 = private unnamed_addr constant [32 x i8] c"call i32 @fn_rt_image_load(ptr \00" +@.str1391 = private unnamed_addr constant [2 x i8] c")\00" +@.str1392 = private unnamed_addr constant [5 x i8] c"skin\00" +@.str1393 = private unnamed_addr constant [6 x i8] c"align\00" +@.str1394 = private unnamed_addr constant [7 x i8] c"center\00" +@.str1395 = private unnamed_addr constant [4 x i8] c"end\00" +@.str1396 = private unnamed_addr constant [2 x i8] c"1\00" +@.str1397 = private unnamed_addr constant [34 x i8] c"define void @ui_build() {\0Aentry:\0A\00" +@.str1398 = private unnamed_addr constant [15 x i8] c" ret void\0A}\0A\0A\00" +@.str1399 = private unnamed_addr constant [3 x i8] c", \00" +@.str1400 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str1401 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1402 = private unnamed_addr constant [20 x i8] c" %retval = alloca \00" +@.str1403 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1404 = private unnamed_addr constant [9 x i8] c" store \00" +@.str1405 = private unnamed_addr constant [7 x i8] c" %arg_\00" +@.str1406 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str1407 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str1408 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" @.str1409 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" -@.str1410 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" -@.str1411 = private unnamed_addr constant [11 x i8] c" ret i32 \00" -@.str1412 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1413 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str1414 = private unnamed_addr constant [3 x i8] c"}\0A\00" -@.str1415 = private unnamed_addr constant [3 x i8] c"wb\00" -@.str1416 = private unnamed_addr constant [7 x i8] c".ludic\00" -@.str1417 = private unnamed_addr constant [2 x i8] c"/\00" -@.str1418 = private unnamed_addr constant [6 x i8] c"ludic\00" -@.str1419 = private unnamed_addr constant [11 x i8] c"--windowed\00" -@.str1420 = private unnamed_addr constant [11 x i8] c"--headless\00" -@.str1421 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" -@.str1422 = private unnamed_addr constant [6 x i8] c"--fmt\00" -@.str1423 = private unnamed_addr constant [13 x i8] c"--save-temps\00" -@.str1424 = private unnamed_addr constant [6 x i8] c"--run\00" -@.str1425 = private unnamed_addr constant [3 x i8] c"-o\00" -@.str1426 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" -@.str1427 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str1428 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" -@.str1429 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" -@.str1430 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" -@.str1431 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" -@.str1432 = private unnamed_addr constant [4 x i8] c".ll\00" -@.str1433 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" -@.str1434 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" -@.str1435 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str1436 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" -@.str1437 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" -@.str1438 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" -@.str1439 = private unnamed_addr constant [2 x i8] c" \00" -@.str1440 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" -@.str1441 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str1442 = private unnamed_addr constant [7 x i8] c"rm -f \00" -@.str1443 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" +@.str1410 = private unnamed_addr constant [5 x i8] c"void\00" +@.str1411 = private unnamed_addr constant [12 x i8] c" ret void\0A\00" +@.str1412 = private unnamed_addr constant [6 x i8] c"load \00" +@.str1413 = private unnamed_addr constant [14 x i8] c", ptr %retval\00" +@.str1414 = private unnamed_addr constant [7 x i8] c" ret \00" +@.str1415 = private unnamed_addr constant [2 x i8] c" \00" +@.str1416 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1417 = private unnamed_addr constant [8 x i8] c"define \00" +@.str1418 = private unnamed_addr constant [6 x i8] c" @fn_\00" +@.str1419 = private unnamed_addr constant [2 x i8] c"(\00" +@.str1420 = private unnamed_addr constant [12 x i8] c") {\0Aentry:\0A\00" +@.str1421 = private unnamed_addr constant [4 x i8] c"}\0A\0A\00" +@.str1422 = private unnamed_addr constant [4 x i8] c"int\00" +@.str1423 = private unnamed_addr constant [24 x i8] c" %retval = alloca i32\0A\00" +@.str1424 = private unnamed_addr constant [32 x i8] c" store i32 %argc, ptr @L_argc\0A\00" +@.str1425 = private unnamed_addr constant [32 x i8] c" store ptr %argv, ptr @L_argv\0A\00" +@.str1426 = private unnamed_addr constant [28 x i8] c" store i32 0, ptr %retval\0A\00" +@.str1427 = private unnamed_addr constant [17 x i8] c" br label %ret\0A\00" +@.str1428 = private unnamed_addr constant [6 x i8] c"ret:\0A\00" +@.str1429 = private unnamed_addr constant [22 x i8] c"load i32, ptr %retval\00" +@.str1430 = private unnamed_addr constant [11 x i8] c" ret i32 \00" +@.str1431 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1432 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str1433 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str1434 = private unnamed_addr constant [3 x i8] c"wb\00" +@.str1435 = private unnamed_addr constant [7 x i8] c".ludic\00" +@.str1436 = private unnamed_addr constant [2 x i8] c"/\00" +@.str1437 = private unnamed_addr constant [6 x i8] c"ludic\00" +@.str1438 = private unnamed_addr constant [11 x i8] c"--windowed\00" +@.str1439 = private unnamed_addr constant [11 x i8] c"--headless\00" +@.str1440 = private unnamed_addr constant [12 x i8] c"--emit-llvm\00" +@.str1441 = private unnamed_addr constant [6 x i8] c"--fmt\00" +@.str1442 = private unnamed_addr constant [13 x i8] c"--save-temps\00" +@.str1443 = private unnamed_addr constant [6 x i8] c"--run\00" +@.str1444 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str1445 = private unnamed_addr constant [31 x i8] c"ludicc: ignoring unknown flag \00" +@.str1446 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str1447 = private unnamed_addr constant [90 x i8] c"usage: ludicc [-o out] [--windowed|--headless] [--emit-llvm] [--save-temps]\0A\00" +@.str1448 = private unnamed_addr constant [27 x i8] c"ludicc: cannot open input\0A\00" +@.str1449 = private unnamed_addr constant [16 x i8] c"/tmp/ludic-run-\00" +@.str1450 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str1451 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str1452 = private unnamed_addr constant [25 x i8] c"ludicc: cannot write IR\0A\00" +@.str1453 = private unnamed_addr constant [9 x i8] c"LUDIC_CC\00" +@.str1454 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str1455 = private unnamed_addr constant [11 x i8] c"LUDIC_HOME\00" +@.str1456 = private unnamed_addr constant [27 x i8] c" -O2 -Wno-override-module \00" +@.str1457 = private unnamed_addr constant [24 x i8] c"runtime/native/cocoa.ll\00" +@.str1458 = private unnamed_addr constant [2 x i8] c" \00" +@.str1459 = private unnamed_addr constant [42 x i8] c" -framework Cocoa -Wl,-rpath,@loader_path\00" +@.str1460 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str1461 = private unnamed_addr constant [7 x i8] c"rm -f \00" +@.str1462 = private unnamed_addr constant [21 x i8] c"ludicc: link failed\0A\00" define i32 @fn_streq(ptr %arg_a, ptr %arg_b) { entry: %retval = alloca i32 @@ -6067,296 +6086,297 @@ ret: define void @fn_parse_one_decl() { entry: %t0 = alloca i32 - %t6 = alloca ptr - %t12 = alloca i32 - %t38 = alloca ptr - %t48 = alloca ptr - %t231 = alloca ptr + %t1 = alloca ptr + %t7 = alloca ptr + %t17 = alloca i32 + %t43 = alloca ptr + %t53 = alloca ptr + %t148 = alloca ptr + %t161 = alloca ptr + %t276 = alloca ptr store i32 0, ptr %t0 + store ptr null, ptr %t1 br label %wcond0 wcond0: - %t1 = call i32 @fn_is_op(ptr @.str105) - %t2 = icmp ne i32 %t1, 0 - br i1 %t2, label %wbody1, label %wend2 + %t2 = call i32 @fn_is_op(ptr @.str105) + %t3 = icmp ne i32 %t2, 0 + br i1 %t3, label %wbody1, label %wend2 wbody1: - %t3 = load i32, ptr @g_pi - %t4 = add i32 %t3, 1 - store i32 %t4, ptr @g_pi - %t5 = call ptr @fn_eat_id() - store ptr %t5, ptr %t6 - %t7 = load ptr, ptr %t6 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str106) - %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then3, label %ifend5 + %t4 = load i32, ptr @g_pi + %t5 = add i32 %t4, 1 + store i32 %t5, ptr @g_pi + %t6 = call ptr @fn_eat_id() + store ptr %t6, ptr %t7 + %t8 = load ptr, ptr %t7 + %t9 = call i32 @fn_streq(ptr %t8, ptr @.str106) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then3, label %ifend5 then3: store i32 1, ptr %t0 br label %ifend5 ifend5: - %t10 = call i32 @fn_is_op(ptr @.str107) - %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then6, label %ifend8 + %t11 = load ptr, ptr %t7 + %t12 = call i32 @fn_streq(ptr %t11, ptr @.str107) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then6, label %else7 then6: - store i32 0, ptr %t12 - br label %wcond9 -wcond9: - %t13 = icmp ne i32 1, 0 - br i1 %t13, label %wbody10, label %wend11 -wbody10: - %t14 = call i32 @fn_is_op(ptr @.str108) - %t15 = icmp ne i32 %t14, 0 - br i1 %t15, label %then12, label %ifend14 -then12: - %t16 = load i32, ptr %t12 - %t17 = add i32 %t16, 1 - store i32 %t17, ptr %t12 - br label %ifend14 -ifend14: - %t18 = call i32 @fn_is_op(ptr @.str109) - %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then15, label %ifend17 + %t14 = call ptr @fn_parse_queries_anno() + store ptr %t14, ptr %t1 + br label %ifend8 +else7: + %t15 = call i32 @fn_is_op(ptr @.str108) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %then9, label %ifend11 +then9: + store i32 0, ptr %t17 + br label %wcond12 +wcond12: + %t18 = icmp ne i32 1, 0 + br i1 %t18, label %wbody13, label %wend14 +wbody13: + %t19 = call i32 @fn_is_op(ptr @.str109) + %t20 = icmp ne i32 %t19, 0 + br i1 %t20, label %then15, label %ifend17 then15: - %t20 = load i32, ptr %t12 - %t21 = sub i32 %t20, 1 - store i32 %t21, ptr %t12 + %t21 = load i32, ptr %t17 + %t22 = add i32 %t21, 1 + store i32 %t22, ptr %t17 br label %ifend17 ifend17: - %t22 = load i32, ptr @g_pi - %t23 = add i32 %t22, 1 - store i32 %t23, ptr @g_pi - %t24 = load i32, ptr %t12 - %t25 = icmp eq i32 %t24, 0 - %t26 = zext i1 %t25 to i32 - %t27 = icmp ne i32 %t26, 0 - br i1 %t27, label %then18, label %ifend20 + %t23 = call i32 @fn_is_op(ptr @.str110) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then18, label %ifend20 then18: - br label %wend11 + %t25 = load i32, ptr %t17 + %t26 = sub i32 %t25, 1 + store i32 %t26, ptr %t17 + br label %ifend20 ifend20: - br label %wcond9 -wend11: + %t27 = load i32, ptr @g_pi + %t28 = add i32 %t27, 1 + store i32 %t28, ptr @g_pi + %t29 = load i32, ptr %t17 + %t30 = icmp eq i32 %t29, 0 + %t31 = zext i1 %t30 to i32 + %t32 = icmp ne i32 %t31, 0 + br i1 %t32, label %then21, label %ifend23 +then21: + br label %wend14 +ifend23: + br label %wcond12 +wend14: + br label %ifend11 +ifend11: br label %ifend8 ifend8: call void @fn_skipnl() br label %wcond0 wend2: - %t28 = call i32 @fn_is_id(ptr @.str110) - %t29 = icmp ne i32 %t28, 0 - br i1 %t29, label %then21, label %ifend23 -then21: - %t30 = load i32, ptr @g_pi - %t31 = add i32 %t30, 1 - store i32 %t31, ptr @g_pi - %t32 = load ptr, ptr @g_toks - %t33 = getelementptr inbounds %LSlice, ptr %t32, i32 0, i32 0 - %t34 = load ptr, ptr %t33 - %t35 = load i32, ptr @g_pi - %t36 = getelementptr inbounds ptr, ptr %t34, i32 %t35 - %t37 = load ptr, ptr %t36 - store ptr %t37, ptr %t38 - %t39 = load ptr, ptr %t38 - %t40 = getelementptr inbounds %Str_Tok, ptr %t39, i32 0, i32 0 - %t41 = load i32, ptr %t40 - %t42 = icmp ne i32 %t41, 2 - %t43 = zext i1 %t42 to i32 - %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then24, label %ifend26 + %t33 = call i32 @fn_is_id(ptr @.str111) + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then24, label %ifend26 then24: - call void @fn_perr(ptr @.str111) - br label %ifend26 -ifend26: - %t45 = load ptr, ptr %t38 - %t46 = getelementptr inbounds %Str_Tok, ptr %t45, i32 0, i32 1 - %t47 = load ptr, ptr %t46 - store ptr %t47, ptr %t48 - %t49 = load i32, ptr @g_pi - %t50 = add i32 %t49, 1 - store i32 %t50, ptr @g_pi - %t51 = load ptr, ptr %t48 - call void @fn_do_import(ptr %t51) - br label %ret -ifend23: - %t52 = call i32 @fn_is_id(ptr @.str112) - %t53 = icmp ne i32 %t52, 0 - br i1 %t53, label %then27, label %ifend29 + %t35 = load i32, ptr @g_pi + %t36 = add i32 %t35, 1 + store i32 %t36, ptr @g_pi + %t37 = load ptr, ptr @g_toks + %t38 = getelementptr inbounds %LSlice, ptr %t37, i32 0, i32 0 + %t39 = load ptr, ptr %t38 + %t40 = load i32, ptr @g_pi + %t41 = getelementptr inbounds ptr, ptr %t39, i32 %t40 + %t42 = load ptr, ptr %t41 + store ptr %t42, ptr %t43 + %t44 = load ptr, ptr %t43 + %t45 = getelementptr inbounds %Str_Tok, ptr %t44, i32 0, i32 0 + %t46 = load i32, ptr %t45 + %t47 = icmp ne i32 %t46, 2 + %t48 = zext i1 %t47 to i32 + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %then27, label %ifend29 then27: - %t54 = load ptr, ptr @g_prog - %t55 = getelementptr inbounds %LSlice, ptr %t54, i32 0, i32 1 - %t56 = getelementptr inbounds %LSlice, ptr %t54, i32 0, i32 2 - %t57 = getelementptr inbounds %LSlice, ptr %t54, i32 0, i32 0 - %t58 = load i32, ptr %t55 - %t59 = load i32, ptr %t56 - %t60 = icmp sge i32 %t58, %t59 - br i1 %t60, label %grow30, label %put31 -grow30: - %t61 = mul i32 %t59, 2 - %t62 = icmp eq i32 %t59, 0 - %t63 = select i1 %t62, i32 8, i32 %t61 - %t64 = getelementptr ptr, ptr null, i32 1 - %t65 = ptrtoint ptr %t64 to i64 - %t66 = zext i32 %t63 to i64 - %t67 = mul i64 %t66, %t65 - %t68 = load ptr, ptr %t57 - %t69 = call ptr @realloc(ptr %t68, i64 %t67) - store ptr %t69, ptr %t57 - store i32 %t63, ptr %t56 - br label %put31 -put31: - %t70 = call ptr @fn_parse_struct() - %t71 = load ptr, ptr %t57 - %t72 = getelementptr inbounds ptr, ptr %t71, i32 %t58 - store ptr %t70, ptr %t72 - %t73 = add i32 %t58, 1 - store i32 %t73, ptr %t55 - br label %ret + call void @fn_perr(ptr @.str112) + br label %ifend29 ifend29: - %t74 = call i32 @fn_is_id(ptr @.str113) - %t75 = icmp ne i32 %t74, 0 - br i1 %t75, label %then32, label %ifend34 -then32: - %t76 = load ptr, ptr @g_prog - %t77 = getelementptr inbounds %LSlice, ptr %t76, i32 0, i32 1 - %t78 = getelementptr inbounds %LSlice, ptr %t76, i32 0, i32 2 - %t79 = getelementptr inbounds %LSlice, ptr %t76, i32 0, i32 0 - %t80 = load i32, ptr %t77 - %t81 = load i32, ptr %t78 - %t82 = icmp sge i32 %t80, %t81 - br i1 %t82, label %grow35, label %put36 -grow35: - %t83 = mul i32 %t81, 2 - %t84 = icmp eq i32 %t81, 0 - %t85 = select i1 %t84, i32 8, i32 %t83 - %t86 = getelementptr ptr, ptr null, i32 1 - %t87 = ptrtoint ptr %t86 to i64 - %t88 = zext i32 %t85 to i64 - %t89 = mul i64 %t88, %t87 - %t90 = load ptr, ptr %t79 - %t91 = call ptr @realloc(ptr %t90, i64 %t89) - store ptr %t91, ptr %t79 - store i32 %t85, ptr %t78 - br label %put36 -put36: - %t92 = call ptr @fn_parse_enum() - %t93 = load ptr, ptr %t79 - %t94 = getelementptr inbounds ptr, ptr %t93, i32 %t80 - store ptr %t92, ptr %t94 - %t95 = add i32 %t80, 1 - store i32 %t95, ptr %t77 + %t50 = load ptr, ptr %t43 + %t51 = getelementptr inbounds %Str_Tok, ptr %t50, i32 0, i32 1 + %t52 = load ptr, ptr %t51 + store ptr %t52, ptr %t53 + %t54 = load i32, ptr @g_pi + %t55 = add i32 %t54, 1 + store i32 %t55, ptr @g_pi + %t56 = load ptr, ptr %t53 + call void @fn_do_import(ptr %t56) br label %ret -ifend34: - %t96 = call i32 @fn_is_id(ptr @.str114) - %t97 = icmp ne i32 %t96, 0 - br i1 %t97, label %then37, label %ifend39 -then37: - %t98 = load ptr, ptr @g_prog - %t99 = getelementptr inbounds %LSlice, ptr %t98, i32 0, i32 1 - %t100 = getelementptr inbounds %LSlice, ptr %t98, i32 0, i32 2 - %t101 = getelementptr inbounds %LSlice, ptr %t98, i32 0, i32 0 - %t102 = load i32, ptr %t99 - %t103 = load i32, ptr %t100 - %t104 = icmp sge i32 %t102, %t103 - br i1 %t104, label %grow40, label %put41 -grow40: - %t105 = mul i32 %t103, 2 - %t106 = icmp eq i32 %t103, 0 - %t107 = select i1 %t106, i32 8, i32 %t105 - %t108 = getelementptr ptr, ptr null, i32 1 - %t109 = ptrtoint ptr %t108 to i64 - %t110 = zext i32 %t107 to i64 - %t111 = mul i64 %t110, %t109 - %t112 = load ptr, ptr %t101 - %t113 = call ptr @realloc(ptr %t112, i64 %t111) - store ptr %t113, ptr %t101 - store i32 %t107, ptr %t100 - br label %put41 -put41: - %t114 = call ptr @fn_parse_component() - %t115 = load ptr, ptr %t101 - %t116 = getelementptr inbounds ptr, ptr %t115, i32 %t102 - store ptr %t114, ptr %t116 - %t117 = add i32 %t102, 1 - store i32 %t117, ptr %t99 +ifend26: + %t57 = call i32 @fn_is_id(ptr @.str113) + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %then30, label %ifend32 +then30: + %t59 = load ptr, ptr @g_prog + %t60 = getelementptr inbounds %LSlice, ptr %t59, i32 0, i32 1 + %t61 = getelementptr inbounds %LSlice, ptr %t59, i32 0, i32 2 + %t62 = getelementptr inbounds %LSlice, ptr %t59, i32 0, i32 0 + %t63 = load i32, ptr %t60 + %t64 = load i32, ptr %t61 + %t65 = icmp sge i32 %t63, %t64 + br i1 %t65, label %grow33, label %put34 +grow33: + %t66 = mul i32 %t64, 2 + %t67 = icmp eq i32 %t64, 0 + %t68 = select i1 %t67, i32 8, i32 %t66 + %t69 = getelementptr ptr, ptr null, i32 1 + %t70 = ptrtoint ptr %t69 to i64 + %t71 = zext i32 %t68 to i64 + %t72 = mul i64 %t71, %t70 + %t73 = load ptr, ptr %t62 + %t74 = call ptr @realloc(ptr %t73, i64 %t72) + store ptr %t74, ptr %t62 + store i32 %t68, ptr %t61 + br label %put34 +put34: + %t75 = call ptr @fn_parse_struct() + %t76 = load ptr, ptr %t62 + %t77 = getelementptr inbounds ptr, ptr %t76, i32 %t63 + store ptr %t75, ptr %t77 + %t78 = add i32 %t63, 1 + store i32 %t78, ptr %t60 br label %ret -ifend39: - %t118 = call i32 @fn_is_id(ptr @.str115) - %t119 = icmp ne i32 %t118, 0 - br i1 %t119, label %then42, label %ifend44 -then42: - %t120 = load ptr, ptr @g_prog - %t121 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 1 - %t122 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 2 - %t123 = getelementptr inbounds %LSlice, ptr %t120, i32 0, i32 0 - %t124 = load i32, ptr %t121 - %t125 = load i32, ptr %t122 - %t126 = icmp sge i32 %t124, %t125 - br i1 %t126, label %grow45, label %put46 -grow45: - %t127 = mul i32 %t125, 2 - %t128 = icmp eq i32 %t125, 0 - %t129 = select i1 %t128, i32 8, i32 %t127 - %t130 = getelementptr ptr, ptr null, i32 1 - %t131 = ptrtoint ptr %t130 to i64 - %t132 = zext i32 %t129 to i64 - %t133 = mul i64 %t132, %t131 - %t134 = load ptr, ptr %t123 - %t135 = call ptr @realloc(ptr %t134, i64 %t133) - store ptr %t135, ptr %t123 - store i32 %t129, ptr %t122 - br label %put46 -put46: - %t136 = call ptr @fn_parse_archetype() - %t137 = load ptr, ptr %t123 - %t138 = getelementptr inbounds ptr, ptr %t137, i32 %t124 - store ptr %t136, ptr %t138 - %t139 = add i32 %t124, 1 - store i32 %t139, ptr %t121 +ifend32: + %t79 = call i32 @fn_is_id(ptr @.str114) + %t80 = icmp ne i32 %t79, 0 + br i1 %t80, label %then35, label %ifend37 +then35: + %t81 = load ptr, ptr @g_prog + %t82 = getelementptr inbounds %LSlice, ptr %t81, i32 0, i32 1 + %t83 = getelementptr inbounds %LSlice, ptr %t81, i32 0, i32 2 + %t84 = getelementptr inbounds %LSlice, ptr %t81, i32 0, i32 0 + %t85 = load i32, ptr %t82 + %t86 = load i32, ptr %t83 + %t87 = icmp sge i32 %t85, %t86 + br i1 %t87, label %grow38, label %put39 +grow38: + %t88 = mul i32 %t86, 2 + %t89 = icmp eq i32 %t86, 0 + %t90 = select i1 %t89, i32 8, i32 %t88 + %t91 = getelementptr ptr, ptr null, i32 1 + %t92 = ptrtoint ptr %t91 to i64 + %t93 = zext i32 %t90 to i64 + %t94 = mul i64 %t93, %t92 + %t95 = load ptr, ptr %t84 + %t96 = call ptr @realloc(ptr %t95, i64 %t94) + store ptr %t96, ptr %t84 + store i32 %t90, ptr %t83 + br label %put39 +put39: + %t97 = call ptr @fn_parse_enum() + %t98 = load ptr, ptr %t84 + %t99 = getelementptr inbounds ptr, ptr %t98, i32 %t85 + store ptr %t97, ptr %t99 + %t100 = add i32 %t85, 1 + store i32 %t100, ptr %t82 br label %ret -ifend44: - %t140 = call i32 @fn_is_id(ptr @.str116) - %t141 = icmp ne i32 %t140, 0 - br i1 %t141, label %then47, label %ifend49 -then47: - %t142 = load ptr, ptr @g_prog - %t143 = getelementptr inbounds %LSlice, ptr %t142, i32 0, i32 1 - %t144 = getelementptr inbounds %LSlice, ptr %t142, i32 0, i32 2 - %t145 = getelementptr inbounds %LSlice, ptr %t142, i32 0, i32 0 - %t146 = load i32, ptr %t143 - %t147 = load i32, ptr %t144 - %t148 = icmp sge i32 %t146, %t147 - br i1 %t148, label %grow50, label %put51 -grow50: - %t149 = mul i32 %t147, 2 - %t150 = icmp eq i32 %t147, 0 - %t151 = select i1 %t150, i32 8, i32 %t149 - %t152 = getelementptr ptr, ptr null, i32 1 - %t153 = ptrtoint ptr %t152 to i64 - %t154 = zext i32 %t151 to i64 - %t155 = mul i64 %t154, %t153 - %t156 = load ptr, ptr %t145 - %t157 = call ptr @realloc(ptr %t156, i64 %t155) - store ptr %t157, ptr %t145 - store i32 %t151, ptr %t144 - br label %put51 -put51: - %t158 = call ptr @fn_parse_system() - %t159 = load ptr, ptr %t145 - %t160 = getelementptr inbounds ptr, ptr %t159, i32 %t146 - store ptr %t158, ptr %t160 - %t161 = add i32 %t146, 1 - store i32 %t161, ptr %t143 +ifend37: + %t101 = call i32 @fn_is_id(ptr @.str115) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then40, label %ifend42 +then40: + %t103 = load ptr, ptr @g_prog + %t104 = getelementptr inbounds %LSlice, ptr %t103, i32 0, i32 1 + %t105 = getelementptr inbounds %LSlice, ptr %t103, i32 0, i32 2 + %t106 = getelementptr inbounds %LSlice, ptr %t103, i32 0, i32 0 + %t107 = load i32, ptr %t104 + %t108 = load i32, ptr %t105 + %t109 = icmp sge i32 %t107, %t108 + br i1 %t109, label %grow43, label %put44 +grow43: + %t110 = mul i32 %t108, 2 + %t111 = icmp eq i32 %t108, 0 + %t112 = select i1 %t111, i32 8, i32 %t110 + %t113 = getelementptr ptr, ptr null, i32 1 + %t114 = ptrtoint ptr %t113 to i64 + %t115 = zext i32 %t112 to i64 + %t116 = mul i64 %t115, %t114 + %t117 = load ptr, ptr %t106 + %t118 = call ptr @realloc(ptr %t117, i64 %t116) + store ptr %t118, ptr %t106 + store i32 %t112, ptr %t105 + br label %put44 +put44: + %t119 = call ptr @fn_parse_component() + %t120 = load ptr, ptr %t106 + %t121 = getelementptr inbounds ptr, ptr %t120, i32 %t107 + store ptr %t119, ptr %t121 + %t122 = add i32 %t107, 1 + store i32 %t122, ptr %t104 br label %ret -ifend49: - %t162 = call i32 @fn_is_id(ptr @.str117) - %t163 = icmp ne i32 %t162, 0 - br i1 %t163, label %then52, label %ifend54 -then52: - %t164 = load ptr, ptr @g_prog +ifend42: + %t123 = call i32 @fn_is_id(ptr @.str116) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then45, label %ifend47 +then45: + %t125 = load ptr, ptr @g_prog + %t126 = getelementptr inbounds %LSlice, ptr %t125, i32 0, i32 1 + %t127 = getelementptr inbounds %LSlice, ptr %t125, i32 0, i32 2 + %t128 = getelementptr inbounds %LSlice, ptr %t125, i32 0, i32 0 + %t129 = load i32, ptr %t126 + %t130 = load i32, ptr %t127 + %t131 = icmp sge i32 %t129, %t130 + br i1 %t131, label %grow48, label %put49 +grow48: + %t132 = mul i32 %t130, 2 + %t133 = icmp eq i32 %t130, 0 + %t134 = select i1 %t133, i32 8, i32 %t132 + %t135 = getelementptr ptr, ptr null, i32 1 + %t136 = ptrtoint ptr %t135 to i64 + %t137 = zext i32 %t134 to i64 + %t138 = mul i64 %t137, %t136 + %t139 = load ptr, ptr %t128 + %t140 = call ptr @realloc(ptr %t139, i64 %t138) + store ptr %t140, ptr %t128 + store i32 %t134, ptr %t127 + br label %put49 +put49: + %t141 = call ptr @fn_parse_archetype() + %t142 = load ptr, ptr %t128 + %t143 = getelementptr inbounds ptr, ptr %t142, i32 %t129 + store ptr %t141, ptr %t143 + %t144 = add i32 %t129, 1 + store i32 %t144, ptr %t126 + br label %ret +ifend47: + %t145 = call i32 @fn_is_id(ptr @.str117) + %t146 = icmp ne i32 %t145, 0 + br i1 %t146, label %then50, label %ifend52 +then50: + %t147 = call ptr @fn_parse_system() + store ptr %t147, ptr %t148 + %t149 = load ptr, ptr %t1 + %t150 = icmp eq ptr %t149, null + %t151 = zext i1 %t150 to i32 + %t152 = icmp eq i32 %t151, 0 + %t153 = zext i1 %t152 to i32 + %t154 = icmp ne i32 %t153, 0 + br i1 %t154, label %then53, label %ifend55 +then53: + %t155 = load ptr, ptr %t1 + %t156 = getelementptr inbounds %Str_Node, ptr %t155, i32 0, i32 4 + %t157 = load ptr, ptr %t148 + %t158 = getelementptr inbounds %Str_Node, ptr %t157, i32 0, i32 4 + %t159 = load ptr, ptr %t158 + store ptr %t159, ptr %t156 + %t160 = call ptr @fn_node(i32 7) + store ptr %t160, ptr %t161 + %t162 = load ptr, ptr %t161 + %t163 = getelementptr inbounds %Str_Node, ptr %t162, i32 0, i32 7 + %t164 = load ptr, ptr %t163 %t165 = getelementptr inbounds %LSlice, ptr %t164, i32 0, i32 1 %t166 = getelementptr inbounds %LSlice, ptr %t164, i32 0, i32 2 %t167 = getelementptr inbounds %LSlice, ptr %t164, i32 0, i32 0 %t168 = load i32, ptr %t165 %t169 = load i32, ptr %t166 %t170 = icmp sge i32 %t168, %t169 - br i1 %t170, label %grow55, label %put56 -grow55: + br i1 %t170, label %grow56, label %put57 +grow56: %t171 = mul i32 %t169, 2 %t172 = icmp eq i32 %t169, 0 %t173 = select i1 %t172, i32 8, i32 %t171 @@ -6368,198 +6388,266 @@ grow55: %t179 = call ptr @realloc(ptr %t178, i64 %t177) store ptr %t179, ptr %t167 store i32 %t173, ptr %t166 - br label %put56 -put56: - %t180 = call ptr @fn_parse_ui() + br label %put57 +put57: + %t180 = load ptr, ptr %t1 %t181 = load ptr, ptr %t167 %t182 = getelementptr inbounds ptr, ptr %t181, i32 %t168 store ptr %t180, ptr %t182 %t183 = add i32 %t168, 1 store i32 %t183, ptr %t165 - br label %ret -ifend54: - %t184 = call i32 @fn_is_id(ptr @.str118) - %t185 = icmp ne i32 %t184, 0 - br i1 %t185, label %then57, label %ifend59 -then57: - %t186 = load ptr, ptr @g_prog - %t187 = getelementptr inbounds %LSlice, ptr %t186, i32 0, i32 1 - %t188 = getelementptr inbounds %LSlice, ptr %t186, i32 0, i32 2 - %t189 = getelementptr inbounds %LSlice, ptr %t186, i32 0, i32 0 - %t190 = load i32, ptr %t187 + %t184 = load ptr, ptr %t148 + %t185 = getelementptr inbounds %Str_Node, ptr %t184, i32 0, i32 4 + %t186 = load ptr, ptr %t161 + store ptr %t186, ptr %t185 + br label %ifend55 +ifend55: + %t187 = load ptr, ptr @g_prog + %t188 = getelementptr inbounds %LSlice, ptr %t187, i32 0, i32 1 + %t189 = getelementptr inbounds %LSlice, ptr %t187, i32 0, i32 2 + %t190 = getelementptr inbounds %LSlice, ptr %t187, i32 0, i32 0 %t191 = load i32, ptr %t188 - %t192 = icmp sge i32 %t190, %t191 - br i1 %t192, label %grow60, label %put61 -grow60: - %t193 = mul i32 %t191, 2 - %t194 = icmp eq i32 %t191, 0 - %t195 = select i1 %t194, i32 8, i32 %t193 - %t196 = getelementptr ptr, ptr null, i32 1 - %t197 = ptrtoint ptr %t196 to i64 - %t198 = zext i32 %t195 to i64 - %t199 = mul i64 %t198, %t197 - %t200 = load ptr, ptr %t189 - %t201 = call ptr @realloc(ptr %t200, i64 %t199) - store ptr %t201, ptr %t189 - store i32 %t195, ptr %t188 - br label %put61 -put61: - %t202 = call ptr @fn_parse_var() - %t203 = load ptr, ptr %t189 - %t204 = getelementptr inbounds ptr, ptr %t203, i32 %t190 - store ptr %t202, ptr %t204 - %t205 = add i32 %t190, 1 - store i32 %t205, ptr %t187 + %t192 = load i32, ptr %t189 + %t193 = icmp sge i32 %t191, %t192 + br i1 %t193, label %grow58, label %put59 +grow58: + %t194 = mul i32 %t192, 2 + %t195 = icmp eq i32 %t192, 0 + %t196 = select i1 %t195, i32 8, i32 %t194 + %t197 = getelementptr ptr, ptr null, i32 1 + %t198 = ptrtoint ptr %t197 to i64 + %t199 = zext i32 %t196 to i64 + %t200 = mul i64 %t199, %t198 + %t201 = load ptr, ptr %t190 + %t202 = call ptr @realloc(ptr %t201, i64 %t200) + store ptr %t202, ptr %t190 + store i32 %t196, ptr %t189 + br label %put59 +put59: + %t203 = load ptr, ptr %t148 + %t204 = load ptr, ptr %t190 + %t205 = getelementptr inbounds ptr, ptr %t204, i32 %t191 + store ptr %t203, ptr %t205 + %t206 = add i32 %t191, 1 + store i32 %t206, ptr %t188 br label %ret -ifend59: - %t206 = call i32 @fn_is_id(ptr @.str119) - %t207 = icmp ne i32 %t206, 0 - br i1 %t207, label %then62, label %ifend64 -then62: - %t208 = load ptr, ptr @g_prog - %t209 = getelementptr inbounds %LSlice, ptr %t208, i32 0, i32 1 - %t210 = getelementptr inbounds %LSlice, ptr %t208, i32 0, i32 2 - %t211 = getelementptr inbounds %LSlice, ptr %t208, i32 0, i32 0 - %t212 = load i32, ptr %t209 +ifend52: + %t207 = call i32 @fn_is_id(ptr @.str118) + %t208 = icmp ne i32 %t207, 0 + br i1 %t208, label %then60, label %ifend62 +then60: + %t209 = load ptr, ptr @g_prog + %t210 = getelementptr inbounds %LSlice, ptr %t209, i32 0, i32 1 + %t211 = getelementptr inbounds %LSlice, ptr %t209, i32 0, i32 2 + %t212 = getelementptr inbounds %LSlice, ptr %t209, i32 0, i32 0 %t213 = load i32, ptr %t210 - %t214 = icmp sge i32 %t212, %t213 - br i1 %t214, label %grow65, label %put66 -grow65: - %t215 = mul i32 %t213, 2 - %t216 = icmp eq i32 %t213, 0 - %t217 = select i1 %t216, i32 8, i32 %t215 - %t218 = getelementptr ptr, ptr null, i32 1 - %t219 = ptrtoint ptr %t218 to i64 - %t220 = zext i32 %t217 to i64 - %t221 = mul i64 %t220, %t219 - %t222 = load ptr, ptr %t211 - %t223 = call ptr @realloc(ptr %t222, i64 %t221) - store ptr %t223, ptr %t211 - store i32 %t217, ptr %t210 - br label %put66 -put66: - %t224 = call ptr @fn_parse_const() - %t225 = load ptr, ptr %t211 - %t226 = getelementptr inbounds ptr, ptr %t225, i32 %t212 - store ptr %t224, ptr %t226 - %t227 = add i32 %t212, 1 - store i32 %t227, ptr %t209 + %t214 = load i32, ptr %t211 + %t215 = icmp sge i32 %t213, %t214 + br i1 %t215, label %grow63, label %put64 +grow63: + %t216 = mul i32 %t214, 2 + %t217 = icmp eq i32 %t214, 0 + %t218 = select i1 %t217, i32 8, i32 %t216 + %t219 = getelementptr ptr, ptr null, i32 1 + %t220 = ptrtoint ptr %t219 to i64 + %t221 = zext i32 %t218 to i64 + %t222 = mul i64 %t221, %t220 + %t223 = load ptr, ptr %t212 + %t224 = call ptr @realloc(ptr %t223, i64 %t222) + store ptr %t224, ptr %t212 + store i32 %t218, ptr %t211 + br label %put64 +put64: + %t225 = call ptr @fn_parse_ui() + %t226 = load ptr, ptr %t212 + %t227 = getelementptr inbounds ptr, ptr %t226, i32 %t213 + store ptr %t225, ptr %t227 + %t228 = add i32 %t213, 1 + store i32 %t228, ptr %t210 br label %ret -ifend64: - %t228 = call i32 @fn_is_id(ptr @.str120) - %t229 = icmp ne i32 %t228, 0 - br i1 %t229, label %then67, label %ifend69 -then67: - %t230 = call ptr @fn_parse_fn() - store ptr %t230, ptr %t231 - %t232 = load i32, ptr %t0 - %t233 = icmp ne i32 %t232, 0 - br i1 %t233, label %then70, label %ifend72 +ifend62: + %t229 = call i32 @fn_is_id(ptr @.str119) + %t230 = icmp ne i32 %t229, 0 + br i1 %t230, label %then65, label %ifend67 +then65: + %t231 = load ptr, ptr @g_prog + %t232 = getelementptr inbounds %LSlice, ptr %t231, i32 0, i32 1 + %t233 = getelementptr inbounds %LSlice, ptr %t231, i32 0, i32 2 + %t234 = getelementptr inbounds %LSlice, ptr %t231, i32 0, i32 0 + %t235 = load i32, ptr %t232 + %t236 = load i32, ptr %t233 + %t237 = icmp sge i32 %t235, %t236 + br i1 %t237, label %grow68, label %put69 +grow68: + %t238 = mul i32 %t236, 2 + %t239 = icmp eq i32 %t236, 0 + %t240 = select i1 %t239, i32 8, i32 %t238 + %t241 = getelementptr ptr, ptr null, i32 1 + %t242 = ptrtoint ptr %t241 to i64 + %t243 = zext i32 %t240 to i64 + %t244 = mul i64 %t243, %t242 + %t245 = load ptr, ptr %t234 + %t246 = call ptr @realloc(ptr %t245, i64 %t244) + store ptr %t246, ptr %t234 + store i32 %t240, ptr %t233 + br label %put69 +put69: + %t247 = call ptr @fn_parse_var() + %t248 = load ptr, ptr %t234 + %t249 = getelementptr inbounds ptr, ptr %t248, i32 %t235 + store ptr %t247, ptr %t249 + %t250 = add i32 %t235, 1 + store i32 %t250, ptr %t232 + br label %ret +ifend67: + %t251 = call i32 @fn_is_id(ptr @.str120) + %t252 = icmp ne i32 %t251, 0 + br i1 %t252, label %then70, label %ifend72 then70: - %t234 = load ptr, ptr %t231 - %t235 = getelementptr inbounds %Str_Node, ptr %t234, i32 0, i32 2 - store i32 1, ptr %t235 - br label %ifend72 -ifend72: - %t236 = load ptr, ptr @g_prog - %t237 = getelementptr inbounds %LSlice, ptr %t236, i32 0, i32 1 - %t238 = getelementptr inbounds %LSlice, ptr %t236, i32 0, i32 2 - %t239 = getelementptr inbounds %LSlice, ptr %t236, i32 0, i32 0 - %t240 = load i32, ptr %t237 - %t241 = load i32, ptr %t238 - %t242 = icmp sge i32 %t240, %t241 - br i1 %t242, label %grow73, label %put74 + %t253 = load ptr, ptr @g_prog + %t254 = getelementptr inbounds %LSlice, ptr %t253, i32 0, i32 1 + %t255 = getelementptr inbounds %LSlice, ptr %t253, i32 0, i32 2 + %t256 = getelementptr inbounds %LSlice, ptr %t253, i32 0, i32 0 + %t257 = load i32, ptr %t254 + %t258 = load i32, ptr %t255 + %t259 = icmp sge i32 %t257, %t258 + br i1 %t259, label %grow73, label %put74 grow73: - %t243 = mul i32 %t241, 2 - %t244 = icmp eq i32 %t241, 0 - %t245 = select i1 %t244, i32 8, i32 %t243 - %t246 = getelementptr ptr, ptr null, i32 1 - %t247 = ptrtoint ptr %t246 to i64 - %t248 = zext i32 %t245 to i64 - %t249 = mul i64 %t248, %t247 - %t250 = load ptr, ptr %t239 - %t251 = call ptr @realloc(ptr %t250, i64 %t249) - store ptr %t251, ptr %t239 - store i32 %t245, ptr %t238 + %t260 = mul i32 %t258, 2 + %t261 = icmp eq i32 %t258, 0 + %t262 = select i1 %t261, i32 8, i32 %t260 + %t263 = getelementptr ptr, ptr null, i32 1 + %t264 = ptrtoint ptr %t263 to i64 + %t265 = zext i32 %t262 to i64 + %t266 = mul i64 %t265, %t264 + %t267 = load ptr, ptr %t256 + %t268 = call ptr @realloc(ptr %t267, i64 %t266) + store ptr %t268, ptr %t256 + store i32 %t262, ptr %t255 br label %put74 put74: - %t252 = load ptr, ptr %t231 - %t253 = load ptr, ptr %t239 - %t254 = getelementptr inbounds ptr, ptr %t253, i32 %t240 - store ptr %t252, ptr %t254 - %t255 = add i32 %t240, 1 - store i32 %t255, ptr %t237 + %t269 = call ptr @fn_parse_const() + %t270 = load ptr, ptr %t256 + %t271 = getelementptr inbounds ptr, ptr %t270, i32 %t257 + store ptr %t269, ptr %t271 + %t272 = add i32 %t257, 1 + store i32 %t272, ptr %t254 br label %ret -ifend69: - %t256 = call i32 @fn_is_id(ptr @.str121) - %t257 = icmp ne i32 %t256, 0 - br i1 %t257, label %then75, label %ifend77 +ifend72: + %t273 = call i32 @fn_is_id(ptr @.str121) + %t274 = icmp ne i32 %t273, 0 + br i1 %t274, label %then75, label %ifend77 then75: - %t258 = load ptr, ptr @g_prog - %t259 = getelementptr inbounds %LSlice, ptr %t258, i32 0, i32 1 - %t260 = getelementptr inbounds %LSlice, ptr %t258, i32 0, i32 2 - %t261 = getelementptr inbounds %LSlice, ptr %t258, i32 0, i32 0 - %t262 = load i32, ptr %t259 - %t263 = load i32, ptr %t260 - %t264 = icmp sge i32 %t262, %t263 - br i1 %t264, label %grow78, label %put79 -grow78: - %t265 = mul i32 %t263, 2 - %t266 = icmp eq i32 %t263, 0 - %t267 = select i1 %t266, i32 8, i32 %t265 - %t268 = getelementptr ptr, ptr null, i32 1 - %t269 = ptrtoint ptr %t268 to i64 - %t270 = zext i32 %t267 to i64 - %t271 = mul i64 %t270, %t269 - %t272 = load ptr, ptr %t261 - %t273 = call ptr @realloc(ptr %t272, i64 %t271) - store ptr %t273, ptr %t261 - store i32 %t267, ptr %t260 - br label %put79 -put79: - %t274 = call ptr @fn_parse_extern() - %t275 = load ptr, ptr %t261 - %t276 = getelementptr inbounds ptr, ptr %t275, i32 %t262 - store ptr %t274, ptr %t276 - %t277 = add i32 %t262, 1 - store i32 %t277, ptr %t259 + %t275 = call ptr @fn_parse_fn() + store ptr %t275, ptr %t276 + %t277 = load i32, ptr %t0 + %t278 = icmp ne i32 %t277, 0 + br i1 %t278, label %then78, label %ifend80 +then78: + %t279 = load ptr, ptr %t276 + %t280 = getelementptr inbounds %Str_Node, ptr %t279, i32 0, i32 2 + store i32 1, ptr %t280 + br label %ifend80 +ifend80: + %t281 = load ptr, ptr @g_prog + %t282 = getelementptr inbounds %LSlice, ptr %t281, i32 0, i32 1 + %t283 = getelementptr inbounds %LSlice, ptr %t281, i32 0, i32 2 + %t284 = getelementptr inbounds %LSlice, ptr %t281, i32 0, i32 0 + %t285 = load i32, ptr %t282 + %t286 = load i32, ptr %t283 + %t287 = icmp sge i32 %t285, %t286 + br i1 %t287, label %grow81, label %put82 +grow81: + %t288 = mul i32 %t286, 2 + %t289 = icmp eq i32 %t286, 0 + %t290 = select i1 %t289, i32 8, i32 %t288 + %t291 = getelementptr ptr, ptr null, i32 1 + %t292 = ptrtoint ptr %t291 to i64 + %t293 = zext i32 %t290 to i64 + %t294 = mul i64 %t293, %t292 + %t295 = load ptr, ptr %t284 + %t296 = call ptr @realloc(ptr %t295, i64 %t294) + store ptr %t296, ptr %t284 + store i32 %t290, ptr %t283 + br label %put82 +put82: + %t297 = load ptr, ptr %t276 + %t298 = load ptr, ptr %t284 + %t299 = getelementptr inbounds ptr, ptr %t298, i32 %t285 + store ptr %t297, ptr %t299 + %t300 = add i32 %t285, 1 + store i32 %t300, ptr %t282 br label %ret ifend77: - %t278 = call i32 @fn_is_id(ptr @.str122) - %t279 = icmp ne i32 %t278, 0 - br i1 %t279, label %then80, label %ifend82 -then80: - %t280 = load ptr, ptr @g_prog - %t281 = getelementptr inbounds %LSlice, ptr %t280, i32 0, i32 1 - %t282 = getelementptr inbounds %LSlice, ptr %t280, i32 0, i32 2 - %t283 = getelementptr inbounds %LSlice, ptr %t280, i32 0, i32 0 - %t284 = load i32, ptr %t281 - %t285 = load i32, ptr %t282 - %t286 = icmp sge i32 %t284, %t285 - br i1 %t286, label %grow83, label %put84 -grow83: - %t287 = mul i32 %t285, 2 - %t288 = icmp eq i32 %t285, 0 - %t289 = select i1 %t288, i32 8, i32 %t287 - %t290 = getelementptr ptr, ptr null, i32 1 - %t291 = ptrtoint ptr %t290 to i64 - %t292 = zext i32 %t289 to i64 - %t293 = mul i64 %t292, %t291 - %t294 = load ptr, ptr %t283 - %t295 = call ptr @realloc(ptr %t294, i64 %t293) - store ptr %t295, ptr %t283 - store i32 %t289, ptr %t282 - br label %put84 -put84: - %t296 = call ptr @fn_parse_main() - %t297 = load ptr, ptr %t283 - %t298 = getelementptr inbounds ptr, ptr %t297, i32 %t284 - store ptr %t296, ptr %t298 - %t299 = add i32 %t284, 1 - store i32 %t299, ptr %t281 + %t301 = call i32 @fn_is_id(ptr @.str122) + %t302 = icmp ne i32 %t301, 0 + br i1 %t302, label %then83, label %ifend85 +then83: + %t303 = load ptr, ptr @g_prog + %t304 = getelementptr inbounds %LSlice, ptr %t303, i32 0, i32 1 + %t305 = getelementptr inbounds %LSlice, ptr %t303, i32 0, i32 2 + %t306 = getelementptr inbounds %LSlice, ptr %t303, i32 0, i32 0 + %t307 = load i32, ptr %t304 + %t308 = load i32, ptr %t305 + %t309 = icmp sge i32 %t307, %t308 + br i1 %t309, label %grow86, label %put87 +grow86: + %t310 = mul i32 %t308, 2 + %t311 = icmp eq i32 %t308, 0 + %t312 = select i1 %t311, i32 8, i32 %t310 + %t313 = getelementptr ptr, ptr null, i32 1 + %t314 = ptrtoint ptr %t313 to i64 + %t315 = zext i32 %t312 to i64 + %t316 = mul i64 %t315, %t314 + %t317 = load ptr, ptr %t306 + %t318 = call ptr @realloc(ptr %t317, i64 %t316) + store ptr %t318, ptr %t306 + store i32 %t312, ptr %t305 + br label %put87 +put87: + %t319 = call ptr @fn_parse_extern() + %t320 = load ptr, ptr %t306 + %t321 = getelementptr inbounds ptr, ptr %t320, i32 %t307 + store ptr %t319, ptr %t321 + %t322 = add i32 %t307, 1 + store i32 %t322, ptr %t304 br label %ret -ifend82: - call void @fn_perr(ptr @.str123) +ifend85: + %t323 = call i32 @fn_is_id(ptr @.str123) + %t324 = icmp ne i32 %t323, 0 + br i1 %t324, label %then88, label %ifend90 +then88: + %t325 = load ptr, ptr @g_prog + %t326 = getelementptr inbounds %LSlice, ptr %t325, i32 0, i32 1 + %t327 = getelementptr inbounds %LSlice, ptr %t325, i32 0, i32 2 + %t328 = getelementptr inbounds %LSlice, ptr %t325, i32 0, i32 0 + %t329 = load i32, ptr %t326 + %t330 = load i32, ptr %t327 + %t331 = icmp sge i32 %t329, %t330 + br i1 %t331, label %grow91, label %put92 +grow91: + %t332 = mul i32 %t330, 2 + %t333 = icmp eq i32 %t330, 0 + %t334 = select i1 %t333, i32 8, i32 %t332 + %t335 = getelementptr ptr, ptr null, i32 1 + %t336 = ptrtoint ptr %t335 to i64 + %t337 = zext i32 %t334 to i64 + %t338 = mul i64 %t337, %t336 + %t339 = load ptr, ptr %t328 + %t340 = call ptr @realloc(ptr %t339, i64 %t338) + store ptr %t340, ptr %t328 + store i32 %t334, ptr %t327 + br label %put92 +put92: + %t341 = call ptr @fn_parse_main() + %t342 = load ptr, ptr %t328 + %t343 = getelementptr inbounds ptr, ptr %t342, i32 %t329 + store ptr %t341, ptr %t343 + %t344 = add i32 %t329, 1 + store i32 %t344, ptr %t326 + br label %ret +ifend90: + call void @fn_perr(ptr @.str124) br label %ret ret: ret void @@ -6623,7 +6711,7 @@ put4: br i1 %t34, label %then5, label %ifend7 then5: %t35 = load ptr, ptr %t4 - %t36 = call ptr @fn_sconcat(ptr @.str124, ptr %t35) + %t36 = call ptr @fn_sconcat(ptr @.str125, ptr %t35) call void @fn_perr(ptr %t36) br label %ifend7 ifend7: @@ -6683,8 +6771,8 @@ then0: ifend2: %t4 = load ptr, ptr @g_cur_dir store ptr %t4, ptr %t5 - store ptr @.str125, ptr @g_cur_dir - call void @fn_do_import(ptr @.str126) + store ptr @.str126, ptr @g_cur_dir + call void @fn_do_import(ptr @.str127) %t6 = load ptr, ptr %t5 store ptr %t6, ptr @g_cur_dir br label %ret @@ -6696,7 +6784,8 @@ define void @fn_parse_program() { entry: %t22 = alloca ptr %t26 = alloca ptr - %t30 = alloca i32 + %t35 = alloca ptr + %t38 = alloca i32 %t0 = getelementptr %LSlice, ptr null, i32 1 %t1 = ptrtoint ptr %t0 to i64 %t2 = call ptr @malloc(i64 %t1) @@ -6718,10 +6807,10 @@ entry: store i32 0, ptr %t11 store ptr %t8, ptr @g_loaded_paths call void @fn_skipnl() - store ptr @.str127, ptr @g_g_game_name + store ptr @.str128, ptr @g_g_game_name br label %wcond0 wcond0: - %t12 = call i32 @fn_is_id(ptr @.str128) + %t12 = call i32 @fn_is_id(ptr @.str129) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %wbody1, label %wend2 wbody1: @@ -6747,61 +6836,106 @@ wbody1: call void @fn_skipnl() br label %wcond0 wend2: - %t31 = call i32 @fn_is_id(ptr @.str129) - %t32 = icmp ne i32 %t31, 0 - %t33 = zext i1 %t32 to i32 - store i32 %t33, ptr %t30 - br i1 %t32, label %scend4, label %sc3 -sc3: - %t34 = call i32 @fn_is_id(ptr @.str130) - %t35 = icmp ne i32 %t34, 0 - %t36 = zext i1 %t35 to i32 - store i32 %t36, ptr %t30 - br label %scend4 -scend4: - %t37 = load i32, ptr %t30 - %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then5, label %ifend7 -then5: - %t39 = load i32, ptr @g_pi - %t40 = add i32 %t39, 1 - store i32 %t40, ptr @g_pi - %t41 = call ptr @fn_eat_id() - store ptr %t41, ptr @g_g_game_name - call void @fn_skipnl() - call void @fn_eat_op(ptr @.str131) - br label %ifend7 -ifend7: - br label %wcond8 -wcond8: - %t42 = icmp ne i32 1, 0 - br i1 %t42, label %wbody9, label %wend10 -wbody9: - call void @fn_skipnl() - %t43 = load ptr, ptr @g_toks - %t44 = getelementptr inbounds %LSlice, ptr %t43, i32 0, i32 0 - %t45 = load ptr, ptr %t44 - %t46 = load i32, ptr @g_pi - %t47 = getelementptr inbounds ptr, ptr %t45, i32 %t46 - %t48 = load ptr, ptr %t47 - %t49 = getelementptr inbounds %Str_Tok, ptr %t48, i32 0, i32 0 - %t50 = load i32, ptr %t49 - %t51 = icmp eq i32 %t50, 5 + br label %wcond3 +wcond3: + %t30 = call i32 @fn_is_op(ptr @.str130) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %wbody4, label %wend5 +wbody4: + %t32 = load i32, ptr @g_pi + %t33 = add i32 %t32, 1 + store i32 %t33, ptr @g_pi + %t34 = call ptr @fn_eat_id() + store ptr %t34, ptr %t35 + %t36 = call i32 @fn_is_op(ptr @.str131) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then6, label %ifend8 +then6: + store i32 0, ptr %t38 + br label %wcond9 +wcond9: + %t39 = icmp ne i32 1, 0 + br i1 %t39, label %wbody10, label %wend11 +wbody10: + %t40 = call i32 @fn_is_op(ptr @.str132) + %t41 = icmp ne i32 %t40, 0 + br i1 %t41, label %then12, label %ifend14 +then12: + %t42 = load i32, ptr %t38 + %t43 = add i32 %t42, 1 + store i32 %t43, ptr %t38 + br label %ifend14 +ifend14: + %t44 = call i32 @fn_is_op(ptr @.str133) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then15, label %ifend17 +then15: + %t46 = load i32, ptr %t38 + %t47 = sub i32 %t46, 1 + store i32 %t47, ptr %t38 + br label %ifend17 +ifend17: + %t48 = load i32, ptr @g_pi + %t49 = add i32 %t48, 1 + store i32 %t49, ptr @g_pi + %t50 = load i32, ptr %t38 + %t51 = icmp eq i32 %t50, 0 %t52 = zext i1 %t51 to i32 %t53 = icmp ne i32 %t52, 0 - br i1 %t53, label %then11, label %ifend13 -then11: - br label %wend10 -ifend13: - %t54 = call i32 @fn_is_op(ptr @.str132) + br i1 %t53, label %then18, label %ifend20 +then18: + br label %wend11 +ifend20: + br label %wcond9 +wend11: + br label %ifend8 +ifend8: + call void @fn_skipnl() + br label %wcond3 +wend5: + %t54 = call i32 @fn_is_id(ptr @.str134) %t55 = icmp ne i32 %t54, 0 - br i1 %t55, label %then14, label %ifend16 -then14: - br label %wend10 -ifend16: + br i1 %t55, label %then21, label %ifend23 +then21: + %t56 = load i32, ptr @g_pi + %t57 = add i32 %t56, 1 + store i32 %t57, ptr @g_pi + %t58 = call ptr @fn_eat_id() + store ptr %t58, ptr @g_g_game_name + call void @fn_skipnl() + call void @fn_eat_op(ptr @.str135) + br label %ifend23 +ifend23: + br label %wcond24 +wcond24: + %t59 = icmp ne i32 1, 0 + br i1 %t59, label %wbody25, label %wend26 +wbody25: + call void @fn_skipnl() + %t60 = load ptr, ptr @g_toks + %t61 = getelementptr inbounds %LSlice, ptr %t60, i32 0, i32 0 + %t62 = load ptr, ptr %t61 + %t63 = load i32, ptr @g_pi + %t64 = getelementptr inbounds ptr, ptr %t62, i32 %t63 + %t65 = load ptr, ptr %t64 + %t66 = getelementptr inbounds %Str_Tok, ptr %t65, i32 0, i32 0 + %t67 = load i32, ptr %t66 + %t68 = icmp eq i32 %t67, 5 + %t69 = zext i1 %t68 to i32 + %t70 = icmp ne i32 %t69, 0 + br i1 %t70, label %then27, label %ifend29 +then27: + br label %wend26 +ifend29: + %t71 = call i32 @fn_is_op(ptr @.str136) + %t72 = icmp ne i32 %t71, 0 + br i1 %t72, label %then30, label %ifend32 +then30: + br label %wend26 +ifend32: call void @fn_parse_one_decl() - br label %wcond8 -wend10: + br label %wcond24 +wend26: br label %ret ret: ret void @@ -6822,14 +6956,14 @@ entry: %t6 = call ptr @fn_eat_id() store ptr %t6, ptr %t5 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str133) + call void @fn_eat_op(ptr @.str137) br label %wcond0 wcond0: %t7 = icmp ne i32 1, 0 br i1 %t7, label %wbody1, label %wend2 wbody1: call void @fn_skipnl() - %t8 = call i32 @fn_is_op(ptr @.str134) + %t8 = call i32 @fn_is_op(ptr @.str138) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then3, label %ifend5 then3: @@ -6841,12 +6975,12 @@ ifend5: %t13 = getelementptr inbounds %Str_Node, ptr %t12, i32 0, i32 1 %t14 = call ptr @fn_eat_id() store ptr %t14, ptr %t13 - call void @fn_eat_op(ptr @.str135) + call void @fn_eat_op(ptr @.str139) %t15 = load ptr, ptr %t11 %t16 = getelementptr inbounds %Str_Node, ptr %t15, i32 0, i32 3 %t17 = call ptr @fn_ptype() store ptr %t17, ptr %t16 - %t18 = call i32 @fn_is_op(ptr @.str136) + %t18 = call i32 @fn_is_op(ptr @.str140) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then6, label %ifend8 then6: @@ -6889,7 +7023,7 @@ put10: store ptr %t43, ptr %t45 %t46 = add i32 %t31, 1 store i32 %t46, ptr %t28 - %t47 = call i32 @fn_is_op(ptr @.str137) + %t47 = call i32 @fn_is_op(ptr @.str141) %t48 = icmp ne i32 %t47, 0 br i1 %t48, label %then11, label %ifend13 then11: @@ -6900,7 +7034,7 @@ then11: ifend13: br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str138) + call void @fn_eat_op(ptr @.str142) %t51 = load ptr, ptr %t3 store ptr %t51, ptr %retval br label %ret @@ -6912,7 +7046,7 @@ ret: define void @fn_skip_clause() { entry: %t2 = alloca i32 - %t0 = call i32 @fn_is_op(ptr @.str139) + %t0 = call i32 @fn_is_op(ptr @.str143) %t1 = icmp ne i32 %t0, 0 br i1 %t1, label %then0, label %ifend2 then0: @@ -6922,7 +7056,7 @@ wcond3: %t3 = icmp ne i32 1, 0 br i1 %t3, label %wbody4, label %wend5 wbody4: - %t4 = call i32 @fn_is_op(ptr @.str140) + %t4 = call i32 @fn_is_op(ptr @.str144) %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then6, label %ifend8 then6: @@ -6931,7 +7065,7 @@ then6: store i32 %t7, ptr %t2 br label %ifend8 ifend8: - %t8 = call i32 @fn_is_op(ptr @.str141) + %t8 = call i32 @fn_is_op(ptr @.str145) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then9, label %ifend11 then9: @@ -6983,7 +7117,7 @@ entry: store ptr %t6, ptr %t5 %t7 = load ptr, ptr %t3 %t8 = getelementptr inbounds %Str_Node, ptr %t7, i32 0, i32 3 - store ptr @.str142, ptr %t8 + store ptr @.str146, ptr %t8 store i32 0, ptr %t9 %t10 = call ptr @fn_node(i32 21) store ptr %t10, ptr %t11 @@ -6993,7 +7127,7 @@ wcond0: br i1 %t12, label %wbody1, label %wend2 wbody1: call void @fn_skipnl() - %t13 = call i32 @fn_is_op(ptr @.str143) + %t13 = call i32 @fn_is_op(ptr @.str147) %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then3, label %ifend5 then3: @@ -7002,7 +7136,7 @@ then3: store i32 %t16, ptr @g_pi %t17 = call ptr @fn_eat_id() store ptr %t17, ptr %t18 - %t19 = call i32 @fn_is_op(ptr @.str144) + %t19 = call i32 @fn_is_op(ptr @.str148) %t20 = icmp ne i32 %t19, 0 br i1 %t20, label %then6, label %ifend8 then6: @@ -7012,7 +7146,7 @@ wcond9: %t22 = icmp ne i32 1, 0 br i1 %t22, label %wbody10, label %wend11 wbody10: - %t23 = call i32 @fn_is_op(ptr @.str145) + %t23 = call i32 @fn_is_op(ptr @.str149) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then12, label %ifend14 then12: @@ -7021,7 +7155,7 @@ then12: store i32 %t26, ptr %t21 br label %ifend14 ifend14: - %t27 = call i32 @fn_is_op(ptr @.str146) + %t27 = call i32 @fn_is_op(ptr @.str150) %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then15, label %ifend17 then15: @@ -7047,7 +7181,7 @@ wend11: ifend8: br label %wcond0 ifend5: - %t37 = call i32 @fn_is_id(ptr @.str147) + %t37 = call i32 @fn_is_id(ptr @.str151) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then21, label %ifend23 then21: @@ -7060,13 +7194,13 @@ then21: store ptr %t43, ptr %t42 br label %wcond0 ifend23: - %t45 = call i32 @fn_is_id(ptr @.str148) + %t45 = call i32 @fn_is_id(ptr @.str152) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t44 br i1 %t46, label %scend25, label %sc24 sc24: - %t48 = call i32 @fn_is_id(ptr @.str149) + %t48 = call i32 @fn_is_id(ptr @.str153) %t49 = icmp ne i32 %t48, 0 %t50 = zext i1 %t49 to i32 store i32 %t50, ptr %t44 @@ -7082,7 +7216,7 @@ then26: call void @fn_skip_clause() br label %wcond0 ifend28: - %t55 = call i32 @fn_is_id(ptr @.str150) + %t55 = call i32 @fn_is_id(ptr @.str154) %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then29, label %ifend31 then29: @@ -7090,14 +7224,14 @@ then29: %t58 = add i32 %t57, 1 store i32 %t58, ptr @g_pi store i32 1, ptr %t9 - %t59 = call i32 @fn_is_op(ptr @.str151) + %t59 = call i32 @fn_is_op(ptr @.str155) %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %then32, label %ifend34 then32: - call void @fn_eat_op(ptr @.str152) + call void @fn_eat_op(ptr @.str156) br label %wcond35 wcond35: - %t61 = call i32 @fn_is_op(ptr @.str153) + %t61 = call i32 @fn_is_op(ptr @.str157) %t62 = icmp eq i32 %t61, 0 %t63 = zext i1 %t62 to i32 %t64 = icmp ne i32 %t63, 0 @@ -7139,7 +7273,7 @@ put39: store ptr %t88, ptr %t90 %t91 = add i32 %t76, 1 store i32 %t91, ptr %t73 - %t92 = call i32 @fn_is_op(ptr @.str154) + %t92 = call i32 @fn_is_op(ptr @.str158) %t93 = icmp ne i32 %t92, 0 br i1 %t93, label %then40, label %ifend42 then40: @@ -7150,7 +7284,7 @@ then40: ifend42: br label %wcond35 wend37: - call void @fn_eat_op(ptr @.str155) + call void @fn_eat_op(ptr @.str159) br label %ifend34 ifend34: %t96 = load ptr, ptr %t11 @@ -7238,18 +7372,18 @@ entry: %t1 = alloca ptr %t11 = alloca ptr %t40 = alloca ptr - call void @fn_eat_op(ptr @.str156) + call void @fn_eat_op(ptr @.str160) %t0 = call ptr @fn_node(i32 7) store ptr %t0, ptr %t1 br label %wcond0 wcond0: - %t2 = call i32 @fn_is_op(ptr @.str157) + %t2 = call i32 @fn_is_op(ptr @.str161) %t3 = icmp eq i32 %t2, 0 %t4 = zext i1 %t3 to i32 %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %wbody1, label %wend2 wbody1: - %t6 = call i32 @fn_is_op(ptr @.str158) + %t6 = call i32 @fn_is_op(ptr @.str162) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then3, label %else4 then3: @@ -7295,7 +7429,7 @@ put7: store ptr %t35, ptr %t37 %t38 = add i32 %t23, 1 store i32 %t38, ptr %t20 - call void @fn_eat_op(ptr @.str159) + call void @fn_eat_op(ptr @.str163) br label %ifend5 else4: %t39 = call ptr @fn_node(i32 33) @@ -7339,7 +7473,7 @@ put9: store i32 %t67, ptr %t49 br label %ifend5 ifend5: - %t68 = call i32 @fn_is_op(ptr @.str160) + %t68 = call i32 @fn_is_op(ptr @.str164) %t69 = icmp ne i32 %t68, 0 br i1 %t69, label %then10, label %ifend12 then10: @@ -7350,8 +7484,8 @@ then10: ifend12: br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str161) - %t72 = call i32 @fn_is_id(ptr @.str162) + call void @fn_eat_op(ptr @.str165) + %t72 = call i32 @fn_is_id(ptr @.str166) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then13, label %ifend15 then13: @@ -7381,10 +7515,10 @@ entry: %t40 = alloca ptr %t0 = call ptr @fn_node(i32 21) store ptr %t0, ptr %t1 - call void @fn_eat_op(ptr @.str163) + call void @fn_eat_op(ptr @.str167) br label %wcond0 wcond0: - %t2 = call i32 @fn_is_op(ptr @.str164) + %t2 = call i32 @fn_is_op(ptr @.str168) %t3 = icmp eq i32 %t2, 0 %t4 = zext i1 %t3 to i32 %t5 = icmp ne i32 %t4, 0 @@ -7426,7 +7560,7 @@ put4: store ptr %t29, ptr %t31 %t32 = add i32 %t17, 1 store i32 %t32, ptr %t14 - %t33 = call i32 @fn_is_op(ptr @.str165) + %t33 = call i32 @fn_is_op(ptr @.str169) %t34 = icmp ne i32 %t33, 0 br i1 %t34, label %then5, label %ifend7 then5: @@ -7437,7 +7571,7 @@ then5: ifend7: br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str166) + call void @fn_eat_op(ptr @.str170) %t37 = call ptr @fn_eat_id() store ptr %t37, ptr %t38 %t39 = call ptr @fn_eat_id() @@ -7466,6 +7600,394 @@ ret: ret ptr %t55 } +define ptr @fn_mk_and(ptr %arg_a, ptr %arg_b) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t8 = alloca ptr + store ptr %arg_a, ptr %t0 + store ptr %arg_b, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = icmp eq ptr %t2, null + %t4 = zext i1 %t3 to i32 + %t5 = icmp ne i32 %t4, 0 + br i1 %t5, label %then0, label %ifend2 +then0: + %t6 = load ptr, ptr %t1 + store ptr %t6, ptr %retval + br label %ret +ifend2: + %t7 = call ptr @fn_node(i32 37) + store ptr %t7, ptr %t8 + %t9 = load ptr, ptr %t8 + %t10 = getelementptr inbounds %Str_Node, ptr %t9, i32 0, i32 1 + store ptr @.str171, ptr %t10 + %t11 = load ptr, ptr %t8 + %t12 = getelementptr inbounds %Str_Node, ptr %t11, i32 0, i32 4 + %t13 = load ptr, ptr %t0 + store ptr %t13, ptr %t12 + %t14 = load ptr, ptr %t8 + %t15 = getelementptr inbounds %Str_Node, ptr %t14, i32 0, i32 5 + %t16 = load ptr, ptr %t1 + store ptr %t16, ptr %t15 + %t17 = load ptr, ptr %t8 + store ptr %t17, ptr %retval + br label %ret +ret: + %t18 = load ptr, ptr %retval + ret ptr %t18 +} + +define ptr @fn_qualify_fields(ptr %arg_e, ptr %arg_prop) { +entry: + %retval = alloca ptr + %t0 = alloca ptr + %t1 = alloca ptr + %t14 = alloca ptr + %t16 = alloca ptr + store ptr %arg_e, ptr %t0 + store ptr %arg_prop, ptr %t1 + %t2 = load ptr, ptr %t0 + %t3 = icmp eq ptr %t2, null + %t4 = zext i1 %t3 to i32 + %t5 = icmp ne i32 %t4, 0 + br i1 %t5, label %then0, label %ifend2 +then0: + %t6 = load ptr, ptr %t0 + store ptr %t6, ptr %retval + br label %ret +ifend2: + %t7 = load ptr, ptr %t0 + %t8 = getelementptr inbounds %Str_Node, ptr %t7, i32 0, i32 0 + %t9 = load i32, ptr %t8 + %t10 = icmp eq i32 %t9, 33 + %t11 = zext i1 %t10 to i32 + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then3, label %ifend5 +then3: + %t13 = call ptr @fn_node(i32 35) + store ptr %t13, ptr %t14 + %t15 = call ptr @fn_node(i32 33) + store ptr %t15, ptr %t16 + %t17 = load ptr, ptr %t16 + %t18 = getelementptr inbounds %Str_Node, ptr %t17, i32 0, i32 1 + %t19 = load ptr, ptr %t1 + store ptr %t19, ptr %t18 + %t20 = load ptr, ptr %t14 + %t21 = getelementptr inbounds %Str_Node, ptr %t20, i32 0, i32 4 + %t22 = load ptr, ptr %t16 + store ptr %t22, ptr %t21 + %t23 = load ptr, ptr %t14 + %t24 = getelementptr inbounds %Str_Node, ptr %t23, i32 0, i32 1 + %t25 = load ptr, ptr %t0 + %t26 = getelementptr inbounds %Str_Node, ptr %t25, i32 0, i32 1 + %t27 = load ptr, ptr %t26 + store ptr %t27, ptr %t24 + %t28 = load ptr, ptr %t14 + store ptr %t28, ptr %retval + br label %ret +ifend5: + %t29 = load ptr, ptr %t0 + %t30 = getelementptr inbounds %Str_Node, ptr %t29, i32 0, i32 0 + %t31 = load i32, ptr %t30 + %t32 = icmp eq i32 %t31, 37 + %t33 = zext i1 %t32 to i32 + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then6, label %ifend8 +then6: + %t35 = load ptr, ptr %t0 + %t36 = getelementptr inbounds %Str_Node, ptr %t35, i32 0, i32 4 + %t37 = load ptr, ptr %t0 + %t38 = getelementptr inbounds %Str_Node, ptr %t37, i32 0, i32 4 + %t39 = load ptr, ptr %t38 + %t40 = load ptr, ptr %t1 + %t41 = call ptr @fn_qualify_fields(ptr %t39, ptr %t40) + store ptr %t41, ptr %t36 + %t42 = load ptr, ptr %t0 + %t43 = getelementptr inbounds %Str_Node, ptr %t42, i32 0, i32 5 + %t44 = load ptr, ptr %t0 + %t45 = getelementptr inbounds %Str_Node, ptr %t44, i32 0, i32 5 + %t46 = load ptr, ptr %t45 + %t47 = load ptr, ptr %t1 + %t48 = call ptr @fn_qualify_fields(ptr %t46, ptr %t47) + store ptr %t48, ptr %t43 + %t49 = load ptr, ptr %t0 + store ptr %t49, ptr %retval + br label %ret +ifend8: + %t50 = load ptr, ptr %t0 + %t51 = getelementptr inbounds %Str_Node, ptr %t50, i32 0, i32 0 + %t52 = load i32, ptr %t51 + %t53 = icmp eq i32 %t52, 38 + %t54 = zext i1 %t53 to i32 + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9, label %ifend11 +then9: + %t56 = load ptr, ptr %t0 + %t57 = getelementptr inbounds %Str_Node, ptr %t56, i32 0, i32 4 + %t58 = load ptr, ptr %t0 + %t59 = getelementptr inbounds %Str_Node, ptr %t58, i32 0, i32 4 + %t60 = load ptr, ptr %t59 + %t61 = load ptr, ptr %t1 + %t62 = call ptr @fn_qualify_fields(ptr %t60, ptr %t61) + store ptr %t62, ptr %t57 + %t63 = load ptr, ptr %t0 + store ptr %t63, ptr %retval + br label %ret +ifend11: + %t64 = load ptr, ptr %t0 + store ptr %t64, ptr %retval + br label %ret +ret: + %t65 = load ptr, ptr %retval + ret ptr %t65 +} + +define ptr @fn_parse_queries_anno() { +entry: + %retval = alloca ptr + %t1 = alloca ptr + %t3 = alloca ptr + %t4 = alloca ptr + %t12 = alloca ptr + %t21 = alloca ptr + %t23 = alloca ptr + %t50 = alloca ptr + %t83 = alloca ptr + %t97 = alloca ptr + %t99 = alloca ptr + call void @fn_eat_op(ptr @.str172) + %t0 = call ptr @fn_node(i32 21) + store ptr %t0, ptr %t1 + %t2 = call ptr @fn_node(i32 7) + store ptr %t2, ptr %t3 + store ptr null, ptr %t4 + br label %wcond0 +wcond0: + %t5 = call i32 @fn_is_op(ptr @.str173) + %t6 = icmp eq i32 %t5, 0 + %t7 = zext i1 %t6 to i32 + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %wbody1, label %wend2 +wbody1: + call void @fn_skipnl() + %t9 = call i32 @fn_is_op(ptr @.str174) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then3, label %ifend5 +then3: + br label %wend2 +ifend5: + %t11 = call ptr @fn_eat_id() + store ptr %t11, ptr %t12 + call void @fn_eat_op(ptr @.str175) + %t13 = load ptr, ptr %t12 + %t14 = call i32 @fn_streq(ptr %t13, ptr @.str176) + %t15 = icmp ne i32 %t14, 0 + br i1 %t15, label %then6, label %else7 +then6: + call void @fn_eat_op(ptr @.str177) + call void @fn_skipnl() + br label %wcond9 +wcond9: + %t16 = call i32 @fn_is_op(ptr @.str178) + %t17 = icmp eq i32 %t16, 0 + %t18 = zext i1 %t17 to i32 + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %wbody10, label %wend11 +wbody10: + %t20 = call ptr @fn_eat_id() + store ptr %t20, ptr %t21 + %t22 = call ptr @fn_node(i32 33) + store ptr %t22, ptr %t23 + %t24 = load ptr, ptr %t23 + %t25 = getelementptr inbounds %Str_Node, ptr %t24, i32 0, i32 1 + %t26 = load ptr, ptr %t21 + store ptr %t26, ptr %t25 + %t27 = load ptr, ptr %t1 + %t28 = getelementptr inbounds %Str_Node, ptr %t27, i32 0, i32 7 + %t29 = load ptr, ptr %t28 + %t30 = getelementptr inbounds %LSlice, ptr %t29, i32 0, i32 1 + %t31 = getelementptr inbounds %LSlice, ptr %t29, i32 0, i32 2 + %t32 = getelementptr inbounds %LSlice, ptr %t29, i32 0, i32 0 + %t33 = load i32, ptr %t30 + %t34 = load i32, ptr %t31 + %t35 = icmp sge i32 %t33, %t34 + br i1 %t35, label %grow12, label %put13 +grow12: + %t36 = mul i32 %t34, 2 + %t37 = icmp eq i32 %t34, 0 + %t38 = select i1 %t37, i32 8, i32 %t36 + %t39 = getelementptr ptr, ptr null, i32 1 + %t40 = ptrtoint ptr %t39 to i64 + %t41 = zext i32 %t38 to i64 + %t42 = mul i64 %t41, %t40 + %t43 = load ptr, ptr %t32 + %t44 = call ptr @realloc(ptr %t43, i64 %t42) + store ptr %t44, ptr %t32 + store i32 %t38, ptr %t31 + br label %put13 +put13: + %t45 = load ptr, ptr %t23 + %t46 = load ptr, ptr %t32 + %t47 = getelementptr inbounds ptr, ptr %t46, i32 %t33 + store ptr %t45, ptr %t47 + %t48 = add i32 %t33, 1 + store i32 %t48, ptr %t30 + %t49 = call ptr @fn_node(i32 33) + store ptr %t49, ptr %t50 + %t51 = load ptr, ptr %t50 + %t52 = getelementptr inbounds %Str_Node, ptr %t51, i32 0, i32 1 + %t53 = load ptr, ptr %t21 + store ptr %t53, ptr %t52 + %t54 = load ptr, ptr %t50 + %t55 = getelementptr inbounds %Str_Node, ptr %t54, i32 0, i32 2 + store i32 0, ptr %t55 + %t56 = load ptr, ptr %t3 + %t57 = getelementptr inbounds %Str_Node, ptr %t56, i32 0, i32 7 + %t58 = load ptr, ptr %t57 + %t59 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 1 + %t60 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 2 + %t61 = getelementptr inbounds %LSlice, ptr %t58, i32 0, i32 0 + %t62 = load i32, ptr %t59 + %t63 = load i32, ptr %t60 + %t64 = icmp sge i32 %t62, %t63 + br i1 %t64, label %grow14, label %put15 +grow14: + %t65 = mul i32 %t63, 2 + %t66 = icmp eq i32 %t63, 0 + %t67 = select i1 %t66, i32 8, i32 %t65 + %t68 = getelementptr ptr, ptr null, i32 1 + %t69 = ptrtoint ptr %t68 to i64 + %t70 = zext i32 %t67 to i64 + %t71 = mul i64 %t70, %t69 + %t72 = load ptr, ptr %t61 + %t73 = call ptr @realloc(ptr %t72, i64 %t71) + store ptr %t73, ptr %t61 + store i32 %t67, ptr %t60 + br label %put15 +put15: + %t74 = load ptr, ptr %t50 + %t75 = load ptr, ptr %t61 + %t76 = getelementptr inbounds ptr, ptr %t75, i32 %t62 + store ptr %t74, ptr %t76 + %t77 = add i32 %t62, 1 + store i32 %t77, ptr %t59 + %t78 = call i32 @fn_is_op(ptr @.str179) + %t79 = icmp ne i32 %t78, 0 + br i1 %t79, label %then16, label %ifend18 +then16: + %t80 = load i32, ptr @g_pi + %t81 = add i32 %t80, 1 + store i32 %t81, ptr @g_pi + %t82 = call ptr @fn_expr() + store ptr %t82, ptr %t83 + call void @fn_eat_op(ptr @.str180) + %t84 = load ptr, ptr %t4 + %t85 = load ptr, ptr %t83 + %t86 = load ptr, ptr %t21 + %t87 = call ptr @fn_qualify_fields(ptr %t85, ptr %t86) + %t88 = call ptr @fn_mk_and(ptr %t84, ptr %t87) + store ptr %t88, ptr %t4 + br label %ifend18 +ifend18: + %t89 = call i32 @fn_is_op(ptr @.str181) + %t90 = icmp ne i32 %t89, 0 + br i1 %t90, label %then19, label %ifend21 +then19: + %t91 = load i32, ptr @g_pi + %t92 = add i32 %t91, 1 + store i32 %t92, ptr @g_pi + br label %ifend21 +ifend21: + call void @fn_skipnl() + br label %wcond9 +wend11: + call void @fn_eat_op(ptr @.str182) + br label %ifend8 +else7: + %t93 = load ptr, ptr %t12 + %t94 = call i32 @fn_streq(ptr %t93, ptr @.str183) + %t95 = icmp ne i32 %t94, 0 + br i1 %t95, label %then22, label %else23 +then22: + %t96 = call ptr @fn_eat_id() + store ptr %t96, ptr %t97 + %t98 = call ptr @fn_node(i32 33) + store ptr %t98, ptr %t99 + %t100 = load ptr, ptr %t99 + %t101 = getelementptr inbounds %Str_Node, ptr %t100, i32 0, i32 1 + %t102 = load ptr, ptr %t97 + store ptr %t102, ptr %t101 + %t103 = load ptr, ptr %t99 + %t104 = getelementptr inbounds %Str_Node, ptr %t103, i32 0, i32 2 + store i32 1, ptr %t104 + %t105 = load ptr, ptr %t3 + %t106 = getelementptr inbounds %Str_Node, ptr %t105, i32 0, i32 7 + %t107 = load ptr, ptr %t106 + %t108 = getelementptr inbounds %LSlice, ptr %t107, i32 0, i32 1 + %t109 = getelementptr inbounds %LSlice, ptr %t107, i32 0, i32 2 + %t110 = getelementptr inbounds %LSlice, ptr %t107, i32 0, i32 0 + %t111 = load i32, ptr %t108 + %t112 = load i32, ptr %t109 + %t113 = icmp sge i32 %t111, %t112 + br i1 %t113, label %grow25, label %put26 +grow25: + %t114 = mul i32 %t112, 2 + %t115 = icmp eq i32 %t112, 0 + %t116 = select i1 %t115, i32 8, i32 %t114 + %t117 = getelementptr ptr, ptr null, i32 1 + %t118 = ptrtoint ptr %t117 to i64 + %t119 = zext i32 %t116 to i64 + %t120 = mul i64 %t119, %t118 + %t121 = load ptr, ptr %t110 + %t122 = call ptr @realloc(ptr %t121, i64 %t120) + store ptr %t122, ptr %t110 + store i32 %t116, ptr %t109 + br label %put26 +put26: + %t123 = load ptr, ptr %t99 + %t124 = load ptr, ptr %t110 + %t125 = getelementptr inbounds ptr, ptr %t124, i32 %t111 + store ptr %t123, ptr %t125 + %t126 = add i32 %t111, 1 + store i32 %t126, ptr %t108 + br label %ifend24 +else23: + %t127 = call ptr @fn_expr() + br label %ifend24 +ifend24: + br label %ifend8 +ifend8: + %t128 = call i32 @fn_is_op(ptr @.str184) + %t129 = icmp ne i32 %t128, 0 + br i1 %t129, label %then27, label %ifend29 +then27: + %t130 = load i32, ptr @g_pi + %t131 = add i32 %t130, 1 + store i32 %t131, ptr @g_pi + br label %ifend29 +ifend29: + call void @fn_skipnl() + br label %wcond0 +wend2: + call void @fn_eat_op(ptr @.str185) + %t132 = load ptr, ptr %t1 + %t133 = getelementptr inbounds %Str_Node, ptr %t132, i32 0, i32 6 + %t134 = load ptr, ptr %t3 + store ptr %t134, ptr %t133 + %t135 = load ptr, ptr %t1 + %t136 = getelementptr inbounds %Str_Node, ptr %t135, i32 0, i32 5 + %t137 = load ptr, ptr %t4 + store ptr %t137, ptr %t136 + %t138 = load ptr, ptr %t1 + store ptr %t138, ptr %retval + br label %ret +ret: + %t139 = load ptr, ptr %retval + ret ptr %t139 +} + define ptr @fn_parse_spawn() { entry: %retval = alloca ptr @@ -7481,14 +8003,14 @@ entry: %t6 = call ptr @fn_eat_id() store ptr %t6, ptr %t5 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str167) + call void @fn_eat_op(ptr @.str186) br label %wcond0 wcond0: %t7 = icmp ne i32 1, 0 br i1 %t7, label %wbody1, label %wend2 wbody1: call void @fn_skipnl() - %t8 = call i32 @fn_is_op(ptr @.str168) + %t8 = call i32 @fn_is_op(ptr @.str187) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then3, label %ifend5 then3: @@ -7534,7 +8056,7 @@ put7: store ptr %t36, ptr %t38 %t39 = add i32 %t24, 1 store i32 %t39, ptr %t21 - %t40 = call i32 @fn_is_op(ptr @.str169) + %t40 = call i32 @fn_is_op(ptr @.str188) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then8, label %ifend10 then8: @@ -7545,7 +8067,7 @@ then8: ifend10: br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str170) + call void @fn_eat_op(ptr @.str189) %t44 = load ptr, ptr %t3 store ptr %t44, ptr %retval br label %ret @@ -7569,14 +8091,14 @@ entry: %t6 = call ptr @fn_eat_id() store ptr %t6, ptr %t5 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str171) + call void @fn_eat_op(ptr @.str190) br label %wcond0 wcond0: %t7 = icmp ne i32 1, 0 br i1 %t7, label %wbody1, label %wend2 wbody1: call void @fn_skipnl() - %t8 = call i32 @fn_is_op(ptr @.str172) + %t8 = call i32 @fn_is_op(ptr @.str191) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then3, label %ifend5 then3: @@ -7618,7 +8140,7 @@ put7: store ptr %t33, ptr %t35 %t36 = add i32 %t21, 1 store i32 %t36, ptr %t18 - %t37 = call i32 @fn_is_op(ptr @.str173) + %t37 = call i32 @fn_is_op(ptr @.str192) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then8, label %ifend10 then8: @@ -7630,7 +8152,7 @@ ifend10: call void @fn_skipnl() br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str174) + call void @fn_eat_op(ptr @.str193) %t41 = load ptr, ptr %t3 store ptr %t41, ptr %retval br label %ret @@ -7654,14 +8176,14 @@ entry: %t6 = call ptr @fn_eat_id() store ptr %t6, ptr %t5 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str175) + call void @fn_eat_op(ptr @.str194) br label %wcond0 wcond0: %t7 = icmp ne i32 1, 0 br i1 %t7, label %wbody1, label %wend2 wbody1: call void @fn_skipnl() - %t8 = call i32 @fn_is_op(ptr @.str176) + %t8 = call i32 @fn_is_op(ptr @.str195) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then3, label %ifend5 then3: @@ -7703,7 +8225,7 @@ put7: store ptr %t33, ptr %t35 %t36 = add i32 %t21, 1 store i32 %t36, ptr %t18 - %t37 = call i32 @fn_is_op(ptr @.str177) + %t37 = call i32 @fn_is_op(ptr @.str196) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then8, label %ifend10 then8: @@ -7715,7 +8237,7 @@ ifend10: call void @fn_skipnl() br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str178) + call void @fn_eat_op(ptr @.str197) %t41 = load ptr, ptr %t3 store ptr %t41, ptr %retval br label %ret @@ -7742,10 +8264,10 @@ entry: %t7 = getelementptr inbounds %Str_Node, ptr %t6, i32 0, i32 1 %t8 = call ptr @fn_eat_id() store ptr %t8, ptr %t7 - call void @fn_eat_op(ptr @.str179) + call void @fn_eat_op(ptr @.str198) br label %wcond0 wcond0: - %t9 = call i32 @fn_is_op(ptr @.str180) + %t9 = call i32 @fn_is_op(ptr @.str199) %t10 = icmp eq i32 %t9, 0 %t11 = zext i1 %t10 to i32 %t12 = icmp ne i32 %t11, 0 @@ -7757,7 +8279,7 @@ wbody1: %t16 = getelementptr inbounds %Str_Node, ptr %t15, i32 0, i32 1 %t17 = call ptr @fn_eat_id() store ptr %t17, ptr %t16 - call void @fn_eat_op(ptr @.str181) + call void @fn_eat_op(ptr @.str200) %t18 = load ptr, ptr %t14 %t19 = getelementptr inbounds %Str_Node, ptr %t18, i32 0, i32 3 %t20 = call ptr @fn_ptype() @@ -7792,7 +8314,7 @@ put4: store ptr %t39, ptr %t41 %t42 = add i32 %t27, 1 store i32 %t42, ptr %t24 - %t43 = call i32 @fn_is_op(ptr @.str182) + %t43 = call i32 @fn_is_op(ptr @.str201) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then5, label %ifend7 then5: @@ -7803,11 +8325,11 @@ then5: ifend7: br label %wcond0 wend2: - call void @fn_eat_op(ptr @.str183) + call void @fn_eat_op(ptr @.str202) %t47 = load ptr, ptr %t5 %t48 = getelementptr inbounds %Str_Node, ptr %t47, i32 0, i32 3 - store ptr @.str184, ptr %t48 - %t49 = call i32 @fn_is_op(ptr @.str185) + store ptr @.str203, ptr %t48 + %t49 = call i32 @fn_is_op(ptr @.str204) %t50 = icmp ne i32 %t49, 0 br i1 %t50, label %then8, label %ifend10 then8: @@ -7820,7 +8342,7 @@ then8: store ptr %t55, ptr %t54 br label %ifend10 ifend10: - call void @fn_eat_op(ptr @.str186) + call void @fn_eat_op(ptr @.str205) %t56 = load ptr, ptr @g_toks %t57 = getelementptr inbounds %LSlice, ptr %t56, i32 0, i32 0 %t58 = load ptr, ptr %t57 @@ -7916,7 +8438,7 @@ sc5: %t44 = load ptr, ptr %t43 %t45 = getelementptr inbounds %Str_Tok, ptr %t44, i32 0, i32 1 %t46 = load ptr, ptr %t45 - %t47 = call i32 @fn_streq(ptr %t46, ptr @.str187) + %t47 = call i32 @fn_streq(ptr %t46, ptr @.str206) %t48 = icmp ne i32 %t47, 0 %t49 = zext i1 %t48 to i32 store i32 %t49, ptr %t8 @@ -7932,7 +8454,7 @@ wbody1: %t55 = getelementptr inbounds %Str_Node, ptr %t54, i32 0, i32 1 %t56 = call ptr @fn_eat_id() store ptr %t56, ptr %t55 - call void @fn_eat_op(ptr @.str188) + call void @fn_eat_op(ptr @.str207) %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds %Str_Node, ptr %t57, i32 0, i32 4 %t59 = call ptr @fn_expr() @@ -7972,7 +8494,7 @@ put8: br label %wcond0 wend2: call void @fn_skipnl() - %t84 = call i32 @fn_is_op(ptr @.str189) + %t84 = call i32 @fn_is_op(ptr @.str208) %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %then9, label %ifend11 then9: @@ -7985,7 +8507,7 @@ wcond12: br i1 %t88, label %wbody13, label %wend14 wbody13: call void @fn_skipnl() - %t89 = call i32 @fn_is_op(ptr @.str190) + %t89 = call i32 @fn_is_op(ptr @.str209) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then15, label %ifend17 then15: @@ -8023,7 +8545,7 @@ put19: store i32 %t112, ptr %t94 br label %wcond12 wend14: - call void @fn_eat_op(ptr @.str191) + call void @fn_eat_op(ptr @.str210) br label %ifend11 ifend11: %t113 = load ptr, ptr %t1 @@ -8051,14 +8573,14 @@ entry: %t8 = getelementptr inbounds %Str_Node, ptr %t7, i32 0, i32 2 store i32 1, ptr %t8 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str192) + call void @fn_eat_op(ptr @.str211) call void @fn_skipnl() %t9 = load ptr, ptr %t3 %t10 = getelementptr inbounds %Str_Node, ptr %t9, i32 0, i32 4 %t11 = call ptr @fn_parse_widget() store ptr %t11, ptr %t10 call void @fn_skipnl() - call void @fn_eat_op(ptr @.str193) + call void @fn_eat_op(ptr @.str212) %t12 = load ptr, ptr %t3 store ptr %t12, ptr %retval br label %ret @@ -8131,23 +8653,23 @@ entry: store ptr %arg_llt, ptr %t0 %t1 = load i32, ptr @g_ll_t %t2 = call ptr @fn_itoa(i32 %t1) - %t3 = call ptr @fn_sconcat(ptr @.str194, ptr %t2) + %t3 = call ptr @fn_sconcat(ptr @.str213, ptr %t2) store ptr %t3, ptr %t4 %t5 = load i32, ptr @g_ll_t %t6 = add i32 %t5, 1 store i32 %t6, ptr @g_ll_t %t7 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t7, ptr @.str195) + call void @fn_buf_puts(ptr %t7, ptr @.str214) %t8 = load ptr, ptr @g_falloc %t9 = load ptr, ptr %t4 call void @fn_buf_puts(ptr %t8, ptr %t9) %t10 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t10, ptr @.str196) + call void @fn_buf_puts(ptr %t10, ptr @.str215) %t11 = load ptr, ptr @g_falloc %t12 = load ptr, ptr %t0 call void @fn_buf_puts(ptr %t11, ptr %t12) %t13 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t13, ptr @.str197) + call void @fn_buf_puts(ptr %t13, ptr @.str216) %t14 = load ptr, ptr %t4 store ptr %t14, ptr %retval br label %ret @@ -8254,7 +8776,7 @@ entry: %t3 = alloca ptr %t0 = load i32, ptr @g_ll_t %t1 = call ptr @fn_itoa(i32 %t0) - %t2 = call ptr @fn_sconcat(ptr @.str198, ptr %t1) + %t2 = call ptr @fn_sconcat(ptr @.str217, ptr %t1) store ptr %t2, ptr %t3 %t4 = load i32, ptr @g_ll_t %t5 = add i32 %t4, 1 @@ -8297,14 +8819,14 @@ entry: %t2 = alloca i32 store ptr %arg_t, ptr %t0 %t3 = load ptr, ptr %t0 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str199) + %t4 = call i32 @fn_streq(ptr %t3, ptr @.str218) %t5 = icmp ne i32 %t4, 0 %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t2 br i1 %t5, label %scend1, label %sc0 sc0: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str200) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str219) %t9 = icmp ne i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t2 @@ -8317,7 +8839,7 @@ scend1: br i1 %t12, label %scend3, label %sc2 sc2: %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str201) + %t15 = call i32 @fn_streq(ptr %t14, ptr @.str220) %t16 = icmp ne i32 %t15, 0 %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t1 @@ -8327,18 +8849,18 @@ scend3: %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then4, label %ifend6 then4: - store ptr @.str202, ptr %retval + store ptr @.str221, ptr %retval br label %ret ifend6: %t20 = load ptr, ptr %t0 - %t21 = call i32 @fn_streq(ptr %t20, ptr @.str203) + %t21 = call i32 @fn_streq(ptr %t20, ptr @.str222) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then7, label %ifend9 then7: - store ptr @.str204, ptr %retval + store ptr @.str223, ptr %retval br label %ret ifend9: - store ptr @.str205, ptr %retval + store ptr @.str224, ptr %retval br label %ret ret: %t23 = load ptr, ptr %retval @@ -8662,12 +9184,12 @@ entry: br i1 %t7, label %then0, label %ifend2 then0: %t8 = load ptr, ptr %t0 - %t9 = call ptr @fn_sconcat(ptr @.str206, ptr %t8) + %t9 = call ptr @fn_sconcat(ptr @.str225, ptr %t8) store ptr %t9, ptr %retval br label %ret ifend2: %t10 = load ptr, ptr %t0 - %t11 = call ptr @fn_sconcat(ptr @.str207, ptr %t10) + %t11 = call ptr @fn_sconcat(ptr @.str226, ptr %t10) store ptr %t11, ptr %retval br label %ret ret: @@ -8784,7 +9306,7 @@ ifend5: store i32 %t36, ptr %t2 br label %wcond0 wend2: - store ptr @.str208, ptr %retval + store ptr @.str227, ptr %retval br label %ret ret: %t37 = load ptr, ptr %retval @@ -9287,7 +9809,7 @@ entry: store ptr %arg_s, ptr %t0 %t1 = load i32, ptr @g_ll_str %t2 = call ptr @fn_itoa(i32 %t1) - %t3 = call ptr @fn_sconcat(ptr @.str209, ptr %t2) + %t3 = call ptr @fn_sconcat(ptr @.str228, ptr %t2) store ptr %t3, ptr %t4 %t5 = load i32, ptr @g_ll_str %t6 = add i32 %t5, 1 @@ -9297,12 +9819,12 @@ entry: store i32 %t8, ptr %t9 %t10 = load ptr, ptr %t4 call void @fn_emith(ptr %t10) - call void @fn_emith(ptr @.str210) + call void @fn_emith(ptr @.str229) %t11 = load i32, ptr %t9 %t12 = add i32 %t11, 1 %t13 = call ptr @fn_itoa(i32 %t12) call void @fn_emith(ptr %t13) - call void @fn_emith(ptr @.str211) + call void @fn_emith(ptr @.str230) store i32 0, ptr %t14 br label %wcond0 wcond0: @@ -9391,7 +9913,7 @@ ifend11: store i32 %t69, ptr %t14 br label %wcond0 wend2: - call void @fn_emith(ptr @.str212) + call void @fn_emith(ptr @.str231) %t70 = load ptr, ptr %t4 store ptr %t70, ptr %retval br label %ret @@ -9410,16 +9932,16 @@ entry: store ptr %arg_idx, ptr %t1 %t2 = call ptr @fn_nreg() store ptr %t2, ptr %t3 - call void @fn_emit(ptr @.str213) + call void @fn_emit(ptr @.str232) %t4 = load ptr, ptr %t3 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str214) + call void @fn_emit(ptr @.str233) %t5 = load ptr, ptr %t0 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str215) + call void @fn_emit(ptr @.str234) %t6 = load ptr, ptr %t1 call void @fn_emit(ptr %t6) - call void @fn_emit(ptr @.str216) + call void @fn_emit(ptr @.str235) %t7 = load ptr, ptr %t3 store ptr %t7, ptr %retval br label %ret @@ -9450,14 +9972,14 @@ then0: %t8 = getelementptr inbounds %Str_Node, ptr %t7, i32 0, i32 3 %t9 = load ptr, ptr %t8 %t10 = call ptr @fn_llty(ptr %t9) - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str217) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str236) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3, label %ifend5 then3: - store ptr @.str218, ptr %retval + store ptr @.str237, ptr %retval br label %ret ifend5: - store ptr @.str219, ptr %retval + store ptr @.str238, ptr %retval br label %ret ifend2: %t13 = load ptr, ptr %t0 @@ -9524,7 +10046,7 @@ sc13: %t58 = load ptr, ptr %t16 %t59 = getelementptr inbounds %Str_Node, ptr %t58, i32 0, i32 1 %t60 = load ptr, ptr %t59 - %t61 = call i32 @fn_streq(ptr %t60, ptr @.str220) + %t61 = call i32 @fn_streq(ptr %t60, ptr @.str239) %t62 = icmp ne i32 %t61, 0 %t63 = zext i1 %t62 to i32 store i32 %t63, ptr %t50 @@ -9558,7 +10080,7 @@ then17: %t81 = getelementptr inbounds %Str_Node, ptr %t80, i32 0, i32 2 %t82 = load i32, ptr %t81 %t83 = call ptr @fn_itoa(i32 %t82) - %t84 = call ptr @fn_sconcat(ptr @.str221, ptr %t83) + %t84 = call ptr @fn_sconcat(ptr @.str240, ptr %t83) store ptr %t84, ptr %retval br label %ret ifend19: @@ -9566,14 +10088,14 @@ ifend19: %t86 = getelementptr inbounds %Str_Node, ptr %t85, i32 0, i32 3 %t87 = load ptr, ptr %t86 %t88 = call ptr @fn_llty(ptr %t87) - %t89 = call i32 @fn_streq(ptr %t88, ptr @.str222) + %t89 = call i32 @fn_streq(ptr %t88, ptr @.str241) %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then20, label %ifend22 then20: - store ptr @.str223, ptr %retval + store ptr @.str242, ptr %retval br label %ret ifend22: - store ptr @.str224, ptr %retval + store ptr @.str243, ptr %retval br label %ret ret: %t91 = load ptr, ptr %retval @@ -9586,25 +10108,6 @@ entry: %t19 = alloca ptr %t37 = alloca i32 %t79 = alloca ptr - call void @fn_emith(ptr @.str225) - call void @fn_emith(ptr @.str226) - call void @fn_emith(ptr @.str227) - call void @fn_emith(ptr @.str228) - call void @fn_emith(ptr @.str229) - call void @fn_emith(ptr @.str230) - call void @fn_emith(ptr @.str231) - call void @fn_emith(ptr @.str232) - call void @fn_emith(ptr @.str233) - call void @fn_emith(ptr @.str234) - call void @fn_emith(ptr @.str235) - call void @fn_emith(ptr @.str236) - call void @fn_emith(ptr @.str237) - call void @fn_emith(ptr @.str238) - call void @fn_emith(ptr @.str239) - call void @fn_emith(ptr @.str240) - call void @fn_emith(ptr @.str241) - call void @fn_emith(ptr @.str242) - call void @fn_emith(ptr @.str243) call void @fn_emith(ptr @.str244) call void @fn_emith(ptr @.str245) call void @fn_emith(ptr @.str246) @@ -9617,16 +10120,35 @@ entry: call void @fn_emith(ptr @.str253) call void @fn_emith(ptr @.str254) call void @fn_emith(ptr @.str255) + call void @fn_emith(ptr @.str256) + call void @fn_emith(ptr @.str257) + call void @fn_emith(ptr @.str258) + call void @fn_emith(ptr @.str259) + call void @fn_emith(ptr @.str260) + call void @fn_emith(ptr @.str261) + call void @fn_emith(ptr @.str262) + call void @fn_emith(ptr @.str263) + call void @fn_emith(ptr @.str264) + call void @fn_emith(ptr @.str265) + call void @fn_emith(ptr @.str266) + call void @fn_emith(ptr @.str267) + call void @fn_emith(ptr @.str268) + call void @fn_emith(ptr @.str269) + call void @fn_emith(ptr @.str270) + call void @fn_emith(ptr @.str271) + call void @fn_emith(ptr @.str272) + call void @fn_emith(ptr @.str273) + call void @fn_emith(ptr @.str274) %t0 = load ptr, ptr @g_g_game_name %t1 = call i32 @fn_slen(ptr %t0) %t2 = add i32 %t1, 1 %t3 = call ptr @fn_itoa(i32 %t2) call void @fn_emith(ptr %t3) - call void @fn_emith(ptr @.str256) + call void @fn_emith(ptr @.str275) %t4 = load ptr, ptr @g_g_game_name call void @fn_emith(ptr %t4) - call void @fn_emith(ptr @.str257) - call void @fn_emith(ptr @.str258) + call void @fn_emith(ptr @.str276) + call void @fn_emith(ptr @.str277) store i32 0, ptr %t5 br label %wcond0 wcond0: @@ -9654,12 +10176,12 @@ wbody1: %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then3, label %ifend5 then3: - call void @fn_emith(ptr @.str259) + call void @fn_emith(ptr @.str278) %t26 = load ptr, ptr %t19 %t27 = getelementptr inbounds %Str_Node, ptr %t26, i32 0, i32 1 %t28 = load ptr, ptr %t27 call void @fn_emith(ptr %t28) - call void @fn_emith(ptr @.str260) + call void @fn_emith(ptr @.str279) %t29 = load ptr, ptr %t19 %t30 = getelementptr inbounds %Str_Node, ptr %t29, i32 0, i32 7 %t31 = load ptr, ptr %t30 @@ -9670,7 +10192,7 @@ then3: %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then6, label %ifend8 then6: - call void @fn_emith(ptr @.str261) + call void @fn_emith(ptr @.str280) br label %ifend8 ifend8: store i32 0, ptr %t37 @@ -9693,7 +10215,7 @@ wbody10: %t50 = icmp ne i32 %t49, 0 br i1 %t50, label %then12, label %ifend14 then12: - call void @fn_emith(ptr @.str262) + call void @fn_emith(ptr @.str281) br label %ifend14 ifend14: %t51 = load ptr, ptr %t19 @@ -9713,7 +10235,7 @@ ifend14: store i32 %t63, ptr %t37 br label %wcond9 wend11: - call void @fn_emith(ptr @.str263) + call void @fn_emith(ptr @.str282) br label %ifend5 ifend5: %t64 = load i32, ptr %t5 @@ -9748,22 +10270,22 @@ wbody16: %t85 = icmp ne i32 %t84, 0 br i1 %t85, label %then18, label %ifend20 then18: - call void @fn_emith(ptr @.str264) + call void @fn_emith(ptr @.str283) %t86 = load ptr, ptr %t79 %t87 = getelementptr inbounds %Str_Node, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %t87 call void @fn_emith(ptr %t88) - call void @fn_emith(ptr @.str265) + call void @fn_emith(ptr @.str284) %t89 = load ptr, ptr %t79 %t90 = getelementptr inbounds %Str_Node, ptr %t89, i32 0, i32 3 %t91 = load ptr, ptr %t90 %t92 = call ptr @fn_llty(ptr %t91) call void @fn_emith(ptr %t92) - call void @fn_emith(ptr @.str266) + call void @fn_emith(ptr @.str285) %t93 = load ptr, ptr %t79 %t94 = call ptr @fn_global_init(ptr %t93) call void @fn_emith(ptr %t94) - call void @fn_emith(ptr @.str267) + call void @fn_emith(ptr @.str286) br label %ifend20 ifend20: %t95 = load i32, ptr %t5 @@ -9804,7 +10326,7 @@ then0: %t15 = load ptr, ptr %t5 %t16 = getelementptr inbounds %Str_Val, ptr %t15, i32 0, i32 1 %t17 = load ptr, ptr %t16 - %t18 = call ptr @fn_sconcat(ptr @.str268, ptr %t17) + %t18 = call ptr @fn_sconcat(ptr @.str287, ptr %t17) call void @fn_perr(ptr %t18) br label %ifend2 ifend2: @@ -9823,7 +10345,7 @@ then3: %t29 = load ptr, ptr %t0 %t30 = getelementptr inbounds %Str_Node, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_sconcat(ptr @.str269, ptr %t31) + %t32 = call ptr @fn_sconcat(ptr @.str288, ptr %t31) call void @fn_perr(ptr %t32) br label %ifend5 ifend5: @@ -9835,25 +10357,25 @@ ifend5: store ptr %t37, ptr @g_g_addr_ty %t38 = call ptr @fn_nreg() store ptr %t38, ptr %t39 - call void @fn_emit(ptr @.str270) + call void @fn_emit(ptr @.str289) %t40 = load ptr, ptr %t39 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str271) + call void @fn_emit(ptr @.str290) %t41 = load ptr, ptr %t5 %t42 = getelementptr inbounds %Str_Val, ptr %t41, i32 0, i32 1 %t43 = load ptr, ptr %t42 %t44 = call ptr @fn_layout_ty(ptr %t43) call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str272) + call void @fn_emit(ptr @.str291) %t45 = load ptr, ptr %t5 %t46 = getelementptr inbounds %Str_Val, ptr %t45, i32 0, i32 0 %t47 = load ptr, ptr %t46 call void @fn_emit(ptr %t47) - call void @fn_emit(ptr @.str273) + call void @fn_emit(ptr @.str292) %t48 = load i32, ptr %t24 %t49 = call ptr @fn_itoa(i32 %t48) call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str274) + call void @fn_emit(ptr @.str293) %t50 = load ptr, ptr %t39 store ptr %t50, ptr %retval br label %ret @@ -9887,7 +10409,7 @@ entry: %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str275) + call void @fn_perr(ptr @.str294) br label %ifend2 ifend2: %t13 = load ptr, ptr %t5 @@ -9899,24 +10421,24 @@ ifend2: store ptr %t18, ptr @g_g_addr_ty %t19 = call ptr @fn_nreg() store ptr %t19, ptr %t20 - call void @fn_emit(ptr @.str276) + call void @fn_emit(ptr @.str295) %t21 = load ptr, ptr %t20 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str277) + call void @fn_emit(ptr @.str296) %t22 = load ptr, ptr %t5 %t23 = getelementptr inbounds %Str_Val, ptr %t22, i32 0, i32 0 %t24 = load ptr, ptr %t23 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str278) + call void @fn_emit(ptr @.str297) %t25 = call ptr @fn_nreg() store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str279) + call void @fn_emit(ptr @.str298) %t27 = load ptr, ptr %t26 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str280) + call void @fn_emit(ptr @.str299) %t28 = load ptr, ptr %t20 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str281) + call void @fn_emit(ptr @.str300) %t29 = load ptr, ptr %t0 %t30 = getelementptr inbounds %Str_Node, ptr %t29, i32 0, i32 5 %t31 = load ptr, ptr %t30 @@ -9924,22 +10446,22 @@ ifend2: store ptr %t32, ptr %t33 %t34 = call ptr @fn_nreg() store ptr %t34, ptr %t35 - call void @fn_emit(ptr @.str282) + call void @fn_emit(ptr @.str301) %t36 = load ptr, ptr %t35 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str283) + call void @fn_emit(ptr @.str302) %t37 = load ptr, ptr %t17 %t38 = call ptr @fn_llty(ptr %t37) call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str284) + call void @fn_emit(ptr @.str303) %t39 = load ptr, ptr %t26 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str285) + call void @fn_emit(ptr @.str304) %t40 = load ptr, ptr %t33 %t41 = getelementptr inbounds %Str_Val, ptr %t40, i32 0, i32 0 %t42 = load ptr, ptr %t41 call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str286) + call void @fn_emit(ptr @.str305) %t43 = load ptr, ptr %t35 store ptr %t43, ptr %retval br label %ret @@ -9973,14 +10495,14 @@ entry: %t169 = alloca i32 store ptr %arg_name, ptr %t0 %t3 = load ptr, ptr %t0 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str287) + %t4 = call i32 @fn_streq(ptr %t3, ptr @.str306) %t5 = icmp ne i32 %t4, 0 %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t2 br i1 %t5, label %scend1, label %sc0 sc0: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str288) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str307) %t9 = icmp ne i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t2 @@ -9993,7 +10515,7 @@ scend1: br i1 %t12, label %scend3, label %sc2 sc2: %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str289) + %t15 = call i32 @fn_streq(ptr %t14, ptr @.str308) %t16 = icmp ne i32 %t15, 0 %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t1 @@ -10007,14 +10529,14 @@ then4: br label %ret ifend6: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str290) + %t23 = call i32 @fn_streq(ptr %t22, ptr @.str309) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t21 br i1 %t24, label %scend8, label %sc7 sc7: %t26 = load ptr, ptr %t0 - %t27 = call i32 @fn_streq(ptr %t26, ptr @.str291) + %t27 = call i32 @fn_streq(ptr %t26, ptr @.str310) %t28 = icmp ne i32 %t27, 0 %t29 = zext i1 %t28 to i32 store i32 %t29, ptr %t21 @@ -10027,7 +10549,7 @@ scend8: br i1 %t31, label %scend10, label %sc9 sc9: %t33 = load ptr, ptr %t0 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str292) + %t34 = call i32 @fn_streq(ptr %t33, ptr @.str311) %t35 = icmp ne i32 %t34, 0 %t36 = zext i1 %t35 to i32 store i32 %t36, ptr %t20 @@ -10041,14 +10563,14 @@ then11: br label %ret ifend13: %t41 = load ptr, ptr %t0 - %t42 = call i32 @fn_streq(ptr %t41, ptr @.str293) + %t42 = call i32 @fn_streq(ptr %t41, ptr @.str312) %t43 = icmp ne i32 %t42, 0 %t44 = zext i1 %t43 to i32 store i32 %t44, ptr %t40 br i1 %t43, label %scend15, label %sc14 sc14: %t45 = load ptr, ptr %t0 - %t46 = call i32 @fn_streq(ptr %t45, ptr @.str294) + %t46 = call i32 @fn_streq(ptr %t45, ptr @.str313) %t47 = icmp ne i32 %t46, 0 %t48 = zext i1 %t47 to i32 store i32 %t48, ptr %t40 @@ -10061,7 +10583,7 @@ scend15: br i1 %t50, label %scend17, label %sc16 sc16: %t52 = load ptr, ptr %t0 - %t53 = call i32 @fn_streq(ptr %t52, ptr @.str295) + %t53 = call i32 @fn_streq(ptr %t52, ptr @.str314) %t54 = icmp ne i32 %t53, 0 %t55 = zext i1 %t54 to i32 store i32 %t55, ptr %t39 @@ -10075,14 +10597,14 @@ then18: br label %ret ifend20: %t60 = load ptr, ptr %t0 - %t61 = call i32 @fn_streq(ptr %t60, ptr @.str296) + %t61 = call i32 @fn_streq(ptr %t60, ptr @.str315) %t62 = icmp ne i32 %t61, 0 %t63 = zext i1 %t62 to i32 store i32 %t63, ptr %t59 br i1 %t62, label %scend22, label %sc21 sc21: %t64 = load ptr, ptr %t0 - %t65 = call i32 @fn_streq(ptr %t64, ptr @.str297) + %t65 = call i32 @fn_streq(ptr %t64, ptr @.str316) %t66 = icmp ne i32 %t65, 0 %t67 = zext i1 %t66 to i32 store i32 %t67, ptr %t59 @@ -10095,7 +10617,7 @@ scend22: br i1 %t69, label %scend24, label %sc23 sc23: %t71 = load ptr, ptr %t0 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str298) + %t72 = call i32 @fn_streq(ptr %t71, ptr @.str317) %t73 = icmp ne i32 %t72, 0 %t74 = zext i1 %t73 to i32 store i32 %t74, ptr %t58 @@ -10109,14 +10631,14 @@ then25: br label %ret ifend27: %t78 = load ptr, ptr %t0 - %t79 = call i32 @fn_streq(ptr %t78, ptr @.str299) + %t79 = call i32 @fn_streq(ptr %t78, ptr @.str318) %t80 = icmp ne i32 %t79, 0 %t81 = zext i1 %t80 to i32 store i32 %t81, ptr %t77 br i1 %t80, label %scend29, label %sc28 sc28: %t82 = load ptr, ptr %t0 - %t83 = call i32 @fn_streq(ptr %t82, ptr @.str300) + %t83 = call i32 @fn_streq(ptr %t82, ptr @.str319) %t84 = icmp ne i32 %t83, 0 %t85 = zext i1 %t84 to i32 store i32 %t85, ptr %t77 @@ -10130,14 +10652,14 @@ then30: br label %ret ifend32: %t91 = load ptr, ptr %t0 - %t92 = call i32 @fn_streq(ptr %t91, ptr @.str301) + %t92 = call i32 @fn_streq(ptr %t91, ptr @.str320) %t93 = icmp ne i32 %t92, 0 %t94 = zext i1 %t93 to i32 store i32 %t94, ptr %t90 br i1 %t93, label %scend34, label %sc33 sc33: %t95 = load ptr, ptr %t0 - %t96 = call i32 @fn_streq(ptr %t95, ptr @.str302) + %t96 = call i32 @fn_streq(ptr %t95, ptr @.str321) %t97 = icmp ne i32 %t96, 0 %t98 = zext i1 %t97 to i32 store i32 %t98, ptr %t90 @@ -10150,7 +10672,7 @@ scend34: br i1 %t100, label %scend36, label %sc35 sc35: %t102 = load ptr, ptr %t0 - %t103 = call i32 @fn_streq(ptr %t102, ptr @.str303) + %t103 = call i32 @fn_streq(ptr %t102, ptr @.str322) %t104 = icmp ne i32 %t103, 0 %t105 = zext i1 %t104 to i32 store i32 %t105, ptr %t89 @@ -10163,7 +10685,7 @@ scend36: br i1 %t107, label %scend38, label %sc37 sc37: %t109 = load ptr, ptr %t0 - %t110 = call i32 @fn_streq(ptr %t109, ptr @.str304) + %t110 = call i32 @fn_streq(ptr %t109, ptr @.str323) %t111 = icmp ne i32 %t110, 0 %t112 = zext i1 %t111 to i32 store i32 %t112, ptr %t88 @@ -10177,14 +10699,14 @@ then39: br label %ret ifend41: %t116 = load ptr, ptr %t0 - %t117 = call i32 @fn_streq(ptr %t116, ptr @.str305) + %t117 = call i32 @fn_streq(ptr %t116, ptr @.str324) %t118 = icmp ne i32 %t117, 0 %t119 = zext i1 %t118 to i32 store i32 %t119, ptr %t115 br i1 %t118, label %scend43, label %sc42 sc42: %t120 = load ptr, ptr %t0 - %t121 = call i32 @fn_streq(ptr %t120, ptr @.str306) + %t121 = call i32 @fn_streq(ptr %t120, ptr @.str325) %t122 = icmp ne i32 %t121, 0 %t123 = zext i1 %t122 to i32 store i32 %t123, ptr %t115 @@ -10198,14 +10720,14 @@ then44: br label %ret ifend46: %t131 = load ptr, ptr %t0 - %t132 = call i32 @fn_streq(ptr %t131, ptr @.str307) + %t132 = call i32 @fn_streq(ptr %t131, ptr @.str326) %t133 = icmp ne i32 %t132, 0 %t134 = zext i1 %t133 to i32 store i32 %t134, ptr %t130 br i1 %t133, label %scend48, label %sc47 sc47: %t135 = load ptr, ptr %t0 - %t136 = call i32 @fn_streq(ptr %t135, ptr @.str308) + %t136 = call i32 @fn_streq(ptr %t135, ptr @.str327) %t137 = icmp ne i32 %t136, 0 %t138 = zext i1 %t137 to i32 store i32 %t138, ptr %t130 @@ -10218,7 +10740,7 @@ scend48: br i1 %t140, label %scend50, label %sc49 sc49: %t142 = load ptr, ptr %t0 - %t143 = call i32 @fn_streq(ptr %t142, ptr @.str309) + %t143 = call i32 @fn_streq(ptr %t142, ptr @.str328) %t144 = icmp ne i32 %t143, 0 %t145 = zext i1 %t144 to i32 store i32 %t145, ptr %t129 @@ -10231,7 +10753,7 @@ scend50: br i1 %t147, label %scend52, label %sc51 sc51: %t149 = load ptr, ptr %t0 - %t150 = call i32 @fn_streq(ptr %t149, ptr @.str310) + %t150 = call i32 @fn_streq(ptr %t149, ptr @.str329) %t151 = icmp ne i32 %t150, 0 %t152 = zext i1 %t151 to i32 store i32 %t152, ptr %t128 @@ -10244,7 +10766,7 @@ scend52: br i1 %t154, label %scend54, label %sc53 sc53: %t156 = load ptr, ptr %t0 - %t157 = call i32 @fn_streq(ptr %t156, ptr @.str311) + %t157 = call i32 @fn_streq(ptr %t156, ptr @.str330) %t158 = icmp ne i32 %t157, 0 %t159 = zext i1 %t158 to i32 store i32 %t159, ptr %t127 @@ -10257,7 +10779,7 @@ scend54: br i1 %t161, label %scend56, label %sc55 sc55: %t163 = load ptr, ptr %t0 - %t164 = call i32 @fn_streq(ptr %t163, ptr @.str312) + %t164 = call i32 @fn_streq(ptr %t163, ptr @.str331) %t165 = icmp ne i32 %t164, 0 %t166 = zext i1 %t165 to i32 store i32 %t166, ptr %t126 @@ -10271,14 +10793,14 @@ then57: br label %ret ifend59: %t170 = load ptr, ptr %t0 - %t171 = call i32 @fn_streq(ptr %t170, ptr @.str313) + %t171 = call i32 @fn_streq(ptr %t170, ptr @.str332) %t172 = icmp ne i32 %t171, 0 %t173 = zext i1 %t172 to i32 store i32 %t173, ptr %t169 br i1 %t172, label %scend61, label %sc60 sc60: %t174 = load ptr, ptr %t0 - %t175 = call i32 @fn_streq(ptr %t174, ptr @.str314) + %t175 = call i32 @fn_streq(ptr %t174, ptr @.str333) %t176 = icmp ne i32 %t175, 0 %t177 = zext i1 %t176 to i32 store i32 %t177, ptr %t169 @@ -10306,13 +10828,13 @@ entry: store ptr %arg_rest, ptr %t0 %t1 = call ptr @fn_nreg() store ptr %t1, ptr %t2 - call void @fn_emit(ptr @.str315) + call void @fn_emit(ptr @.str334) %t3 = load ptr, ptr %t2 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str316) + call void @fn_emit(ptr @.str335) %t4 = load ptr, ptr %t0 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str317) + call void @fn_emit(ptr @.str336) %t5 = load ptr, ptr %t2 store ptr %t5, ptr %retval br label %ret @@ -10413,16 +10935,16 @@ entry: store ptr %arg_e, ptr %t1 store i32 1, ptr @g_g_intrin_ok %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str318) + %t3 = call i32 @fn_streq(ptr %t2, ptr @.str337) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - %t5 = call ptr @fn_val(ptr @.str319, ptr @.str320) + %t5 = call ptr @fn_val(ptr @.str338, ptr @.str339) store ptr %t5, ptr %retval br label %ret ifend2: %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_streq(ptr %t6, ptr @.str321) + %t7 = call i32 @fn_streq(ptr %t6, ptr @.str340) %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %then3, label %ifend5 then3: @@ -10430,20 +10952,20 @@ then3: %t10 = call ptr @fn_arg_code(ptr %t9, i32 0) store ptr %t10, ptr %t11 %t12 = load ptr, ptr %t11 - %t13 = call ptr @fn_sconcat(ptr %t12, ptr @.str323) - %t14 = call ptr @fn_sconcat(ptr @.str322, ptr %t13) + %t13 = call ptr @fn_sconcat(ptr %t12, ptr @.str342) + %t14 = call ptr @fn_sconcat(ptr @.str341, ptr %t13) %t15 = call ptr @fn_emit_bind(ptr %t14) store ptr %t15, ptr %t16 %t17 = load ptr, ptr %t16 - %t18 = call ptr @fn_sconcat(ptr %t17, ptr @.str325) - %t19 = call ptr @fn_sconcat(ptr @.str324, ptr %t18) + %t18 = call ptr @fn_sconcat(ptr %t17, ptr @.str344) + %t19 = call ptr @fn_sconcat(ptr @.str343, ptr %t18) %t20 = call ptr @fn_emit_bind(ptr %t19) - %t21 = call ptr @fn_val(ptr %t20, ptr @.str326) + %t21 = call ptr @fn_val(ptr %t20, ptr @.str345) store ptr %t21, ptr %retval br label %ret ifend5: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str327) + %t23 = call i32 @fn_streq(ptr %t22, ptr @.str346) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then6, label %ifend8 then6: @@ -10454,23 +10976,23 @@ then6: %t29 = call ptr @fn_arg_code(ptr %t28, i32 1) store ptr %t29, ptr %t30 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_sconcat(ptr %t31, ptr @.str329) - %t33 = call ptr @fn_sconcat(ptr @.str328, ptr %t32) + %t32 = call ptr @fn_sconcat(ptr %t31, ptr @.str348) + %t33 = call ptr @fn_sconcat(ptr @.str347, ptr %t32) %t34 = call ptr @fn_emit_bind(ptr %t33) store ptr %t34, ptr %t35 %t36 = load ptr, ptr %t27 %t37 = load ptr, ptr %t35 - %t38 = call ptr @fn_sconcat(ptr %t37, ptr @.str332) - %t39 = call ptr @fn_sconcat(ptr @.str331, ptr %t38) + %t38 = call ptr @fn_sconcat(ptr %t37, ptr @.str351) + %t39 = call ptr @fn_sconcat(ptr @.str350, ptr %t38) %t40 = call ptr @fn_sconcat(ptr %t36, ptr %t39) - %t41 = call ptr @fn_sconcat(ptr @.str330, ptr %t40) + %t41 = call ptr @fn_sconcat(ptr @.str349, ptr %t40) %t42 = call ptr @fn_emit_bind(ptr %t41) - %t43 = call ptr @fn_val(ptr %t42, ptr @.str333) + %t43 = call ptr @fn_val(ptr %t42, ptr @.str352) store ptr %t43, ptr %retval br label %ret ifend8: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str334) + %t45 = call i32 @fn_streq(ptr %t44, ptr @.str353) %t46 = icmp ne i32 %t45, 0 br i1 %t46, label %then9, label %ifend11 then9: @@ -10485,19 +11007,19 @@ then9: %t55 = call ptr @fn_emit_gep_i8(ptr %t53, ptr %t54) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t56 - %t58 = call ptr @fn_sconcat(ptr @.str335, ptr %t57) + %t58 = call ptr @fn_sconcat(ptr @.str354, ptr %t57) %t59 = call ptr @fn_emit_bind(ptr %t58) store ptr %t59, ptr %t60 %t61 = load ptr, ptr %t60 - %t62 = call ptr @fn_sconcat(ptr %t61, ptr @.str337) - %t63 = call ptr @fn_sconcat(ptr @.str336, ptr %t62) + %t62 = call ptr @fn_sconcat(ptr %t61, ptr @.str356) + %t63 = call ptr @fn_sconcat(ptr @.str355, ptr %t62) %t64 = call ptr @fn_emit_bind(ptr %t63) - %t65 = call ptr @fn_val(ptr %t64, ptr @.str338) + %t65 = call ptr @fn_val(ptr %t64, ptr @.str357) store ptr %t65, ptr %retval br label %ret ifend11: %t66 = load ptr, ptr %t0 - %t67 = call i32 @fn_streq(ptr %t66, ptr @.str339) + %t67 = call i32 @fn_streq(ptr %t66, ptr @.str358) %t68 = icmp ne i32 %t67, 0 br i1 %t68, label %then12, label %ifend14 then12: @@ -10515,23 +11037,23 @@ then12: %t80 = call ptr @fn_emit_gep_i8(ptr %t78, ptr %t79) store ptr %t80, ptr %t81 %t82 = load ptr, ptr %t77 - %t83 = call ptr @fn_sconcat(ptr %t82, ptr @.str341) - %t84 = call ptr @fn_sconcat(ptr @.str340, ptr %t83) + %t83 = call ptr @fn_sconcat(ptr %t82, ptr @.str360) + %t84 = call ptr @fn_sconcat(ptr @.str359, ptr %t83) %t85 = call ptr @fn_emit_bind(ptr %t84) store ptr %t85, ptr %t86 - call void @fn_emit(ptr @.str342) + call void @fn_emit(ptr @.str361) %t87 = load ptr, ptr %t86 call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str343) + call void @fn_emit(ptr @.str362) %t88 = load ptr, ptr %t81 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str344) - %t89 = call ptr @fn_val(ptr @.str345, ptr @.str346) + call void @fn_emit(ptr @.str363) + %t89 = call ptr @fn_val(ptr @.str364, ptr @.str365) store ptr %t89, ptr %retval br label %ret ifend14: %t90 = load ptr, ptr %t0 - %t91 = call i32 @fn_streq(ptr %t90, ptr @.str347) + %t91 = call i32 @fn_streq(ptr %t90, ptr @.str366) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then15, label %ifend17 then15: @@ -10539,20 +11061,20 @@ then15: %t94 = call ptr @fn_arg_code(ptr %t93, i32 0) store ptr %t94, ptr %t95 %t96 = load ptr, ptr %t95 - %t97 = call ptr @fn_sconcat(ptr %t96, ptr @.str349) - %t98 = call ptr @fn_sconcat(ptr @.str348, ptr %t97) + %t97 = call ptr @fn_sconcat(ptr %t96, ptr @.str368) + %t98 = call ptr @fn_sconcat(ptr @.str367, ptr %t97) %t99 = call ptr @fn_emit_bind(ptr %t98) store ptr %t99, ptr %t100 %t101 = load ptr, ptr %t100 - %t102 = call ptr @fn_sconcat(ptr %t101, ptr @.str351) - %t103 = call ptr @fn_sconcat(ptr @.str350, ptr %t102) + %t102 = call ptr @fn_sconcat(ptr %t101, ptr @.str370) + %t103 = call ptr @fn_sconcat(ptr @.str369, ptr %t102) %t104 = call ptr @fn_emit_bind(ptr %t103) - %t105 = call ptr @fn_val(ptr %t104, ptr @.str352) + %t105 = call ptr @fn_val(ptr %t104, ptr @.str371) store ptr %t105, ptr %retval br label %ret ifend17: %t106 = load ptr, ptr %t0 - %t107 = call i32 @fn_streq(ptr %t106, ptr @.str353) + %t107 = call i32 @fn_streq(ptr %t106, ptr @.str372) %t108 = icmp ne i32 %t107, 0 br i1 %t108, label %then18, label %ifend20 then18: @@ -10564,24 +11086,24 @@ then18: store ptr %t113, ptr %t114 %t115 = load ptr, ptr %t111 %t116 = load ptr, ptr %t114 - %t117 = call ptr @fn_sconcat(ptr %t116, ptr @.str356) - %t118 = call ptr @fn_sconcat(ptr @.str355, ptr %t117) + %t117 = call ptr @fn_sconcat(ptr %t116, ptr @.str375) + %t118 = call ptr @fn_sconcat(ptr @.str374, ptr %t117) %t119 = call ptr @fn_sconcat(ptr %t115, ptr %t118) - %t120 = call ptr @fn_sconcat(ptr @.str354, ptr %t119) + %t120 = call ptr @fn_sconcat(ptr @.str373, ptr %t119) %t121 = call ptr @fn_emit_bind(ptr %t120) - %t122 = call ptr @fn_val(ptr %t121, ptr @.str357) + %t122 = call ptr @fn_val(ptr %t121, ptr @.str376) store ptr %t122, ptr %retval br label %ret ifend20: %t124 = load ptr, ptr %t0 - %t125 = call i32 @fn_streq(ptr %t124, ptr @.str358) + %t125 = call i32 @fn_streq(ptr %t124, ptr @.str377) %t126 = icmp ne i32 %t125, 0 %t127 = zext i1 %t126 to i32 store i32 %t127, ptr %t123 br i1 %t126, label %scend22, label %sc21 sc21: %t128 = load ptr, ptr %t0 - %t129 = call i32 @fn_streq(ptr %t128, ptr @.str359) + %t129 = call i32 @fn_streq(ptr %t128, ptr @.str378) %t130 = icmp ne i32 %t129, 0 %t131 = zext i1 %t130 to i32 store i32 %t131, ptr %t123 @@ -10601,43 +11123,43 @@ then23: %t141 = call ptr @fn_arg_code(ptr %t140, i32 2) store ptr %t141, ptr %t142 %t143 = load ptr, ptr %t142 - %t144 = call ptr @fn_sconcat(ptr %t143, ptr @.str361) - %t145 = call ptr @fn_sconcat(ptr @.str360, ptr %t144) + %t144 = call ptr @fn_sconcat(ptr %t143, ptr @.str380) + %t145 = call ptr @fn_sconcat(ptr @.str379, ptr %t144) %t146 = call ptr @fn_emit_bind(ptr %t145) store ptr %t146, ptr %t147 - store ptr @.str362, ptr %t148 + store ptr @.str381, ptr %t148 %t149 = load ptr, ptr %t0 - %t150 = call i32 @fn_streq(ptr %t149, ptr @.str363) + %t150 = call i32 @fn_streq(ptr %t149, ptr @.str382) %t151 = icmp ne i32 %t150, 0 br i1 %t151, label %then26, label %ifend28 then26: - store ptr @.str364, ptr %t148 + store ptr @.str383, ptr %t148 br label %ifend28 ifend28: %t152 = load ptr, ptr %t148 %t153 = load ptr, ptr %t139 %t154 = load ptr, ptr %t147 %t155 = load ptr, ptr %t136 - %t156 = call ptr @fn_sconcat(ptr %t155, ptr @.str369) - %t157 = call ptr @fn_sconcat(ptr @.str368, ptr %t156) + %t156 = call ptr @fn_sconcat(ptr %t155, ptr @.str388) + %t157 = call ptr @fn_sconcat(ptr @.str387, ptr %t156) %t158 = call ptr @fn_sconcat(ptr %t154, ptr %t157) - %t159 = call ptr @fn_sconcat(ptr @.str367, ptr %t158) + %t159 = call ptr @fn_sconcat(ptr @.str386, ptr %t158) %t160 = call ptr @fn_sconcat(ptr %t153, ptr %t159) - %t161 = call ptr @fn_sconcat(ptr @.str366, ptr %t160) + %t161 = call ptr @fn_sconcat(ptr @.str385, ptr %t160) %t162 = call ptr @fn_sconcat(ptr %t152, ptr %t161) - %t163 = call ptr @fn_sconcat(ptr @.str365, ptr %t162) + %t163 = call ptr @fn_sconcat(ptr @.str384, ptr %t162) %t164 = call ptr @fn_emit_bind(ptr %t163) store ptr %t164, ptr %t165 %t166 = load ptr, ptr %t165 - %t167 = call ptr @fn_sconcat(ptr %t166, ptr @.str371) - %t168 = call ptr @fn_sconcat(ptr @.str370, ptr %t167) + %t167 = call ptr @fn_sconcat(ptr %t166, ptr @.str390) + %t168 = call ptr @fn_sconcat(ptr @.str389, ptr %t167) %t169 = call ptr @fn_emit_bind(ptr %t168) - %t170 = call ptr @fn_val(ptr %t169, ptr @.str372) + %t170 = call ptr @fn_val(ptr %t169, ptr @.str391) store ptr %t170, ptr %retval br label %ret ifend25: %t171 = load ptr, ptr %t0 - %t172 = call i32 @fn_streq(ptr %t171, ptr @.str373) + %t172 = call i32 @fn_streq(ptr %t171, ptr @.str392) %t173 = icmp ne i32 %t172, 0 br i1 %t173, label %then29, label %ifend31 then29: @@ -10651,26 +11173,26 @@ then29: %t181 = call ptr @fn_arg_code(ptr %t180, i32 2) store ptr %t181, ptr %t182 %t183 = load ptr, ptr %t179 - %t184 = call ptr @fn_sconcat(ptr %t183, ptr @.str375) - %t185 = call ptr @fn_sconcat(ptr @.str374, ptr %t184) + %t184 = call ptr @fn_sconcat(ptr %t183, ptr @.str394) + %t185 = call ptr @fn_sconcat(ptr @.str393, ptr %t184) %t186 = call ptr @fn_emit_bind(ptr %t185) store ptr %t186, ptr %t187 %t188 = load ptr, ptr %t176 %t189 = load ptr, ptr %t187 %t190 = load ptr, ptr %t182 - %t191 = call ptr @fn_sconcat(ptr %t190, ptr @.str379) - %t192 = call ptr @fn_sconcat(ptr @.str378, ptr %t191) + %t191 = call ptr @fn_sconcat(ptr %t190, ptr @.str398) + %t192 = call ptr @fn_sconcat(ptr @.str397, ptr %t191) %t193 = call ptr @fn_sconcat(ptr %t189, ptr %t192) - %t194 = call ptr @fn_sconcat(ptr @.str377, ptr %t193) + %t194 = call ptr @fn_sconcat(ptr @.str396, ptr %t193) %t195 = call ptr @fn_sconcat(ptr %t188, ptr %t194) - %t196 = call ptr @fn_sconcat(ptr @.str376, ptr %t195) + %t196 = call ptr @fn_sconcat(ptr @.str395, ptr %t195) %t197 = call ptr @fn_emit_bind(ptr %t196) - %t198 = call ptr @fn_val(ptr %t197, ptr @.str380) + %t198 = call ptr @fn_val(ptr %t197, ptr @.str399) store ptr %t198, ptr %retval br label %ret ifend31: %t199 = load ptr, ptr %t0 - %t200 = call i32 @fn_streq(ptr %t199, ptr @.str381) + %t200 = call i32 @fn_streq(ptr %t199, ptr @.str400) %t201 = icmp ne i32 %t200, 0 br i1 %t201, label %then32, label %ifend34 then32: @@ -10678,130 +11200,130 @@ then32: %t203 = call ptr @fn_arg_code(ptr %t202, i32 0) store ptr %t203, ptr %t204 %t205 = load ptr, ptr %t204 - %t206 = call ptr @fn_sconcat(ptr %t205, ptr @.str383) - %t207 = call ptr @fn_sconcat(ptr @.str382, ptr %t206) + %t206 = call ptr @fn_sconcat(ptr %t205, ptr @.str402) + %t207 = call ptr @fn_sconcat(ptr @.str401, ptr %t206) %t208 = call ptr @fn_emit_bind(ptr %t207) store ptr %t208, ptr %t209 %t210 = load ptr, ptr %t209 - %t211 = call ptr @fn_sconcat(ptr %t210, ptr @.str385) - %t212 = call ptr @fn_sconcat(ptr @.str384, ptr %t211) + %t211 = call ptr @fn_sconcat(ptr %t210, ptr @.str404) + %t212 = call ptr @fn_sconcat(ptr @.str403, ptr %t211) %t213 = call ptr @fn_emit_bind(ptr %t212) - %t214 = call ptr @fn_val(ptr %t213, ptr @.str386) + %t214 = call ptr @fn_val(ptr %t213, ptr @.str405) store ptr %t214, ptr %retval br label %ret ifend34: %t215 = load ptr, ptr %t0 - %t216 = call i32 @fn_streq(ptr %t215, ptr @.str387) + %t216 = call i32 @fn_streq(ptr %t215, ptr @.str406) %t217 = icmp ne i32 %t216, 0 br i1 %t217, label %then35, label %ifend37 then35: %t218 = load ptr, ptr %t1 %t219 = call ptr @fn_arg_code(ptr %t218, i32 0) store ptr %t219, ptr %t220 - call void @fn_emit(ptr @.str388) + call void @fn_emit(ptr @.str407) %t221 = load ptr, ptr %t220 call void @fn_emit(ptr %t221) - call void @fn_emit(ptr @.str389) - %t222 = call ptr @fn_val(ptr @.str390, ptr @.str391) + call void @fn_emit(ptr @.str408) + %t222 = call ptr @fn_val(ptr @.str409, ptr @.str410) store ptr %t222, ptr %retval br label %ret ifend37: %t223 = load ptr, ptr %t0 - %t224 = call i32 @fn_streq(ptr %t223, ptr @.str392) + %t224 = call i32 @fn_streq(ptr %t223, ptr @.str411) %t225 = icmp ne i32 %t224, 0 br i1 %t225, label %then38, label %ifend40 then38: %t226 = load ptr, ptr %t1 %t227 = call ptr @fn_arg_code(ptr %t226, i32 0) store ptr %t227, ptr %t228 - call void @fn_emit(ptr @.str393) + call void @fn_emit(ptr @.str412) %t229 = load ptr, ptr %t228 call void @fn_emit(ptr %t229) - call void @fn_emit(ptr @.str394) - %t230 = call ptr @fn_val(ptr @.str395, ptr @.str396) + call void @fn_emit(ptr @.str413) + %t230 = call ptr @fn_val(ptr @.str414, ptr @.str415) store ptr %t230, ptr %retval br label %ret ifend40: %t231 = load ptr, ptr %t0 - %t232 = call i32 @fn_streq(ptr %t231, ptr @.str397) + %t232 = call i32 @fn_streq(ptr %t231, ptr @.str416) %t233 = icmp ne i32 %t232, 0 br i1 %t233, label %then41, label %ifend43 then41: %t234 = load ptr, ptr %t1 %t235 = call ptr @fn_arg_code(ptr %t234, i32 0) store ptr %t235, ptr %t236 - call void @fn_emit(ptr @.str398) + call void @fn_emit(ptr @.str417) %t237 = load ptr, ptr %t236 call void @fn_emit(ptr %t237) - call void @fn_emit(ptr @.str399) - %t238 = call ptr @fn_val(ptr @.str400, ptr @.str401) + call void @fn_emit(ptr @.str418) + %t238 = call ptr @fn_val(ptr @.str419, ptr @.str420) store ptr %t238, ptr %retval br label %ret ifend43: %t239 = load ptr, ptr %t0 - %t240 = call i32 @fn_streq(ptr %t239, ptr @.str402) + %t240 = call i32 @fn_streq(ptr %t239, ptr @.str421) %t241 = icmp ne i32 %t240, 0 br i1 %t241, label %then44, label %ifend46 then44: - %t242 = call ptr @fn_emit_bind(ptr @.str403) - %t243 = call ptr @fn_val(ptr %t242, ptr @.str404) + %t242 = call ptr @fn_emit_bind(ptr @.str422) + %t243 = call ptr @fn_val(ptr %t242, ptr @.str423) store ptr %t243, ptr %retval br label %ret ifend46: %t244 = load ptr, ptr %t0 - %t245 = call i32 @fn_streq(ptr %t244, ptr @.str405) + %t245 = call i32 @fn_streq(ptr %t244, ptr @.str424) %t246 = icmp ne i32 %t245, 0 br i1 %t246, label %then47, label %ifend49 then47: %t247 = load ptr, ptr %t1 %t248 = call ptr @fn_arg_code(ptr %t247, i32 0) store ptr %t248, ptr %t249 - %t250 = call ptr @fn_emit_bind(ptr @.str406) + %t250 = call ptr @fn_emit_bind(ptr @.str425) store ptr %t250, ptr %t251 %t252 = load ptr, ptr %t251 %t253 = load ptr, ptr %t249 - %t254 = call ptr @fn_sconcat(ptr @.str408, ptr %t253) + %t254 = call ptr @fn_sconcat(ptr @.str427, ptr %t253) %t255 = call ptr @fn_sconcat(ptr %t252, ptr %t254) - %t256 = call ptr @fn_sconcat(ptr @.str407, ptr %t255) + %t256 = call ptr @fn_sconcat(ptr @.str426, ptr %t255) %t257 = call ptr @fn_emit_bind(ptr %t256) store ptr %t257, ptr %t258 %t259 = load ptr, ptr %t258 - %t260 = call ptr @fn_sconcat(ptr @.str409, ptr %t259) + %t260 = call ptr @fn_sconcat(ptr @.str428, ptr %t259) %t261 = call ptr @fn_emit_bind(ptr %t260) - %t262 = call ptr @fn_val(ptr %t261, ptr @.str410) + %t262 = call ptr @fn_val(ptr %t261, ptr @.str429) store ptr %t262, ptr %retval br label %ret ifend49: %t263 = load ptr, ptr %t0 - %t264 = call i32 @fn_streq(ptr %t263, ptr @.str411) + %t264 = call i32 @fn_streq(ptr %t263, ptr @.str430) %t265 = icmp ne i32 %t264, 0 br i1 %t265, label %then50, label %ifend52 then50: %t266 = load ptr, ptr %t1 %t267 = call ptr @fn_arg_code(ptr %t266, i32 0) store ptr %t267, ptr %t268 - call void @fn_emit(ptr @.str412) + call void @fn_emit(ptr @.str431) %t269 = load ptr, ptr %t268 call void @fn_emit(ptr %t269) - call void @fn_emit(ptr @.str413) - call void @fn_emit(ptr @.str414) + call void @fn_emit(ptr @.str432) + call void @fn_emit(ptr @.str433) store i32 1, ptr @g_g_term - %t270 = call ptr @fn_val(ptr @.str415, ptr @.str416) + %t270 = call ptr @fn_val(ptr @.str434, ptr @.str435) store ptr %t270, ptr %retval br label %ret ifend52: %t271 = load ptr, ptr %t0 - %t272 = call i32 @fn_streq(ptr %t271, ptr @.str417) + %t272 = call i32 @fn_streq(ptr %t271, ptr @.str436) %t273 = icmp ne i32 %t272, 0 br i1 %t273, label %then53, label %ifend55 then53: - %t274 = call ptr @fn_emit_bind(ptr @.str418) - %t275 = call ptr @fn_val(ptr %t274, ptr @.str419) + %t274 = call ptr @fn_emit_bind(ptr @.str437) + %t275 = call ptr @fn_val(ptr %t274, ptr @.str438) store ptr %t275, ptr %retval br label %ret ifend55: %t276 = load ptr, ptr %t0 - %t277 = call i32 @fn_streq(ptr %t276, ptr @.str420) + %t277 = call i32 @fn_streq(ptr %t276, ptr @.str439) %t278 = icmp ne i32 %t277, 0 br i1 %t278, label %then56, label %ifend58 then56: @@ -10809,15 +11331,15 @@ then56: %t280 = call ptr @fn_arg_code(ptr %t279, i32 0) store ptr %t280, ptr %t281 %t282 = load ptr, ptr %t281 - %t283 = call ptr @fn_sconcat(ptr %t282, ptr @.str422) - %t284 = call ptr @fn_sconcat(ptr @.str421, ptr %t283) + %t283 = call ptr @fn_sconcat(ptr %t282, ptr @.str441) + %t284 = call ptr @fn_sconcat(ptr @.str440, ptr %t283) %t285 = call ptr @fn_emit_bind(ptr %t284) - %t286 = call ptr @fn_val(ptr %t285, ptr @.str423) + %t286 = call ptr @fn_val(ptr %t285, ptr @.str442) store ptr %t286, ptr %retval br label %ret ifend58: %t287 = load ptr, ptr %t0 - %t288 = call i32 @fn_streq(ptr %t287, ptr @.str424) + %t288 = call i32 @fn_streq(ptr %t287, ptr @.str443) %t289 = icmp ne i32 %t288, 0 br i1 %t289, label %then59, label %ifend61 then59: @@ -10825,15 +11347,15 @@ then59: %t291 = call ptr @fn_arg_code(ptr %t290, i32 0) store ptr %t291, ptr %t292 %t293 = load ptr, ptr %t292 - %t294 = call ptr @fn_sconcat(ptr %t293, ptr @.str426) - %t295 = call ptr @fn_sconcat(ptr @.str425, ptr %t294) + %t294 = call ptr @fn_sconcat(ptr %t293, ptr @.str445) + %t295 = call ptr @fn_sconcat(ptr @.str444, ptr %t294) %t296 = call ptr @fn_emit_bind(ptr %t295) - %t297 = call ptr @fn_val(ptr %t296, ptr @.str427) + %t297 = call ptr @fn_val(ptr %t296, ptr @.str446) store ptr %t297, ptr %retval br label %ret ifend61: %t298 = load ptr, ptr %t0 - %t299 = call i32 @fn_streq(ptr %t298, ptr @.str428) + %t299 = call i32 @fn_streq(ptr %t298, ptr @.str447) %t300 = icmp ne i32 %t299, 0 br i1 %t300, label %then62, label %ifend64 then62: @@ -10841,22 +11363,22 @@ then62: %t302 = call ptr @fn_arg_code(ptr %t301, i32 0) store ptr %t302, ptr %t303 %t304 = load ptr, ptr %t303 - %t305 = call ptr @fn_sconcat(ptr %t304, ptr @.str430) - %t306 = call ptr @fn_sconcat(ptr @.str429, ptr %t305) + %t305 = call ptr @fn_sconcat(ptr %t304, ptr @.str449) + %t306 = call ptr @fn_sconcat(ptr @.str448, ptr %t305) %t307 = call ptr @fn_emit_bind(ptr %t306) - %t308 = call ptr @fn_val(ptr %t307, ptr @.str431) + %t308 = call ptr @fn_val(ptr %t307, ptr @.str450) store ptr %t308, ptr %retval br label %ret ifend64: %t313 = load ptr, ptr %t0 - %t314 = call i32 @fn_streq(ptr %t313, ptr @.str432) + %t314 = call i32 @fn_streq(ptr %t313, ptr @.str451) %t315 = icmp ne i32 %t314, 0 %t316 = zext i1 %t315 to i32 store i32 %t316, ptr %t312 br i1 %t315, label %scend66, label %sc65 sc65: %t317 = load ptr, ptr %t0 - %t318 = call i32 @fn_streq(ptr %t317, ptr @.str433) + %t318 = call i32 @fn_streq(ptr %t317, ptr @.str452) %t319 = icmp ne i32 %t318, 0 %t320 = zext i1 %t319 to i32 store i32 %t320, ptr %t312 @@ -10869,7 +11391,7 @@ scend66: br i1 %t322, label %scend68, label %sc67 sc67: %t324 = load ptr, ptr %t0 - %t325 = call i32 @fn_streq(ptr %t324, ptr @.str434) + %t325 = call i32 @fn_streq(ptr %t324, ptr @.str453) %t326 = icmp ne i32 %t325, 0 %t327 = zext i1 %t326 to i32 store i32 %t327, ptr %t311 @@ -10882,7 +11404,7 @@ scend68: br i1 %t329, label %scend70, label %sc69 sc69: %t331 = load ptr, ptr %t0 - %t332 = call i32 @fn_streq(ptr %t331, ptr @.str435) + %t332 = call i32 @fn_streq(ptr %t331, ptr @.str454) %t333 = icmp ne i32 %t332, 0 %t334 = zext i1 %t333 to i32 store i32 %t334, ptr %t310 @@ -10895,7 +11417,7 @@ scend70: br i1 %t336, label %scend72, label %sc71 sc71: %t338 = load ptr, ptr %t0 - %t339 = call i32 @fn_streq(ptr %t338, ptr @.str436) + %t339 = call i32 @fn_streq(ptr %t338, ptr @.str455) %t340 = icmp ne i32 %t339, 0 %t341 = zext i1 %t340 to i32 store i32 %t341, ptr %t309 @@ -10911,53 +11433,53 @@ then73: %t347 = load ptr, ptr %t1 %t348 = call ptr @fn_arg_code(ptr %t347, i32 1) store ptr %t348, ptr %t349 - store ptr @.str437, ptr %t350 + store ptr @.str456, ptr %t350 %t351 = load ptr, ptr %t0 - %t352 = call i32 @fn_streq(ptr %t351, ptr @.str438) + %t352 = call i32 @fn_streq(ptr %t351, ptr @.str457) %t353 = icmp ne i32 %t352, 0 br i1 %t353, label %then76, label %ifend78 then76: - store ptr @.str439, ptr %t350 + store ptr @.str458, ptr %t350 br label %ifend78 ifend78: %t354 = load ptr, ptr %t0 - %t355 = call i32 @fn_streq(ptr %t354, ptr @.str440) + %t355 = call i32 @fn_streq(ptr %t354, ptr @.str459) %t356 = icmp ne i32 %t355, 0 br i1 %t356, label %then79, label %ifend81 then79: - store ptr @.str441, ptr %t350 + store ptr @.str460, ptr %t350 br label %ifend81 ifend81: %t357 = load ptr, ptr %t0 - %t358 = call i32 @fn_streq(ptr %t357, ptr @.str442) + %t358 = call i32 @fn_streq(ptr %t357, ptr @.str461) %t359 = icmp ne i32 %t358, 0 br i1 %t359, label %then82, label %ifend84 then82: - store ptr @.str443, ptr %t350 + store ptr @.str462, ptr %t350 br label %ifend84 ifend84: %t360 = load ptr, ptr %t0 - %t361 = call i32 @fn_streq(ptr %t360, ptr @.str444) + %t361 = call i32 @fn_streq(ptr %t360, ptr @.str463) %t362 = icmp ne i32 %t361, 0 br i1 %t362, label %then85, label %ifend87 then85: - store ptr @.str445, ptr %t350 + store ptr @.str464, ptr %t350 br label %ifend87 ifend87: %t363 = load ptr, ptr %t350 %t364 = load ptr, ptr %t346 %t365 = load ptr, ptr %t349 - %t366 = call ptr @fn_sconcat(ptr @.str447, ptr %t365) + %t366 = call ptr @fn_sconcat(ptr @.str466, ptr %t365) %t367 = call ptr @fn_sconcat(ptr %t364, ptr %t366) - %t368 = call ptr @fn_sconcat(ptr @.str446, ptr %t367) + %t368 = call ptr @fn_sconcat(ptr @.str465, ptr %t367) %t369 = call ptr @fn_sconcat(ptr %t363, ptr %t368) %t370 = call ptr @fn_emit_bind(ptr %t369) - %t371 = call ptr @fn_val(ptr %t370, ptr @.str448) + %t371 = call ptr @fn_val(ptr %t370, ptr @.str467) store ptr %t371, ptr %retval br label %ret ifend75: %t372 = load ptr, ptr %t0 - %t373 = call i32 @fn_streq(ptr %t372, ptr @.str449) + %t373 = call i32 @fn_streq(ptr %t372, ptr @.str468) %t374 = icmp ne i32 %t373, 0 br i1 %t374, label %then88, label %ifend90 then88: @@ -10969,25 +11491,25 @@ then88: store ptr %t379, ptr %t380 %t381 = call ptr @fn_nreg() store ptr %t381, ptr %t382 - call void @fn_emit(ptr @.str450) + call void @fn_emit(ptr @.str469) %t383 = load ptr, ptr %t382 call void @fn_emit(ptr %t383) - call void @fn_emit(ptr @.str451) + call void @fn_emit(ptr @.str470) %t384 = load ptr, ptr %t377 call void @fn_emit(ptr %t384) - call void @fn_emit(ptr @.str452) + call void @fn_emit(ptr @.str471) %t385 = load ptr, ptr %t380 call void @fn_emit(ptr %t385) - call void @fn_emit(ptr @.str453) + call void @fn_emit(ptr @.str472) %t386 = load ptr, ptr %t382 - %t387 = call ptr @fn_sconcat(ptr @.str454, ptr %t386) + %t387 = call ptr @fn_sconcat(ptr @.str473, ptr %t386) %t388 = call ptr @fn_emit_bind(ptr %t387) - %t389 = call ptr @fn_val(ptr %t388, ptr @.str455) + %t389 = call ptr @fn_val(ptr %t388, ptr @.str474) store ptr %t389, ptr %retval br label %ret ifend90: %t390 = load ptr, ptr %t0 - %t391 = call i32 @fn_streq(ptr %t390, ptr @.str456) + %t391 = call i32 @fn_streq(ptr %t390, ptr @.str475) %t392 = icmp ne i32 %t391, 0 br i1 %t392, label %then91, label %ifend93 then91: @@ -11002,29 +11524,29 @@ then91: store ptr %t400, ptr %t401 %t402 = call ptr @fn_nreg() store ptr %t402, ptr %t403 - call void @fn_emit(ptr @.str457) + call void @fn_emit(ptr @.str476) %t404 = load ptr, ptr %t403 call void @fn_emit(ptr %t404) - call void @fn_emit(ptr @.str458) + call void @fn_emit(ptr @.str477) %t405 = load ptr, ptr %t395 call void @fn_emit(ptr %t405) - call void @fn_emit(ptr @.str459) + call void @fn_emit(ptr @.str478) %t406 = load ptr, ptr %t398 call void @fn_emit(ptr %t406) - call void @fn_emit(ptr @.str460) - call void @fn_emit(ptr @.str461) + call void @fn_emit(ptr @.str479) + call void @fn_emit(ptr @.str480) %t407 = load ptr, ptr %t401 call void @fn_emit(ptr %t407) - call void @fn_emit(ptr @.str462) + call void @fn_emit(ptr @.str481) %t408 = load ptr, ptr %t403 call void @fn_emit(ptr %t408) - call void @fn_emit(ptr @.str463) - %t409 = call ptr @fn_val(ptr @.str464, ptr @.str465) + call void @fn_emit(ptr @.str482) + %t409 = call ptr @fn_val(ptr @.str483, ptr @.str484) store ptr %t409, ptr %retval br label %ret ifend93: store i32 0, ptr @g_g_intrin_ok - %t410 = call ptr @fn_val(ptr @.str466, ptr @.str467) + %t410 = call ptr @fn_val(ptr @.str485, ptr @.str486) store ptr %t410, ptr %retval br label %ret ret: @@ -11051,14 +11573,14 @@ entry: %t118 = alloca i32 store ptr %arg_name, ptr %t0 %t3 = load ptr, ptr %t0 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str468) + %t4 = call i32 @fn_streq(ptr %t3, ptr @.str487) %t5 = icmp ne i32 %t4, 0 %t6 = zext i1 %t5 to i32 store i32 %t6, ptr %t2 br i1 %t5, label %scend1, label %sc0 sc0: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str469) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str488) %t9 = icmp ne i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t2 @@ -11071,7 +11593,7 @@ scend1: br i1 %t12, label %scend3, label %sc2 sc2: %t14 = load ptr, ptr %t0 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str470) + %t15 = call i32 @fn_streq(ptr %t14, ptr @.str489) %t16 = icmp ne i32 %t15, 0 %t17 = zext i1 %t16 to i32 store i32 %t17, ptr %t1 @@ -11085,14 +11607,14 @@ then4: br label %ret ifend6: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str471) + %t23 = call i32 @fn_streq(ptr %t22, ptr @.str490) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t21 br i1 %t24, label %scend8, label %sc7 sc7: %t26 = load ptr, ptr %t0 - %t27 = call i32 @fn_streq(ptr %t26, ptr @.str472) + %t27 = call i32 @fn_streq(ptr %t26, ptr @.str491) %t28 = icmp ne i32 %t27, 0 %t29 = zext i1 %t28 to i32 store i32 %t29, ptr %t21 @@ -11105,7 +11627,7 @@ scend8: br i1 %t31, label %scend10, label %sc9 sc9: %t33 = load ptr, ptr %t0 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str473) + %t34 = call i32 @fn_streq(ptr %t33, ptr @.str492) %t35 = icmp ne i32 %t34, 0 %t36 = zext i1 %t35 to i32 store i32 %t36, ptr %t20 @@ -11119,14 +11641,14 @@ then11: br label %ret ifend13: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str474) + %t41 = call i32 @fn_streq(ptr %t40, ptr @.str493) %t42 = icmp ne i32 %t41, 0 %t43 = zext i1 %t42 to i32 store i32 %t43, ptr %t39 br i1 %t42, label %scend15, label %sc14 sc14: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str475) + %t45 = call i32 @fn_streq(ptr %t44, ptr @.str494) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t39 @@ -11140,14 +11662,14 @@ then16: br label %ret ifend18: %t53 = load ptr, ptr %t0 - %t54 = call i32 @fn_streq(ptr %t53, ptr @.str476) + %t54 = call i32 @fn_streq(ptr %t53, ptr @.str495) %t55 = icmp ne i32 %t54, 0 %t56 = zext i1 %t55 to i32 store i32 %t56, ptr %t52 br i1 %t55, label %scend20, label %sc19 sc19: %t57 = load ptr, ptr %t0 - %t58 = call i32 @fn_streq(ptr %t57, ptr @.str477) + %t58 = call i32 @fn_streq(ptr %t57, ptr @.str496) %t59 = icmp ne i32 %t58, 0 %t60 = zext i1 %t59 to i32 store i32 %t60, ptr %t52 @@ -11160,7 +11682,7 @@ scend20: br i1 %t62, label %scend22, label %sc21 sc21: %t64 = load ptr, ptr %t0 - %t65 = call i32 @fn_streq(ptr %t64, ptr @.str478) + %t65 = call i32 @fn_streq(ptr %t64, ptr @.str497) %t66 = icmp ne i32 %t65, 0 %t67 = zext i1 %t66 to i32 store i32 %t67, ptr %t51 @@ -11173,7 +11695,7 @@ scend22: br i1 %t69, label %scend24, label %sc23 sc23: %t71 = load ptr, ptr %t0 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str479) + %t72 = call i32 @fn_streq(ptr %t71, ptr @.str498) %t73 = icmp ne i32 %t72, 0 %t74 = zext i1 %t73 to i32 store i32 %t74, ptr %t50 @@ -11187,14 +11709,14 @@ then25: br label %ret ifend27: %t78 = load ptr, ptr %t0 - %t79 = call i32 @fn_streq(ptr %t78, ptr @.str480) + %t79 = call i32 @fn_streq(ptr %t78, ptr @.str499) %t80 = icmp ne i32 %t79, 0 %t81 = zext i1 %t80 to i32 store i32 %t81, ptr %t77 br i1 %t80, label %scend29, label %sc28 sc28: %t82 = load ptr, ptr %t0 - %t83 = call i32 @fn_streq(ptr %t82, ptr @.str481) + %t83 = call i32 @fn_streq(ptr %t82, ptr @.str500) %t84 = icmp ne i32 %t83, 0 %t85 = zext i1 %t84 to i32 store i32 %t85, ptr %t77 @@ -11208,14 +11730,14 @@ then30: br label %ret ifend32: %t89 = load ptr, ptr %t0 - %t90 = call i32 @fn_streq(ptr %t89, ptr @.str482) + %t90 = call i32 @fn_streq(ptr %t89, ptr @.str501) %t91 = icmp ne i32 %t90, 0 %t92 = zext i1 %t91 to i32 store i32 %t92, ptr %t88 br i1 %t91, label %scend34, label %sc33 sc33: %t93 = load ptr, ptr %t0 - %t94 = call i32 @fn_streq(ptr %t93, ptr @.str483) + %t94 = call i32 @fn_streq(ptr %t93, ptr @.str502) %t95 = icmp ne i32 %t94, 0 %t96 = zext i1 %t95 to i32 store i32 %t96, ptr %t88 @@ -11229,14 +11751,14 @@ then35: br label %ret ifend37: %t101 = load ptr, ptr %t0 - %t102 = call i32 @fn_streq(ptr %t101, ptr @.str484) + %t102 = call i32 @fn_streq(ptr %t101, ptr @.str503) %t103 = icmp ne i32 %t102, 0 %t104 = zext i1 %t103 to i32 store i32 %t104, ptr %t100 br i1 %t103, label %scend39, label %sc38 sc38: %t105 = load ptr, ptr %t0 - %t106 = call i32 @fn_streq(ptr %t105, ptr @.str485) + %t106 = call i32 @fn_streq(ptr %t105, ptr @.str504) %t107 = icmp ne i32 %t106, 0 %t108 = zext i1 %t107 to i32 store i32 %t108, ptr %t100 @@ -11249,7 +11771,7 @@ scend39: br i1 %t110, label %scend41, label %sc40 sc40: %t112 = load ptr, ptr %t0 - %t113 = call i32 @fn_streq(ptr %t112, ptr @.str486) + %t113 = call i32 @fn_streq(ptr %t112, ptr @.str505) %t114 = icmp ne i32 %t113, 0 %t115 = zext i1 %t114 to i32 store i32 %t115, ptr %t99 @@ -11263,14 +11785,14 @@ then42: br label %ret ifend44: %t119 = load ptr, ptr %t0 - %t120 = call i32 @fn_streq(ptr %t119, ptr @.str487) + %t120 = call i32 @fn_streq(ptr %t119, ptr @.str506) %t121 = icmp ne i32 %t120, 0 %t122 = zext i1 %t121 to i32 store i32 %t122, ptr %t118 br i1 %t121, label %scend46, label %sc45 sc45: %t123 = load ptr, ptr %t0 - %t124 = call i32 @fn_streq(ptr %t123, ptr @.str488) + %t124 = call i32 @fn_streq(ptr %t123, ptr @.str507) %t125 = icmp ne i32 %t124, 0 %t126 = zext i1 %t125 to i32 store i32 %t126, ptr %t118 @@ -11337,23 +11859,23 @@ entry: store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str489) + %t3 = call i32 @fn_streq(ptr %t2, ptr @.str508) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: %t5 = load ptr, ptr %t1 %t6 = call ptr @fn_arg_code(ptr %t5, i32 0) store ptr %t6, ptr %t7 - call void @fn_emit(ptr @.str490) + call void @fn_emit(ptr @.str509) %t8 = load ptr, ptr %t7 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str491) - %t9 = call ptr @fn_val(ptr @.str492, ptr @.str493) + call void @fn_emit(ptr @.str510) + %t9 = call ptr @fn_val(ptr @.str511, ptr @.str512) store ptr %t9, ptr %retval br label %ret ifend2: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str494) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str513) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then3, label %ifend5 then3: @@ -11367,26 +11889,26 @@ then3: %t20 = call ptr @fn_arg_code(ptr %t19, i32 2) store ptr %t20, ptr %t21 %t22 = load ptr, ptr %t21 - %t23 = call ptr @fn_sconcat(ptr %t22, ptr @.str496) - %t24 = call ptr @fn_sconcat(ptr @.str495, ptr %t23) + %t23 = call ptr @fn_sconcat(ptr %t22, ptr @.str515) + %t24 = call ptr @fn_sconcat(ptr @.str514, ptr %t23) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 - call void @fn_emit(ptr @.str497) + call void @fn_emit(ptr @.str516) %t27 = load ptr, ptr %t15 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str498) + call void @fn_emit(ptr @.str517) %t28 = load ptr, ptr %t18 call void @fn_emit(ptr %t28) - call void @fn_emit(ptr @.str499) + call void @fn_emit(ptr @.str518) %t29 = load ptr, ptr %t26 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str500) - %t30 = call ptr @fn_val(ptr @.str501, ptr @.str502) + call void @fn_emit(ptr @.str519) + %t30 = call ptr @fn_val(ptr @.str520, ptr @.str521) store ptr %t30, ptr %retval br label %ret ifend5: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str503) + %t32 = call i32 @fn_streq(ptr %t31, ptr @.str522) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then6, label %ifend8 then6: @@ -11400,26 +11922,26 @@ then6: %t41 = call ptr @fn_arg_code(ptr %t40, i32 2) store ptr %t41, ptr %t42 %t43 = load ptr, ptr %t42 - %t44 = call ptr @fn_sconcat(ptr %t43, ptr @.str505) - %t45 = call ptr @fn_sconcat(ptr @.str504, ptr %t44) + %t44 = call ptr @fn_sconcat(ptr %t43, ptr @.str524) + %t45 = call ptr @fn_sconcat(ptr @.str523, ptr %t44) %t46 = call ptr @fn_emit_bind(ptr %t45) store ptr %t46, ptr %t47 - call void @fn_emit(ptr @.str506) + call void @fn_emit(ptr @.str525) %t48 = load ptr, ptr %t36 call void @fn_emit(ptr %t48) - call void @fn_emit(ptr @.str507) + call void @fn_emit(ptr @.str526) %t49 = load ptr, ptr %t39 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str508) + call void @fn_emit(ptr @.str527) %t50 = load ptr, ptr %t47 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str509) - %t51 = call ptr @fn_val(ptr @.str510, ptr @.str511) + call void @fn_emit(ptr @.str528) + %t51 = call ptr @fn_val(ptr @.str529, ptr @.str530) store ptr %t51, ptr %retval br label %ret ifend8: %t52 = load ptr, ptr %t0 - %t53 = call i32 @fn_streq(ptr %t52, ptr @.str512) + %t53 = call i32 @fn_streq(ptr %t52, ptr @.str531) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then9, label %ifend11 then9: @@ -11431,49 +11953,49 @@ then9: store ptr %t59, ptr %t60 %t61 = call ptr @fn_nreg() store ptr %t61, ptr %t62 - call void @fn_emit(ptr @.str513) + call void @fn_emit(ptr @.str532) %t63 = load ptr, ptr %t62 call void @fn_emit(ptr %t63) - call void @fn_emit(ptr @.str514) + call void @fn_emit(ptr @.str533) %t64 = load ptr, ptr %t57 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str515) + call void @fn_emit(ptr @.str534) %t65 = load ptr, ptr %t60 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str516) + call void @fn_emit(ptr @.str535) %t66 = load ptr, ptr %t62 - %t67 = call ptr @fn_val(ptr %t66, ptr @.str517) + %t67 = call ptr @fn_val(ptr %t66, ptr @.str536) store ptr %t67, ptr %retval br label %ret ifend11: %t68 = load ptr, ptr %t0 - %t69 = call i32 @fn_streq(ptr %t68, ptr @.str518) + %t69 = call i32 @fn_streq(ptr %t68, ptr @.str537) %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then12, label %ifend14 then12: - %t71 = call ptr @fn_emit_bind(ptr @.str519) - %t72 = call ptr @fn_val(ptr %t71, ptr @.str520) + %t71 = call ptr @fn_emit_bind(ptr @.str538) + %t72 = call ptr @fn_val(ptr %t71, ptr @.str539) store ptr %t72, ptr %retval br label %ret ifend14: %t73 = load ptr, ptr %t0 - %t74 = call i32 @fn_streq(ptr %t73, ptr @.str521) + %t74 = call i32 @fn_streq(ptr %t73, ptr @.str540) %t75 = icmp ne i32 %t74, 0 br i1 %t75, label %then15, label %ifend17 then15: %t76 = load ptr, ptr %t1 %t77 = call ptr @fn_arg_code(ptr %t76, i32 0) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str522) + call void @fn_emit(ptr @.str541) %t79 = load ptr, ptr %t78 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str523) - %t80 = call ptr @fn_val(ptr @.str524, ptr @.str525) + call void @fn_emit(ptr @.str542) + %t80 = call ptr @fn_val(ptr @.str543, ptr @.str544) store ptr %t80, ptr %retval br label %ret ifend17: %t81 = load ptr, ptr %t0 - %t82 = call i32 @fn_streq(ptr %t81, ptr @.str526) + %t82 = call i32 @fn_streq(ptr %t81, ptr @.str545) %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %then18, label %ifend20 then18: @@ -11481,35 +12003,35 @@ then18: %t85 = call ptr @fn_arg_code(ptr %t84, i32 0) store ptr %t85, ptr %t86 %t87 = load ptr, ptr %t86 - %t88 = call ptr @fn_sconcat(ptr %t87, ptr @.str528) - %t89 = call ptr @fn_sconcat(ptr @.str527, ptr %t88) + %t88 = call ptr @fn_sconcat(ptr %t87, ptr @.str547) + %t89 = call ptr @fn_sconcat(ptr @.str546, ptr %t88) %t90 = call ptr @fn_emit_bind(ptr %t89) store ptr %t90, ptr %t91 %t92 = load ptr, ptr %t91 - %t93 = call ptr @fn_sconcat(ptr %t92, ptr @.str530) - %t94 = call ptr @fn_sconcat(ptr @.str529, ptr %t93) + %t93 = call ptr @fn_sconcat(ptr %t92, ptr @.str549) + %t94 = call ptr @fn_sconcat(ptr @.str548, ptr %t93) %t95 = call ptr @fn_emit_bind(ptr %t94) - %t96 = call ptr @fn_val(ptr %t95, ptr @.str531) + %t96 = call ptr @fn_val(ptr %t95, ptr @.str550) store ptr %t96, ptr %retval br label %ret ifend20: %t97 = load ptr, ptr %t0 - %t98 = call i32 @fn_streq(ptr %t97, ptr @.str532) + %t98 = call i32 @fn_streq(ptr %t97, ptr @.str551) %t99 = icmp ne i32 %t98, 0 br i1 %t99, label %then21, label %ifend23 then21: - %t100 = call ptr @fn_emit_bind(ptr @.str533) + %t100 = call ptr @fn_emit_bind(ptr @.str552) store ptr %t100, ptr %t101 %t102 = load ptr, ptr %t101 - %t103 = call ptr @fn_sconcat(ptr %t102, ptr @.str535) - %t104 = call ptr @fn_sconcat(ptr @.str534, ptr %t103) + %t103 = call ptr @fn_sconcat(ptr %t102, ptr @.str554) + %t104 = call ptr @fn_sconcat(ptr @.str553, ptr %t103) %t105 = call ptr @fn_emit_bind(ptr %t104) - %t106 = call ptr @fn_val(ptr %t105, ptr @.str536) + %t106 = call ptr @fn_val(ptr %t105, ptr @.str555) store ptr %t106, ptr %retval br label %ret ifend23: %t107 = load ptr, ptr %t0 - %t108 = call i32 @fn_streq(ptr %t107, ptr @.str537) + %t108 = call i32 @fn_streq(ptr %t107, ptr @.str556) %t109 = icmp ne i32 %t108, 0 br i1 %t109, label %then24, label %ifend26 then24: @@ -11521,25 +12043,25 @@ then24: store ptr %t114, ptr %t115 %t116 = call ptr @fn_nreg() store ptr %t116, ptr %t117 - call void @fn_emit(ptr @.str538) + call void @fn_emit(ptr @.str557) %t118 = load ptr, ptr %t117 call void @fn_emit(ptr %t118) - call void @fn_emit(ptr @.str539) + call void @fn_emit(ptr @.str558) %t119 = load ptr, ptr %t112 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str540) + call void @fn_emit(ptr @.str559) %t120 = load ptr, ptr %t115 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str541) + call void @fn_emit(ptr @.str560) %t121 = load ptr, ptr %t117 - %t122 = call ptr @fn_sconcat(ptr @.str542, ptr %t121) + %t122 = call ptr @fn_sconcat(ptr @.str561, ptr %t121) %t123 = call ptr @fn_emit_bind(ptr %t122) - %t124 = call ptr @fn_val(ptr %t123, ptr @.str543) + %t124 = call ptr @fn_val(ptr %t123, ptr @.str562) store ptr %t124, ptr %retval br label %ret ifend26: %t125 = load ptr, ptr %t0 - %t126 = call i32 @fn_streq(ptr %t125, ptr @.str544) + %t126 = call i32 @fn_streq(ptr %t125, ptr @.str563) %t127 = icmp ne i32 %t126, 0 br i1 %t127, label %then27, label %ifend29 then27: @@ -11554,29 +12076,29 @@ then27: store ptr %t135, ptr %t136 %t137 = call ptr @fn_nreg() store ptr %t137, ptr %t138 - call void @fn_emit(ptr @.str545) + call void @fn_emit(ptr @.str564) %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str546) + call void @fn_emit(ptr @.str565) %t140 = load ptr, ptr %t130 call void @fn_emit(ptr %t140) - call void @fn_emit(ptr @.str547) + call void @fn_emit(ptr @.str566) %t141 = load ptr, ptr %t133 call void @fn_emit(ptr %t141) - call void @fn_emit(ptr @.str548) - call void @fn_emit(ptr @.str549) + call void @fn_emit(ptr @.str567) + call void @fn_emit(ptr @.str568) %t142 = load ptr, ptr %t136 call void @fn_emit(ptr %t142) - call void @fn_emit(ptr @.str550) + call void @fn_emit(ptr @.str569) %t143 = load ptr, ptr %t138 call void @fn_emit(ptr %t143) - call void @fn_emit(ptr @.str551) - %t144 = call ptr @fn_val(ptr @.str552, ptr @.str553) + call void @fn_emit(ptr @.str570) + %t144 = call ptr @fn_val(ptr @.str571, ptr @.str572) store ptr %t144, ptr %retval br label %ret ifend29: %t145 = load ptr, ptr %t0 - %t146 = call i32 @fn_streq(ptr %t145, ptr @.str554) + %t146 = call i32 @fn_streq(ptr %t145, ptr @.str573) %t147 = icmp ne i32 %t146, 0 br i1 %t147, label %then30, label %ifend32 then30: @@ -11588,25 +12110,25 @@ then30: store ptr %t152, ptr %t153 %t154 = call ptr @fn_nreg() store ptr %t154, ptr %t155 - call void @fn_emit(ptr @.str555) + call void @fn_emit(ptr @.str574) %t156 = load ptr, ptr %t155 call void @fn_emit(ptr %t156) - call void @fn_emit(ptr @.str556) + call void @fn_emit(ptr @.str575) %t157 = load ptr, ptr %t150 call void @fn_emit(ptr %t157) - call void @fn_emit(ptr @.str557) + call void @fn_emit(ptr @.str576) %t158 = load ptr, ptr %t153 call void @fn_emit(ptr %t158) - call void @fn_emit(ptr @.str558) + call void @fn_emit(ptr @.str577) %t159 = load ptr, ptr %t155 - %t160 = call ptr @fn_sconcat(ptr @.str559, ptr %t159) + %t160 = call ptr @fn_sconcat(ptr @.str578, ptr %t159) %t161 = call ptr @fn_emit_bind(ptr %t160) - %t162 = call ptr @fn_val(ptr %t161, ptr @.str560) + %t162 = call ptr @fn_val(ptr %t161, ptr @.str579) store ptr %t162, ptr %retval br label %ret ifend32: %t163 = load ptr, ptr %t0 - %t164 = call i32 @fn_streq(ptr %t163, ptr @.str561) + %t164 = call i32 @fn_streq(ptr %t163, ptr @.str580) %t165 = icmp ne i32 %t164, 0 br i1 %t165, label %then33, label %ifend35 then33: @@ -11621,29 +12143,29 @@ then33: store ptr %t173, ptr %t174 %t175 = call ptr @fn_nreg() store ptr %t175, ptr %t176 - call void @fn_emit(ptr @.str562) + call void @fn_emit(ptr @.str581) %t177 = load ptr, ptr %t176 call void @fn_emit(ptr %t177) - call void @fn_emit(ptr @.str563) + call void @fn_emit(ptr @.str582) %t178 = load ptr, ptr %t168 call void @fn_emit(ptr %t178) - call void @fn_emit(ptr @.str564) + call void @fn_emit(ptr @.str583) %t179 = load ptr, ptr %t171 call void @fn_emit(ptr %t179) - call void @fn_emit(ptr @.str565) - call void @fn_emit(ptr @.str566) + call void @fn_emit(ptr @.str584) + call void @fn_emit(ptr @.str585) %t180 = load ptr, ptr %t174 call void @fn_emit(ptr %t180) - call void @fn_emit(ptr @.str567) + call void @fn_emit(ptr @.str586) %t181 = load ptr, ptr %t176 call void @fn_emit(ptr %t181) - call void @fn_emit(ptr @.str568) - %t182 = call ptr @fn_val(ptr @.str569, ptr @.str570) + call void @fn_emit(ptr @.str587) + %t182 = call ptr @fn_val(ptr @.str588, ptr @.str589) store ptr %t182, ptr %retval br label %ret ifend35: %t183 = load ptr, ptr %t0 - %t184 = call i32 @fn_streq(ptr %t183, ptr @.str571) + %t184 = call i32 @fn_streq(ptr %t183, ptr @.str590) %t185 = icmp ne i32 %t184, 0 br i1 %t185, label %then36, label %ifend38 then36: @@ -11659,12 +12181,12 @@ then36: %t195 = load ptr, ptr %t194 %t196 = getelementptr inbounds %Str_Val, ptr %t195, i32 0, i32 0 %t197 = load ptr, ptr %t196 - %t198 = call ptr @fn_val(ptr %t197, ptr @.str572) + %t198 = call ptr @fn_val(ptr %t197, ptr @.str591) store ptr %t198, ptr %retval br label %ret ifend38: %t199 = load ptr, ptr %t0 - %t200 = call i32 @fn_streq(ptr %t199, ptr @.str573) + %t200 = call i32 @fn_streq(ptr %t199, ptr @.str592) %t201 = icmp ne i32 %t200, 0 br i1 %t201, label %then39, label %ifend41 then39: @@ -11680,12 +12202,12 @@ then39: %t211 = load ptr, ptr %t210 %t212 = getelementptr inbounds %Str_Val, ptr %t211, i32 0, i32 0 %t213 = load ptr, ptr %t212 - %t214 = call ptr @fn_val(ptr %t213, ptr @.str574) + %t214 = call ptr @fn_val(ptr %t213, ptr @.str593) store ptr %t214, ptr %retval br label %ret ifend41: %t215 = load ptr, ptr %t0 - %t216 = call i32 @fn_streq(ptr %t215, ptr @.str575) + %t216 = call i32 @fn_streq(ptr %t215, ptr @.str594) %t217 = icmp ne i32 %t216, 0 br i1 %t217, label %then42, label %ifend44 then42: @@ -11693,45 +12215,45 @@ then42: %t219 = icmp ne i32 %t218, 0 br i1 %t219, label %then45, label %ifend47 then45: - %t220 = call ptr @fn_val(ptr @.str576, ptr @.str577) + %t220 = call ptr @fn_val(ptr @.str595, ptr @.str596) store ptr %t220, ptr %retval br label %ret ifend47: - %t221 = call ptr @fn_val(ptr @.str578, ptr @.str579) + %t221 = call ptr @fn_val(ptr @.str597, ptr @.str598) store ptr %t221, ptr %retval br label %ret ifend44: %t222 = load ptr, ptr %t0 - %t223 = call i32 @fn_streq(ptr %t222, ptr @.str580) + %t223 = call i32 @fn_streq(ptr %t222, ptr @.str599) %t224 = icmp ne i32 %t223, 0 br i1 %t224, label %then48, label %ifend50 then48: - %t225 = call ptr @fn_val(ptr @.str581, ptr @.str582) + %t225 = call ptr @fn_val(ptr @.str600, ptr @.str601) store ptr %t225, ptr %retval br label %ret ifend50: %t226 = load ptr, ptr %t0 - %t227 = call i32 @fn_streq(ptr %t226, ptr @.str583) + %t227 = call i32 @fn_streq(ptr %t226, ptr @.str602) %t228 = icmp ne i32 %t227, 0 br i1 %t228, label %then51, label %ifend53 then51: - %t229 = call ptr @fn_emit_bind(ptr @.str584) - %t230 = call ptr @fn_val(ptr %t229, ptr @.str585) + %t229 = call ptr @fn_emit_bind(ptr @.str603) + %t230 = call ptr @fn_val(ptr %t229, ptr @.str604) store ptr %t230, ptr %retval br label %ret ifend53: %t231 = load ptr, ptr %t0 - %t232 = call i32 @fn_streq(ptr %t231, ptr @.str586) + %t232 = call i32 @fn_streq(ptr %t231, ptr @.str605) %t233 = icmp ne i32 %t232, 0 br i1 %t233, label %then54, label %ifend56 then54: - %t234 = call ptr @fn_emit_bind(ptr @.str587) - %t235 = call ptr @fn_val(ptr %t234, ptr @.str588) + %t234 = call ptr @fn_emit_bind(ptr @.str606) + %t235 = call ptr @fn_val(ptr %t234, ptr @.str607) store ptr %t235, ptr %retval br label %ret ifend56: %t236 = load ptr, ptr %t0 - %t237 = call i32 @fn_streq(ptr %t236, ptr @.str589) + %t237 = call i32 @fn_streq(ptr %t236, ptr @.str608) %t238 = icmp ne i32 %t237, 0 br i1 %t238, label %then57, label %ifend59 then57: @@ -11747,25 +12269,25 @@ then57: %t248 = load ptr, ptr %t1 %t249 = call ptr @fn_arg_code(ptr %t248, i32 3) store ptr %t249, ptr %t250 - call void @fn_emit(ptr @.str590) + call void @fn_emit(ptr @.str609) %t251 = load ptr, ptr %t241 call void @fn_emit(ptr %t251) - call void @fn_emit(ptr @.str591) + call void @fn_emit(ptr @.str610) %t252 = load ptr, ptr %t244 call void @fn_emit(ptr %t252) - call void @fn_emit(ptr @.str592) + call void @fn_emit(ptr @.str611) %t253 = load ptr, ptr %t247 call void @fn_emit(ptr %t253) - call void @fn_emit(ptr @.str593) + call void @fn_emit(ptr @.str612) %t254 = load ptr, ptr %t250 call void @fn_emit(ptr %t254) - call void @fn_emit(ptr @.str594) - %t255 = call ptr @fn_val(ptr @.str595, ptr @.str596) + call void @fn_emit(ptr @.str613) + %t255 = call ptr @fn_val(ptr @.str614, ptr @.str615) store ptr %t255, ptr %retval br label %ret ifend59: %t256 = load ptr, ptr %t0 - %t257 = call i32 @fn_streq(ptr %t256, ptr @.str597) + %t257 = call i32 @fn_streq(ptr %t256, ptr @.str616) %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %then60, label %ifend62 then60: @@ -11778,31 +12300,31 @@ then60: %t265 = load ptr, ptr %t1 %t266 = call ptr @fn_arg_code(ptr %t265, i32 2) store ptr %t266, ptr %t267 - call void @fn_emit(ptr @.str598) + call void @fn_emit(ptr @.str617) %t268 = load ptr, ptr %t261 call void @fn_emit(ptr %t268) - call void @fn_emit(ptr @.str599) + call void @fn_emit(ptr @.str618) %t269 = load ptr, ptr %t264 call void @fn_emit(ptr %t269) - call void @fn_emit(ptr @.str600) + call void @fn_emit(ptr @.str619) %t270 = load ptr, ptr %t267 call void @fn_emit(ptr %t270) - call void @fn_emit(ptr @.str601) - %t271 = call ptr @fn_val(ptr @.str602, ptr @.str603) + call void @fn_emit(ptr @.str620) + %t271 = call ptr @fn_val(ptr @.str621, ptr @.str622) store ptr %t271, ptr %retval br label %ret ifend62: %t272 = load ptr, ptr %t0 - %t273 = call i32 @fn_streq(ptr %t272, ptr @.str604) + %t273 = call i32 @fn_streq(ptr %t272, ptr @.str623) %t274 = icmp ne i32 %t273, 0 br i1 %t274, label %then63, label %ifend65 then63: - call void @fn_emit(ptr @.str605) - %t275 = call ptr @fn_val(ptr @.str606, ptr @.str607) + call void @fn_emit(ptr @.str624) + %t275 = call ptr @fn_val(ptr @.str625, ptr @.str626) store ptr %t275, ptr %retval br label %ret ifend65: - %t276 = call ptr @fn_val(ptr @.str608, ptr @.str609) + %t276 = call ptr @fn_val(ptr @.str627, ptr @.str628) store ptr %t276, ptr %retval br label %ret ret: @@ -11819,14 +12341,14 @@ entry: %t3 = alloca i32 store ptr %arg_name, ptr %t0 %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str610) + %t5 = call i32 @fn_streq(ptr %t4, ptr @.str629) %t6 = icmp ne i32 %t5, 0 %t7 = zext i1 %t6 to i32 store i32 %t7, ptr %t3 br i1 %t6, label %scend1, label %sc0 sc0: %t8 = load ptr, ptr %t0 - %t9 = call i32 @fn_streq(ptr %t8, ptr @.str611) + %t9 = call i32 @fn_streq(ptr %t8, ptr @.str630) %t10 = icmp ne i32 %t9, 0 %t11 = zext i1 %t10 to i32 store i32 %t11, ptr %t3 @@ -11839,7 +12361,7 @@ scend1: br i1 %t13, label %scend3, label %sc2 sc2: %t15 = load ptr, ptr %t0 - %t16 = call i32 @fn_streq(ptr %t15, ptr @.str612) + %t16 = call i32 @fn_streq(ptr %t15, ptr @.str631) %t17 = icmp ne i32 %t16, 0 %t18 = zext i1 %t17 to i32 store i32 %t18, ptr %t2 @@ -11852,7 +12374,7 @@ scend3: br i1 %t20, label %scend5, label %sc4 sc4: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str613) + %t23 = call i32 @fn_streq(ptr %t22, ptr @.str632) %t24 = icmp ne i32 %t23, 0 %t25 = zext i1 %t24 to i32 store i32 %t25, ptr %t1 @@ -11888,7 +12410,7 @@ entry: store ptr %arg_name, ptr %t0 store ptr %arg_e, ptr %t1 %t2 = load ptr, ptr %t0 - %t3 = call i32 @fn_streq(ptr %t2, ptr @.str614) + %t3 = call i32 @fn_streq(ptr %t2, ptr @.str633) %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: @@ -11904,14 +12426,14 @@ then0: %t14 = load ptr, ptr %t13 %t15 = getelementptr inbounds %Str_Val, ptr %t14, i32 0, i32 0 %t16 = load ptr, ptr %t15 - %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str616) - %t18 = call ptr @fn_sconcat(ptr @.str615, ptr %t17) + %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str635) + %t18 = call ptr @fn_sconcat(ptr @.str634, ptr %t17) %t19 = call ptr @fn_emit_bind(ptr %t18) store ptr %t19, ptr %t20 %t21 = load ptr, ptr %t13 %t22 = getelementptr inbounds %Str_Val, ptr %t21, i32 0, i32 0 %t23 = load ptr, ptr %t22 - %t24 = call ptr @fn_sconcat(ptr @.str617, ptr %t23) + %t24 = call ptr @fn_sconcat(ptr @.str636, ptr %t23) %t25 = call ptr @fn_emit_bind(ptr %t24) store ptr %t25, ptr %t26 %t27 = load ptr, ptr %t20 @@ -11919,25 +12441,25 @@ then0: %t29 = load ptr, ptr %t13 %t30 = getelementptr inbounds %Str_Val, ptr %t29, i32 0, i32 0 %t31 = load ptr, ptr %t30 - %t32 = call ptr @fn_sconcat(ptr @.str620, ptr %t31) + %t32 = call ptr @fn_sconcat(ptr @.str639, ptr %t31) %t33 = call ptr @fn_sconcat(ptr %t28, ptr %t32) - %t34 = call ptr @fn_sconcat(ptr @.str619, ptr %t33) + %t34 = call ptr @fn_sconcat(ptr @.str638, ptr %t33) %t35 = call ptr @fn_sconcat(ptr %t27, ptr %t34) - %t36 = call ptr @fn_sconcat(ptr @.str618, ptr %t35) + %t36 = call ptr @fn_sconcat(ptr @.str637, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) - %t38 = call ptr @fn_val(ptr %t37, ptr @.str621) + %t38 = call ptr @fn_val(ptr %t37, ptr @.str640) store ptr %t38, ptr %retval br label %ret ifend2: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str622) + %t41 = call i32 @fn_streq(ptr %t40, ptr @.str641) %t42 = icmp ne i32 %t41, 0 %t43 = zext i1 %t42 to i32 store i32 %t43, ptr %t39 br i1 %t42, label %scend4, label %sc3 sc3: %t44 = load ptr, ptr %t0 - %t45 = call i32 @fn_streq(ptr %t44, ptr @.str623) + %t45 = call i32 @fn_streq(ptr %t44, ptr @.str642) %t46 = icmp ne i32 %t45, 0 %t47 = zext i1 %t46 to i32 store i32 %t47, ptr %t39 @@ -11965,13 +12487,13 @@ then5: %t65 = load ptr, ptr %t64 %t66 = call ptr @fn_emit_expr(ptr %t65) store ptr %t66, ptr %t67 - store ptr @.str624, ptr %t68 + store ptr @.str643, ptr %t68 %t69 = load ptr, ptr %t0 - %t70 = call i32 @fn_streq(ptr %t69, ptr @.str625) + %t70 = call i32 @fn_streq(ptr %t69, ptr @.str644) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %then8, label %ifend10 then8: - store ptr @.str626, ptr %t68 + store ptr @.str645, ptr %t68 br label %ifend10 ifend10: %t72 = load ptr, ptr %t68 @@ -11981,11 +12503,11 @@ ifend10: %t76 = load ptr, ptr %t67 %t77 = getelementptr inbounds %Str_Val, ptr %t76, i32 0, i32 0 %t78 = load ptr, ptr %t77 - %t79 = call ptr @fn_sconcat(ptr @.str629, ptr %t78) + %t79 = call ptr @fn_sconcat(ptr @.str648, ptr %t78) %t80 = call ptr @fn_sconcat(ptr %t75, ptr %t79) - %t81 = call ptr @fn_sconcat(ptr @.str628, ptr %t80) + %t81 = call ptr @fn_sconcat(ptr @.str647, ptr %t80) %t82 = call ptr @fn_sconcat(ptr %t72, ptr %t81) - %t83 = call ptr @fn_sconcat(ptr @.str627, ptr %t82) + %t83 = call ptr @fn_sconcat(ptr @.str646, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 %t86 = load ptr, ptr %t85 @@ -11995,13 +12517,13 @@ ifend10: %t90 = load ptr, ptr %t67 %t91 = getelementptr inbounds %Str_Val, ptr %t90, i32 0, i32 0 %t92 = load ptr, ptr %t91 - %t93 = call ptr @fn_sconcat(ptr @.str632, ptr %t92) + %t93 = call ptr @fn_sconcat(ptr @.str651, ptr %t92) %t94 = call ptr @fn_sconcat(ptr %t89, ptr %t93) - %t95 = call ptr @fn_sconcat(ptr @.str631, ptr %t94) + %t95 = call ptr @fn_sconcat(ptr @.str650, ptr %t94) %t96 = call ptr @fn_sconcat(ptr %t86, ptr %t95) - %t97 = call ptr @fn_sconcat(ptr @.str630, ptr %t96) + %t97 = call ptr @fn_sconcat(ptr @.str649, ptr %t96) %t98 = call ptr @fn_emit_bind(ptr %t97) - %t99 = call ptr @fn_val(ptr %t98, ptr @.str633) + %t99 = call ptr @fn_val(ptr %t98, ptr @.str652) store ptr %t99, ptr %retval br label %ret ifend7: @@ -12038,9 +12560,9 @@ ifend7: %t130 = load ptr, ptr %t126 %t131 = getelementptr inbounds %Str_Val, ptr %t130, i32 0, i32 0 %t132 = load ptr, ptr %t131 - %t133 = call ptr @fn_sconcat(ptr @.str635, ptr %t132) + %t133 = call ptr @fn_sconcat(ptr @.str654, ptr %t132) %t134 = call ptr @fn_sconcat(ptr %t129, ptr %t133) - %t135 = call ptr @fn_sconcat(ptr @.str634, ptr %t134) + %t135 = call ptr @fn_sconcat(ptr @.str653, ptr %t134) %t136 = call ptr @fn_emit_bind(ptr %t135) store ptr %t136, ptr %t137 %t138 = load ptr, ptr %t137 @@ -12050,20 +12572,20 @@ ifend7: %t142 = load ptr, ptr %t126 %t143 = getelementptr inbounds %Str_Val, ptr %t142, i32 0, i32 0 %t144 = load ptr, ptr %t143 - %t145 = call ptr @fn_sconcat(ptr @.str638, ptr %t144) + %t145 = call ptr @fn_sconcat(ptr @.str657, ptr %t144) %t146 = call ptr @fn_sconcat(ptr %t141, ptr %t145) - %t147 = call ptr @fn_sconcat(ptr @.str637, ptr %t146) + %t147 = call ptr @fn_sconcat(ptr @.str656, ptr %t146) %t148 = call ptr @fn_sconcat(ptr %t138, ptr %t147) - %t149 = call ptr @fn_sconcat(ptr @.str636, ptr %t148) + %t149 = call ptr @fn_sconcat(ptr @.str655, ptr %t148) %t150 = call ptr @fn_emit_bind(ptr %t149) store ptr %t150, ptr %t151 %t152 = load ptr, ptr %t117 %t153 = getelementptr inbounds %Str_Val, ptr %t152, i32 0, i32 0 %t154 = load ptr, ptr %t153 %t155 = load ptr, ptr %t151 - %t156 = call ptr @fn_sconcat(ptr @.str640, ptr %t155) + %t156 = call ptr @fn_sconcat(ptr @.str659, ptr %t155) %t157 = call ptr @fn_sconcat(ptr %t154, ptr %t156) - %t158 = call ptr @fn_sconcat(ptr @.str639, ptr %t157) + %t158 = call ptr @fn_sconcat(ptr @.str658, ptr %t157) %t159 = call ptr @fn_emit_bind(ptr %t158) store ptr %t159, ptr %t160 %t161 = load ptr, ptr %t160 @@ -12071,13 +12593,13 @@ ifend7: %t163 = getelementptr inbounds %Str_Val, ptr %t162, i32 0, i32 0 %t164 = load ptr, ptr %t163 %t165 = load ptr, ptr %t151 - %t166 = call ptr @fn_sconcat(ptr @.str643, ptr %t165) + %t166 = call ptr @fn_sconcat(ptr @.str662, ptr %t165) %t167 = call ptr @fn_sconcat(ptr %t164, ptr %t166) - %t168 = call ptr @fn_sconcat(ptr @.str642, ptr %t167) + %t168 = call ptr @fn_sconcat(ptr @.str661, ptr %t167) %t169 = call ptr @fn_sconcat(ptr %t161, ptr %t168) - %t170 = call ptr @fn_sconcat(ptr @.str641, ptr %t169) + %t170 = call ptr @fn_sconcat(ptr @.str660, ptr %t169) %t171 = call ptr @fn_emit_bind(ptr %t170) - %t172 = call ptr @fn_val(ptr %t171, ptr @.str644) + %t172 = call ptr @fn_val(ptr %t171, ptr @.str663) store ptr %t172, ptr %retval br label %ret ret: @@ -12092,13 +12614,13 @@ entry: %t5 = alloca ptr store ptr %arg_llt, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call ptr @fn_sconcat(ptr %t1, ptr @.str646) - %t3 = call ptr @fn_sconcat(ptr @.str645, ptr %t2) + %t2 = call ptr @fn_sconcat(ptr %t1, ptr @.str665) + %t3 = call ptr @fn_sconcat(ptr @.str664, ptr %t2) %t4 = call ptr @fn_emit_bind(ptr %t3) store ptr %t4, ptr %t5 %t6 = load ptr, ptr %t5 - %t7 = call ptr @fn_sconcat(ptr %t6, ptr @.str648) - %t8 = call ptr @fn_sconcat(ptr @.str647, ptr %t7) + %t7 = call ptr @fn_sconcat(ptr %t6, ptr @.str667) + %t8 = call ptr @fn_sconcat(ptr @.str666, ptr %t7) %t9 = call ptr @fn_emit_bind(ptr %t8) store ptr %t9, ptr %retval br label %ret @@ -12130,16 +12652,16 @@ entry: %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str649) + call void @fn_perr(ptr @.str668) br label %ifend2 ifend2: %t8 = load ptr, ptr %t0 - %t9 = call ptr @fn_sconcat(ptr @.str650, ptr %t8) + %t9 = call ptr @fn_sconcat(ptr @.str669, ptr %t8) %t10 = call ptr @fn_emit_sizeof(ptr %t9) store ptr %t10, ptr %t11 %t12 = load ptr, ptr %t11 - %t13 = call ptr @fn_sconcat(ptr %t12, ptr @.str652) - %t14 = call ptr @fn_sconcat(ptr @.str651, ptr %t13) + %t13 = call ptr @fn_sconcat(ptr %t12, ptr @.str671) + %t14 = call ptr @fn_sconcat(ptr @.str670, ptr %t13) %t15 = call ptr @fn_emit_bind(ptr %t14) store ptr %t15, ptr %t16 store i32 0, ptr %t17 @@ -12167,32 +12689,32 @@ wbody4: store ptr %t34, ptr %t35 %t36 = call ptr @fn_nreg() store ptr %t36, ptr %t37 - call void @fn_emit(ptr @.str653) + call void @fn_emit(ptr @.str672) %t38 = load ptr, ptr %t37 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str654) + call void @fn_emit(ptr @.str673) %t39 = load ptr, ptr %t0 call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str655) + call void @fn_emit(ptr @.str674) %t40 = load ptr, ptr %t16 call void @fn_emit(ptr %t40) - call void @fn_emit(ptr @.str656) + call void @fn_emit(ptr @.str675) %t41 = load i32, ptr %t17 %t42 = call ptr @fn_itoa(i32 %t41) call void @fn_emit(ptr %t42) - call void @fn_emit(ptr @.str657) + call void @fn_emit(ptr @.str676) %t43 = load ptr, ptr %t35 %t44 = getelementptr inbounds %Str_Node, ptr %t43, i32 0, i32 3 %t45 = load ptr, ptr %t44 %t46 = call ptr @fn_llty(ptr %t45) store ptr %t46, ptr %t47 - store ptr @.str658, ptr %t48 + store ptr @.str677, ptr %t48 %t49 = load ptr, ptr %t47 - %t50 = call i32 @fn_streq(ptr %t49, ptr @.str659) + %t50 = call i32 @fn_streq(ptr %t49, ptr @.str678) %t51 = icmp ne i32 %t50, 0 br i1 %t51, label %then6, label %ifend8 then6: - store ptr @.str660, ptr %t48 + store ptr @.str679, ptr %t48 br label %ifend8 ifend8: %t52 = load ptr, ptr %t35 @@ -12216,16 +12738,16 @@ then9: store ptr %t67, ptr %t48 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str661) + call void @fn_emit(ptr @.str680) %t68 = load ptr, ptr %t47 call void @fn_emit(ptr %t68) - call void @fn_emit(ptr @.str662) + call void @fn_emit(ptr @.str681) %t69 = load ptr, ptr %t48 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str663) + call void @fn_emit(ptr @.str682) %t70 = load ptr, ptr %t37 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str664) + call void @fn_emit(ptr @.str683) %t71 = load i32, ptr %t17 %t72 = add i32 %t71, 1 store i32 %t72, ptr %t17 @@ -12251,52 +12773,52 @@ entry: %t14 = alloca ptr %t19 = alloca ptr store ptr %arg_ty, ptr %t0 - %t1 = call ptr @fn_emit_sizeof(ptr @.str665) + %t1 = call ptr @fn_emit_sizeof(ptr @.str684) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t2 - %t4 = call ptr @fn_sconcat(ptr %t3, ptr @.str667) - %t5 = call ptr @fn_sconcat(ptr @.str666, ptr %t4) + %t4 = call ptr @fn_sconcat(ptr %t3, ptr @.str686) + %t5 = call ptr @fn_sconcat(ptr @.str685, ptr %t4) %t6 = call ptr @fn_emit_bind(ptr %t5) store ptr %t6, ptr %t7 %t8 = call ptr @fn_nreg() store ptr %t8, ptr %t9 - call void @fn_emit(ptr @.str668) + call void @fn_emit(ptr @.str687) %t10 = load ptr, ptr %t9 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str669) + call void @fn_emit(ptr @.str688) %t11 = load ptr, ptr %t7 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str670) - call void @fn_emit(ptr @.str671) + call void @fn_emit(ptr @.str689) + call void @fn_emit(ptr @.str690) %t12 = load ptr, ptr %t9 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str672) + call void @fn_emit(ptr @.str691) %t13 = call ptr @fn_nreg() store ptr %t13, ptr %t14 - call void @fn_emit(ptr @.str673) + call void @fn_emit(ptr @.str692) %t15 = load ptr, ptr %t14 call void @fn_emit(ptr %t15) - call void @fn_emit(ptr @.str674) + call void @fn_emit(ptr @.str693) %t16 = load ptr, ptr %t7 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str675) - call void @fn_emit(ptr @.str676) + call void @fn_emit(ptr @.str694) + call void @fn_emit(ptr @.str695) %t17 = load ptr, ptr %t14 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str677) + call void @fn_emit(ptr @.str696) %t18 = call ptr @fn_nreg() store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str678) + call void @fn_emit(ptr @.str697) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str679) + call void @fn_emit(ptr @.str698) %t21 = load ptr, ptr %t7 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str680) - call void @fn_emit(ptr @.str681) + call void @fn_emit(ptr @.str699) + call void @fn_emit(ptr @.str700) %t22 = load ptr, ptr %t19 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str682) + call void @fn_emit(ptr @.str701) %t23 = load ptr, ptr %t7 %t24 = load ptr, ptr %t0 %t25 = call ptr @fn_val(ptr %t23, ptr %t24) @@ -12317,17 +12839,17 @@ entry: store i32 %arg_i, ptr %t1 %t2 = call ptr @fn_nreg() store ptr %t2, ptr %t3 - call void @fn_emit(ptr @.str683) + call void @fn_emit(ptr @.str702) %t4 = load ptr, ptr %t3 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str684) + call void @fn_emit(ptr @.str703) %t5 = load ptr, ptr %t0 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str685) + call void @fn_emit(ptr @.str704) %t6 = load i32, ptr %t1 %t7 = call ptr @fn_itoa(i32 %t6) call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str686) + call void @fn_emit(ptr @.str705) %t8 = load ptr, ptr %t3 store ptr %t8, ptr %retval br label %ret @@ -12358,9 +12880,9 @@ entry: %t13 = call ptr @fn_slice_field(ptr %t12, i32 1) store ptr %t13, ptr %t14 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_sconcat(ptr @.str687, ptr %t15) + %t16 = call ptr @fn_sconcat(ptr @.str706, ptr %t15) %t17 = call ptr @fn_emit_bind(ptr %t16) - %t18 = call ptr @fn_val(ptr %t17, ptr @.str688) + %t18 = call ptr @fn_val(ptr %t17, ptr @.str707) store ptr %t18, ptr %retval br label %ret ret: @@ -12428,102 +12950,102 @@ entry: %t29 = call ptr @fn_slice_field(ptr %t28, i32 0) store ptr %t29, ptr %t30 %t31 = load ptr, ptr %t24 - %t32 = call ptr @fn_sconcat(ptr @.str689, ptr %t31) + %t32 = call ptr @fn_sconcat(ptr @.str708, ptr %t31) %t33 = call ptr @fn_emit_bind(ptr %t32) store ptr %t33, ptr %t34 %t35 = load ptr, ptr %t27 - %t36 = call ptr @fn_sconcat(ptr @.str690, ptr %t35) + %t36 = call ptr @fn_sconcat(ptr @.str709, ptr %t35) %t37 = call ptr @fn_emit_bind(ptr %t36) store ptr %t37, ptr %t38 %t39 = load ptr, ptr %t34 %t40 = load ptr, ptr %t38 - %t41 = call ptr @fn_sconcat(ptr @.str692, ptr %t40) + %t41 = call ptr @fn_sconcat(ptr @.str711, ptr %t40) %t42 = call ptr @fn_sconcat(ptr %t39, ptr %t41) - %t43 = call ptr @fn_sconcat(ptr @.str691, ptr %t42) + %t43 = call ptr @fn_sconcat(ptr @.str710, ptr %t42) %t44 = call ptr @fn_emit_bind(ptr %t43) store ptr %t44, ptr %t45 - %t46 = call ptr @fn_lbl(ptr @.str693) + %t46 = call ptr @fn_lbl(ptr @.str712) store ptr %t46, ptr %t47 - %t48 = call ptr @fn_lbl(ptr @.str694) + %t48 = call ptr @fn_lbl(ptr @.str713) store ptr %t48, ptr %t49 - call void @fn_emit(ptr @.str695) + call void @fn_emit(ptr @.str714) %t50 = load ptr, ptr %t45 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str696) + call void @fn_emit(ptr @.str715) %t51 = load ptr, ptr %t47 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str697) + call void @fn_emit(ptr @.str716) %t52 = load ptr, ptr %t49 call void @fn_emit(ptr %t52) - call void @fn_emit(ptr @.str698) + call void @fn_emit(ptr @.str717) %t53 = load ptr, ptr %t47 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str699) + call void @fn_emit(ptr @.str718) %t54 = load ptr, ptr %t38 - %t55 = call ptr @fn_sconcat(ptr %t54, ptr @.str701) - %t56 = call ptr @fn_sconcat(ptr @.str700, ptr %t55) + %t55 = call ptr @fn_sconcat(ptr %t54, ptr @.str720) + %t56 = call ptr @fn_sconcat(ptr @.str719, ptr %t55) %t57 = call ptr @fn_emit_bind(ptr %t56) store ptr %t57, ptr %t58 %t59 = load ptr, ptr %t38 - %t60 = call ptr @fn_sconcat(ptr %t59, ptr @.str703) - %t61 = call ptr @fn_sconcat(ptr @.str702, ptr %t60) + %t60 = call ptr @fn_sconcat(ptr %t59, ptr @.str722) + %t61 = call ptr @fn_sconcat(ptr @.str721, ptr %t60) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 %t64 = load ptr, ptr %t63 %t65 = load ptr, ptr %t58 - %t66 = call ptr @fn_sconcat(ptr @.str705, ptr %t65) + %t66 = call ptr @fn_sconcat(ptr @.str724, ptr %t65) %t67 = call ptr @fn_sconcat(ptr %t64, ptr %t66) - %t68 = call ptr @fn_sconcat(ptr @.str704, ptr %t67) + %t68 = call ptr @fn_sconcat(ptr @.str723, ptr %t67) %t69 = call ptr @fn_emit_bind(ptr %t68) store ptr %t69, ptr %t70 %t71 = load ptr, ptr %t17 %t72 = call ptr @fn_emit_sizeof(ptr %t71) store ptr %t72, ptr %t73 %t74 = load ptr, ptr %t70 - %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str707) - %t76 = call ptr @fn_sconcat(ptr @.str706, ptr %t75) + %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str726) + %t76 = call ptr @fn_sconcat(ptr @.str725, ptr %t75) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 %t79 = load ptr, ptr %t78 %t80 = load ptr, ptr %t73 - %t81 = call ptr @fn_sconcat(ptr @.str709, ptr %t80) + %t81 = call ptr @fn_sconcat(ptr @.str728, ptr %t80) %t82 = call ptr @fn_sconcat(ptr %t79, ptr %t81) - %t83 = call ptr @fn_sconcat(ptr @.str708, ptr %t82) + %t83 = call ptr @fn_sconcat(ptr @.str727, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 %t86 = load ptr, ptr %t30 - %t87 = call ptr @fn_sconcat(ptr @.str710, ptr %t86) + %t87 = call ptr @fn_sconcat(ptr @.str729, ptr %t86) %t88 = call ptr @fn_emit_bind(ptr %t87) store ptr %t88, ptr %t89 %t90 = load ptr, ptr %t89 %t91 = load ptr, ptr %t85 - %t92 = call ptr @fn_sconcat(ptr %t91, ptr @.str713) - %t93 = call ptr @fn_sconcat(ptr @.str712, ptr %t92) + %t92 = call ptr @fn_sconcat(ptr %t91, ptr @.str732) + %t93 = call ptr @fn_sconcat(ptr @.str731, ptr %t92) %t94 = call ptr @fn_sconcat(ptr %t90, ptr %t93) - %t95 = call ptr @fn_sconcat(ptr @.str711, ptr %t94) + %t95 = call ptr @fn_sconcat(ptr @.str730, ptr %t94) %t96 = call ptr @fn_emit_bind(ptr %t95) store ptr %t96, ptr %t97 - call void @fn_emit(ptr @.str714) + call void @fn_emit(ptr @.str733) %t98 = load ptr, ptr %t97 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str715) + call void @fn_emit(ptr @.str734) %t99 = load ptr, ptr %t30 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str716) - call void @fn_emit(ptr @.str717) + call void @fn_emit(ptr @.str735) + call void @fn_emit(ptr @.str736) %t100 = load ptr, ptr %t70 call void @fn_emit(ptr %t100) - call void @fn_emit(ptr @.str718) + call void @fn_emit(ptr @.str737) %t101 = load ptr, ptr %t27 call void @fn_emit(ptr %t101) - call void @fn_emit(ptr @.str719) - call void @fn_emit(ptr @.str720) + call void @fn_emit(ptr @.str738) + call void @fn_emit(ptr @.str739) %t102 = load ptr, ptr %t49 call void @fn_emit(ptr %t102) - call void @fn_emit(ptr @.str721) + call void @fn_emit(ptr @.str740) %t103 = load ptr, ptr %t49 call void @fn_emit(ptr %t103) - call void @fn_emit(ptr @.str722) + call void @fn_emit(ptr @.str741) %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Str_Node, ptr %t104, i32 0, i32 7 %t106 = load ptr, ptr %t105 @@ -12534,49 +13056,49 @@ entry: %t111 = call ptr @fn_emit_expr(ptr %t110) store ptr %t111, ptr %t112 %t113 = load ptr, ptr %t30 - %t114 = call ptr @fn_sconcat(ptr @.str723, ptr %t113) + %t114 = call ptr @fn_sconcat(ptr @.str742, ptr %t113) %t115 = call ptr @fn_emit_bind(ptr %t114) store ptr %t115, ptr %t116 %t117 = call ptr @fn_nreg() store ptr %t117, ptr %t118 - call void @fn_emit(ptr @.str724) + call void @fn_emit(ptr @.str743) %t119 = load ptr, ptr %t118 call void @fn_emit(ptr %t119) - call void @fn_emit(ptr @.str725) + call void @fn_emit(ptr @.str744) %t120 = load ptr, ptr %t17 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str726) + call void @fn_emit(ptr @.str745) %t121 = load ptr, ptr %t116 call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str727) + call void @fn_emit(ptr @.str746) %t122 = load ptr, ptr %t34 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str728) - call void @fn_emit(ptr @.str729) + call void @fn_emit(ptr @.str747) + call void @fn_emit(ptr @.str748) %t123 = load ptr, ptr %t17 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str730) + call void @fn_emit(ptr @.str749) %t124 = load ptr, ptr %t112 %t125 = getelementptr inbounds %Str_Val, ptr %t124, i32 0, i32 0 %t126 = load ptr, ptr %t125 call void @fn_emit(ptr %t126) - call void @fn_emit(ptr @.str731) + call void @fn_emit(ptr @.str750) %t127 = load ptr, ptr %t118 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str732) + call void @fn_emit(ptr @.str751) %t128 = load ptr, ptr %t34 - %t129 = call ptr @fn_sconcat(ptr %t128, ptr @.str734) - %t130 = call ptr @fn_sconcat(ptr @.str733, ptr %t129) + %t129 = call ptr @fn_sconcat(ptr %t128, ptr @.str753) + %t130 = call ptr @fn_sconcat(ptr @.str752, ptr %t129) %t131 = call ptr @fn_emit_bind(ptr %t130) store ptr %t131, ptr %t132 - call void @fn_emit(ptr @.str735) + call void @fn_emit(ptr @.str754) %t133 = load ptr, ptr %t132 call void @fn_emit(ptr %t133) - call void @fn_emit(ptr @.str736) + call void @fn_emit(ptr @.str755) %t134 = load ptr, ptr %t24 call void @fn_emit(ptr %t134) - call void @fn_emit(ptr @.str737) - %t135 = call ptr @fn_val(ptr @.str738, ptr @.str739) + call void @fn_emit(ptr @.str756) + %t135 = call ptr @fn_val(ptr @.str757, ptr @.str758) store ptr %t135, ptr %retval br label %ret ret: @@ -12595,9 +13117,9 @@ entry: %t2 = load ptr, ptr %t1 %t3 = call ptr @fn_llty(ptr %t2) %t4 = load ptr, ptr %t0 - %t5 = call ptr @fn_sconcat(ptr @.str741, ptr %t4) + %t5 = call ptr @fn_sconcat(ptr @.str760, ptr %t4) %t6 = call ptr @fn_sconcat(ptr %t3, ptr %t5) - %t7 = call ptr @fn_sconcat(ptr @.str740, ptr %t6) + %t7 = call ptr @fn_sconcat(ptr @.str759, ptr %t6) %t8 = call ptr @fn_emit_bind(ptr %t7) store ptr %t8, ptr %t9 %t10 = load ptr, ptr %t9 @@ -12624,7 +13146,7 @@ entry: %t49 = alloca ptr %t54 = alloca ptr store ptr %arg_e, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str742) + %t1 = call ptr @fn_emit_alloca(ptr @.str761) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Str_Node, ptr %t3, i32 0, i32 4 @@ -12634,60 +13156,60 @@ entry: %t8 = load ptr, ptr %t7 %t9 = getelementptr inbounds %Str_Val, ptr %t8, i32 0, i32 0 %t10 = load ptr, ptr %t9 - %t11 = call ptr @fn_sconcat(ptr %t10, ptr @.str744) - %t12 = call ptr @fn_sconcat(ptr @.str743, ptr %t11) + %t11 = call ptr @fn_sconcat(ptr %t10, ptr @.str763) + %t12 = call ptr @fn_sconcat(ptr @.str762, ptr %t11) %t13 = call ptr @fn_emit_bind(ptr %t12) store ptr %t13, ptr %t14 %t15 = load ptr, ptr %t14 - %t16 = call ptr @fn_sconcat(ptr %t15, ptr @.str746) - %t17 = call ptr @fn_sconcat(ptr @.str745, ptr %t16) + %t16 = call ptr @fn_sconcat(ptr %t15, ptr @.str765) + %t17 = call ptr @fn_sconcat(ptr @.str764, ptr %t16) %t18 = call ptr @fn_emit_bind(ptr %t17) store ptr %t18, ptr %t19 - call void @fn_emit(ptr @.str747) + call void @fn_emit(ptr @.str766) %t20 = load ptr, ptr %t19 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str748) + call void @fn_emit(ptr @.str767) %t21 = load ptr, ptr %t2 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str749) - %t22 = call ptr @fn_lbl(ptr @.str750) + call void @fn_emit(ptr @.str768) + %t22 = call ptr @fn_lbl(ptr @.str769) store ptr %t22, ptr %t23 - %t24 = call ptr @fn_lbl(ptr @.str751) + %t24 = call ptr @fn_lbl(ptr @.str770) store ptr %t24, ptr %t25 %t26 = load ptr, ptr %t0 %t27 = getelementptr inbounds %Str_Node, ptr %t26, i32 0, i32 1 %t28 = load ptr, ptr %t27 - %t29 = call i32 @fn_streq(ptr %t28, ptr @.str752) + %t29 = call i32 @fn_streq(ptr %t28, ptr @.str771) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then0, label %else1 then0: - call void @fn_emit(ptr @.str753) + call void @fn_emit(ptr @.str772) %t31 = load ptr, ptr %t14 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str754) + call void @fn_emit(ptr @.str773) %t32 = load ptr, ptr %t23 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str755) + call void @fn_emit(ptr @.str774) %t33 = load ptr, ptr %t25 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str756) + call void @fn_emit(ptr @.str775) br label %ifend2 else1: - call void @fn_emit(ptr @.str757) + call void @fn_emit(ptr @.str776) %t34 = load ptr, ptr %t14 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str758) + call void @fn_emit(ptr @.str777) %t35 = load ptr, ptr %t25 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str759) + call void @fn_emit(ptr @.str778) %t36 = load ptr, ptr %t23 call void @fn_emit(ptr %t36) - call void @fn_emit(ptr @.str760) + call void @fn_emit(ptr @.str779) br label %ifend2 ifend2: %t37 = load ptr, ptr %t23 call void @fn_emit(ptr %t37) - call void @fn_emit(ptr @.str761) + call void @fn_emit(ptr @.str780) %t38 = load ptr, ptr %t0 %t39 = getelementptr inbounds %Str_Node, ptr %t38, i32 0, i32 5 %t40 = load ptr, ptr %t39 @@ -12696,33 +13218,33 @@ ifend2: %t43 = load ptr, ptr %t42 %t44 = getelementptr inbounds %Str_Val, ptr %t43, i32 0, i32 0 %t45 = load ptr, ptr %t44 - %t46 = call ptr @fn_sconcat(ptr %t45, ptr @.str763) - %t47 = call ptr @fn_sconcat(ptr @.str762, ptr %t46) + %t46 = call ptr @fn_sconcat(ptr %t45, ptr @.str782) + %t47 = call ptr @fn_sconcat(ptr @.str781, ptr %t46) %t48 = call ptr @fn_emit_bind(ptr %t47) store ptr %t48, ptr %t49 %t50 = load ptr, ptr %t49 - %t51 = call ptr @fn_sconcat(ptr %t50, ptr @.str765) - %t52 = call ptr @fn_sconcat(ptr @.str764, ptr %t51) + %t51 = call ptr @fn_sconcat(ptr %t50, ptr @.str784) + %t52 = call ptr @fn_sconcat(ptr @.str783, ptr %t51) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - call void @fn_emit(ptr @.str766) + call void @fn_emit(ptr @.str785) %t55 = load ptr, ptr %t54 call void @fn_emit(ptr %t55) - call void @fn_emit(ptr @.str767) + call void @fn_emit(ptr @.str786) %t56 = load ptr, ptr %t2 call void @fn_emit(ptr %t56) - call void @fn_emit(ptr @.str768) - call void @fn_emit(ptr @.str769) + call void @fn_emit(ptr @.str787) + call void @fn_emit(ptr @.str788) %t57 = load ptr, ptr %t25 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str770) + call void @fn_emit(ptr @.str789) %t58 = load ptr, ptr %t25 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str771) + call void @fn_emit(ptr @.str790) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_sconcat(ptr @.str772, ptr %t59) + %t60 = call ptr @fn_sconcat(ptr @.str791, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) - %t62 = call ptr @fn_val(ptr %t61, ptr @.str773) + %t62 = call ptr @fn_val(ptr %t61, ptr @.str792) store ptr %t62, ptr %retval br label %ret ret: @@ -12736,46 +13258,46 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str774) + %t2 = call i32 @fn_streq(ptr %t1, ptr @.str793) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str775, ptr %retval + store ptr @.str794, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str776) + %t5 = call i32 @fn_streq(ptr %t4, ptr @.str795) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str777, ptr %retval + store ptr @.str796, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str778) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str797) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str779, ptr %retval + store ptr @.str798, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str780) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str799) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str781, ptr %retval + store ptr @.str800, ptr %retval br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str782) + %t14 = call i32 @fn_streq(ptr %t13, ptr @.str801) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: - store ptr @.str783, ptr %retval + store ptr @.str802, ptr %retval br label %ret ifend14: - store ptr @.str784, ptr %retval + store ptr @.str803, ptr %retval br label %ret ret: %t16 = load ptr, ptr %retval @@ -12793,14 +13315,14 @@ entry: %t5 = alloca i32 store ptr %arg_op, ptr %t0 %t6 = load ptr, ptr %t0 - %t7 = call i32 @fn_streq(ptr %t6, ptr @.str785) + %t7 = call i32 @fn_streq(ptr %t6, ptr @.str804) %t8 = icmp ne i32 %t7, 0 %t9 = zext i1 %t8 to i32 store i32 %t9, ptr %t5 br i1 %t8, label %scend1, label %sc0 sc0: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str786) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str805) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t5 @@ -12813,7 +13335,7 @@ scend1: br i1 %t15, label %scend3, label %sc2 sc2: %t17 = load ptr, ptr %t0 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str787) + %t18 = call i32 @fn_streq(ptr %t17, ptr @.str806) %t19 = icmp ne i32 %t18, 0 %t20 = zext i1 %t19 to i32 store i32 %t20, ptr %t4 @@ -12826,7 +13348,7 @@ scend3: br i1 %t22, label %scend5, label %sc4 sc4: %t24 = load ptr, ptr %t0 - %t25 = call i32 @fn_streq(ptr %t24, ptr @.str788) + %t25 = call i32 @fn_streq(ptr %t24, ptr @.str807) %t26 = icmp ne i32 %t25, 0 %t27 = zext i1 %t26 to i32 store i32 %t27, ptr %t3 @@ -12839,7 +13361,7 @@ scend5: br i1 %t29, label %scend7, label %sc6 sc6: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str789) + %t32 = call i32 @fn_streq(ptr %t31, ptr @.str808) %t33 = icmp ne i32 %t32, 0 %t34 = zext i1 %t33 to i32 store i32 %t34, ptr %t2 @@ -12852,7 +13374,7 @@ scend7: br i1 %t36, label %scend9, label %sc8 sc8: %t38 = load ptr, ptr %t0 - %t39 = call i32 @fn_streq(ptr %t38, ptr @.str790) + %t39 = call i32 @fn_streq(ptr %t38, ptr @.str809) %t40 = icmp ne i32 %t39, 0 %t41 = zext i1 %t40 to i32 store i32 %t41, ptr %t1 @@ -12872,38 +13394,38 @@ entry: %t0 = alloca ptr store ptr %arg_op, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str791) + %t2 = call i32 @fn_streq(ptr %t1, ptr @.str810) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: - store ptr @.str792, ptr %retval + store ptr @.str811, ptr %retval br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str793) + %t5 = call i32 @fn_streq(ptr %t4, ptr @.str812) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: - store ptr @.str794, ptr %retval + store ptr @.str813, ptr %retval br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str795) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str814) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: - store ptr @.str796, ptr %retval + store ptr @.str815, ptr %retval br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str797) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str816) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: - store ptr @.str798, ptr %retval + store ptr @.str817, ptr %retval br label %ret ifend11: - store ptr @.str799, ptr %retval + store ptr @.str818, ptr %retval br label %ret ret: %t13 = load ptr, ptr %retval @@ -12918,7 +13440,7 @@ entry: %t1 = load ptr, ptr %t0 %t2 = getelementptr inbounds %Str_Val, ptr %t1, i32 0, i32 1 %t3 = load ptr, ptr %t2 - %t4 = call i32 @fn_streq(ptr %t3, ptr @.str800) + %t4 = call i32 @fn_streq(ptr %t3, ptr @.str819) %t5 = icmp ne i32 %t4, 0 br i1 %t5, label %then0, label %ifend2 then0: @@ -12931,8 +13453,8 @@ ifend2: %t9 = load ptr, ptr %t0 %t10 = getelementptr inbounds %Str_Val, ptr %t9, i32 0, i32 0 %t11 = load ptr, ptr %t10 - %t12 = call ptr @fn_sconcat(ptr %t11, ptr @.str802) - %t13 = call ptr @fn_sconcat(ptr @.str801, ptr %t12) + %t12 = call ptr @fn_sconcat(ptr %t11, ptr @.str821) + %t13 = call ptr @fn_sconcat(ptr @.str820, ptr %t12) %t14 = call ptr @fn_emit_bind(ptr %t13) store ptr %t14, ptr %retval br label %ret @@ -12969,7 +13491,7 @@ entry: %t2 = load ptr, ptr %t0 %t3 = getelementptr inbounds %Str_Node, ptr %t2, i32 0, i32 1 %t4 = load ptr, ptr %t3 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str803) + %t5 = call i32 @fn_streq(ptr %t4, ptr @.str822) %t6 = icmp ne i32 %t5, 0 %t7 = zext i1 %t6 to i32 store i32 %t7, ptr %t1 @@ -12978,7 +13500,7 @@ sc0: %t8 = load ptr, ptr %t0 %t9 = getelementptr inbounds %Str_Node, ptr %t8, i32 0, i32 1 %t10 = load ptr, ptr %t9 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str804) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str823) %t12 = icmp ne i32 %t11, 0 %t13 = zext i1 %t12 to i32 store i32 %t13, ptr %t1 @@ -13006,7 +13528,7 @@ ifend4: %t29 = load ptr, ptr %t22 %t30 = getelementptr inbounds %Str_Val, ptr %t29, i32 0, i32 1 %t31 = load ptr, ptr %t30 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str805) + %t32 = call i32 @fn_streq(ptr %t31, ptr @.str824) %t33 = icmp ne i32 %t32, 0 %t34 = zext i1 %t33 to i32 store i32 %t34, ptr %t28 @@ -13015,7 +13537,7 @@ sc5: %t35 = load ptr, ptr %t27 %t36 = getelementptr inbounds %Str_Val, ptr %t35, i32 0, i32 1 %t37 = load ptr, ptr %t36 - %t38 = call i32 @fn_streq(ptr %t37, ptr @.str806) + %t38 = call i32 @fn_streq(ptr %t37, ptr @.str825) %t39 = icmp ne i32 %t38, 0 %t40 = zext i1 %t39 to i32 store i32 %t40, ptr %t28 @@ -13056,18 +13578,18 @@ ifend12: %t65 = call ptr @fn_cmp_code(ptr %t64) %t66 = load ptr, ptr %t51 %t67 = load ptr, ptr %t55 - %t68 = call ptr @fn_sconcat(ptr @.str809, ptr %t67) + %t68 = call ptr @fn_sconcat(ptr @.str828, ptr %t67) %t69 = call ptr @fn_sconcat(ptr %t66, ptr %t68) - %t70 = call ptr @fn_sconcat(ptr @.str808, ptr %t69) + %t70 = call ptr @fn_sconcat(ptr @.str827, ptr %t69) %t71 = call ptr @fn_sconcat(ptr %t65, ptr %t70) - %t72 = call ptr @fn_sconcat(ptr @.str807, ptr %t71) + %t72 = call ptr @fn_sconcat(ptr @.str826, ptr %t71) %t73 = call ptr @fn_emit_bind(ptr %t72) store ptr %t73, ptr %t74 %t75 = load ptr, ptr %t74 - %t76 = call ptr @fn_sconcat(ptr %t75, ptr @.str811) - %t77 = call ptr @fn_sconcat(ptr @.str810, ptr %t76) + %t76 = call ptr @fn_sconcat(ptr %t75, ptr @.str830) + %t77 = call ptr @fn_sconcat(ptr @.str829, ptr %t76) %t78 = call ptr @fn_emit_bind(ptr %t77) - %t79 = call ptr @fn_val(ptr %t78, ptr @.str812) + %t79 = call ptr @fn_val(ptr %t78, ptr @.str831) store ptr %t79, ptr %retval br label %ret ifend9: @@ -13084,74 +13606,74 @@ then13: %t88 = load ptr, ptr %t0 %t89 = getelementptr inbounds %Str_Node, ptr %t88, i32 0, i32 1 %t90 = load ptr, ptr %t89 - %t91 = call i32 @fn_streq(ptr %t90, ptr @.str813) + %t91 = call i32 @fn_streq(ptr %t90, ptr @.str832) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %then16, label %ifend18 then16: %t93 = load ptr, ptr %t84 - %t94 = call ptr @fn_sconcat(ptr %t93, ptr @.str815) - %t95 = call ptr @fn_sconcat(ptr @.str814, ptr %t94) + %t94 = call ptr @fn_sconcat(ptr %t93, ptr @.str834) + %t95 = call ptr @fn_sconcat(ptr @.str833, ptr %t94) %t96 = call ptr @fn_emit_bind(ptr %t95) store ptr %t96, ptr %t97 %t98 = load ptr, ptr %t87 - %t99 = call ptr @fn_sconcat(ptr %t98, ptr @.str817) - %t100 = call ptr @fn_sconcat(ptr @.str816, ptr %t99) + %t99 = call ptr @fn_sconcat(ptr %t98, ptr @.str836) + %t100 = call ptr @fn_sconcat(ptr @.str835, ptr %t99) %t101 = call ptr @fn_emit_bind(ptr %t100) store ptr %t101, ptr %t102 %t103 = load ptr, ptr %t97 %t104 = load ptr, ptr %t102 - %t105 = call ptr @fn_sconcat(ptr @.str819, ptr %t104) + %t105 = call ptr @fn_sconcat(ptr @.str838, ptr %t104) %t106 = call ptr @fn_sconcat(ptr %t103, ptr %t105) - %t107 = call ptr @fn_sconcat(ptr @.str818, ptr %t106) + %t107 = call ptr @fn_sconcat(ptr @.str837, ptr %t106) %t108 = call ptr @fn_emit_bind(ptr %t107) store ptr %t108, ptr %t109 %t110 = load ptr, ptr %t109 - %t111 = call ptr @fn_sconcat(ptr %t110, ptr @.str821) - %t112 = call ptr @fn_sconcat(ptr @.str820, ptr %t111) + %t111 = call ptr @fn_sconcat(ptr %t110, ptr @.str840) + %t112 = call ptr @fn_sconcat(ptr @.str839, ptr %t111) %t113 = call ptr @fn_emit_bind(ptr %t112) store ptr %t113, ptr %t114 %t115 = load ptr, ptr %t114 - %t116 = call ptr @fn_sconcat(ptr %t115, ptr @.str823) - %t117 = call ptr @fn_sconcat(ptr @.str822, ptr %t116) + %t116 = call ptr @fn_sconcat(ptr %t115, ptr @.str842) + %t117 = call ptr @fn_sconcat(ptr @.str841, ptr %t116) %t118 = call ptr @fn_emit_bind(ptr %t117) - %t119 = call ptr @fn_val(ptr %t118, ptr @.str824) + %t119 = call ptr @fn_val(ptr %t118, ptr @.str843) store ptr %t119, ptr %retval br label %ret ifend18: %t120 = load ptr, ptr %t0 %t121 = getelementptr inbounds %Str_Node, ptr %t120, i32 0, i32 1 %t122 = load ptr, ptr %t121 - %t123 = call i32 @fn_streq(ptr %t122, ptr @.str825) + %t123 = call i32 @fn_streq(ptr %t122, ptr @.str844) %t124 = icmp ne i32 %t123, 0 br i1 %t124, label %then19, label %ifend21 then19: %t125 = load ptr, ptr %t84 - %t126 = call ptr @fn_sconcat(ptr %t125, ptr @.str827) - %t127 = call ptr @fn_sconcat(ptr @.str826, ptr %t126) + %t126 = call ptr @fn_sconcat(ptr %t125, ptr @.str846) + %t127 = call ptr @fn_sconcat(ptr @.str845, ptr %t126) %t128 = call ptr @fn_emit_bind(ptr %t127) store ptr %t128, ptr %t129 %t130 = load ptr, ptr %t129 - %t131 = call ptr @fn_sconcat(ptr %t130, ptr @.str829) - %t132 = call ptr @fn_sconcat(ptr @.str828, ptr %t131) + %t131 = call ptr @fn_sconcat(ptr %t130, ptr @.str848) + %t132 = call ptr @fn_sconcat(ptr @.str847, ptr %t131) %t133 = call ptr @fn_emit_bind(ptr %t132) store ptr %t133, ptr %t134 %t135 = load ptr, ptr %t87 - %t136 = call ptr @fn_sconcat(ptr %t135, ptr @.str831) - %t137 = call ptr @fn_sconcat(ptr @.str830, ptr %t136) + %t136 = call ptr @fn_sconcat(ptr %t135, ptr @.str850) + %t137 = call ptr @fn_sconcat(ptr @.str849, ptr %t136) %t138 = call ptr @fn_emit_bind(ptr %t137) store ptr %t138, ptr %t139 %t140 = load ptr, ptr %t134 %t141 = load ptr, ptr %t139 - %t142 = call ptr @fn_sconcat(ptr @.str833, ptr %t141) + %t142 = call ptr @fn_sconcat(ptr @.str852, ptr %t141) %t143 = call ptr @fn_sconcat(ptr %t140, ptr %t142) - %t144 = call ptr @fn_sconcat(ptr @.str832, ptr %t143) + %t144 = call ptr @fn_sconcat(ptr @.str851, ptr %t143) %t145 = call ptr @fn_emit_bind(ptr %t144) store ptr %t145, ptr %t146 %t147 = load ptr, ptr %t146 - %t148 = call ptr @fn_sconcat(ptr %t147, ptr @.str835) - %t149 = call ptr @fn_sconcat(ptr @.str834, ptr %t148) + %t148 = call ptr @fn_sconcat(ptr %t147, ptr @.str854) + %t149 = call ptr @fn_sconcat(ptr @.str853, ptr %t148) %t150 = call ptr @fn_emit_bind(ptr %t149) - %t151 = call ptr @fn_val(ptr %t150, ptr @.str836) + %t151 = call ptr @fn_val(ptr %t150, ptr @.str855) store ptr %t151, ptr %retval br label %ret ifend21: @@ -13161,14 +13683,14 @@ ifend21: %t155 = call ptr @fn_arith_code(ptr %t154) %t156 = load ptr, ptr %t84 %t157 = load ptr, ptr %t87 - %t158 = call ptr @fn_sconcat(ptr @.str838, ptr %t157) + %t158 = call ptr @fn_sconcat(ptr @.str857, ptr %t157) %t159 = call ptr @fn_sconcat(ptr %t156, ptr %t158) - %t160 = call ptr @fn_sconcat(ptr @.str837, ptr %t159) + %t160 = call ptr @fn_sconcat(ptr @.str856, ptr %t159) %t161 = call ptr @fn_sconcat(ptr %t155, ptr %t160) %t162 = call ptr @fn_emit_bind(ptr %t161) store ptr %t162, ptr %t163 %t164 = load ptr, ptr %t163 - %t165 = call ptr @fn_val(ptr %t164, ptr @.str839) + %t165 = call ptr @fn_val(ptr %t164, ptr @.str858) store ptr %t165, ptr %retval br label %ret ifend15: @@ -13182,14 +13704,14 @@ ifend15: %t173 = load ptr, ptr %t27 %t174 = getelementptr inbounds %Str_Val, ptr %t173, i32 0, i32 0 %t175 = load ptr, ptr %t174 - %t176 = call ptr @fn_sconcat(ptr @.str841, ptr %t175) + %t176 = call ptr @fn_sconcat(ptr @.str860, ptr %t175) %t177 = call ptr @fn_sconcat(ptr %t172, ptr %t176) - %t178 = call ptr @fn_sconcat(ptr @.str840, ptr %t177) + %t178 = call ptr @fn_sconcat(ptr @.str859, ptr %t177) %t179 = call ptr @fn_sconcat(ptr %t169, ptr %t178) %t180 = call ptr @fn_emit_bind(ptr %t179) store ptr %t180, ptr %t181 %t182 = load ptr, ptr %t181 - %t183 = call ptr @fn_val(ptr %t182, ptr @.str842) + %t183 = call ptr @fn_val(ptr %t182, ptr @.str861) store ptr %t183, ptr %retval br label %ret ret: @@ -13221,7 +13743,7 @@ entry: %t5 = load ptr, ptr %t4 store ptr %t5, ptr %t6 %t7 = load ptr, ptr %t6 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str843) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str862) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then0, label %ifend2 then0: @@ -13231,7 +13753,7 @@ then0: %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then3, label %ifend5 then3: - %t14 = call ptr @fn_val(ptr @.str844, ptr @.str845) + %t14 = call ptr @fn_val(ptr @.str863, ptr @.str864) store ptr %t14, ptr %retval br label %ret ifend5: @@ -13242,64 +13764,64 @@ ifend5: %t19 = sub i32 %t18, 1 %t20 = getelementptr inbounds ptr, ptr %t17, i32 %t19 %t21 = load ptr, ptr %t20 - %t22 = call ptr @fn_sconcat(ptr @.str846, ptr %t21) + %t22 = call ptr @fn_sconcat(ptr @.str865, ptr %t21) %t23 = call ptr @fn_emit_bind(ptr %t22) - %t24 = call ptr @fn_val(ptr %t23, ptr @.str847) + %t24 = call ptr @fn_val(ptr %t23, ptr @.str866) store ptr %t24, ptr %retval br label %ret ifend2: %t25 = load ptr, ptr %t6 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str848) + %t26 = call i32 @fn_streq(ptr %t25, ptr @.str867) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then6, label %ifend8 then6: - %t28 = call ptr @fn_emit_bind(ptr @.str849) - %t29 = call ptr @fn_val(ptr %t28, ptr @.str850) + %t28 = call ptr @fn_emit_bind(ptr @.str868) + %t29 = call ptr @fn_val(ptr %t28, ptr @.str869) store ptr %t29, ptr %retval br label %ret ifend8: %t30 = load ptr, ptr %t6 - %t31 = call i32 @fn_streq(ptr %t30, ptr @.str851) + %t31 = call i32 @fn_streq(ptr %t30, ptr @.str870) %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then9, label %ifend11 then9: - call void @fn_emit(ptr @.str852) - %t33 = call ptr @fn_val(ptr @.str853, ptr @.str854) + call void @fn_emit(ptr @.str871) + %t33 = call ptr @fn_val(ptr @.str872, ptr @.str873) store ptr %t33, ptr %retval br label %ret ifend11: %t34 = load ptr, ptr %t6 - %t35 = call i32 @fn_streq(ptr %t34, ptr @.str855) + %t35 = call i32 @fn_streq(ptr %t34, ptr @.str874) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str856) - %t37 = call ptr @fn_val(ptr @.str857, ptr @.str858) + call void @fn_emit(ptr @.str875) + %t37 = call ptr @fn_val(ptr @.str876, ptr @.str877) store ptr %t37, ptr %retval br label %ret ifend14: %t38 = load ptr, ptr %t6 - %t39 = call i32 @fn_streq(ptr %t38, ptr @.str859) + %t39 = call i32 @fn_streq(ptr %t38, ptr @.str878) %t40 = icmp ne i32 %t39, 0 br i1 %t40, label %then15, label %ifend17 then15: - %t41 = call ptr @fn_emit_bind(ptr @.str860) - %t42 = call ptr @fn_val(ptr %t41, ptr @.str861) + %t41 = call ptr @fn_emit_bind(ptr @.str879) + %t42 = call ptr @fn_val(ptr %t41, ptr @.str880) store ptr %t42, ptr %retval br label %ret ifend17: %t43 = load ptr, ptr %t6 - %t44 = call i32 @fn_streq(ptr %t43, ptr @.str862) + %t44 = call i32 @fn_streq(ptr %t43, ptr @.str881) %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str863) - %t46 = call ptr @fn_val(ptr @.str864, ptr @.str865) + call void @fn_emit(ptr @.str882) + %t46 = call ptr @fn_val(ptr @.str883, ptr @.str884) store ptr %t46, ptr %retval br label %ret ifend20: %t47 = load ptr, ptr %t6 - %t48 = call i32 @fn_streq(ptr %t47, ptr @.str866) + %t48 = call i32 @fn_streq(ptr %t47, ptr @.str885) %t49 = icmp ne i32 %t48, 0 br i1 %t49, label %then21, label %ifend23 then21: @@ -13309,7 +13831,7 @@ then21: br label %ret ifend23: %t52 = load ptr, ptr %t6 - %t53 = call i32 @fn_streq(ptr %t52, ptr @.str867) + %t53 = call i32 @fn_streq(ptr %t52, ptr @.str886) %t54 = icmp ne i32 %t53, 0 br i1 %t54, label %then24, label %ifend26 then24: @@ -13319,7 +13841,7 @@ then24: br label %ret ifend26: %t57 = load ptr, ptr %t6 - %t58 = call i32 @fn_streq(ptr %t57, ptr @.str868) + %t58 = call i32 @fn_streq(ptr %t57, ptr @.str887) %t59 = icmp ne i32 %t58, 0 br i1 %t59, label %then27, label %ifend29 then27: @@ -13335,15 +13857,15 @@ then27: %t69 = load ptr, ptr %t68 %t70 = getelementptr inbounds %Str_Val, ptr %t69, i32 0, i32 0 %t71 = load ptr, ptr %t70 - %t72 = call ptr @fn_sconcat(ptr %t71, ptr @.str870) - %t73 = call ptr @fn_sconcat(ptr @.str869, ptr %t72) + %t72 = call ptr @fn_sconcat(ptr %t71, ptr @.str889) + %t73 = call ptr @fn_sconcat(ptr @.str888, ptr %t72) %t74 = call ptr @fn_emit_bind(ptr %t73) - %t75 = call ptr @fn_val(ptr %t74, ptr @.str871) + %t75 = call ptr @fn_val(ptr %t74, ptr @.str890) store ptr %t75, ptr %retval br label %ret ifend29: %t76 = load ptr, ptr %t6 - %t77 = call i32 @fn_streq(ptr %t76, ptr @.str872) + %t77 = call i32 @fn_streq(ptr %t76, ptr @.str891) %t78 = icmp ne i32 %t77, 0 br i1 %t78, label %then30, label %ifend32 then30: @@ -13359,10 +13881,10 @@ then30: %t88 = load ptr, ptr %t87 %t89 = getelementptr inbounds %Str_Val, ptr %t88, i32 0, i32 0 %t90 = load ptr, ptr %t89 - %t91 = call ptr @fn_sconcat(ptr %t90, ptr @.str874) - %t92 = call ptr @fn_sconcat(ptr @.str873, ptr %t91) + %t91 = call ptr @fn_sconcat(ptr %t90, ptr @.str893) + %t92 = call ptr @fn_sconcat(ptr @.str892, ptr %t91) %t93 = call ptr @fn_emit_bind(ptr %t92) - %t94 = call ptr @fn_val(ptr %t93, ptr @.str875) + %t94 = call ptr @fn_val(ptr %t93, ptr @.str894) store ptr %t94, ptr %retval br label %ret ifend32: @@ -13411,7 +13933,7 @@ ifend41: br i1 %t121, label %then42, label %ifend44 then42: %t122 = load ptr, ptr %t6 - %t123 = call ptr @fn_sconcat(ptr @.str876, ptr %t122) + %t123 = call ptr @fn_sconcat(ptr @.str895, ptr %t122) store ptr %t123, ptr %t124 %t125 = load ptr, ptr %t124 %t126 = call ptr @fn_find_fn(ptr %t125) @@ -13423,7 +13945,7 @@ then42: br i1 %t130, label %then45, label %ifend47 then45: %t131 = load ptr, ptr %t6 - %t132 = call ptr @fn_sconcat(ptr @.str877, ptr %t131) + %t132 = call ptr @fn_sconcat(ptr @.str896, ptr %t131) call void @fn_perr(ptr %t132) br label %ifend47 ifend47: @@ -13545,10 +14067,10 @@ wend50: %t216 = load ptr, ptr %t215 %t217 = call ptr @fn_llty(ptr %t216) store ptr %t217, ptr %t218 - call void @fn_emit(ptr @.str878) - store ptr @.str879, ptr %t219 + call void @fn_emit(ptr @.str897) + store ptr @.str898, ptr %t219 %t220 = load ptr, ptr %t218 - %t221 = call i32 @fn_streq(ptr %t220, ptr @.str880) + %t221 = call i32 @fn_streq(ptr %t220, ptr @.str899) %t222 = icmp eq i32 %t221, 0 %t223 = zext i1 %t222 to i32 %t224 = icmp ne i32 %t223, 0 @@ -13558,16 +14080,16 @@ then55: store ptr %t225, ptr %t219 %t226 = load ptr, ptr %t219 call void @fn_emit(ptr %t226) - call void @fn_emit(ptr @.str881) + call void @fn_emit(ptr @.str900) br label %ifend57 ifend57: - call void @fn_emit(ptr @.str882) + call void @fn_emit(ptr @.str901) %t227 = load ptr, ptr %t218 call void @fn_emit(ptr %t227) - call void @fn_emit(ptr @.str883) + call void @fn_emit(ptr @.str902) %t228 = load ptr, ptr %t117 call void @fn_emit(ptr %t228) - call void @fn_emit(ptr @.str884) + call void @fn_emit(ptr @.str903) store i32 0, ptr %t148 br label %wcond58 wcond58: @@ -13586,7 +14108,7 @@ wbody59: %t239 = icmp ne i32 %t238, 0 br i1 %t239, label %then61, label %ifend63 then61: - call void @fn_emit(ptr @.str885) + call void @fn_emit(ptr @.str904) br label %ifend63 ifend63: %t240 = load ptr, ptr %t147 @@ -13597,7 +14119,7 @@ ifend63: %t245 = load ptr, ptr %t244 %t246 = call ptr @fn_llty(ptr %t245) call void @fn_emit(ptr %t246) - call void @fn_emit(ptr @.str886) + call void @fn_emit(ptr @.str905) %t247 = load ptr, ptr %t140 %t248 = getelementptr inbounds %LSlice, ptr %t247, i32 0, i32 0 %t249 = load ptr, ptr %t248 @@ -13610,7 +14132,7 @@ ifend63: store i32 %t254, ptr %t148 br label %wcond58 wend60: - call void @fn_emit(ptr @.str887) + call void @fn_emit(ptr @.str906) %t255 = load ptr, ptr %t219 %t256 = load ptr, ptr %t115 %t257 = getelementptr inbounds %Str_Node, ptr %t256, i32 0, i32 3 @@ -13642,7 +14164,7 @@ entry: %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - %t5 = call ptr @fn_val(ptr @.str888, ptr @.str889) + %t5 = call ptr @fn_val(ptr @.str907, ptr @.str908) store ptr %t5, ptr %retval br label %ret ifend2: @@ -13658,7 +14180,7 @@ then3: %t13 = getelementptr inbounds %Str_Node, ptr %t12, i32 0, i32 2 %t14 = load i32, ptr %t13 %t15 = call ptr @fn_itoa(i32 %t14) - %t16 = call ptr @fn_val(ptr %t15, ptr @.str890) + %t16 = call ptr @fn_val(ptr %t15, ptr @.str909) store ptr %t16, ptr %retval br label %ret ifend5: @@ -13674,7 +14196,7 @@ then6: %t24 = getelementptr inbounds %Str_Node, ptr %t23, i32 0, i32 2 %t25 = load i32, ptr %t24 %t26 = call ptr @fn_itoa(i32 %t25) - %t27 = call ptr @fn_val(ptr %t26, ptr @.str891) + %t27 = call ptr @fn_val(ptr %t26, ptr @.str910) store ptr %t27, ptr %retval br label %ret ifend8: @@ -13690,7 +14212,7 @@ then9: %t35 = getelementptr inbounds %Str_Node, ptr %t34, i32 0, i32 2 %t36 = load i32, ptr %t35 %t37 = call ptr @fn_itoa(i32 %t36) - %t38 = call ptr @fn_val(ptr %t37, ptr @.str892) + %t38 = call ptr @fn_val(ptr %t37, ptr @.str911) store ptr %t38, ptr %retval br label %ret ifend11: @@ -13706,7 +14228,7 @@ then12: %t46 = getelementptr inbounds %Str_Node, ptr %t45, i32 0, i32 1 %t47 = load ptr, ptr %t46 %t48 = call ptr @fn_emit_str_const(ptr %t47) - %t49 = call ptr @fn_val(ptr %t48, ptr @.str893) + %t49 = call ptr @fn_val(ptr %t48, ptr @.str912) store ptr %t49, ptr %retval br label %ret ifend14: @@ -13801,7 +14323,7 @@ then30: %t117 = getelementptr inbounds %Str_Node, ptr %t116, i32 0, i32 2 %t118 = load i32, ptr %t117 %t119 = call ptr @fn_itoa(i32 %t118) - %t120 = call ptr @fn_val(ptr %t119, ptr @.str894) + %t120 = call ptr @fn_val(ptr %t119, ptr @.str913) store ptr %t120, ptr %retval br label %ret ifend32: @@ -13812,9 +14334,9 @@ ifend32: %t125 = load ptr, ptr %t0 %t126 = getelementptr inbounds %Str_Node, ptr %t125, i32 0, i32 1 %t127 = load ptr, ptr %t126 - %t128 = call ptr @fn_sconcat(ptr @.str896, ptr %t127) + %t128 = call ptr @fn_sconcat(ptr @.str915, ptr %t127) %t129 = call ptr @fn_sconcat(ptr %t124, ptr %t128) - %t130 = call ptr @fn_sconcat(ptr @.str895, ptr %t129) + %t130 = call ptr @fn_sconcat(ptr @.str914, ptr %t129) %t131 = call ptr @fn_emit_bind(ptr %t130) store ptr %t131, ptr %t132 %t133 = load ptr, ptr %t132 @@ -13837,14 +14359,14 @@ then33: %t145 = load ptr, ptr %t144 %t146 = call i32 @fn_ui_index_of(ptr %t145) %t147 = call ptr @fn_itoa(i32 %t146) - %t148 = call ptr @fn_val(ptr %t147, ptr @.str897) + %t148 = call ptr @fn_val(ptr %t147, ptr @.str916) store ptr %t148, ptr %retval br label %ret ifend35: %t149 = load ptr, ptr %t0 %t150 = getelementptr inbounds %Str_Node, ptr %t149, i32 0, i32 1 %t151 = load ptr, ptr %t150 - %t152 = call ptr @fn_sconcat(ptr @.str898, ptr %t151) + %t152 = call ptr @fn_sconcat(ptr @.str917, ptr %t151) call void @fn_perr(ptr %t152) br label %ifend23 ifend23: @@ -13884,7 +14406,7 @@ then39: then42: %t181 = load i32, ptr %t176 %t182 = call ptr @fn_itoa(i32 %t181) - %t183 = call ptr @fn_val(ptr %t182, ptr @.str899) + %t183 = call ptr @fn_val(ptr %t182, ptr @.str918) store ptr %t183, ptr %retval br label %ret ifend44: @@ -13958,36 +14480,36 @@ then54: %t229 = load ptr, ptr %t0 %t230 = getelementptr inbounds %Str_Node, ptr %t229, i32 0, i32 1 %t231 = load ptr, ptr %t230 - %t232 = call i32 @fn_streq(ptr %t231, ptr @.str900) + %t232 = call i32 @fn_streq(ptr %t231, ptr @.str919) %t233 = icmp ne i32 %t232, 0 br i1 %t233, label %then57, label %ifend59 then57: %t234 = load ptr, ptr %t228 %t235 = getelementptr inbounds %Str_Val, ptr %t234, i32 0, i32 0 %t236 = load ptr, ptr %t235 - %t237 = call ptr @fn_sconcat(ptr @.str901, ptr %t236) + %t237 = call ptr @fn_sconcat(ptr @.str920, ptr %t236) %t238 = call ptr @fn_emit_bind(ptr %t237) - %t239 = call ptr @fn_val(ptr %t238, ptr @.str902) + %t239 = call ptr @fn_val(ptr %t238, ptr @.str921) store ptr %t239, ptr %retval br label %ret ifend59: %t240 = load ptr, ptr %t228 %t241 = getelementptr inbounds %Str_Val, ptr %t240, i32 0, i32 0 %t242 = load ptr, ptr %t241 - %t243 = call ptr @fn_sconcat(ptr %t242, ptr @.str904) - %t244 = call ptr @fn_sconcat(ptr @.str903, ptr %t243) + %t243 = call ptr @fn_sconcat(ptr %t242, ptr @.str923) + %t244 = call ptr @fn_sconcat(ptr @.str922, ptr %t243) %t245 = call ptr @fn_emit_bind(ptr %t244) store ptr %t245, ptr %t246 %t247 = load ptr, ptr %t246 - %t248 = call ptr @fn_sconcat(ptr %t247, ptr @.str906) - %t249 = call ptr @fn_sconcat(ptr @.str905, ptr %t248) + %t248 = call ptr @fn_sconcat(ptr %t247, ptr @.str925) + %t249 = call ptr @fn_sconcat(ptr @.str924, ptr %t248) %t250 = call ptr @fn_emit_bind(ptr %t249) - %t251 = call ptr @fn_val(ptr %t250, ptr @.str907) + %t251 = call ptr @fn_val(ptr %t250, ptr @.str926) store ptr %t251, ptr %retval br label %ret ifend56: - call void @fn_perr(ptr @.str908) - %t252 = call ptr @fn_val(ptr @.str909, ptr @.str910) + call void @fn_perr(ptr @.str927) + %t252 = call ptr @fn_val(ptr @.str928, ptr @.str929) store ptr %t252, ptr %retval br label %ret ret: @@ -14047,16 +14569,16 @@ entry: store ptr %arg_lt, ptr %t0 store ptr %arg_v, ptr %t1 store ptr %arg_addr, ptr %t2 - call void @fn_emit(ptr @.str911) + call void @fn_emit(ptr @.str930) %t3 = load ptr, ptr %t0 call void @fn_emit(ptr %t3) - call void @fn_emit(ptr @.str912) + call void @fn_emit(ptr @.str931) %t4 = load ptr, ptr %t1 call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str913) + call void @fn_emit(ptr @.str932) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str914) + call void @fn_emit(ptr @.str933) br label %ret ret: ret void @@ -14080,8 +14602,8 @@ entry: %t2 = getelementptr inbounds %Str_Node, ptr %t1, i32 0, i32 4 %t3 = load ptr, ptr %t2 store ptr %t3, ptr %t4 - store ptr @.str915, ptr %t5 - store ptr @.str916, ptr %t6 + store ptr @.str934, ptr %t5 + store ptr @.str935, ptr %t6 %t7 = load ptr, ptr %t4 %t8 = getelementptr inbounds %Str_Node, ptr %t7, i32 0, i32 0 %t9 = load i32, ptr %t8 @@ -14131,14 +14653,14 @@ then6: %t43 = load ptr, ptr %t4 %t44 = getelementptr inbounds %Str_Node, ptr %t43, i32 0, i32 1 %t45 = load ptr, ptr %t44 - %t46 = call ptr @fn_sconcat(ptr @.str917, ptr %t45) + %t46 = call ptr @fn_sconcat(ptr @.str936, ptr %t45) call void @fn_perr(ptr %t46) br label %ifend8 ifend8: %t47 = load ptr, ptr %t4 %t48 = getelementptr inbounds %Str_Node, ptr %t47, i32 0, i32 1 %t49 = load ptr, ptr %t48 - %t50 = call ptr @fn_sconcat(ptr @.str918, ptr %t49) + %t50 = call ptr @fn_sconcat(ptr @.str937, ptr %t49) store ptr %t50, ptr %t5 %t51 = load ptr, ptr %t38 %t52 = getelementptr inbounds %Str_Node, ptr %t51, i32 0, i32 3 @@ -14178,7 +14700,7 @@ then12: store ptr %t71, ptr %t6 br label %ifend14 else13: - call void @fn_perr(ptr @.str919) + call void @fn_perr(ptr @.str938) br label %ifend14 ifend14: br label %ifend11 @@ -14200,7 +14722,7 @@ ifend2: %t84 = load ptr, ptr %t0 %t85 = getelementptr inbounds %Str_Node, ptr %t84, i32 0, i32 1 %t86 = load ptr, ptr %t85 - %t87 = call i32 @fn_streq(ptr %t86, ptr @.str920) + %t87 = call i32 @fn_streq(ptr %t86, ptr @.str939) %t88 = icmp eq i32 %t87, 0 %t89 = zext i1 %t88 to i32 %t90 = icmp ne i32 %t89, 0 @@ -14208,48 +14730,48 @@ ifend2: then15: %t91 = load ptr, ptr %t74 %t92 = load ptr, ptr %t5 - %t93 = call ptr @fn_sconcat(ptr @.str922, ptr %t92) + %t93 = call ptr @fn_sconcat(ptr @.str941, ptr %t92) %t94 = call ptr @fn_sconcat(ptr %t91, ptr %t93) - %t95 = call ptr @fn_sconcat(ptr @.str921, ptr %t94) + %t95 = call ptr @fn_sconcat(ptr @.str940, ptr %t94) %t96 = call ptr @fn_emit_bind(ptr %t95) store ptr %t96, ptr %t97 - store ptr @.str923, ptr %t98 + store ptr @.str942, ptr %t98 %t99 = load ptr, ptr %t0 %t100 = getelementptr inbounds %Str_Node, ptr %t99, i32 0, i32 1 %t101 = load ptr, ptr %t100 - %t102 = call i32 @fn_streq(ptr %t101, ptr @.str924) + %t102 = call i32 @fn_streq(ptr %t101, ptr @.str943) %t103 = icmp ne i32 %t102, 0 br i1 %t103, label %then18, label %ifend20 then18: - store ptr @.str925, ptr %t98 + store ptr @.str944, ptr %t98 br label %ifend20 ifend20: %t104 = load ptr, ptr %t0 %t105 = getelementptr inbounds %Str_Node, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %t105 - %t107 = call i32 @fn_streq(ptr %t106, ptr @.str926) + %t107 = call i32 @fn_streq(ptr %t106, ptr @.str945) %t108 = icmp ne i32 %t107, 0 br i1 %t108, label %then21, label %ifend23 then21: - store ptr @.str927, ptr %t98 + store ptr @.str946, ptr %t98 br label %ifend23 ifend23: %t109 = load ptr, ptr %t0 %t110 = getelementptr inbounds %Str_Node, ptr %t109, i32 0, i32 1 %t111 = load ptr, ptr %t110 - %t112 = call i32 @fn_streq(ptr %t111, ptr @.str928) + %t112 = call i32 @fn_streq(ptr %t111, ptr @.str947) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then24, label %ifend26 then24: - store ptr @.str929, ptr %t98 + store ptr @.str948, ptr %t98 br label %ifend26 ifend26: %t114 = load ptr, ptr %t98 %t115 = load ptr, ptr %t97 %t116 = load ptr, ptr %t83 - %t117 = call ptr @fn_sconcat(ptr @.str931, ptr %t116) + %t117 = call ptr @fn_sconcat(ptr @.str950, ptr %t116) %t118 = call ptr @fn_sconcat(ptr %t115, ptr %t117) - %t119 = call ptr @fn_sconcat(ptr @.str930, ptr %t118) + %t119 = call ptr @fn_sconcat(ptr @.str949, ptr %t118) %t120 = call ptr @fn_sconcat(ptr %t114, ptr %t119) %t121 = call ptr @fn_emit_bind(ptr %t120) store ptr %t121, ptr %t83 @@ -14282,8 +14804,8 @@ entry: %t6 = load ptr, ptr %t5 %t7 = getelementptr inbounds %Str_Val, ptr %t6, i32 0, i32 0 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str933) - %t10 = call ptr @fn_sconcat(ptr @.str932, ptr %t9) + %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str952) + %t10 = call ptr @fn_sconcat(ptr @.str951, ptr %t9) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t0 @@ -14294,43 +14816,43 @@ entry: %t18 = icmp eq i32 %t17, 0 %t19 = zext i1 %t18 to i32 store i32 %t19, ptr %t20 - %t21 = call ptr @fn_lbl(ptr @.str934) + %t21 = call ptr @fn_lbl(ptr @.str953) store ptr %t21, ptr %t22 - %t23 = call ptr @fn_lbl(ptr @.str935) + %t23 = call ptr @fn_lbl(ptr @.str954) store ptr %t23, ptr %t24 - %t25 = call ptr @fn_lbl(ptr @.str936) + %t25 = call ptr @fn_lbl(ptr @.str955) store ptr %t25, ptr %t26 %t27 = load i32, ptr %t20 %t28 = icmp ne i32 %t27, 0 br i1 %t28, label %then0, label %else1 then0: - call void @fn_emit(ptr @.str937) + call void @fn_emit(ptr @.str956) %t29 = load ptr, ptr %t12 call void @fn_emit(ptr %t29) - call void @fn_emit(ptr @.str938) + call void @fn_emit(ptr @.str957) %t30 = load ptr, ptr %t22 call void @fn_emit(ptr %t30) - call void @fn_emit(ptr @.str939) + call void @fn_emit(ptr @.str958) %t31 = load ptr, ptr %t24 call void @fn_emit(ptr %t31) - call void @fn_emit(ptr @.str940) + call void @fn_emit(ptr @.str959) br label %ifend2 else1: - call void @fn_emit(ptr @.str941) + call void @fn_emit(ptr @.str960) %t32 = load ptr, ptr %t12 call void @fn_emit(ptr %t32) - call void @fn_emit(ptr @.str942) + call void @fn_emit(ptr @.str961) %t33 = load ptr, ptr %t22 call void @fn_emit(ptr %t33) - call void @fn_emit(ptr @.str943) + call void @fn_emit(ptr @.str962) %t34 = load ptr, ptr %t26 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str944) + call void @fn_emit(ptr @.str963) br label %ifend2 ifend2: %t35 = load ptr, ptr %t22 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str945) + call void @fn_emit(ptr @.str964) store i32 0, ptr @g_g_term %t36 = load ptr, ptr %t0 %t37 = getelementptr inbounds %Str_Node, ptr %t36, i32 0, i32 5 @@ -14342,10 +14864,10 @@ ifend2: %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str946) + call void @fn_emit(ptr @.str965) %t43 = load ptr, ptr %t26 call void @fn_emit(ptr %t43) - call void @fn_emit(ptr @.str947) + call void @fn_emit(ptr @.str966) br label %ifend5 ifend5: %t44 = load i32, ptr %t20 @@ -14354,7 +14876,7 @@ ifend5: then6: %t46 = load ptr, ptr %t24 call void @fn_emit(ptr %t46) - call void @fn_emit(ptr @.str948) + call void @fn_emit(ptr @.str967) store i32 0, ptr @g_g_term %t47 = load ptr, ptr %t0 %t48 = getelementptr inbounds %Str_Node, ptr %t47, i32 0, i32 6 @@ -14384,17 +14906,17 @@ ifend11: %t64 = icmp ne i32 %t63, 0 br i1 %t64, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str949) + call void @fn_emit(ptr @.str968) %t65 = load ptr, ptr %t26 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str950) + call void @fn_emit(ptr @.str969) br label %ifend14 ifend14: br label %ifend8 ifend8: %t66 = load ptr, ptr %t26 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str951) + call void @fn_emit(ptr @.str970) store i32 0, ptr @g_g_term br label %ret ret: @@ -14410,19 +14932,19 @@ entry: %t13 = alloca ptr %t20 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_lbl(ptr @.str952) + %t1 = call ptr @fn_lbl(ptr @.str971) store ptr %t1, ptr %t2 - %t3 = call ptr @fn_lbl(ptr @.str953) + %t3 = call ptr @fn_lbl(ptr @.str972) store ptr %t3, ptr %t4 - %t5 = call ptr @fn_lbl(ptr @.str954) + %t5 = call ptr @fn_lbl(ptr @.str973) store ptr %t5, ptr %t6 - call void @fn_emit(ptr @.str955) + call void @fn_emit(ptr @.str974) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str956) + call void @fn_emit(ptr @.str975) %t8 = load ptr, ptr %t2 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str957) + call void @fn_emit(ptr @.str976) %t9 = load ptr, ptr %t0 %t10 = getelementptr inbounds %Str_Node, ptr %t9, i32 0, i32 4 %t11 = load ptr, ptr %t10 @@ -14431,23 +14953,23 @@ entry: %t14 = load ptr, ptr %t13 %t15 = getelementptr inbounds %Str_Val, ptr %t14, i32 0, i32 0 %t16 = load ptr, ptr %t15 - %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str959) - %t18 = call ptr @fn_sconcat(ptr @.str958, ptr %t17) + %t17 = call ptr @fn_sconcat(ptr %t16, ptr @.str978) + %t18 = call ptr @fn_sconcat(ptr @.str977, ptr %t17) %t19 = call ptr @fn_emit_bind(ptr %t18) store ptr %t19, ptr %t20 - call void @fn_emit(ptr @.str960) + call void @fn_emit(ptr @.str979) %t21 = load ptr, ptr %t20 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str961) + call void @fn_emit(ptr @.str980) %t22 = load ptr, ptr %t4 call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str962) + call void @fn_emit(ptr @.str981) %t23 = load ptr, ptr %t6 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str963) + call void @fn_emit(ptr @.str982) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str964) + call void @fn_emit(ptr @.str983) store i32 0, ptr @g_g_term %t25 = load ptr, ptr %t2 %t26 = load ptr, ptr %t6 @@ -14463,15 +14985,15 @@ entry: %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str965) + call void @fn_emit(ptr @.str984) %t34 = load ptr, ptr %t2 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str966) + call void @fn_emit(ptr @.str985) br label %ifend2 ifend2: %t35 = load ptr, ptr %t6 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str967) + call void @fn_emit(ptr @.str986) store i32 0, ptr @g_g_term br label %ret ret: @@ -14493,7 +15015,7 @@ entry: %t62 = alloca ptr %t67 = alloca ptr store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_alloca(ptr @.str968) + %t1 = call ptr @fn_emit_alloca(ptr @.str987) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Str_Node, ptr %t3, i32 0, i32 4 @@ -14504,29 +15026,29 @@ entry: %t9 = getelementptr inbounds %Str_Val, ptr %t8, i32 0, i32 0 %t10 = load ptr, ptr %t9 %t11 = load ptr, ptr %t2 - call void @fn_store_at(ptr @.str969, ptr %t10, ptr %t11) + call void @fn_store_at(ptr @.str988, ptr %t10, ptr %t11) %t12 = load ptr, ptr %t0 %t13 = getelementptr inbounds %Str_Node, ptr %t12, i32 0, i32 1 %t14 = load ptr, ptr %t13 %t15 = load ptr, ptr %t2 - call void @fn_loc_push(ptr %t14, ptr %t15, ptr @.str970) - %t16 = call ptr @fn_lbl(ptr @.str971) + call void @fn_loc_push(ptr %t14, ptr %t15, ptr @.str989) + %t16 = call ptr @fn_lbl(ptr @.str990) store ptr %t16, ptr %t17 - %t18 = call ptr @fn_lbl(ptr @.str972) + %t18 = call ptr @fn_lbl(ptr @.str991) store ptr %t18, ptr %t19 - %t20 = call ptr @fn_lbl(ptr @.str973) + %t20 = call ptr @fn_lbl(ptr @.str992) store ptr %t20, ptr %t21 - %t22 = call ptr @fn_lbl(ptr @.str974) + %t22 = call ptr @fn_lbl(ptr @.str993) store ptr %t22, ptr %t23 - call void @fn_emit(ptr @.str975) + call void @fn_emit(ptr @.str994) %t24 = load ptr, ptr %t17 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str976) + call void @fn_emit(ptr @.str995) %t25 = load ptr, ptr %t17 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str977) + call void @fn_emit(ptr @.str996) %t26 = load ptr, ptr %t2 - %t27 = call ptr @fn_sconcat(ptr @.str978, ptr %t26) + %t27 = call ptr @fn_sconcat(ptr @.str997, ptr %t26) %t28 = call ptr @fn_emit_bind(ptr %t27) store ptr %t28, ptr %t29 %t30 = load ptr, ptr %t0 @@ -14538,24 +15060,24 @@ entry: %t36 = load ptr, ptr %t34 %t37 = getelementptr inbounds %Str_Val, ptr %t36, i32 0, i32 0 %t38 = load ptr, ptr %t37 - %t39 = call ptr @fn_sconcat(ptr @.str980, ptr %t38) + %t39 = call ptr @fn_sconcat(ptr @.str999, ptr %t38) %t40 = call ptr @fn_sconcat(ptr %t35, ptr %t39) - %t41 = call ptr @fn_sconcat(ptr @.str979, ptr %t40) + %t41 = call ptr @fn_sconcat(ptr @.str998, ptr %t40) %t42 = call ptr @fn_emit_bind(ptr %t41) store ptr %t42, ptr %t43 - call void @fn_emit(ptr @.str981) + call void @fn_emit(ptr @.str1000) %t44 = load ptr, ptr %t43 call void @fn_emit(ptr %t44) - call void @fn_emit(ptr @.str982) + call void @fn_emit(ptr @.str1001) %t45 = load ptr, ptr %t19 call void @fn_emit(ptr %t45) - call void @fn_emit(ptr @.str983) + call void @fn_emit(ptr @.str1002) %t46 = load ptr, ptr %t23 call void @fn_emit(ptr %t46) - call void @fn_emit(ptr @.str984) + call void @fn_emit(ptr @.str1003) %t47 = load ptr, ptr %t19 call void @fn_emit(ptr %t47) - call void @fn_emit(ptr @.str985) + call void @fn_emit(ptr @.str1004) store i32 0, ptr @g_g_term %t48 = load ptr, ptr %t21 %t49 = load ptr, ptr %t23 @@ -14571,34 +15093,34 @@ entry: %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str986) + call void @fn_emit(ptr @.str1005) %t57 = load ptr, ptr %t21 call void @fn_emit(ptr %t57) - call void @fn_emit(ptr @.str987) + call void @fn_emit(ptr @.str1006) br label %ifend2 ifend2: %t58 = load ptr, ptr %t21 call void @fn_emit(ptr %t58) - call void @fn_emit(ptr @.str988) + call void @fn_emit(ptr @.str1007) %t59 = load ptr, ptr %t2 - %t60 = call ptr @fn_sconcat(ptr @.str989, ptr %t59) + %t60 = call ptr @fn_sconcat(ptr @.str1008, ptr %t59) %t61 = call ptr @fn_emit_bind(ptr %t60) store ptr %t61, ptr %t62 %t63 = load ptr, ptr %t62 - %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str991) - %t65 = call ptr @fn_sconcat(ptr @.str990, ptr %t64) + %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str1010) + %t65 = call ptr @fn_sconcat(ptr @.str1009, ptr %t64) %t66 = call ptr @fn_emit_bind(ptr %t65) store ptr %t66, ptr %t67 %t68 = load ptr, ptr %t67 %t69 = load ptr, ptr %t2 - call void @fn_store_at(ptr @.str992, ptr %t68, ptr %t69) - call void @fn_emit(ptr @.str993) + call void @fn_store_at(ptr @.str1011, ptr %t68, ptr %t69) + call void @fn_emit(ptr @.str1012) %t70 = load ptr, ptr %t17 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str994) + call void @fn_emit(ptr @.str1013) %t71 = load ptr, ptr %t23 call void @fn_emit(ptr %t71) - call void @fn_emit(ptr @.str995) + call void @fn_emit(ptr @.str1014) store i32 0, ptr @g_g_term br label %ret ret: @@ -14630,10 +15152,10 @@ then0: %t16 = load ptr, ptr %t13 %t17 = getelementptr inbounds %Str_Val, ptr %t16, i32 0, i32 0 %t18 = load ptr, ptr %t17 - call void @fn_store_at(ptr %t15, ptr %t18, ptr @.str996) + call void @fn_store_at(ptr %t15, ptr %t18, ptr @.str1015) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str997) + call void @fn_emit(ptr @.str1016) store i32 1, ptr @g_g_term br label %ret ret: @@ -14688,7 +15210,7 @@ sc3: %t33 = load ptr, ptr %t32 %t34 = getelementptr inbounds %Str_Node, ptr %t33, i32 0, i32 1 %t35 = load ptr, ptr %t34 - %t36 = call i32 @fn_streq(ptr %t35, ptr @.str998) + %t36 = call i32 @fn_streq(ptr %t35, ptr @.str1017) %t37 = icmp ne i32 %t36, 0 %t38 = zext i1 %t37 to i32 store i32 %t38, ptr %t11 @@ -14734,7 +15256,7 @@ entry: %t3 = load ptr, ptr %t2 %t4 = call ptr @fn_emit_expr(ptr %t3) store ptr %t4, ptr %t5 - %t6 = call ptr @fn_lbl(ptr @.str999) + %t6 = call ptr @fn_lbl(ptr @.str1018) store ptr %t6, ptr %t7 store ptr null, ptr %t8 store i32 0, ptr %t9 @@ -14769,7 +15291,7 @@ then3: store ptr %t31, ptr %t8 br label %ifend5 else4: - store ptr @.str1000, ptr %t32 + store ptr @.str1019, ptr %t32 store i32 1, ptr %t33 store i32 0, ptr %t34 br label %wcond6 @@ -14801,9 +15323,9 @@ wbody7: %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds %Str_Val, ptr %t57, i32 0, i32 0 %t59 = load ptr, ptr %t58 - %t60 = call ptr @fn_sconcat(ptr @.str1002, ptr %t59) + %t60 = call ptr @fn_sconcat(ptr @.str1021, ptr %t59) %t61 = call ptr @fn_sconcat(ptr %t56, ptr %t60) - %t62 = call ptr @fn_sconcat(ptr @.str1001, ptr %t61) + %t62 = call ptr @fn_sconcat(ptr @.str1020, ptr %t61) %t63 = call ptr @fn_emit_bind(ptr %t62) store ptr %t63, ptr %t64 %t65 = load i32, ptr %t33 @@ -14817,9 +15339,9 @@ then9: else10: %t68 = load ptr, ptr %t32 %t69 = load ptr, ptr %t64 - %t70 = call ptr @fn_sconcat(ptr @.str1004, ptr %t69) + %t70 = call ptr @fn_sconcat(ptr @.str1023, ptr %t69) %t71 = call ptr @fn_sconcat(ptr %t68, ptr %t70) - %t72 = call ptr @fn_sconcat(ptr @.str1003, ptr %t71) + %t72 = call ptr @fn_sconcat(ptr @.str1022, ptr %t71) %t73 = call ptr @fn_emit_bind(ptr %t72) store ptr %t73, ptr %t32 br label %ifend11 @@ -14829,23 +15351,23 @@ ifend11: store i32 %t75, ptr %t34 br label %wcond6 wend8: - %t76 = call ptr @fn_lbl(ptr @.str1005) + %t76 = call ptr @fn_lbl(ptr @.str1024) store ptr %t76, ptr %t77 - %t78 = call ptr @fn_lbl(ptr @.str1006) + %t78 = call ptr @fn_lbl(ptr @.str1025) store ptr %t78, ptr %t79 - call void @fn_emit(ptr @.str1007) + call void @fn_emit(ptr @.str1026) %t80 = load ptr, ptr %t32 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1008) + call void @fn_emit(ptr @.str1027) %t81 = load ptr, ptr %t77 call void @fn_emit(ptr %t81) - call void @fn_emit(ptr @.str1009) + call void @fn_emit(ptr @.str1028) %t82 = load ptr, ptr %t79 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str1010) + call void @fn_emit(ptr @.str1029) %t83 = load ptr, ptr %t77 call void @fn_emit(ptr %t83) - call void @fn_emit(ptr @.str1011) + call void @fn_emit(ptr @.str1030) store i32 0, ptr @g_g_term %t84 = load ptr, ptr %t27 %t85 = getelementptr inbounds %Str_Node, ptr %t84, i32 0, i32 4 @@ -14857,15 +15379,15 @@ wend8: %t90 = icmp ne i32 %t89, 0 br i1 %t90, label %then12, label %ifend14 then12: - call void @fn_emit(ptr @.str1012) + call void @fn_emit(ptr @.str1031) %t91 = load ptr, ptr %t7 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1013) + call void @fn_emit(ptr @.str1032) br label %ifend14 ifend14: %t92 = load ptr, ptr %t79 call void @fn_emit(ptr %t92) - call void @fn_emit(ptr @.str1014) + call void @fn_emit(ptr @.str1033) store i32 0, ptr @g_g_term br label %ifend5 ifend5: @@ -14894,15 +15416,15 @@ ifend17: %t107 = icmp ne i32 %t106, 0 br i1 %t107, label %then18, label %ifend20 then18: - call void @fn_emit(ptr @.str1015) + call void @fn_emit(ptr @.str1034) %t108 = load ptr, ptr %t7 call void @fn_emit(ptr %t108) - call void @fn_emit(ptr @.str1016) + call void @fn_emit(ptr @.str1035) br label %ifend20 ifend20: %t109 = load ptr, ptr %t7 call void @fn_emit(ptr %t109) - call void @fn_emit(ptr @.str1017) + call void @fn_emit(ptr @.str1036) store i32 0, ptr @g_g_term br label %ret ret: @@ -14978,14 +15500,14 @@ ifend5: %t47 = icmp ne i32 %t46, 0 br i1 %t47, label %then6, label %else7 then6: - store ptr @.str1018, ptr %t48 + store ptr @.str1037, ptr %t48 %t49 = load ptr, ptr %t10 %t50 = call ptr @fn_llty(ptr %t49) - %t51 = call i32 @fn_streq(ptr %t50, ptr @.str1019) + %t51 = call i32 @fn_streq(ptr %t50, ptr @.str1038) %t52 = icmp ne i32 %t51, 0 br i1 %t52, label %then9, label %ifend11 then9: - store ptr @.str1020, ptr %t48 + store ptr @.str1039, ptr %t48 br label %ifend11 ifend11: %t53 = load ptr, ptr %t10 @@ -15085,7 +15607,7 @@ ifend26: %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %then27, label %ifend29 then27: - call void @fn_emit(ptr @.str1021) + call void @fn_emit(ptr @.str1040) %t114 = load ptr, ptr @g_brk_lbl %t115 = getelementptr inbounds %LSlice, ptr %t114, i32 0, i32 0 %t116 = load ptr, ptr %t115 @@ -15094,7 +15616,7 @@ then27: %t119 = getelementptr inbounds ptr, ptr %t116, i32 %t118 %t120 = load ptr, ptr %t119 call void @fn_emit(ptr %t120) - call void @fn_emit(ptr @.str1022) + call void @fn_emit(ptr @.str1041) store i32 1, ptr @g_g_term br label %ret ifend29: @@ -15106,7 +15628,7 @@ ifend29: %t126 = icmp ne i32 %t125, 0 br i1 %t126, label %then30, label %ifend32 then30: - call void @fn_emit(ptr @.str1023) + call void @fn_emit(ptr @.str1042) %t127 = load ptr, ptr @g_cnt_lbl %t128 = getelementptr inbounds %LSlice, ptr %t127, i32 0, i32 0 %t129 = load ptr, ptr %t128 @@ -15115,7 +15637,7 @@ then30: %t132 = getelementptr inbounds ptr, ptr %t129, i32 %t131 %t133 = load ptr, ptr %t132 call void @fn_emit(ptr %t133) - call void @fn_emit(ptr @.str1024) + call void @fn_emit(ptr @.str1043) store i32 1, ptr @g_g_term br label %ret ifend32: @@ -15206,7 +15728,7 @@ then51: store ptr %t185, ptr %t186 br label %ret ifend53: - call void @fn_perr(ptr @.str1025) + call void @fn_perr(ptr @.str1044) br label %ret ret: ret void @@ -15431,24 +15953,24 @@ entry: %t11 = alloca i32 %t25 = alloca ptr %t45 = alloca i32 - call void @fn_emith(ptr @.str1026) - call void @fn_emith(ptr @.str1027) - call void @fn_emith(ptr @.str1028) + call void @fn_emith(ptr @.str1045) + call void @fn_emith(ptr @.str1046) + call void @fn_emith(ptr @.str1047) %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 %t2 = load ptr, ptr %t1 - %t3 = call ptr @fn_sconcat(ptr %t2, ptr @.str1030) - %t4 = call ptr @fn_sconcat(ptr @.str1029, ptr %t3) + %t3 = call ptr @fn_sconcat(ptr %t2, ptr @.str1049) + %t4 = call ptr @fn_sconcat(ptr @.str1048, ptr %t3) call void @fn_emith(ptr %t4) %t5 = load ptr, ptr %t1 - %t6 = call ptr @fn_sconcat(ptr %t5, ptr @.str1032) - %t7 = call ptr @fn_sconcat(ptr @.str1031, ptr %t6) + %t6 = call ptr @fn_sconcat(ptr %t5, ptr @.str1051) + %t7 = call ptr @fn_sconcat(ptr @.str1050, ptr %t6) call void @fn_emith(ptr %t7) %t8 = load ptr, ptr %t1 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1034) - %t10 = call ptr @fn_sconcat(ptr @.str1033, ptr %t9) + %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1053) + %t10 = call ptr @fn_sconcat(ptr @.str1052, ptr %t9) call void @fn_emith(ptr %t10) - call void @fn_emith(ptr @.str1035) + call void @fn_emith(ptr @.str1054) store i32 0, ptr %t11 br label %wcond0 wcond0: @@ -15479,8 +16001,8 @@ then3: %t32 = load ptr, ptr %t25 %t33 = getelementptr inbounds %Str_Node, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %t33 - %t35 = call ptr @fn_sconcat(ptr %t34, ptr @.str1037) - %t36 = call ptr @fn_sconcat(ptr @.str1036, ptr %t35) + %t35 = call ptr @fn_sconcat(ptr %t34, ptr @.str1056) + %t36 = call ptr @fn_sconcat(ptr @.str1055, ptr %t35) call void @fn_emith(ptr %t36) %t37 = load ptr, ptr %t25 %t38 = getelementptr inbounds %Str_Node, ptr %t37, i32 0, i32 7 @@ -15492,7 +16014,7 @@ then3: %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then6, label %ifend8 then6: - call void @fn_emith(ptr @.str1038) + call void @fn_emith(ptr @.str1057) br label %ifend8 ifend8: store i32 0, ptr %t45 @@ -15515,7 +16037,7 @@ wbody10: %t58 = icmp ne i32 %t57, 0 br i1 %t58, label %then12, label %ifend14 then12: - call void @fn_emith(ptr @.str1039) + call void @fn_emith(ptr @.str1058) br label %ifend14 ifend14: %t59 = load ptr, ptr %t25 @@ -15535,7 +16057,7 @@ ifend14: store i32 %t71, ptr %t45 br label %wcond9 wend11: - call void @fn_emith(ptr @.str1040) + call void @fn_emith(ptr @.str1059) %t72 = load ptr, ptr %t25 %t73 = getelementptr inbounds %Str_Node, ptr %t72, i32 0, i32 1 %t74 = load ptr, ptr %t73 @@ -15543,21 +16065,21 @@ wend11: %t76 = load ptr, ptr %t25 %t77 = getelementptr inbounds %Str_Node, ptr %t76, i32 0, i32 1 %t78 = load ptr, ptr %t77 - %t79 = call ptr @fn_sconcat(ptr %t78, ptr @.str1044) - %t80 = call ptr @fn_sconcat(ptr @.str1043, ptr %t79) + %t79 = call ptr @fn_sconcat(ptr %t78, ptr @.str1063) + %t80 = call ptr @fn_sconcat(ptr @.str1062, ptr %t79) %t81 = call ptr @fn_sconcat(ptr %t75, ptr %t80) - %t82 = call ptr @fn_sconcat(ptr @.str1042, ptr %t81) + %t82 = call ptr @fn_sconcat(ptr @.str1061, ptr %t81) %t83 = call ptr @fn_sconcat(ptr %t74, ptr %t82) - %t84 = call ptr @fn_sconcat(ptr @.str1041, ptr %t83) + %t84 = call ptr @fn_sconcat(ptr @.str1060, ptr %t83) call void @fn_emith(ptr %t84) %t85 = load ptr, ptr %t25 %t86 = getelementptr inbounds %Str_Node, ptr %t85, i32 0, i32 1 %t87 = load ptr, ptr %t86 %t88 = load ptr, ptr %t1 - %t89 = call ptr @fn_sconcat(ptr %t88, ptr @.str1047) - %t90 = call ptr @fn_sconcat(ptr @.str1046, ptr %t89) + %t89 = call ptr @fn_sconcat(ptr %t88, ptr @.str1066) + %t90 = call ptr @fn_sconcat(ptr @.str1065, ptr %t89) %t91 = call ptr @fn_sconcat(ptr %t87, ptr %t90) - %t92 = call ptr @fn_sconcat(ptr @.str1045, ptr %t91) + %t92 = call ptr @fn_sconcat(ptr @.str1064, ptr %t91) call void @fn_emith(ptr %t92) br label %ifend5 ifend5: @@ -15578,7 +16100,7 @@ entry: %t24 = alloca ptr %t0 = call ptr @fn_itoa(i32 1024) store ptr %t0, ptr %t1 - call void @fn_emit(ptr @.str1048) + call void @fn_emit(ptr @.str1067) store i32 0, ptr %t2 br label %wcond0 wcond0: @@ -15606,15 +16128,15 @@ wbody1: then3: %t21 = load i32, ptr %t2 %t22 = call ptr @fn_itoa(i32 %t21) - %t23 = call ptr @fn_sconcat(ptr @.str1049, ptr %t22) + %t23 = call ptr @fn_sconcat(ptr @.str1068, ptr %t22) store ptr %t23, ptr %t24 - call void @fn_emit(ptr @.str1050) + call void @fn_emit(ptr @.str1069) %t25 = load ptr, ptr %t24 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1051) + call void @fn_emit(ptr @.str1070) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1052) + call void @fn_emit(ptr @.str1071) %t27 = load ptr, ptr @g_prog %t28 = getelementptr inbounds %LSlice, ptr %t27, i32 0, i32 0 %t29 = load ptr, ptr %t28 @@ -15624,11 +16146,11 @@ then3: %t33 = getelementptr inbounds %Str_Node, ptr %t32, i32 0, i32 1 %t34 = load ptr, ptr %t33 call void @fn_emit(ptr %t34) - call void @fn_emit(ptr @.str1053) - call void @fn_emit(ptr @.str1054) + call void @fn_emit(ptr @.str1072) + call void @fn_emit(ptr @.str1073) %t35 = load ptr, ptr %t24 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1055) + call void @fn_emit(ptr @.str1074) br label %ifend5 ifend5: %t36 = load i32, ptr %t2 @@ -15636,54 +16158,54 @@ ifend5: store i32 %t37, ptr %t2 br label %wcond0 wend2: - call void @fn_emit(ptr @.str1056) + call void @fn_emit(ptr @.str1075) %t38 = load ptr, ptr %t1 call void @fn_emit(ptr %t38) - call void @fn_emit(ptr @.str1057) - call void @fn_emit(ptr @.str1058) - call void @fn_emit(ptr @.str1059) - call void @fn_emit(ptr @.str1060) - call void @fn_emit(ptr @.str1061) - call void @fn_emit(ptr @.str1062) - call void @fn_emit(ptr @.str1063) - call void @fn_emit(ptr @.str1064) - call void @fn_emit(ptr @.str1065) - call void @fn_emit(ptr @.str1066) - %t39 = load ptr, ptr %t1 - call void @fn_emit(ptr %t39) - call void @fn_emit(ptr @.str1067) - call void @fn_emit(ptr @.str1068) - call void @fn_emit(ptr @.str1069) - call void @fn_emit(ptr @.str1070) - call void @fn_emit(ptr @.str1071) - call void @fn_emit(ptr @.str1072) - call void @fn_emit(ptr @.str1073) - call void @fn_emit(ptr @.str1074) - call void @fn_emit(ptr @.str1075) call void @fn_emit(ptr @.str1076) call void @fn_emit(ptr @.str1077) call void @fn_emit(ptr @.str1078) - %t40 = load ptr, ptr %t1 - call void @fn_emit(ptr %t40) call void @fn_emit(ptr @.str1079) call void @fn_emit(ptr @.str1080) call void @fn_emit(ptr @.str1081) call void @fn_emit(ptr @.str1082) call void @fn_emit(ptr @.str1083) - %t41 = load ptr, ptr %t1 - call void @fn_emit(ptr %t41) call void @fn_emit(ptr @.str1084) call void @fn_emit(ptr @.str1085) + %t39 = load ptr, ptr %t1 + call void @fn_emit(ptr %t39) call void @fn_emit(ptr @.str1086) call void @fn_emit(ptr @.str1087) call void @fn_emit(ptr @.str1088) - %t42 = load ptr, ptr %t1 - call void @fn_emit(ptr %t42) call void @fn_emit(ptr @.str1089) call void @fn_emit(ptr @.str1090) call void @fn_emit(ptr @.str1091) call void @fn_emit(ptr @.str1092) call void @fn_emit(ptr @.str1093) + call void @fn_emit(ptr @.str1094) + call void @fn_emit(ptr @.str1095) + call void @fn_emit(ptr @.str1096) + call void @fn_emit(ptr @.str1097) + %t40 = load ptr, ptr %t1 + call void @fn_emit(ptr %t40) + call void @fn_emit(ptr @.str1098) + call void @fn_emit(ptr @.str1099) + call void @fn_emit(ptr @.str1100) + call void @fn_emit(ptr @.str1101) + call void @fn_emit(ptr @.str1102) + %t41 = load ptr, ptr %t1 + call void @fn_emit(ptr %t41) + call void @fn_emit(ptr @.str1103) + call void @fn_emit(ptr @.str1104) + call void @fn_emit(ptr @.str1105) + call void @fn_emit(ptr @.str1106) + call void @fn_emit(ptr @.str1107) + %t42 = load ptr, ptr %t1 + call void @fn_emit(ptr %t42) + call void @fn_emit(ptr @.str1108) + call void @fn_emit(ptr @.str1109) + call void @fn_emit(ptr @.str1110) + call void @fn_emit(ptr @.str1111) + call void @fn_emit(ptr @.str1112) br label %ret ret: ret void @@ -15797,10 +16319,10 @@ entry: store ptr %arg_st, ptr %t0 %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 - %t3 = call ptr @fn_emit_alloca(ptr @.str1094) + %t3 = call ptr @fn_emit_alloca(ptr @.str1113) store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - call void @fn_store_at(ptr @.str1095, ptr @.str1096, ptr %t5) + call void @fn_store_at(ptr @.str1114, ptr @.str1115, ptr %t5) %t6 = load i32, ptr @g_nself %t7 = load ptr, ptr @g_self_stk %t8 = getelementptr inbounds %LSlice, ptr %t7, i32 0, i32 1 @@ -15852,88 +16374,88 @@ ifend2: %t39 = load i32, ptr @g_nself %t40 = add i32 %t39, 1 store i32 %t40, ptr @g_nself - %t41 = call ptr @fn_lbl(ptr @.str1097) + %t41 = call ptr @fn_lbl(ptr @.str1116) store ptr %t41, ptr %t42 - %t43 = call ptr @fn_lbl(ptr @.str1098) + %t43 = call ptr @fn_lbl(ptr @.str1117) store ptr %t43, ptr %t44 - %t45 = call ptr @fn_lbl(ptr @.str1099) + %t45 = call ptr @fn_lbl(ptr @.str1118) store ptr %t45, ptr %t46 - %t47 = call ptr @fn_lbl(ptr @.str1100) + %t47 = call ptr @fn_lbl(ptr @.str1119) store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1101) + call void @fn_emit(ptr @.str1120) %t49 = load ptr, ptr %t42 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1102) + call void @fn_emit(ptr @.str1121) %t50 = load ptr, ptr %t42 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1103) + call void @fn_emit(ptr @.str1122) %t51 = load ptr, ptr %t4 - %t52 = call ptr @fn_sconcat(ptr @.str1104, ptr %t51) + %t52 = call ptr @fn_sconcat(ptr @.str1123, ptr %t51) %t53 = call ptr @fn_emit_bind(ptr %t52) store ptr %t53, ptr %t54 - %t55 = call ptr @fn_emit_bind(ptr @.str1105) + %t55 = call ptr @fn_emit_bind(ptr @.str1124) store ptr %t55, ptr %t56 %t57 = load ptr, ptr %t54 %t58 = load ptr, ptr %t56 - %t59 = call ptr @fn_sconcat(ptr @.str1107, ptr %t58) + %t59 = call ptr @fn_sconcat(ptr @.str1126, ptr %t58) %t60 = call ptr @fn_sconcat(ptr %t57, ptr %t59) - %t61 = call ptr @fn_sconcat(ptr @.str1106, ptr %t60) + %t61 = call ptr @fn_sconcat(ptr @.str1125, ptr %t60) %t62 = call ptr @fn_emit_bind(ptr %t61) store ptr %t62, ptr %t63 - call void @fn_emit(ptr @.str1108) + call void @fn_emit(ptr @.str1127) %t64 = load ptr, ptr %t63 call void @fn_emit(ptr %t64) - call void @fn_emit(ptr @.str1109) + call void @fn_emit(ptr @.str1128) %t65 = load ptr, ptr %t44 call void @fn_emit(ptr %t65) - call void @fn_emit(ptr @.str1110) + call void @fn_emit(ptr @.str1129) %t66 = load ptr, ptr %t48 call void @fn_emit(ptr %t66) - call void @fn_emit(ptr @.str1111) + call void @fn_emit(ptr @.str1130) %t67 = load ptr, ptr %t44 call void @fn_emit(ptr %t67) - call void @fn_emit(ptr @.str1112) + call void @fn_emit(ptr @.str1131) store i32 0, ptr @g_g_term %t68 = load ptr, ptr %t4 - %t69 = call ptr @fn_sconcat(ptr @.str1113, ptr %t68) + %t69 = call ptr @fn_sconcat(ptr @.str1132, ptr %t68) %t70 = call ptr @fn_emit_bind(ptr %t69) store ptr %t70, ptr %t71 %t72 = call ptr @fn_nreg() store ptr %t72, ptr %t73 - call void @fn_emit(ptr @.str1114) + call void @fn_emit(ptr @.str1133) %t74 = load ptr, ptr %t73 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str1115) + call void @fn_emit(ptr @.str1134) %t75 = load ptr, ptr %t2 call void @fn_emit(ptr %t75) - call void @fn_emit(ptr @.str1116) + call void @fn_emit(ptr @.str1135) %t76 = load ptr, ptr %t71 call void @fn_emit(ptr %t76) - call void @fn_emit(ptr @.str1117) + call void @fn_emit(ptr @.str1136) %t77 = load ptr, ptr %t73 - %t78 = call ptr @fn_sconcat(ptr @.str1118, ptr %t77) + %t78 = call ptr @fn_sconcat(ptr @.str1137, ptr %t77) %t79 = call ptr @fn_emit_bind(ptr %t78) store ptr %t79, ptr %t80 %t81 = load ptr, ptr %t80 - %t82 = call ptr @fn_sconcat(ptr %t81, ptr @.str1120) - %t83 = call ptr @fn_sconcat(ptr @.str1119, ptr %t82) + %t82 = call ptr @fn_sconcat(ptr %t81, ptr @.str1139) + %t83 = call ptr @fn_sconcat(ptr @.str1138, ptr %t82) %t84 = call ptr @fn_emit_bind(ptr %t83) store ptr %t84, ptr %t85 - %t86 = call ptr @fn_lbl(ptr @.str1121) + %t86 = call ptr @fn_lbl(ptr @.str1140) store ptr %t86, ptr %t87 - call void @fn_emit(ptr @.str1122) + call void @fn_emit(ptr @.str1141) %t88 = load ptr, ptr %t85 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1123) + call void @fn_emit(ptr @.str1142) %t89 = load ptr, ptr %t87 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str1124) + call void @fn_emit(ptr @.str1143) %t90 = load ptr, ptr %t46 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1125) + call void @fn_emit(ptr @.str1144) %t91 = load ptr, ptr %t87 call void @fn_emit(ptr %t91) - call void @fn_emit(ptr @.str1126) + call void @fn_emit(ptr @.str1145) %t92 = load ptr, ptr %t0 %t93 = getelementptr inbounds %Str_Node, ptr %t92, i32 0, i32 6 %t94 = load ptr, ptr %t93 @@ -15966,7 +16488,7 @@ wbody6: %t117 = load ptr, ptr %t116 %t118 = call i32 @fn_find_arch_id(ptr %t117) store i32 %t118, ptr %t119 - store ptr @.str1127, ptr %t120 + store ptr @.str1146, ptr %t120 %t121 = load i32, ptr %t119 %t122 = icmp sgt i32 %t121, 0 %t123 = zext i1 %t122 to i32 @@ -15975,73 +16497,73 @@ wbody6: then8: %t125 = call ptr @fn_nreg() store ptr %t125, ptr %t126 - call void @fn_emit(ptr @.str1128) + call void @fn_emit(ptr @.str1147) %t127 = load ptr, ptr %t126 call void @fn_emit(ptr %t127) - call void @fn_emit(ptr @.str1129) + call void @fn_emit(ptr @.str1148) %t128 = load ptr, ptr %t2 call void @fn_emit(ptr %t128) - call void @fn_emit(ptr @.str1130) + call void @fn_emit(ptr @.str1149) %t129 = load ptr, ptr %t71 call void @fn_emit(ptr %t129) - call void @fn_emit(ptr @.str1131) + call void @fn_emit(ptr @.str1150) %t130 = load ptr, ptr %t126 - %t131 = call ptr @fn_sconcat(ptr @.str1132, ptr %t130) + %t131 = call ptr @fn_sconcat(ptr @.str1151, ptr %t130) %t132 = call ptr @fn_emit_bind(ptr %t131) store ptr %t132, ptr %t133 %t134 = load ptr, ptr %t133 %t135 = load i32, ptr %t119 %t136 = call ptr @fn_itoa(i32 %t135) - %t137 = call ptr @fn_sconcat(ptr @.str1134, ptr %t136) + %t137 = call ptr @fn_sconcat(ptr @.str1153, ptr %t136) %t138 = call ptr @fn_sconcat(ptr %t134, ptr %t137) - %t139 = call ptr @fn_sconcat(ptr @.str1133, ptr %t138) + %t139 = call ptr @fn_sconcat(ptr @.str1152, ptr %t138) %t140 = call ptr @fn_emit_bind(ptr %t139) store ptr %t140, ptr %t120 br label %ifend10 else9: %t141 = call ptr @fn_nreg() store ptr %t141, ptr %t142 - call void @fn_emit(ptr @.str1135) + call void @fn_emit(ptr @.str1154) %t143 = load ptr, ptr %t142 call void @fn_emit(ptr %t143) - call void @fn_emit(ptr @.str1136) + call void @fn_emit(ptr @.str1155) %t144 = load ptr, ptr %t2 call void @fn_emit(ptr %t144) - call void @fn_emit(ptr @.str1137) + call void @fn_emit(ptr @.str1156) %t145 = load ptr, ptr %t114 %t146 = getelementptr inbounds %Str_Node, ptr %t145, i32 0, i32 1 %t147 = load ptr, ptr %t146 call void @fn_emit(ptr %t147) - call void @fn_emit(ptr @.str1138) + call void @fn_emit(ptr @.str1157) %t148 = load ptr, ptr %t71 call void @fn_emit(ptr %t148) - call void @fn_emit(ptr @.str1139) + call void @fn_emit(ptr @.str1158) %t149 = load ptr, ptr %t142 - %t150 = call ptr @fn_sconcat(ptr @.str1140, ptr %t149) + %t150 = call ptr @fn_sconcat(ptr @.str1159, ptr %t149) %t151 = call ptr @fn_emit_bind(ptr %t150) store ptr %t151, ptr %t152 %t153 = load ptr, ptr %t152 - %t154 = call ptr @fn_sconcat(ptr %t153, ptr @.str1142) - %t155 = call ptr @fn_sconcat(ptr @.str1141, ptr %t154) + %t154 = call ptr @fn_sconcat(ptr %t153, ptr @.str1161) + %t155 = call ptr @fn_sconcat(ptr @.str1160, ptr %t154) %t156 = call ptr @fn_emit_bind(ptr %t155) store ptr %t156, ptr %t120 br label %ifend10 ifend10: - %t157 = call ptr @fn_lbl(ptr @.str1143) + %t157 = call ptr @fn_lbl(ptr @.str1162) store ptr %t157, ptr %t158 - call void @fn_emit(ptr @.str1144) + call void @fn_emit(ptr @.str1163) %t159 = load ptr, ptr %t120 call void @fn_emit(ptr %t159) - call void @fn_emit(ptr @.str1145) + call void @fn_emit(ptr @.str1164) %t160 = load ptr, ptr %t158 call void @fn_emit(ptr %t160) - call void @fn_emit(ptr @.str1146) + call void @fn_emit(ptr @.str1165) %t161 = load ptr, ptr %t46 call void @fn_emit(ptr %t161) - call void @fn_emit(ptr @.str1147) + call void @fn_emit(ptr @.str1166) %t162 = load ptr, ptr %t158 call void @fn_emit(ptr %t162) - call void @fn_emit(ptr @.str1148) + call void @fn_emit(ptr @.str1167) %t163 = load i32, ptr %t96 %t164 = add i32 %t163, 1 store i32 %t164, ptr %t96 @@ -16111,35 +16633,35 @@ then16: then19: %t213 = call ptr @fn_nreg() store ptr %t213, ptr %t214 - call void @fn_emit(ptr @.str1149) + call void @fn_emit(ptr @.str1168) %t215 = load ptr, ptr %t214 call void @fn_emit(ptr %t215) - call void @fn_emit(ptr @.str1150) + call void @fn_emit(ptr @.str1169) %t216 = load ptr, ptr %t2 call void @fn_emit(ptr %t216) - call void @fn_emit(ptr @.str1151) + call void @fn_emit(ptr @.str1170) %t217 = load ptr, ptr %t185 %t218 = getelementptr inbounds %Str_Node, ptr %t217, i32 0, i32 1 %t219 = load ptr, ptr %t218 call void @fn_emit(ptr %t219) - call void @fn_emit(ptr @.str1152) + call void @fn_emit(ptr @.str1171) %t220 = load ptr, ptr %t185 %t221 = getelementptr inbounds %Str_Node, ptr %t220, i32 0, i32 1 %t222 = load ptr, ptr %t221 call void @fn_emit(ptr %t222) - call void @fn_emit(ptr @.str1153) + call void @fn_emit(ptr @.str1172) %t223 = load ptr, ptr %t71 call void @fn_emit(ptr %t223) - call void @fn_emit(ptr @.str1154) - %t224 = call ptr @fn_emit_alloca(ptr @.str1155) + call void @fn_emit(ptr @.str1173) + %t224 = call ptr @fn_emit_alloca(ptr @.str1174) store ptr %t224, ptr %t225 - call void @fn_emit(ptr @.str1156) + call void @fn_emit(ptr @.str1175) %t226 = load ptr, ptr %t214 call void @fn_emit(ptr %t226) - call void @fn_emit(ptr @.str1157) + call void @fn_emit(ptr @.str1176) %t227 = load ptr, ptr %t225 call void @fn_emit(ptr %t227) - call void @fn_emit(ptr @.str1158) + call void @fn_emit(ptr @.str1177) %t228 = load ptr, ptr %t0 %t229 = getelementptr inbounds %Str_Node, ptr %t228, i32 0, i32 7 %t230 = load ptr, ptr %t229 @@ -16185,25 +16707,25 @@ then22: %t259 = load ptr, ptr %t258 %t260 = getelementptr inbounds %Str_Val, ptr %t259, i32 0, i32 0 %t261 = load ptr, ptr %t260 - %t262 = call ptr @fn_sconcat(ptr %t261, ptr @.str1160) - %t263 = call ptr @fn_sconcat(ptr @.str1159, ptr %t262) + %t262 = call ptr @fn_sconcat(ptr %t261, ptr @.str1179) + %t263 = call ptr @fn_sconcat(ptr @.str1178, ptr %t262) %t264 = call ptr @fn_emit_bind(ptr %t263) store ptr %t264, ptr %t265 - %t266 = call ptr @fn_lbl(ptr @.str1161) + %t266 = call ptr @fn_lbl(ptr @.str1180) store ptr %t266, ptr %t267 - call void @fn_emit(ptr @.str1162) + call void @fn_emit(ptr @.str1181) %t268 = load ptr, ptr %t265 call void @fn_emit(ptr %t268) - call void @fn_emit(ptr @.str1163) + call void @fn_emit(ptr @.str1182) %t269 = load ptr, ptr %t267 call void @fn_emit(ptr %t269) - call void @fn_emit(ptr @.str1164) + call void @fn_emit(ptr @.str1183) %t270 = load ptr, ptr %t46 call void @fn_emit(ptr %t270) - call void @fn_emit(ptr @.str1165) + call void @fn_emit(ptr @.str1184) %t271 = load ptr, ptr %t267 call void @fn_emit(ptr %t271) - call void @fn_emit(ptr @.str1166) + call void @fn_emit(ptr @.str1185) br label %ifend24 ifend24: %t272 = load ptr, ptr %t46 @@ -16222,34 +16744,34 @@ ifend24: %t281 = icmp ne i32 %t280, 0 br i1 %t281, label %then25, label %ifend27 then25: - call void @fn_emit(ptr @.str1167) + call void @fn_emit(ptr @.str1186) %t282 = load ptr, ptr %t46 call void @fn_emit(ptr %t282) - call void @fn_emit(ptr @.str1168) + call void @fn_emit(ptr @.str1187) br label %ifend27 ifend27: %t283 = load ptr, ptr %t46 call void @fn_emit(ptr %t283) - call void @fn_emit(ptr @.str1169) + call void @fn_emit(ptr @.str1188) %t284 = load ptr, ptr %t4 - %t285 = call ptr @fn_sconcat(ptr @.str1170, ptr %t284) + %t285 = call ptr @fn_sconcat(ptr @.str1189, ptr %t284) %t286 = call ptr @fn_emit_bind(ptr %t285) store ptr %t286, ptr %t287 %t288 = load ptr, ptr %t287 - %t289 = call ptr @fn_sconcat(ptr %t288, ptr @.str1172) - %t290 = call ptr @fn_sconcat(ptr @.str1171, ptr %t289) + %t289 = call ptr @fn_sconcat(ptr %t288, ptr @.str1191) + %t290 = call ptr @fn_sconcat(ptr @.str1190, ptr %t289) %t291 = call ptr @fn_emit_bind(ptr %t290) store ptr %t291, ptr %t292 %t293 = load ptr, ptr %t292 %t294 = load ptr, ptr %t4 - call void @fn_store_at(ptr @.str1173, ptr %t293, ptr %t294) - call void @fn_emit(ptr @.str1174) + call void @fn_store_at(ptr @.str1192, ptr %t293, ptr %t294) + call void @fn_emit(ptr @.str1193) %t295 = load ptr, ptr %t42 call void @fn_emit(ptr %t295) - call void @fn_emit(ptr @.str1175) + call void @fn_emit(ptr @.str1194) %t296 = load ptr, ptr %t48 call void @fn_emit(ptr %t296) - call void @fn_emit(ptr @.str1176) + call void @fn_emit(ptr @.str1195) store i32 0, ptr @g_g_term %t297 = load i32, ptr @g_nself %t298 = sub i32 %t297, 1 @@ -16294,47 +16816,47 @@ entry: br i1 %t11, label %then0, label %ifend2 then0: %t12 = load ptr, ptr %t1 - %t13 = call ptr @fn_sconcat(ptr @.str1177, ptr %t12) + %t13 = call ptr @fn_sconcat(ptr @.str1196, ptr %t12) call void @fn_perr(ptr %t13) br label %ifend2 ifend2: %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1178) + call void @fn_emit(ptr @.str1197) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1179) + call void @fn_emit(ptr @.str1198) %t17 = load ptr, ptr %t4 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1180) + call void @fn_emit(ptr @.str1199) %t18 = load ptr, ptr %t1 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1181) + call void @fn_emit(ptr @.str1200) %t19 = load ptr, ptr %t0 call void @fn_emit(ptr %t19) - call void @fn_emit(ptr @.str1182) - call void @fn_emit(ptr @.str1183) + call void @fn_emit(ptr @.str1201) + call void @fn_emit(ptr @.str1202) %t20 = load ptr, ptr %t15 call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1184) + call void @fn_emit(ptr @.str1203) %t21 = call ptr @fn_nreg() store ptr %t21, ptr %t22 - call void @fn_emit(ptr @.str1185) + call void @fn_emit(ptr @.str1204) %t23 = load ptr, ptr %t22 call void @fn_emit(ptr %t23) - call void @fn_emit(ptr @.str1186) + call void @fn_emit(ptr @.str1205) %t24 = load ptr, ptr %t4 call void @fn_emit(ptr %t24) - call void @fn_emit(ptr @.str1187) + call void @fn_emit(ptr @.str1206) %t25 = load ptr, ptr %t1 call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1188) + call void @fn_emit(ptr @.str1207) %t26 = load ptr, ptr %t1 call void @fn_emit(ptr %t26) - call void @fn_emit(ptr @.str1189) + call void @fn_emit(ptr @.str1208) %t27 = load ptr, ptr %t0 call void @fn_emit(ptr %t27) - call void @fn_emit(ptr @.str1190) + call void @fn_emit(ptr @.str1209) store i32 0, ptr %t28 br label %wcond3 wcond3: @@ -16360,32 +16882,32 @@ wbody4: store ptr %t45, ptr %t46 %t47 = call ptr @fn_nreg() store ptr %t47, ptr %t48 - call void @fn_emit(ptr @.str1191) + call void @fn_emit(ptr @.str1210) %t49 = load ptr, ptr %t48 call void @fn_emit(ptr %t49) - call void @fn_emit(ptr @.str1192) + call void @fn_emit(ptr @.str1211) %t50 = load ptr, ptr %t1 call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1193) + call void @fn_emit(ptr @.str1212) %t51 = load ptr, ptr %t22 call void @fn_emit(ptr %t51) - call void @fn_emit(ptr @.str1194) + call void @fn_emit(ptr @.str1213) %t52 = load i32, ptr %t28 %t53 = call ptr @fn_itoa(i32 %t52) call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str1195) + call void @fn_emit(ptr @.str1214) %t54 = load ptr, ptr %t46 %t55 = getelementptr inbounds %Str_Node, ptr %t54, i32 0, i32 3 %t56 = load ptr, ptr %t55 %t57 = call ptr @fn_llty(ptr %t56) store ptr %t57, ptr %t58 - store ptr @.str1196, ptr %t59 + store ptr @.str1215, ptr %t59 %t60 = load ptr, ptr %t58 - %t61 = call i32 @fn_streq(ptr %t60, ptr @.str1197) + %t61 = call i32 @fn_streq(ptr %t60, ptr @.str1216) %t62 = icmp ne i32 %t61, 0 br i1 %t62, label %then6, label %ifend8 then6: - store ptr @.str1198, ptr %t59 + store ptr @.str1217, ptr %t59 br label %ifend8 ifend8: %t63 = load ptr, ptr %t46 @@ -16409,16 +16931,16 @@ then9: store ptr %t78, ptr %t59 br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1199) + call void @fn_emit(ptr @.str1218) %t79 = load ptr, ptr %t58 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str1200) + call void @fn_emit(ptr @.str1219) %t80 = load ptr, ptr %t59 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1201) + call void @fn_emit(ptr @.str1220) %t81 = load ptr, ptr %t48 call void @fn_emit(ptr %t81) - call void @fn_emit(ptr @.str1202) + call void @fn_emit(ptr @.str1221) %t82 = load i32, ptr %t28 %t83 = add i32 %t82, 1 store i32 %t83, ptr %t28 @@ -16469,26 +16991,26 @@ wbody16: then18: %t119 = call ptr @fn_nreg() store ptr %t119, ptr %t120 - call void @fn_emit(ptr @.str1203) + call void @fn_emit(ptr @.str1222) %t121 = load ptr, ptr %t120 call void @fn_emit(ptr %t121) - call void @fn_emit(ptr @.str1204) + call void @fn_emit(ptr @.str1223) %t122 = load ptr, ptr %t1 call void @fn_emit(ptr %t122) - call void @fn_emit(ptr @.str1205) + call void @fn_emit(ptr @.str1224) %t123 = load ptr, ptr %t22 call void @fn_emit(ptr %t123) - call void @fn_emit(ptr @.str1206) + call void @fn_emit(ptr @.str1225) %t124 = load i32, ptr %t114 %t125 = call ptr @fn_itoa(i32 %t124) call void @fn_emit(ptr %t125) - call void @fn_emit(ptr @.str1207) + call void @fn_emit(ptr @.str1226) %t126 = load ptr, ptr %t108 %t127 = getelementptr inbounds %Str_Node, ptr %t126, i32 0, i32 4 %t128 = load ptr, ptr %t127 %t129 = call ptr @fn_emit_expr(ptr %t128) store ptr %t129, ptr %t130 - call void @fn_emit(ptr @.str1208) + call void @fn_emit(ptr @.str1227) %t131 = load ptr, ptr %t7 %t132 = load ptr, ptr %t108 %t133 = getelementptr inbounds %Str_Node, ptr %t132, i32 0, i32 1 @@ -16496,15 +17018,15 @@ then18: %t135 = call ptr @fn_field_type(ptr %t131, ptr %t134) %t136 = call ptr @fn_llty(ptr %t135) call void @fn_emit(ptr %t136) - call void @fn_emit(ptr @.str1209) + call void @fn_emit(ptr @.str1228) %t137 = load ptr, ptr %t130 %t138 = getelementptr inbounds %Str_Val, ptr %t137, i32 0, i32 0 %t139 = load ptr, ptr %t138 call void @fn_emit(ptr %t139) - call void @fn_emit(ptr @.str1210) + call void @fn_emit(ptr @.str1229) %t140 = load ptr, ptr %t120 call void @fn_emit(ptr %t140) - call void @fn_emit(ptr @.str1211) + call void @fn_emit(ptr @.str1230) br label %ifend20 ifend20: %t141 = load i32, ptr %t90 @@ -16533,7 +17055,7 @@ entry: %t49 = alloca i32 %t89 = alloca i32 store ptr %arg_st, ptr %t0 - %t1 = call ptr @fn_emit_bind(ptr @.str1212) + %t1 = call ptr @fn_emit_bind(ptr @.str1231) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 %t4 = getelementptr inbounds %Str_Node, ptr %t3, i32 0, i32 1 @@ -16550,24 +17072,24 @@ then0: store ptr %t12, ptr %t13 %t14 = call ptr @fn_nreg() store ptr %t14, ptr %t15 - call void @fn_emit(ptr @.str1213) + call void @fn_emit(ptr @.str1232) %t16 = load ptr, ptr %t15 call void @fn_emit(ptr %t16) - call void @fn_emit(ptr @.str1214) + call void @fn_emit(ptr @.str1233) %t17 = load ptr, ptr %t13 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1215) + call void @fn_emit(ptr @.str1234) %t18 = load ptr, ptr %t2 call void @fn_emit(ptr %t18) - call void @fn_emit(ptr @.str1216) - call void @fn_emit(ptr @.str1217) + call void @fn_emit(ptr @.str1235) + call void @fn_emit(ptr @.str1236) %t19 = load i32, ptr %t7 %t20 = call ptr @fn_itoa(i32 %t19) call void @fn_emit(ptr %t20) - call void @fn_emit(ptr @.str1218) + call void @fn_emit(ptr @.str1237) %t21 = load ptr, ptr %t15 call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1219) + call void @fn_emit(ptr @.str1238) %t22 = load ptr, ptr %t0 %t23 = getelementptr inbounds %Str_Node, ptr %t22, i32 0, i32 1 %t24 = load ptr, ptr %t23 @@ -16715,12 +17237,12 @@ entry: %t3 = load ptr, ptr %t2 %t4 = call ptr @fn_emit_expr(ptr %t3) store ptr %t4, ptr %t5 - call void @fn_emit(ptr @.str1220) + call void @fn_emit(ptr @.str1239) %t6 = load ptr, ptr %t5 %t7 = getelementptr inbounds %Str_Val, ptr %t6, i32 0, i32 0 %t8 = load ptr, ptr %t7 call void @fn_emit(ptr %t8) - call void @fn_emit(ptr @.str1221) + call void @fn_emit(ptr @.str1240) br label %ret ret: ret void @@ -16738,7 +17260,7 @@ entry: call void @fn_loc_reset() store i32 0, ptr @g_nloop store i32 0, ptr @g_nself - store ptr @.str1222, ptr @g_ret_ty + store ptr @.str1241, ptr @g_ret_ty %t1 = call ptr @fn_buf_new() store ptr %t1, ptr %t2 %t3 = call ptr @fn_buf_new() @@ -16757,25 +17279,25 @@ entry: %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1223) + call void @fn_emit(ptr @.str1242) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1224) + call void @fn_emit(ptr @.str1243) %t14 = load ptr, ptr %t5 store ptr %t14, ptr @g_code - call void @fn_emit(ptr @.str1225) + call void @fn_emit(ptr @.str1244) %t15 = load ptr, ptr %t0 %t16 = getelementptr inbounds %Str_Node, ptr %t15, i32 0, i32 1 %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1226) + call void @fn_emit(ptr @.str1245) %t18 = load ptr, ptr @g_falloc %t19 = call ptr @fn_buf_str(ptr %t18) call void @fn_emit(ptr %t19) %t20 = load ptr, ptr %t2 %t21 = call ptr @fn_buf_str(ptr %t20) call void @fn_emit(ptr %t21) - call void @fn_emit(ptr @.str1227) + call void @fn_emit(ptr @.str1246) br label %ret ret: ret void @@ -16831,12 +17353,12 @@ scend4: %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then5, label %ifend7 then5: - call void @fn_emit(ptr @.str1228) + call void @fn_emit(ptr @.str1247) %t33 = load ptr, ptr %t15 %t34 = getelementptr inbounds %Str_Node, ptr %t33, i32 0, i32 1 %t35 = load ptr, ptr %t34 call void @fn_emit(ptr %t35) - call void @fn_emit(ptr @.str1229) + call void @fn_emit(ptr @.str1248) br label %ifend7 ifend7: %t36 = load i32, ptr %t1 @@ -16897,10 +17419,10 @@ ifend5: store i32 %t26, ptr %t0 br label %wcond0 wend2: - call void @fn_emit(ptr @.str1230) - call void @fn_emit(ptr @.str1231) - call void @fn_emit(ptr @.str1232) - %t27 = call ptr @fn_find_fn(ptr @.str1233) + call void @fn_emit(ptr @.str1249) + call void @fn_emit(ptr @.str1250) + call void @fn_emit(ptr @.str1251) + %t27 = call ptr @fn_find_fn(ptr @.str1252) %t28 = icmp eq ptr %t27, null %t29 = zext i1 %t28 to i32 %t30 = icmp eq i32 %t29, 0 @@ -16908,20 +17430,20 @@ wend2: %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1234) + call void @fn_emit(ptr @.str1253) br label %ifend8 ifend8: - call void @fn_emit_calls_for_phase(ptr @.str1235) - call void @fn_emit(ptr @.str1236) - call void @fn_emit(ptr @.str1237) - %t33 = call ptr @fn_emit_bind(ptr @.str1238) + call void @fn_emit_calls_for_phase(ptr @.str1254) + call void @fn_emit(ptr @.str1255) + call void @fn_emit(ptr @.str1256) + %t33 = call ptr @fn_emit_bind(ptr @.str1257) store ptr %t33, ptr %t34 %t35 = load ptr, ptr %t34 - %t36 = call ptr @fn_sconcat(ptr %t35, ptr @.str1240) - %t37 = call ptr @fn_sconcat(ptr @.str1239, ptr %t36) + %t36 = call ptr @fn_sconcat(ptr %t35, ptr @.str1259) + %t37 = call ptr @fn_sconcat(ptr @.str1258, ptr %t36) %t38 = call ptr @fn_emit_bind(ptr %t37) store ptr %t38, ptr %t39 - %t40 = call ptr @fn_find_fn(ptr @.str1241) + %t40 = call ptr @fn_find_fn(ptr @.str1260) %t41 = icmp eq ptr %t40, null %t42 = zext i1 %t41 to i32 %t43 = icmp eq i32 %t42, 0 @@ -16929,34 +17451,34 @@ ifend8: %t45 = icmp ne i32 %t44, 0 br i1 %t45, label %then9, label %else10 then9: - %t46 = call ptr @fn_emit_bind(ptr @.str1242) + %t46 = call ptr @fn_emit_bind(ptr @.str1261) store ptr %t46, ptr %t47 %t48 = load ptr, ptr %t47 - %t49 = call ptr @fn_sconcat(ptr %t48, ptr @.str1244) - %t50 = call ptr @fn_sconcat(ptr @.str1243, ptr %t49) + %t49 = call ptr @fn_sconcat(ptr %t48, ptr @.str1263) + %t50 = call ptr @fn_sconcat(ptr @.str1262, ptr %t49) %t51 = call ptr @fn_emit_bind(ptr %t50) store ptr %t51, ptr %t52 %t53 = load ptr, ptr %t39 %t54 = load ptr, ptr %t52 - %t55 = call ptr @fn_sconcat(ptr @.str1246, ptr %t54) + %t55 = call ptr @fn_sconcat(ptr @.str1265, ptr %t54) %t56 = call ptr @fn_sconcat(ptr %t53, ptr %t55) - %t57 = call ptr @fn_sconcat(ptr @.str1245, ptr %t56) + %t57 = call ptr @fn_sconcat(ptr @.str1264, ptr %t56) %t58 = call ptr @fn_emit_bind(ptr %t57) store ptr %t58, ptr %t59 - call void @fn_emit(ptr @.str1247) + call void @fn_emit(ptr @.str1266) %t60 = load ptr, ptr %t59 call void @fn_emit(ptr %t60) - call void @fn_emit(ptr @.str1248) + call void @fn_emit(ptr @.str1267) br label %ifend11 else10: - call void @fn_emit(ptr @.str1249) + call void @fn_emit(ptr @.str1268) %t61 = load ptr, ptr %t39 call void @fn_emit(ptr %t61) - call void @fn_emit(ptr @.str1250) + call void @fn_emit(ptr @.str1269) br label %ifend11 ifend11: - call void @fn_emit(ptr @.str1251) - %t62 = call ptr @fn_find_fn(ptr @.str1252) + call void @fn_emit(ptr @.str1270) + %t62 = call ptr @fn_find_fn(ptr @.str1271) %t63 = icmp eq ptr %t62, null %t64 = zext i1 %t63 to i32 %t65 = icmp eq i32 %t64, 0 @@ -16964,22 +17486,22 @@ ifend11: %t67 = icmp ne i32 %t66, 0 br i1 %t67, label %then12, label %ifend14 then12: - %t68 = call ptr @fn_emit_bind(ptr @.str1253) + %t68 = call ptr @fn_emit_bind(ptr @.str1272) store ptr %t68, ptr %t69 - call void @fn_emit(ptr @.str1254) + call void @fn_emit(ptr @.str1273) %t70 = load ptr, ptr %t69 call void @fn_emit(ptr %t70) - call void @fn_emit(ptr @.str1255) + call void @fn_emit(ptr @.str1274) br label %ifend14 ifend14: - call void @fn_emit_calls_for_phase(ptr @.str1256) - call void @fn_emit_calls_for_phase(ptr @.str1257) - call void @fn_emit_calls_for_phase(ptr @.str1258) - call void @fn_emit_calls_for_phase(ptr @.str1259) - call void @fn_emit_calls_for_phase(ptr @.str1260) - call void @fn_emit(ptr @.str1261) - call void @fn_emit(ptr @.str1262) - %t71 = call ptr @fn_find_fn(ptr @.str1263) + call void @fn_emit_calls_for_phase(ptr @.str1275) + call void @fn_emit_calls_for_phase(ptr @.str1276) + call void @fn_emit_calls_for_phase(ptr @.str1277) + call void @fn_emit_calls_for_phase(ptr @.str1278) + call void @fn_emit_calls_for_phase(ptr @.str1279) + call void @fn_emit(ptr @.str1280) + call void @fn_emit(ptr @.str1281) + %t71 = call ptr @fn_find_fn(ptr @.str1282) %t72 = icmp eq ptr %t71, null %t73 = zext i1 %t72 to i32 %t74 = icmp eq i32 %t73, 0 @@ -16987,10 +17509,10 @@ ifend14: %t76 = icmp ne i32 %t75, 0 br i1 %t76, label %then15, label %ifend17 then15: - call void @fn_emit(ptr @.str1264) + call void @fn_emit(ptr @.str1283) br label %ifend17 ifend17: - call void @fn_emit(ptr @.str1265) + call void @fn_emit(ptr @.str1284) br label %ret ret: ret void @@ -17017,8 +17539,8 @@ entry: %t6 = load ptr, ptr %t5 %t7 = getelementptr inbounds %Str_Val, ptr %t6, i32 0, i32 0 %t8 = load ptr, ptr %t7 - %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1267) - %t10 = call ptr @fn_sconcat(ptr @.str1266, ptr %t9) + %t9 = call ptr @fn_sconcat(ptr %t8, ptr @.str1286) + %t10 = call ptr @fn_sconcat(ptr @.str1285, ptr %t9) %t11 = call ptr @fn_emit_bind(ptr %t10) store ptr %t11, ptr %t12 %t13 = load i32, ptr @g_nmach @@ -17072,7 +17594,7 @@ ifend2: %t46 = load i32, ptr @g_nmach %t47 = add i32 %t46, 1 store i32 %t47, ptr @g_nmach - %t48 = call ptr @fn_lbl(ptr @.str1268) + %t48 = call ptr @fn_lbl(ptr @.str1287) store ptr %t48, ptr %t49 store i32 0, ptr %t50 br label %wcond5 @@ -17106,28 +17628,28 @@ wbody6: %t75 = load ptr, ptr %t73 %t76 = getelementptr inbounds %Str_Val, ptr %t75, i32 0, i32 0 %t77 = load ptr, ptr %t76 - %t78 = call ptr @fn_sconcat(ptr @.str1270, ptr %t77) + %t78 = call ptr @fn_sconcat(ptr @.str1289, ptr %t77) %t79 = call ptr @fn_sconcat(ptr %t74, ptr %t78) - %t80 = call ptr @fn_sconcat(ptr @.str1269, ptr %t79) + %t80 = call ptr @fn_sconcat(ptr @.str1288, ptr %t79) %t81 = call ptr @fn_emit_bind(ptr %t80) store ptr %t81, ptr %t82 - %t83 = call ptr @fn_lbl(ptr @.str1271) + %t83 = call ptr @fn_lbl(ptr @.str1290) store ptr %t83, ptr %t84 - %t85 = call ptr @fn_lbl(ptr @.str1272) + %t85 = call ptr @fn_lbl(ptr @.str1291) store ptr %t85, ptr %t86 - call void @fn_emit(ptr @.str1273) + call void @fn_emit(ptr @.str1292) %t87 = load ptr, ptr %t82 call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str1274) + call void @fn_emit(ptr @.str1293) %t88 = load ptr, ptr %t84 call void @fn_emit(ptr %t88) - call void @fn_emit(ptr @.str1275) + call void @fn_emit(ptr @.str1294) %t89 = load ptr, ptr %t86 call void @fn_emit(ptr %t89) - call void @fn_emit(ptr @.str1276) + call void @fn_emit(ptr @.str1295) %t90 = load ptr, ptr %t84 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1277) + call void @fn_emit(ptr @.str1296) store i32 0, ptr @g_g_term %t91 = load ptr, ptr %t68 %t92 = getelementptr inbounds %Str_Node, ptr %t91, i32 0, i32 4 @@ -17139,15 +17661,15 @@ wbody6: %t97 = icmp ne i32 %t96, 0 br i1 %t97, label %then8, label %ifend10 then8: - call void @fn_emit(ptr @.str1278) + call void @fn_emit(ptr @.str1297) %t98 = load ptr, ptr %t49 call void @fn_emit(ptr %t98) - call void @fn_emit(ptr @.str1279) + call void @fn_emit(ptr @.str1298) br label %ifend10 ifend10: %t99 = load ptr, ptr %t86 call void @fn_emit(ptr %t99) - call void @fn_emit(ptr @.str1280) + call void @fn_emit(ptr @.str1299) store i32 0, ptr @g_g_term %t100 = load i32, ptr %t50 %t101 = add i32 %t100, 1 @@ -17160,15 +17682,15 @@ wend7: %t105 = icmp ne i32 %t104, 0 br i1 %t105, label %then11, label %ifend13 then11: - call void @fn_emit(ptr @.str1281) + call void @fn_emit(ptr @.str1300) %t106 = load ptr, ptr %t49 call void @fn_emit(ptr %t106) - call void @fn_emit(ptr @.str1282) + call void @fn_emit(ptr @.str1301) br label %ifend13 ifend13: %t107 = load ptr, ptr %t49 call void @fn_emit(ptr %t107) - call void @fn_emit(ptr @.str1283) + call void @fn_emit(ptr @.str1302) store i32 0, ptr @g_g_term %t108 = load i32, ptr @g_nmach %t109 = sub i32 %t108, 1 @@ -17193,7 +17715,7 @@ entry: %t4 = icmp ne i32 %t3, 0 br i1 %t4, label %then0, label %ifend2 then0: - call void @fn_perr(ptr @.str1284) + call void @fn_perr(ptr @.str1303) br label %ifend2 ifend2: %t5 = load ptr, ptr @g_mach_stk @@ -17261,7 +17783,7 @@ then9: %t53 = load ptr, ptr %t0 %t54 = getelementptr inbounds %Str_Node, ptr %t53, i32 0, i32 1 %t55 = load ptr, ptr %t54 - %t56 = call ptr @fn_sconcat(ptr @.str1285, ptr %t55) + %t56 = call ptr @fn_sconcat(ptr @.str1304, ptr %t55) call void @fn_perr(ptr %t56) br label %ifend11 ifend11: @@ -17275,17 +17797,17 @@ ifend11: %t64 = load ptr, ptr %t63 %t65 = call ptr @fn_emit_expr(ptr %t64) store ptr %t65, ptr %t66 - call void @fn_emit(ptr @.str1286) + call void @fn_emit(ptr @.str1305) %t67 = load ptr, ptr %t61 %t68 = getelementptr inbounds %Str_Val, ptr %t67, i32 0, i32 0 %t69 = load ptr, ptr %t68 call void @fn_emit(ptr %t69) - call void @fn_emit(ptr @.str1287) + call void @fn_emit(ptr @.str1306) %t70 = load ptr, ptr %t66 %t71 = getelementptr inbounds %Str_Val, ptr %t70, i32 0, i32 0 %t72 = load ptr, ptr %t71 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str1288) + call void @fn_emit(ptr @.str1307) br label %ret ret: ret void @@ -17302,24 +17824,24 @@ entry: store ptr %arg_bytes, ptr %t2 %t3 = load i32, ptr @g_g_iok %t4 = call ptr @fn_itoa(i32 %t3) - %t5 = call ptr @fn_sconcat(ptr @.str1289, ptr %t4) + %t5 = call ptr @fn_sconcat(ptr @.str1308, ptr %t4) store ptr %t5, ptr %t6 %t7 = load i32, ptr @g_g_iok %t8 = add i32 %t7, 1 store i32 %t8, ptr @g_g_iok - call void @fn_emit(ptr @.str1290) + call void @fn_emit(ptr @.str1309) %t9 = load ptr, ptr %t6 call void @fn_emit(ptr %t9) - call void @fn_emit(ptr @.str1291) + call void @fn_emit(ptr @.str1310) %t10 = load ptr, ptr %t0 call void @fn_emit(ptr %t10) - call void @fn_emit(ptr @.str1292) + call void @fn_emit(ptr @.str1311) %t11 = load ptr, ptr %t1 call void @fn_emit(ptr %t11) - call void @fn_emit(ptr @.str1293) + call void @fn_emit(ptr @.str1312) %t12 = load ptr, ptr %t2 call void @fn_emit(ptr %t12) - call void @fn_emit(ptr @.str1294) + call void @fn_emit(ptr @.str1313) br label %ret ret: ret void @@ -17338,19 +17860,19 @@ entry: %t1 = call ptr @fn_itoa(i32 1024) store ptr %t1, ptr %t2 %t3 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t3, ptr @.str1295, ptr @.str1296) + call void @fn_emit_io(ptr %t3, ptr @.str1314, ptr @.str1315) %t4 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t4, ptr @.str1297, ptr @.str1298) - call void @fn_emit(ptr @.str1299) + call void @fn_emit_io(ptr %t4, ptr @.str1316, ptr @.str1317) + call void @fn_emit(ptr @.str1318) %t5 = load ptr, ptr %t2 call void @fn_emit(ptr %t5) - call void @fn_emit(ptr @.str1300) + call void @fn_emit(ptr @.str1319) %t6 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t6, ptr @.str1301, ptr @.str1302) + call void @fn_emit_io(ptr %t6, ptr @.str1320, ptr @.str1321) %t7 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t7, ptr @.str1303, ptr @.str1304) + call void @fn_emit_io(ptr %t7, ptr @.str1322, ptr @.str1323) %t8 = load ptr, ptr %t0 - call void @fn_emit_io(ptr %t8, ptr @.str1305, ptr @.str1306) + call void @fn_emit_io(ptr %t8, ptr @.str1324, ptr @.str1325) store i32 0, ptr %t9 br label %wcond0 wcond0: @@ -17385,8 +17907,8 @@ then3: %t34 = load ptr, ptr %t33 %t35 = getelementptr inbounds %Str_Node, ptr %t34, i32 0, i32 1 %t36 = load ptr, ptr %t35 - %t37 = call ptr @fn_sconcat(ptr @.str1307, ptr %t36) - call void @fn_emit_io(ptr %t28, ptr %t37, ptr @.str1308) + %t37 = call ptr @fn_sconcat(ptr @.str1326, ptr %t36) + call void @fn_emit_io(ptr %t28, ptr %t37, ptr @.str1327) br label %ifend5 ifend5: %t38 = load i32, ptr %t9 @@ -17431,26 +17953,26 @@ then9: store ptr %t66, ptr %t67 %t68 = load i32, ptr %t40 %t69 = call ptr @fn_itoa(i32 %t68) - %t70 = call ptr @fn_sconcat(ptr @.str1309, ptr %t69) + %t70 = call ptr @fn_sconcat(ptr @.str1328, ptr %t69) store ptr %t70, ptr %t71 - call void @fn_emit(ptr @.str1310) + call void @fn_emit(ptr @.str1329) %t72 = load ptr, ptr %t71 call void @fn_emit(ptr %t72) - call void @fn_emit(ptr @.str1311) + call void @fn_emit(ptr @.str1330) %t73 = load ptr, ptr %t67 call void @fn_emit(ptr %t73) - call void @fn_emit(ptr @.str1312) + call void @fn_emit(ptr @.str1331) %t74 = load ptr, ptr %t2 call void @fn_emit(ptr %t74) - call void @fn_emit(ptr @.str1313) + call void @fn_emit(ptr @.str1332) %t75 = load ptr, ptr %t0 %t76 = load ptr, ptr %t67 - %t77 = call ptr @fn_sconcat(ptr @.str1314, ptr %t76) + %t77 = call ptr @fn_sconcat(ptr @.str1333, ptr %t76) %t78 = load ptr, ptr %t71 call void @fn_emit_io(ptr %t75, ptr %t77, ptr %t78) %t79 = load ptr, ptr %t0 %t80 = load ptr, ptr %t67 - %t81 = call ptr @fn_sconcat(ptr @.str1315, ptr %t80) + %t81 = call ptr @fn_sconcat(ptr @.str1334, ptr %t80) %t82 = load ptr, ptr %t2 call void @fn_emit_io(ptr %t79, ptr %t81, ptr %t82) %t83 = load i32, ptr %t40 @@ -17472,47 +17994,47 @@ define void @fn_emit_snapshot() { entry: %t5 = alloca i32 %t11 = alloca i32 - call void @fn_emith(ptr @.str1316) - call void @fn_emith(ptr @.str1317) - call void @fn_emith(ptr @.str1318) - %t0 = call ptr @fn_find_fn(ptr @.str1319) + call void @fn_emith(ptr @.str1335) + call void @fn_emith(ptr @.str1336) + call void @fn_emith(ptr @.str1337) + %t0 = call ptr @fn_find_fn(ptr @.str1338) %t1 = icmp eq ptr %t0, null %t2 = zext i1 %t1 to i32 %t3 = icmp eq i32 %t2, 0 %t4 = zext i1 %t3 to i32 store i32 %t4, ptr %t5 - %t6 = call ptr @fn_find_fn(ptr @.str1320) + %t6 = call ptr @fn_find_fn(ptr @.str1339) %t7 = icmp eq ptr %t6, null %t8 = zext i1 %t7 to i32 %t9 = icmp eq i32 %t8, 0 %t10 = zext i1 %t9 to i32 store i32 %t10, ptr %t11 - call void @fn_emit(ptr @.str1321) - call void @fn_emit(ptr @.str1322) - call void @fn_emit(ptr @.str1323) - call void @fn_emit(ptr @.str1324) - call void @fn_emit_snapshot_blocks(ptr @.str1325) + call void @fn_emit(ptr @.str1340) + call void @fn_emit(ptr @.str1341) + call void @fn_emit(ptr @.str1342) + call void @fn_emit(ptr @.str1343) + call void @fn_emit_snapshot_blocks(ptr @.str1344) %t12 = load i32, ptr %t5 %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1326) + call void @fn_emit(ptr @.str1345) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1327) - call void @fn_emit(ptr @.str1328) - call void @fn_emit(ptr @.str1329) - call void @fn_emit(ptr @.str1330) - call void @fn_emit(ptr @.str1331) - call void @fn_emit_snapshot_blocks(ptr @.str1332) + call void @fn_emit(ptr @.str1346) + call void @fn_emit(ptr @.str1347) + call void @fn_emit(ptr @.str1348) + call void @fn_emit(ptr @.str1349) + call void @fn_emit(ptr @.str1350) + call void @fn_emit_snapshot_blocks(ptr @.str1351) %t14 = load i32, ptr %t11 %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1333) + call void @fn_emit(ptr @.str1352) br label %ifend5 ifend5: - call void @fn_emit(ptr @.str1334) + call void @fn_emit(ptr @.str1353) br label %ret ret: ret void @@ -17529,7 +18051,7 @@ entry: %t3 = load ptr, ptr %t2 store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t4 - %t6 = call i32 @fn_streq(ptr %t5, ptr @.str1335) + %t6 = call i32 @fn_streq(ptr %t5, ptr @.str1354) %t7 = icmp ne i32 %t6, 0 br i1 %t7, label %then0, label %ifend2 then0: @@ -17537,7 +18059,7 @@ then0: br label %ret ifend2: %t8 = load ptr, ptr %t4 - %t9 = call i32 @fn_streq(ptr %t8, ptr @.str1336) + %t9 = call i32 @fn_streq(ptr %t8, ptr @.str1355) %t10 = icmp ne i32 %t9, 0 br i1 %t10, label %then3, label %ifend5 then3: @@ -17545,7 +18067,7 @@ then3: br label %ret ifend5: %t11 = load ptr, ptr %t4 - %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1337) + %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1356) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then6, label %ifend8 then6: @@ -17553,7 +18075,7 @@ then6: br label %ret ifend8: %t14 = load ptr, ptr %t4 - %t15 = call i32 @fn_streq(ptr %t14, ptr @.str1338) + %t15 = call i32 @fn_streq(ptr %t14, ptr @.str1357) %t16 = icmp ne i32 %t15, 0 br i1 %t16, label %then9, label %ifend11 then9: @@ -17561,7 +18083,7 @@ then9: br label %ret ifend11: %t17 = load ptr, ptr %t4 - %t18 = call i32 @fn_streq(ptr %t17, ptr @.str1339) + %t18 = call i32 @fn_streq(ptr %t17, ptr @.str1358) %t19 = icmp ne i32 %t18, 0 br i1 %t19, label %then12, label %ifend14 then12: @@ -17569,7 +18091,7 @@ then12: br label %ret ifend14: %t20 = load ptr, ptr %t4 - %t21 = call i32 @fn_streq(ptr %t20, ptr @.str1340) + %t21 = call i32 @fn_streq(ptr %t20, ptr @.str1359) %t22 = icmp ne i32 %t21, 0 br i1 %t22, label %then15, label %ifend17 then15: @@ -17577,7 +18099,7 @@ then15: br label %ret ifend17: %t23 = load ptr, ptr %t4 - %t24 = call i32 @fn_streq(ptr %t23, ptr @.str1341) + %t24 = call i32 @fn_streq(ptr %t23, ptr @.str1360) %t25 = icmp ne i32 %t24, 0 br i1 %t25, label %then18, label %ifend20 then18: @@ -18075,7 +18597,7 @@ wbody12: %t75 = load i32, ptr %t9 %t76 = getelementptr inbounds ptr, ptr %t74, i32 %t75 %t77 = load ptr, ptr %t76 - %t78 = call ptr @fn_ui_prop(ptr %t77, ptr @.str1342) + %t78 = call ptr @fn_ui_prop(ptr %t77, ptr @.str1361) store ptr %t78, ptr %t79 %t80 = load ptr, ptr %t79 %t81 = icmp eq ptr %t80, null @@ -18205,18 +18727,18 @@ entry: store i32 %arg_idx, ptr %t0 store i32 %arg_key, ptr %t1 store ptr %arg_val, ptr %t2 - call void @fn_emit(ptr @.str1343) + call void @fn_emit(ptr @.str1362) %t3 = load i32, ptr %t0 %t4 = call ptr @fn_itoa(i32 %t3) call void @fn_emit(ptr %t4) - call void @fn_emit(ptr @.str1344) + call void @fn_emit(ptr @.str1363) %t5 = load i32, ptr %t1 %t6 = call ptr @fn_itoa(i32 %t5) call void @fn_emit(ptr %t6) - call void @fn_emit(ptr @.str1345) + call void @fn_emit(ptr @.str1364) %t7 = load ptr, ptr %t2 call void @fn_emit(ptr %t7) - call void @fn_emit(ptr @.str1346) + call void @fn_emit(ptr @.str1365) br label %ret ret: ret void @@ -18228,7 +18750,7 @@ entry: %t0 = alloca ptr store ptr %arg_k, ptr %t0 %t1 = load ptr, ptr %t0 - %t2 = call i32 @fn_streq(ptr %t1, ptr @.str1347) + %t2 = call i32 @fn_streq(ptr %t1, ptr @.str1366) %t3 = icmp ne i32 %t2, 0 br i1 %t3, label %then0, label %ifend2 then0: @@ -18236,7 +18758,7 @@ then0: br label %ret ifend2: %t4 = load ptr, ptr %t0 - %t5 = call i32 @fn_streq(ptr %t4, ptr @.str1348) + %t5 = call i32 @fn_streq(ptr %t4, ptr @.str1367) %t6 = icmp ne i32 %t5, 0 br i1 %t6, label %then3, label %ifend5 then3: @@ -18244,7 +18766,7 @@ then3: br label %ret ifend5: %t7 = load ptr, ptr %t0 - %t8 = call i32 @fn_streq(ptr %t7, ptr @.str1349) + %t8 = call i32 @fn_streq(ptr %t7, ptr @.str1368) %t9 = icmp ne i32 %t8, 0 br i1 %t9, label %then6, label %ifend8 then6: @@ -18252,7 +18774,7 @@ then6: br label %ret ifend8: %t10 = load ptr, ptr %t0 - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1350) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1369) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then9, label %ifend11 then9: @@ -18260,7 +18782,7 @@ then9: br label %ret ifend11: %t13 = load ptr, ptr %t0 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1351) + %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1370) %t15 = icmp ne i32 %t14, 0 br i1 %t15, label %then12, label %ifend14 then12: @@ -18268,7 +18790,7 @@ then12: br label %ret ifend14: %t16 = load ptr, ptr %t0 - %t17 = call i32 @fn_streq(ptr %t16, ptr @.str1352) + %t17 = call i32 @fn_streq(ptr %t16, ptr @.str1371) %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %then15, label %ifend17 then15: @@ -18276,7 +18798,7 @@ then15: br label %ret ifend17: %t19 = load ptr, ptr %t0 - %t20 = call i32 @fn_streq(ptr %t19, ptr @.str1353) + %t20 = call i32 @fn_streq(ptr %t19, ptr @.str1372) %t21 = icmp ne i32 %t20, 0 br i1 %t21, label %then18, label %ifend20 then18: @@ -18284,7 +18806,7 @@ then18: br label %ret ifend20: %t22 = load ptr, ptr %t0 - %t23 = call i32 @fn_streq(ptr %t22, ptr @.str1354) + %t23 = call i32 @fn_streq(ptr %t22, ptr @.str1373) %t24 = icmp ne i32 %t23, 0 br i1 %t24, label %then21, label %ifend23 then21: @@ -18292,7 +18814,7 @@ then21: br label %ret ifend23: %t25 = load ptr, ptr %t0 - %t26 = call i32 @fn_streq(ptr %t25, ptr @.str1355) + %t26 = call i32 @fn_streq(ptr %t25, ptr @.str1374) %t27 = icmp ne i32 %t26, 0 br i1 %t27, label %then24, label %ifend26 then24: @@ -18300,7 +18822,7 @@ then24: br label %ret ifend26: %t28 = load ptr, ptr %t0 - %t29 = call i32 @fn_streq(ptr %t28, ptr @.str1356) + %t29 = call i32 @fn_streq(ptr %t28, ptr @.str1375) %t30 = icmp ne i32 %t29, 0 br i1 %t30, label %then27, label %ifend29 then27: @@ -18308,7 +18830,7 @@ then27: br label %ret ifend29: %t31 = load ptr, ptr %t0 - %t32 = call i32 @fn_streq(ptr %t31, ptr @.str1357) + %t32 = call i32 @fn_streq(ptr %t31, ptr @.str1376) %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %then30, label %ifend32 then30: @@ -18316,7 +18838,7 @@ then30: br label %ret ifend32: %t34 = load ptr, ptr %t0 - %t35 = call i32 @fn_streq(ptr %t34, ptr @.str1358) + %t35 = call i32 @fn_streq(ptr %t34, ptr @.str1377) %t36 = icmp ne i32 %t35, 0 br i1 %t36, label %then33, label %ifend35 then33: @@ -18324,7 +18846,7 @@ then33: br label %ret ifend35: %t37 = load ptr, ptr %t0 - %t38 = call i32 @fn_streq(ptr %t37, ptr @.str1359) + %t38 = call i32 @fn_streq(ptr %t37, ptr @.str1378) %t39 = icmp ne i32 %t38, 0 br i1 %t39, label %then36, label %ifend38 then36: @@ -18332,7 +18854,7 @@ then36: br label %ret ifend38: %t40 = load ptr, ptr %t0 - %t41 = call i32 @fn_streq(ptr %t40, ptr @.str1360) + %t41 = call i32 @fn_streq(ptr %t40, ptr @.str1379) %t42 = icmp ne i32 %t41, 0 br i1 %t42, label %then39, label %ifend41 then39: @@ -18381,13 +18903,13 @@ entry: store ptr %t3, ptr %t4 %t5 = load ptr, ptr %t1 store ptr %t5, ptr @g_code - call void @fn_emit(ptr @.str1361) + call void @fn_emit(ptr @.str1380) %t6 = load ptr, ptr @g_uiw %t7 = getelementptr inbounds %LSlice, ptr %t6, i32 0, i32 1 %t8 = load i32, ptr %t7 %t9 = call ptr @fn_itoa(i32 %t8) call void @fn_emit(ptr %t9) - call void @fn_emit(ptr @.str1362) + call void @fn_emit(ptr @.str1381) store i32 0, ptr %t10 br label %wcond0 wcond0: @@ -18430,7 +18952,7 @@ wbody1: br i1 %t42, label %then3, label %ifend5 then3: %t43 = load i32, ptr %t10 - call void @fn_ll_ui_set(i32 %t43, i32 17, ptr @.str1363) + call void @fn_ll_ui_set(i32 %t43, i32 17, ptr @.str1382) br label %ifend5 ifend5: store i32 0, ptr %t44 @@ -18469,7 +18991,7 @@ wbody7: %t73 = load ptr, ptr %t72 store ptr %t73, ptr %t74 %t75 = load ptr, ptr %t70 - %t76 = call i32 @fn_streq(ptr %t75, ptr @.str1364) + %t76 = call i32 @fn_streq(ptr %t75, ptr @.str1383) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %then9, label %ifend11 then9: @@ -18479,34 +19001,34 @@ then9: br label %wcond6 ifend11: %t80 = load ptr, ptr %t70 - %t81 = call i32 @fn_streq(ptr %t80, ptr @.str1365) + %t81 = call i32 @fn_streq(ptr %t80, ptr @.str1384) %t82 = icmp ne i32 %t81, 0 br i1 %t82, label %then12, label %else13 then12: %t83 = load ptr, ptr %t74 %t84 = call ptr @fn_emit_expr(ptr %t83) store ptr %t84, ptr %t85 - call void @fn_emit(ptr @.str1366) + call void @fn_emit(ptr @.str1385) %t86 = load i32, ptr %t10 %t87 = call ptr @fn_itoa(i32 %t86) call void @fn_emit(ptr %t87) - call void @fn_emit(ptr @.str1367) + call void @fn_emit(ptr @.str1386) %t88 = load ptr, ptr %t85 %t89 = getelementptr inbounds %Str_Val, ptr %t88, i32 0, i32 0 %t90 = load ptr, ptr %t89 call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1368) + call void @fn_emit(ptr @.str1387) br label %ifend14 else13: %t92 = load ptr, ptr %t70 - %t93 = call i32 @fn_streq(ptr %t92, ptr @.str1369) + %t93 = call i32 @fn_streq(ptr %t92, ptr @.str1388) %t94 = icmp ne i32 %t93, 0 %t95 = zext i1 %t94 to i32 store i32 %t95, ptr %t91 br i1 %t94, label %scend16, label %sc15 sc15: %t96 = load ptr, ptr %t70 - %t97 = call i32 @fn_streq(ptr %t96, ptr @.str1370) + %t97 = call i32 @fn_streq(ptr %t96, ptr @.str1389) %t98 = icmp ne i32 %t97, 0 %t99 = zext i1 %t98 to i32 store i32 %t99, ptr %t91 @@ -18522,12 +19044,12 @@ then17: %t105 = load ptr, ptr %t104 %t106 = getelementptr inbounds %Str_Val, ptr %t105, i32 0, i32 0 %t107 = load ptr, ptr %t106 - %t108 = call ptr @fn_sconcat(ptr %t107, ptr @.str1372) - %t109 = call ptr @fn_sconcat(ptr @.str1371, ptr %t108) + %t108 = call ptr @fn_sconcat(ptr %t107, ptr @.str1391) + %t109 = call ptr @fn_sconcat(ptr @.str1390, ptr %t108) %t110 = call ptr @fn_emit_bind(ptr %t109) store ptr %t110, ptr %t111 %t112 = load ptr, ptr %t70 - %t113 = call i32 @fn_streq(ptr %t112, ptr @.str1373) + %t113 = call i32 @fn_streq(ptr %t112, ptr @.str1392) %t114 = icmp ne i32 %t113, 0 br i1 %t114, label %then20, label %else21 then20: @@ -18544,7 +19066,7 @@ ifend22: br label %ifend19 else18: %t119 = load ptr, ptr %t70 - %t120 = call i32 @fn_streq(ptr %t119, ptr @.str1374) + %t120 = call i32 @fn_streq(ptr %t119, ptr @.str1393) %t121 = icmp ne i32 %t120, 0 br i1 %t121, label %then23, label %else24 then23: @@ -18560,7 +19082,7 @@ then26: %t129 = load ptr, ptr %t74 %t130 = getelementptr inbounds %Str_Node, ptr %t129, i32 0, i32 1 %t131 = load ptr, ptr %t130 - %t132 = call i32 @fn_streq(ptr %t131, ptr @.str1375) + %t132 = call i32 @fn_streq(ptr %t131, ptr @.str1394) %t133 = icmp ne i32 %t132, 0 br i1 %t133, label %then29, label %ifend31 then29: @@ -18570,7 +19092,7 @@ ifend31: %t134 = load ptr, ptr %t74 %t135 = getelementptr inbounds %Str_Node, ptr %t134, i32 0, i32 1 %t136 = load ptr, ptr %t135 - %t137 = call i32 @fn_streq(ptr %t136, ptr @.str1376) + %t137 = call i32 @fn_streq(ptr %t136, ptr @.str1395) %t138 = icmp ne i32 %t137, 0 br i1 %t138, label %then32, label %ifend34 then32: @@ -18634,7 +19156,7 @@ scend39: br i1 %t176, label %then40, label %ifend42 then40: %t177 = load i32, ptr %t10 - call void @fn_ll_ui_set(i32 %t177, i32 6, ptr @.str1377) + call void @fn_ll_ui_set(i32 %t177, i32 6, ptr @.str1396) br label %ifend42 ifend42: br label %ifend37 @@ -18657,14 +19179,14 @@ wend8: wend2: %t182 = load ptr, ptr %t4 store ptr %t182, ptr @g_code - call void @fn_emit(ptr @.str1378) + call void @fn_emit(ptr @.str1397) %t183 = load ptr, ptr @g_falloc %t184 = call ptr @fn_buf_str(ptr %t183) call void @fn_emit(ptr %t184) %t185 = load ptr, ptr %t1 %t186 = call ptr @fn_buf_str(ptr %t185) call void @fn_emit(ptr %t186) - call void @fn_emit(ptr @.str1379) + call void @fn_emit(ptr @.str1398) br label %ret ret: ret void @@ -18695,7 +19217,7 @@ wbody1: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then3, label %ifend5 then3: - call void @fn_emit(ptr @.str1380) + call void @fn_emit(ptr @.str1399) br label %ifend5 ifend5: %t15 = load ptr, ptr %t0 @@ -18710,7 +19232,7 @@ ifend5: %t24 = load ptr, ptr %t23 %t25 = call ptr @fn_llty(ptr %t24) call void @fn_emit(ptr %t25) - call void @fn_emit(ptr @.str1381) + call void @fn_emit(ptr @.str1400) %t26 = load ptr, ptr %t0 %t27 = getelementptr inbounds %Str_Node, ptr %t26, i32 0, i32 7 %t28 = load ptr, ptr %t27 @@ -18764,19 +19286,19 @@ entry: %t11 = call ptr @fn_llty(ptr %t10) store ptr %t11, ptr %t12 %t13 = load ptr, ptr %t12 - %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1382) + %t14 = call i32 @fn_streq(ptr %t13, ptr @.str1401) %t15 = icmp eq i32 %t14, 0 %t16 = zext i1 %t15 to i32 %t17 = icmp ne i32 %t16, 0 br i1 %t17, label %then0, label %ifend2 then0: %t18 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t18, ptr @.str1383) + call void @fn_buf_puts(ptr %t18, ptr @.str1402) %t19 = load ptr, ptr @g_falloc %t20 = load ptr, ptr %t12 call void @fn_buf_puts(ptr %t19, ptr %t20) %t21 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t21, ptr @.str1384) + call void @fn_buf_puts(ptr %t21, ptr @.str1403) br label %ifend2 ifend2: store i32 0, ptr %t22 @@ -18808,21 +19330,21 @@ wbody4: %t44 = call ptr @fn_llty(ptr %t43) %t45 = call ptr @fn_emit_alloca(ptr %t44) store ptr %t45, ptr %t46 - call void @fn_emit(ptr @.str1385) + call void @fn_emit(ptr @.str1404) %t47 = load ptr, ptr %t40 %t48 = getelementptr inbounds %Str_Node, ptr %t47, i32 0, i32 3 %t49 = load ptr, ptr %t48 %t50 = call ptr @fn_llty(ptr %t49) call void @fn_emit(ptr %t50) - call void @fn_emit(ptr @.str1386) + call void @fn_emit(ptr @.str1405) %t51 = load ptr, ptr %t40 %t52 = getelementptr inbounds %Str_Node, ptr %t51, i32 0, i32 1 %t53 = load ptr, ptr %t52 call void @fn_emit(ptr %t53) - call void @fn_emit(ptr @.str1387) + call void @fn_emit(ptr @.str1406) %t54 = load ptr, ptr %t46 call void @fn_emit(ptr %t54) - call void @fn_emit(ptr @.str1388) + call void @fn_emit(ptr @.str1407) %t55 = load ptr, ptr %t40 %t56 = getelementptr inbounds %Str_Node, ptr %t55, i32 0, i32 1 %t57 = load ptr, ptr %t56 @@ -18846,53 +19368,53 @@ wend5: %t70 = icmp ne i32 %t69, 0 br i1 %t70, label %then6, label %ifend8 then6: - call void @fn_emit(ptr @.str1389) + call void @fn_emit(ptr @.str1408) br label %ifend8 ifend8: - call void @fn_emit(ptr @.str1390) + call void @fn_emit(ptr @.str1409) %t71 = load ptr, ptr %t12 - %t72 = call i32 @fn_streq(ptr %t71, ptr @.str1391) + %t72 = call i32 @fn_streq(ptr %t71, ptr @.str1410) %t73 = icmp ne i32 %t72, 0 br i1 %t73, label %then9, label %else10 then9: - call void @fn_emit(ptr @.str1392) + call void @fn_emit(ptr @.str1411) br label %ifend11 else10: %t74 = load ptr, ptr %t12 - %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str1394) - %t76 = call ptr @fn_sconcat(ptr @.str1393, ptr %t75) + %t75 = call ptr @fn_sconcat(ptr %t74, ptr @.str1413) + %t76 = call ptr @fn_sconcat(ptr @.str1412, ptr %t75) %t77 = call ptr @fn_emit_bind(ptr %t76) store ptr %t77, ptr %t78 - call void @fn_emit(ptr @.str1395) + call void @fn_emit(ptr @.str1414) %t79 = load ptr, ptr %t12 call void @fn_emit(ptr %t79) - call void @fn_emit(ptr @.str1396) + call void @fn_emit(ptr @.str1415) %t80 = load ptr, ptr %t78 call void @fn_emit(ptr %t80) - call void @fn_emit(ptr @.str1397) + call void @fn_emit(ptr @.str1416) br label %ifend11 ifend11: %t81 = load ptr, ptr %t8 store ptr %t81, ptr @g_code - call void @fn_emit(ptr @.str1398) + call void @fn_emit(ptr @.str1417) %t82 = load ptr, ptr %t12 call void @fn_emit(ptr %t82) - call void @fn_emit(ptr @.str1399) + call void @fn_emit(ptr @.str1418) %t83 = load ptr, ptr %t0 %t84 = getelementptr inbounds %Str_Node, ptr %t83, i32 0, i32 1 %t85 = load ptr, ptr %t84 call void @fn_emit(ptr %t85) - call void @fn_emit(ptr @.str1400) + call void @fn_emit(ptr @.str1419) %t86 = load ptr, ptr %t0 call void @fn_emit_params_sig(ptr %t86) - call void @fn_emit(ptr @.str1401) + call void @fn_emit(ptr @.str1420) %t87 = load ptr, ptr @g_falloc %t88 = call ptr @fn_buf_str(ptr %t87) call void @fn_emit(ptr %t88) %t89 = load ptr, ptr %t5 %t90 = call ptr @fn_buf_str(ptr %t89) call void @fn_emit(ptr %t90) - call void @fn_emit(ptr @.str1402) + call void @fn_emit(ptr @.str1421) br label %ret ret: ret void @@ -18910,7 +19432,7 @@ entry: store i32 0, ptr @g_g_term call void @fn_loc_reset() store i32 0, ptr @g_nloop - store ptr @.str1403, ptr @g_ret_ty + store ptr @.str1422, ptr @g_ret_ty %t1 = call ptr @fn_buf_new() store ptr %t1, ptr %t2 %t3 = call ptr @fn_buf_new() @@ -18920,10 +19442,10 @@ entry: %t6 = load ptr, ptr %t2 store ptr %t6, ptr @g_code %t7 = load ptr, ptr @g_falloc - call void @fn_buf_puts(ptr %t7, ptr @.str1404) - call void @fn_emit(ptr @.str1405) - call void @fn_emit(ptr @.str1406) - call void @fn_emit(ptr @.str1407) + call void @fn_buf_puts(ptr %t7, ptr @.str1423) + call void @fn_emit(ptr @.str1424) + call void @fn_emit(ptr @.str1425) + call void @fn_emit(ptr @.str1426) %t8 = load ptr, ptr %t0 %t9 = getelementptr inbounds %Str_Node, ptr %t8, i32 0, i32 4 %t10 = load ptr, ptr %t9 @@ -18934,26 +19456,26 @@ entry: %t14 = icmp ne i32 %t13, 0 br i1 %t14, label %then0, label %ifend2 then0: - call void @fn_emit(ptr @.str1408) + call void @fn_emit(ptr @.str1427) br label %ifend2 ifend2: - call void @fn_emit(ptr @.str1409) - %t15 = call ptr @fn_emit_bind(ptr @.str1410) + call void @fn_emit(ptr @.str1428) + %t15 = call ptr @fn_emit_bind(ptr @.str1429) store ptr %t15, ptr %t16 - call void @fn_emit(ptr @.str1411) + call void @fn_emit(ptr @.str1430) %t17 = load ptr, ptr %t16 call void @fn_emit(ptr %t17) - call void @fn_emit(ptr @.str1412) + call void @fn_emit(ptr @.str1431) %t18 = load ptr, ptr %t5 store ptr %t18, ptr @g_code - call void @fn_emit(ptr @.str1413) + call void @fn_emit(ptr @.str1432) %t19 = load ptr, ptr @g_falloc %t20 = call ptr @fn_buf_str(ptr %t19) call void @fn_emit(ptr %t20) %t21 = load ptr, ptr %t2 %t22 = call ptr @fn_buf_str(ptr %t21) call void @fn_emit(ptr %t22) - call void @fn_emit(ptr @.str1414) + call void @fn_emit(ptr @.str1433) br label %ret ret: ret void @@ -19179,7 +19701,7 @@ then0: br label %ret ifend2: %t13 = load ptr, ptr %t0 - %t14 = call ptr @fopen(ptr %t13, ptr @.str1415) + %t14 = call ptr @fopen(ptr %t13, ptr @.str1434) store ptr %t14, ptr %t15 %t16 = load ptr, ptr %t15 %t17 = icmp eq ptr %t16, null @@ -19288,7 +19810,7 @@ then0: %t9 = load i32, ptr %t3 %t10 = sub i32 %t9, 6 %t11 = call ptr @fn_substr(ptr %t8, i32 %t10, i32 6) - %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1416) + %t12 = call i32 @fn_streq(ptr %t11, ptr @.str1435) %t13 = icmp ne i32 %t12, 0 br i1 %t13, label %then3, label %ifend5 then3: @@ -19373,7 +19895,7 @@ then3: br label %ret ifend5: %t19 = load ptr, ptr %t0 - %t20 = call ptr @fn_sconcat(ptr %t19, ptr @.str1417) + %t20 = call ptr @fn_sconcat(ptr %t19, ptr @.str1436) store ptr %t20, ptr %retval br label %ret ret: @@ -19438,7 +19960,7 @@ entry: %t8 = getelementptr ptr, ptr %t7, i32 0 %t9 = load ptr, ptr %t8 %t10 = call ptr @fn_base_name(ptr %t9) - %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1418) + %t11 = call i32 @fn_streq(ptr %t10, ptr @.str1437) %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %then0, label %ifend2 then0: @@ -19461,7 +19983,7 @@ wbody4: %t22 = load ptr, ptr %t21 store ptr %t22, ptr %t23 %t24 = load ptr, ptr %t23 - %t25 = call i32 @fn_streq(ptr %t24, ptr @.str1419) + %t25 = call i32 @fn_streq(ptr %t24, ptr @.str1438) %t26 = icmp ne i32 %t25, 0 br i1 %t26, label %then6, label %else7 then6: @@ -19469,7 +19991,7 @@ then6: br label %ifend8 else7: %t27 = load ptr, ptr %t23 - %t28 = call i32 @fn_streq(ptr %t27, ptr @.str1420) + %t28 = call i32 @fn_streq(ptr %t27, ptr @.str1439) %t29 = icmp ne i32 %t28, 0 br i1 %t29, label %then9, label %else10 then9: @@ -19477,7 +19999,7 @@ then9: br label %ifend11 else10: %t30 = load ptr, ptr %t23 - %t31 = call i32 @fn_streq(ptr %t30, ptr @.str1421) + %t31 = call i32 @fn_streq(ptr %t30, ptr @.str1440) %t32 = icmp ne i32 %t31, 0 br i1 %t32, label %then12, label %else13 then12: @@ -19485,7 +20007,7 @@ then12: br label %ifend14 else13: %t33 = load ptr, ptr %t23 - %t34 = call i32 @fn_streq(ptr %t33, ptr @.str1422) + %t34 = call i32 @fn_streq(ptr %t33, ptr @.str1441) %t35 = icmp ne i32 %t34, 0 br i1 %t35, label %then15, label %else16 then15: @@ -19493,7 +20015,7 @@ then15: br label %ifend17 else16: %t36 = load ptr, ptr %t23 - %t37 = call i32 @fn_streq(ptr %t36, ptr @.str1423) + %t37 = call i32 @fn_streq(ptr %t36, ptr @.str1442) %t38 = icmp ne i32 %t37, 0 br i1 %t38, label %then18, label %else19 then18: @@ -19501,7 +20023,7 @@ then18: br label %ifend20 else19: %t39 = load ptr, ptr %t23 - %t40 = call i32 @fn_streq(ptr %t39, ptr @.str1424) + %t40 = call i32 @fn_streq(ptr %t39, ptr @.str1443) %t41 = icmp ne i32 %t40, 0 br i1 %t41, label %then21, label %else22 then21: @@ -19509,7 +20031,7 @@ then21: br label %ifend23 else22: %t42 = load ptr, ptr %t23 - %t43 = call i32 @fn_streq(ptr %t42, ptr @.str1425) + %t43 = call i32 @fn_streq(ptr %t42, ptr @.str1444) %t44 = icmp ne i32 %t43, 0 br i1 %t44, label %then24, label %else25 then24: @@ -19542,8 +20064,8 @@ else25: br i1 %t62, label %then30, label %else31 then30: %t63 = load ptr, ptr %t23 - %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str1427) - %t65 = call ptr @fn_sconcat(ptr @.str1426, ptr %t64) + %t64 = call ptr @fn_sconcat(ptr %t63, ptr @.str1446) + %t65 = call ptr @fn_sconcat(ptr @.str1445, ptr %t64) store ptr %t65, ptr %t66 %t67 = load ptr, ptr @__stderrp %t68 = load ptr, ptr %t66 @@ -19583,7 +20105,7 @@ wend5: %t80 = icmp ne i32 %t79, 0 br i1 %t80, label %then33, label %ifend35 then33: - call void @fn_die(ptr @.str1428) + call void @fn_die(ptr @.str1447) br label %ifend35 ifend35: %t81 = load ptr, ptr %t0 @@ -19595,7 +20117,7 @@ ifend35: %t87 = icmp ne i32 %t86, 0 br i1 %t87, label %then36, label %ifend38 then36: - call void @fn_die(ptr @.str1429) + call void @fn_die(ptr @.str1448) br label %ifend38 ifend38: %t88 = load ptr, ptr %t0 @@ -19705,7 +20227,7 @@ then60: %t142 = load ptr, ptr %t0 %t143 = call ptr @fn_base_name(ptr %t142) %t144 = call ptr @fn_strip_ludic(ptr %t143) - %t145 = call ptr @fn_sconcat(ptr @.str1430, ptr %t144) + %t145 = call ptr @fn_sconcat(ptr @.str1449, ptr %t144) store ptr %t145, ptr %t1 br label %ifend62 ifend62: @@ -19720,12 +20242,12 @@ ifend62: br i1 %t153, label %then63, label %ifend65 then63: %t154 = load ptr, ptr %t148 - %t155 = call ptr @fn_sconcat(ptr @.str1431, ptr %t154) + %t155 = call ptr @fn_sconcat(ptr @.str1450, ptr %t154) %t156 = call i32 @system(ptr %t155) br label %ifend65 ifend65: %t157 = load ptr, ptr %t1 - %t158 = call ptr @fn_sconcat(ptr %t157, ptr @.str1432) + %t158 = call ptr @fn_sconcat(ptr %t157, ptr @.str1451) store ptr %t158, ptr %t159 %t160 = load ptr, ptr %t159 %t161 = call i32 @fn_ir_flush(ptr %t160) @@ -19734,21 +20256,21 @@ ifend65: %t164 = icmp ne i32 %t163, 0 br i1 %t164, label %then66, label %ifend68 then66: - call void @fn_die(ptr @.str1433) + call void @fn_die(ptr @.str1452) br label %ifend68 ifend68: - %t165 = call ptr @fn_getenv_or(ptr @.str1434, ptr @.str1435) + %t165 = call ptr @fn_getenv_or(ptr @.str1453, ptr @.str1454) store ptr %t165, ptr %t166 %t167 = load ptr, ptr @L_argv %t168 = getelementptr ptr, ptr %t167, i32 0 %t169 = load ptr, ptr %t168 %t170 = call ptr @fn_dir_of(ptr %t169) - %t171 = call ptr @fn_getenv_or(ptr @.str1436, ptr %t170) + %t171 = call ptr @fn_getenv_or(ptr @.str1455, ptr %t170) %t172 = call ptr @fn_ensure_slash(ptr %t171) store ptr %t172, ptr %t173 %t174 = load ptr, ptr %t166 %t175 = load ptr, ptr %t159 - %t176 = call ptr @fn_sconcat(ptr @.str1437, ptr %t175) + %t176 = call ptr @fn_sconcat(ptr @.str1456, ptr %t175) %t177 = call ptr @fn_sconcat(ptr %t174, ptr %t176) store ptr %t177, ptr %t178 %t179 = load i32, ptr @g_g_windowed @@ -19756,19 +20278,19 @@ ifend68: br i1 %t180, label %then69, label %ifend71 then69: %t181 = load ptr, ptr %t173 - %t182 = call ptr @fn_path_join(ptr %t181, ptr @.str1438) + %t182 = call ptr @fn_path_join(ptr %t181, ptr @.str1457) store ptr %t182, ptr %t183 %t184 = load ptr, ptr %t178 %t185 = load ptr, ptr %t183 - %t186 = call ptr @fn_sconcat(ptr %t185, ptr @.str1440) - %t187 = call ptr @fn_sconcat(ptr @.str1439, ptr %t186) + %t186 = call ptr @fn_sconcat(ptr %t185, ptr @.str1459) + %t187 = call ptr @fn_sconcat(ptr @.str1458, ptr %t186) %t188 = call ptr @fn_sconcat(ptr %t184, ptr %t187) store ptr %t188, ptr %t178 br label %ifend71 ifend71: %t189 = load ptr, ptr %t178 %t190 = load ptr, ptr %t1 - %t191 = call ptr @fn_sconcat(ptr @.str1441, ptr %t190) + %t191 = call ptr @fn_sconcat(ptr @.str1460, ptr %t190) %t192 = call ptr @fn_sconcat(ptr %t189, ptr %t191) store ptr %t192, ptr %t178 %t193 = load ptr, ptr %t178 @@ -19781,7 +20303,7 @@ ifend71: br i1 %t199, label %then72, label %ifend74 then72: %t200 = load ptr, ptr %t159 - %t201 = call ptr @fn_sconcat(ptr @.str1442, ptr %t200) + %t201 = call ptr @fn_sconcat(ptr @.str1461, ptr %t200) %t202 = call i32 @system(ptr %t201) br label %ifend74 ifend74: @@ -19791,7 +20313,7 @@ ifend74: %t206 = icmp ne i32 %t205, 0 br i1 %t206, label %then75, label %ifend77 then75: - call void @fn_die(ptr @.str1443) + call void @fn_die(ptr @.str1462) br label %ifend77 ifend77: %t207 = load i32, ptr %t6 diff --git a/selfhost/main.ludic b/selfhost/main.ludic index 2f0a1bab..96246027 100644 --- a/selfhost/main.ludic +++ b/selfhost/main.ludic @@ -51,7 +51,7 @@ fn die(msg: ptr) -> void { os_exit(1) } -main { +entry { let path = ptr_null() let out = ptr_null() let want = 0 # 0 = auto, 1 = windowed, 2 = headless diff --git a/selfhost/parse.ludic b/selfhost/parse.ludic index aabb95bc..39e10a9c 100644 --- a/selfhost/parse.ludic +++ b/selfhost/parse.ludic @@ -281,11 +281,13 @@ fn already_loaded(full: ptr) -> bool { # `@pure`, `@deterministic`, … — one channel, not a zoo of prefix keywords. fn parse_one_decl() -> void { let is_export = false + let qspec: Node = ptr_null() while is_op("@") { pi = pi + 1; let a = eat_id() # collect a leading @annotation if streq(a, "export") { is_export = true } - if is_op("(") { let d = 0 # optional @anno(args) — skipped - while true { if is_op("(") { d = d + 1 }; if is_op(")") { d = d - 1 }; pi = pi + 1; if d == 0 { break } } } + if streq(a, "Queries") { qspec = parse_queries_anno() } # @Queries(these: [...], on: ...) + else { if is_op("(") { let d = 0 # any other @anno(args) — parsed and skipped + while true { if is_op("(") { d = d + 1 }; if is_op(")") { d = d - 1 }; pi = pi + 1; if d == 0 { break } } } } skipnl() } if is_id("import") { pi = pi + 1 @@ -297,15 +299,22 @@ fn parse_one_decl() -> void { } if is_id("struct") { push(prog, parse_struct()); return } if is_id("enum") { push(prog, parse_enum()); return } - if is_id("component") { push(prog, parse_component()); return } - if is_id("archetype") { push(prog, parse_archetype()); return } - if is_id("system") { push(prog, parse_system()); return } + if is_id("property") { push(prog, parse_component()); return } + if is_id("model") { push(prog, parse_archetype()); return } + if is_id("handler") { + let h = parse_system() + if not ptr_is_null(qspec) { # @Queries wraps the body in its S_QUERY + qspec.a = h.a + let wrap = node(N_BLOCK); push(wrap.kids, qspec); h.a = wrap + } + push(prog, h); return + } if is_id("ui") { push(prog, parse_ui()); return } if is_id("var") { push(prog, parse_var()); return } if is_id("const") { push(prog, parse_const()); return } if is_id("fn") { let f = parse_fn(); if is_export { f.ival = 1 }; push(prog, f); return } if is_id("extern") { push(prog, parse_extern()); return } - if is_id("main") { push(prog, parse_main()); return } + if is_id("entry") { push(prog, parse_main()); return } perr("expected declaration") } @@ -340,9 +349,16 @@ fn parse_program() -> void { loaded_paths = new []ptr skipnl() g_game_name = "Ludic" - # imports may precede the game block + # imports may precede the program block while is_id("import") { pi = pi + 1; let t = toks[pi]; let rel = t.text; pi = pi + 1; do_import(rel); skipnl() } - if is_id("game") or is_id("module") { pi = pi + 1; g_game_name = eat_id(); skipnl(); eat_op("{") } + # @annotations on the program itself (e.g. @Handles(Movement)) — parsed, skipped + while is_op("@") { + pi = pi + 1; let a = eat_id() + if is_op("(") { let d = 0 + while true { if is_op("(") { d = d + 1 }; if is_op(")") { d = d - 1 }; pi = pi + 1; if d == 0 { break } } } + skipnl() + } + if is_id("program") { pi = pi + 1; g_game_name = eat_id(); skipnl(); eat_op("{") } while true { skipnl() if toks[pi].kind == TK_EOF { break } diff --git a/selfhost/parse_game.ludic b/selfhost/parse_game.ludic index 98b31e46..01cad130 100644 --- a/selfhost/parse_game.ludic +++ b/selfhost/parse_game.ludic @@ -84,6 +84,62 @@ fn parse_query_for() -> Node { return n } +# ---- @Queries annotation ----------------------------------------------------- +# `@Queries(these: [Prop{constraint}, ...], on: Model)` on a handler is an +# annotation spelling of the `for (Prop, ...) in query [Prop, ..., {Model}] +# where { body }` loop. It desugars to the same S_QUERY node, so +# the whole query backend (iteration, filters, binding, break/continue) is reused. + +fn mk_and(a: Node, b: Node) -> Node { + if ptr_is_null(a) { return b } + let n = node(E_BIN); n.s = "and"; n.a = a; n.b = b; return n +} + +# In `Prop{scale > 0}` the bare names are fields of Prop; qualify each to +# `Prop.field` (the binding var is the property name) for the desugared where. +fn qualify_fields(e: Node, prop: ptr) -> Node { + if ptr_is_null(e) { return e } + if e.kind == E_ID { + let m = node(E_MEMBER); let base = node(E_ID); base.s = prop; m.a = base; m.s = e.s; return m + } + if e.kind == E_BIN { e.a = qualify_fields(e.a, prop); e.b = qualify_fields(e.b, prop); return e } + if e.kind == E_UN { e.a = qualify_fields(e.a, prop); return e } + return e +} + +# parse `(these: [...], on: Model)`, returning an S_QUERY with its vars/terms/where +# filled in (the body `.a` is attached by the caller once the handler is parsed). +fn parse_queries_anno() -> Node { + eat_op("(") + let qn = node(S_QUERY) + let terms = node(N_BLOCK) + let wh: Node = ptr_null() + while not is_op(")") { + skipnl() + if is_op(")") { break } + let key = eat_id(); eat_op(":") + if streq(key, "these") { + eat_op("["); skipnl() + while not is_op("]") { + let pname = eat_id() + let v = node(E_ID); v.s = pname; push(qn.kids, v) # binding var = property name + let t = node(E_ID); t.s = pname; t.ival = 0; push(terms.kids, t) + if is_op("{") { pi = pi + 1; let ce = expr(); eat_op("}"); wh = mk_and(wh, qualify_fields(ce, pname)) } + if is_op(",") { pi = pi + 1 } + skipnl() + } + eat_op("]") + } else { if streq(key, "on") { + let mname = eat_id(); let t = node(E_ID); t.s = mname; t.ival = 1; push(terms.kids, t) # {Model} tag + } else { expr() } } # unknown key: skip its value + if is_op(",") { pi = pi + 1 } + skipnl() + } + eat_op(")") + qn.c = terms; qn.b = wh + return qn +} + fn parse_spawn() -> Node { pi = pi + 1; let n = node(S_SPAWN); n.s = eat_id(); skipnl(); eat_op("{") while true { diff --git a/selfhost/reseed.sh b/selfhost/reseed.sh index 1466ef20..25514317 100755 --- a/selfhost/reseed.sh +++ b/selfhost/reseed.sh @@ -11,7 +11,7 @@ FRAGS="selfhost/str.ludic selfhost/buf.ludic selfhost/io.ludic selfhost/ast.ludi selfhost/lex.ludic selfhost/parse.ludic selfhost/parse_game.ludic selfhost/emit_core.ludic selfhost/emit_head.ludic selfhost/emit_addr.ludic selfhost/emit_intrin.ludic selfhost/emit_intrin2.ludic selfhost/emit_math.ludic selfhost/emit_new.ludic selfhost/emit_expr.ludic selfhost/emit_stmt.ludic selfhost/emit_ecs.ludic selfhost/emit_query.ludic selfhost/emit_spawn.ludic selfhost/emit_game.ludic selfhost/emit_machine.ludic selfhost/emit_save.ludic selfhost/emit_ui.ludic selfhost/emit_decl.ludic selfhost/main.ludic" -{ echo "game SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" +{ echo "program SelfHost {"; for f in $FRAGS; do cat "$f"; echo; done; echo "}"; } > "$B/selfhost.ludic" if $CC selfhost/ludicc.seed.ll -o "$B/sh_old" 2>/dev/null; then # compile once with the old seed, then AGAIN with the freshly built one so the # seed is a fixed point of the NEW compiler, not a one-step image of the old. diff --git a/selfhost/tests/control.ludic b/selfhost/tests/control.ludic index 54ac9a05..c6210e96 100644 --- a/selfhost/tests/control.ludic +++ b/selfhost/tests/control.ludic @@ -1,6 +1,6 @@ -game T { +program T { fn fib(n: int) -> int { if n < 2 { return n }; return fib(n-1) + fib(n-2) } - main { + entry { print_int(fib(10)) # 55 let s = 0 for i in 0 .. 10 { if i == 5 { break }; if i % 2 == 0 { continue }; s = s + i } diff --git a/selfhost/tests/fixed.ludic b/selfhost/tests/fixed.ludic index c898c004..bce7b178 100644 --- a/selfhost/tests/fixed.ludic +++ b/selfhost/tests/fixed.ludic @@ -1,5 +1,5 @@ -game T { - main { +program T { + entry { let half = 0.5 let a = 1.5 print_int(flr(a + half)) # flr(2.0) = 2 diff --git a/selfhost/tests/match_bits.ludic b/selfhost/tests/match_bits.ludic index d37b782a..bd25cfad 100644 --- a/selfhost/tests/match_bits.ludic +++ b/selfhost/tests/match_bits.ludic @@ -1,9 +1,9 @@ -game T { +program T { fn classify(c: int) -> int { match c { 65, 66 => { return 1 }; 67 => { return 2 }; _ => { return 9 } } return 0 } - main { + entry { print_int(classify(65)) # 1 print_int(classify(67)) # 2 print_int(classify(90)) # 9 diff --git a/selfhost/tests/slices.ludic b/selfhost/tests/slices.ludic index 254fed24..288ce3ed 100644 --- a/selfhost/tests/slices.ludic +++ b/selfhost/tests/slices.ludic @@ -1,5 +1,5 @@ -game T { - main { +program T { + entry { let xs = new []int print_int(len(xs)) # 0 for i in 0 .. 20 { push(xs, i * i) } diff --git a/selfhost/tests/structs.ludic b/selfhost/tests/structs.ludic index 1f68f380..cea4a56a 100644 --- a/selfhost/tests/structs.ludic +++ b/selfhost/tests/structs.ludic @@ -1,7 +1,7 @@ -game T { +program T { struct P { x: int = 0, y: int = 7, next: P } fn bump(p: P) -> void { p.x = p.x + 100 } - main { + entry { let a = new P print_int(a.y) # 7 default a.x = 5 diff --git a/test.sh b/test.sh index 27dacd1c..467360a4 100755 --- a/test.sh +++ b/test.sh @@ -50,6 +50,11 @@ qsmoke() { # name else bad "$n: $(tail -1 /tmp/qs.out)"; fi } qsmoke qdecl +# @Queries desugars to a query loop; @Handles parses. Check the desugared behavior. +if ./selfhost/game-build.sh build/ludicc examples/annotations.ludic "/tmp/ludic_ann" >/tmp/ann.out 2>&1 \ + && [ "$(/tmp/ludic_ann | tr '\n' ' ')" = "3 1 0 0 " ]; then + ok "annotations.ludic (@Queries desugars to a query, @Handles parses)" +else bad "annotations: $(tail -1 /tmp/ann.out)"; fi # --- Toolchain-agent CLI smoke tests append below this line --- echo "== self-hosted front-end binaries (ludicc / ludic) ==" # The two commands are one multi-call native binary built from the seed with @@ -72,7 +77,7 @@ if ./ludicc examples/snake.ludic --emit-llvm -o /tmp/cli_snake.ll >/tmp/cli.out else bad "ludicc --emit-llvm: $(tail -1 /tmp/cli.out)"; fi # ludic compiles, runs, and forwards the program's exit code. -printf 'main { os_exit(42) }\n' > /tmp/cli_exit.ludic +printf 'entry { os_exit(42) }\n' > /tmp/cli_exit.ludic ./ludic /tmp/cli_exit.ludic >/tmp/cli.out 2>&1 if [ "$?" -eq 42 ]; then ok "ludic app.ludic -> compiles, runs, forwards exit code" else bad "ludic run: expected exit 42, got $? ($(tail -1 /tmp/cli.out))"; fi diff --git a/tools/build-tools.sh b/tools/build-tools.sh index 6c09a9f0..174e55bc 100755 --- a/tools/build-tools.sh +++ b/tools/build-tools.sh @@ -25,8 +25,8 @@ build_one() { if [ -x "$OUT/$name" ]; then newest=$(find "$SRC" -name '*.h' -o -name "$(basename "$main")" | while read -r f; do [ "$f" -nt "$OUT/$name" ] && echo new - done) - [ -z "$newest" ] && { echo "$name: up to date"; return; } + done) || true + if [ -z "$newest" ]; then echo "$name: up to date"; return; fi fi echo "cc: $main -> $OUT/$name" $CC $CFLAGS "$main" -o "$OUT/$name" diff --git a/tools/check-docs.py b/tools/check-docs.py index 7981b07d..166e3d74 100755 --- a/tools/check-docs.py +++ b/tools/check-docs.py @@ -19,22 +19,22 @@ A bare fragment is wrapped first: a declaration list goes inside import re, subprocess, sys, os, tempfile LC = './build/ludicc' -DECL = ('game','module','component','archetype','system','edge','fn','pure', - 'extern','const','var','ui','scene','import') +DECL = ('program','property','model','handler','enum','fn', + 'extern','const','var','ui','struct','import') def classify(body): first = next((l.strip() for l in body.split('\n') if l.strip() and not l.strip().startswith('#')), '') head = first.split('(')[0].split()[0] if first else '' - if head in ('game','module'): return 'whole' + if head == 'program': return 'whole' return 'decls' if head in DECL else 'stmts' def wraps(body, kind): """Candidate framings, best guess first. An excerpt often mixes declarations with loose statements, so both are tried and either parsing counts.""" if kind == 'whole': return [body] - as_decls = 'game DocCheck {\n' + body + '\n}\n' - as_stmts = 'game DocCheck {\n system DocS phase Start {\n' + body + '\n }\n}\n' + as_decls = 'program DocCheck {\n' + body + '\n}\n' + as_stmts = 'program DocCheck {\n handler DocS phase Start {\n' + body + '\n }\n}\n' return [as_decls, as_stmts] if kind == 'decls' else [as_stmts, as_decls] def fences(path): diff --git a/tools/editors/emacs/ludic-mode.el b/tools/editors/emacs/ludic-mode.el index f23bcf80..03394a92 100644 --- a/tools/editors/emacs/ludic-mode.el +++ b/tools/editors/emacs/ludic-mode.el @@ -11,8 +11,8 @@ ;;; Code: (defconst ludic--declaration-keywords - '("game" "module" "import" "component" "struct" "archetype" "enum" "ui" - "const" "var" "fn" "extern" "system" "main")) + '("program" "import" "property" "struct" "model" "enum" "ui" + "const" "var" "fn" "extern" "handler" "entry")) (defconst ludic--clause-keywords '("phase" "query" "reads" "writes")) diff --git a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicTokens.kt b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicTokens.kt index 71dbcf88..c81910b6 100644 --- a/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicTokens.kt +++ b/tools/editors/jetbrains/src/main/kotlin/io/ludic/ide/LudicTokens.kt @@ -41,8 +41,8 @@ object LudicTokens { */ object LudicVocabulary { val DECL = setOf( - "game", "module", "import", "component", "struct", "archetype", "enum", "ui", - "const", "var", "fn", "extern", "system", "main" + "program", "import", "property", "struct", "model", "enum", "ui", + "const", "var", "fn", "extern", "handler", "entry" ) val CLAUSE = setOf( "phase", "query", "reads", "writes" diff --git a/tools/editors/shared/ludic.tmLanguage.json b/tools/editors/shared/ludic.tmLanguage.json index 22b20a5f..6e4953b0 100644 --- a/tools/editors/shared/ludic.tmLanguage.json +++ b/tools/editors/shared/ludic.tmLanguage.json @@ -54,21 +54,21 @@ "declaration": { "patterns": [ { - "match": "\\b(game|module)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(program)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "keyword.control.unit.ludic" }, "2": { "name": "entity.name.type.unit.ludic" } } }, { - "match": "\\b(component)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(property)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.component.ludic" }, "2": { "name": "entity.name.type.component.ludic" } } }, { - "match": "\\b(archetype)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(model)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.archetype.ludic" }, "2": { "name": "entity.name.type.archetype.ludic" } @@ -82,7 +82,7 @@ } }, { - "match": "\\b(system)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(handler)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.system.ludic" }, "2": { "name": "entity.name.function.system.ludic" } @@ -165,7 +165,7 @@ { "name": "keyword.operator.logical.ludic", "match": "\\b(and|or|not)\\b" }, { "name": "keyword.other.clause.ludic", "match": "\\b(phase|query|reads|writes)\\b" }, { "name": "keyword.other.ludic", "match": "\\b(import|extern)\\b" }, - { "name": "storage.type.ludic", "match": "\\b(game|module|component|struct|archetype|enum|ui|const|var|let|fn|system|main|state)\\b" }, + { "name": "storage.type.ludic", "match": "\\b(program|property|struct|model|enum|ui|const|var|let|fn|handler|entry|state)\\b" }, { "name": "support.type.primitive.ludic", "match": "\\b(int|fixed|bool|entity|str|ptr|void)\\b" }, { "name": "constant.language.boolean.ludic", "match": "\\b(true|false)\\b" }, { "name": "constant.language.phase.ludic", "match": "\\b(Start|Input|FixedUpdate|Update|LateUpdate|Render)\\b" } diff --git a/tools/editors/vscode/syntaxes/ludic.tmLanguage.json b/tools/editors/vscode/syntaxes/ludic.tmLanguage.json index 22b20a5f..6e4953b0 100644 --- a/tools/editors/vscode/syntaxes/ludic.tmLanguage.json +++ b/tools/editors/vscode/syntaxes/ludic.tmLanguage.json @@ -54,21 +54,21 @@ "declaration": { "patterns": [ { - "match": "\\b(game|module)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(program)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "keyword.control.unit.ludic" }, "2": { "name": "entity.name.type.unit.ludic" } } }, { - "match": "\\b(component)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(property)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.component.ludic" }, "2": { "name": "entity.name.type.component.ludic" } } }, { - "match": "\\b(archetype)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(model)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.archetype.ludic" }, "2": { "name": "entity.name.type.archetype.ludic" } @@ -82,7 +82,7 @@ } }, { - "match": "\\b(system)\\s+([A-Za-z_][A-Za-z0-9_]*)", + "match": "\\b(handler)\\s+([A-Za-z_][A-Za-z0-9_]*)", "captures": { "1": { "name": "storage.type.system.ludic" }, "2": { "name": "entity.name.function.system.ludic" } @@ -165,7 +165,7 @@ { "name": "keyword.operator.logical.ludic", "match": "\\b(and|or|not)\\b" }, { "name": "keyword.other.clause.ludic", "match": "\\b(phase|query|reads|writes)\\b" }, { "name": "keyword.other.ludic", "match": "\\b(import|extern)\\b" }, - { "name": "storage.type.ludic", "match": "\\b(game|module|component|struct|archetype|enum|ui|const|var|let|fn|system|main|state)\\b" }, + { "name": "storage.type.ludic", "match": "\\b(program|property|struct|model|enum|ui|const|var|let|fn|handler|entry|state)\\b" }, { "name": "support.type.primitive.ludic", "match": "\\b(int|fixed|bool|entity|str|ptr|void)\\b" }, { "name": "constant.language.boolean.ludic", "match": "\\b(true|false)\\b" }, { "name": "constant.language.phase.ludic", "match": "\\b(Start|Input|FixedUpdate|Update|LateUpdate|Render)\\b" } diff --git a/tools/ludic-tools/ludic_index.h b/tools/ludic-tools/ludic_index.h index 216e5aff..34d93dd4 100644 --- a/tools/ludic-tools/ludic_index.h +++ b/tools/ludic-tools/ludic_index.h @@ -421,14 +421,14 @@ static void lp_decl(LP* p, int parent){ } return; } - if (!strcmp(w, "component") || !strcmp(w, "archetype")){ - int is_comp = !strcmp(w, "component"); + if (!strcmp(w, "property") || !strcmp(w, "model")){ + int is_comp = !strcmp(w, "property"); lp_adv(p); int nt = lp_name(p); if (nt < 0) return; int s = lsym_add(D, is_comp ? LS_COMPONENT : LS_ARCHETYPE, nt, parent); ldoc_collect_doc(D, decl_tok, D->sym[s].doc, sizeof(D->sym[s].doc)); while (lp_kind(p) == LT_ANNO) lp_adv(p); snprintf(D->sym[s].detail, sizeof(D->sym[s].detail), "%s %s {", - is_comp ? "component" : "archetype", D->sym[s].name); + is_comp ? "property" : "model", D->sym[s].name); if (!lp_is(p, "{")) return; int close = D->match[p->i]; D->sym[s].body_start = D->lex.v[p->i].start; @@ -518,8 +518,8 @@ static void lp_decl(LP* p, int parent){ } return; } - if (!strcmp(w, "system") || !strcmp(w, "edge")){ - if (!strcmp(w, "edge")){ lp_adv(p); if (!lp_is(p, "system")) return; } + if (!strcmp(w, "handler") || !strcmp(w, "edge")){ + if (!strcmp(w, "edge")){ lp_adv(p); if (!lp_is(p, "handler")) return; } lp_adv(p); int nt = lp_name(p); if (nt < 0) return; int s = lsym_add(D, LS_SYSTEM, nt, parent); @@ -638,15 +638,15 @@ static void ldoc_parse(LDoc* D){ lp_skipnl(&p); while (lp_is(&p, "import")) { lp_decl(&p, -1); lp_skipnl(&p); } int unit_parent = -1; - if (lp_is(&p, "game") || lp_is(&p, "module")){ - D->is_module = lp_is(&p, "module"); + if (lp_is(&p, "program") || lp_is(&p, "program")){ + D->is_module = lp_is(&p, "program"); D->is_unit = 1; lp_adv(&p); int nt = lp_name(&p); if (nt >= 0){ unit_parent = lsym_add(D, LS_UNIT, nt, -1); lcpy(D->unit, sizeof(D->unit), D->sym[unit_parent].name, (int)strlen(D->sym[unit_parent].name)); - lcatf(D->sym[unit_parent].detail, sizeof(D->sym[unit_parent].detail), "%s %s", D->is_module ? "module" : "game", D->unit); + lcatf(D->sym[unit_parent].detail, sizeof(D->sym[unit_parent].detail), "%s %s", D->is_module ? "program" : "program", D->unit); } if (lp_is(&p, "{")){ int close = D->match[p.i]; diff --git a/tools/ludic-tools/ludic_lsp.c b/tools/ludic-tools/ludic_lsp.c index 9a2099a8..7ed7ee8a 100644 --- a/tools/ludic-tools/ludic_lsp.c +++ b/tools/ludic-tools/ludic_lsp.c @@ -1080,13 +1080,13 @@ static void on_completion(JVal* msg, JVal* id){ comp_builtins(&c); comp_scope(&c, D, off, 0); /* the shapes people actually type */ - comp_item(&c, "system", CI_SNIPPET, "system … phase … { }", "A system with a phase and a body.", + comp_item(&c, "handler", CI_SNIPPET, "handler … phase … { }", "A system with a phase and a body.", "system ${1:Name} phase ${2|Start,Input,FixedUpdate,Update,LateUpdate,Render|} {\n $0\n}"); - comp_item(&c, "system+query", CI_SNIPPET, "system … query … { }", "A system that runs once per matching entity.", + comp_item(&c, "system+query", CI_SNIPPET, "handler … query … { }", "A system that runs once per matching entity.", "system ${1:Name} phase ${2|Update,FixedUpdate,LateUpdate,Render,Input|}\n query (${3:p}) [${4:Pos}]\n{\n $0\n}"); - comp_item(&c, "component", CI_SNIPPET, "component … { }", "A component with typed fields.", + comp_item(&c, "property", CI_SNIPPET, "property … { }", "A component with typed fields.", "component ${1:Name} { ${2:x}: ${3:int} = ${4:0} }"); - comp_item(&c, "archetype", CI_SNIPPET, "archetype … { }", "An entity kind bundling components.", + comp_item(&c, "model", CI_SNIPPET, "archetype … { }", "An entity kind bundling components.", "archetype ${1:Name} {\n ${2:Pos}\n}"); comp_item(&c, "for-query", CI_SNIPPET, "for (…) in query […] { }", "Iterate matching entities.", "for (${1:p}) in query [${2:Pos}] {\n $0\n}"); diff --git a/tools/ludic-tools/ludic_syntax.h b/tools/ludic-tools/ludic_syntax.h index bf2a3fc4..9c9c74d0 100644 --- a/tools/ludic-tools/ludic_syntax.h +++ b/tools/ludic-tools/ludic_syntax.h @@ -52,8 +52,8 @@ typedef struct { * mirror the compiler's parser: anything parse_decl() dispatches on is a * declaration keyword, anything stmt() dispatches on is a statement keyword. */ static const char* LUDIC_KW_DECL[] = { - "game","module","import","component","struct","archetype","enum","ui", - "const","var","fn","extern","system","main", 0 + "program","import","property","struct","model","enum","ui", + "const","var","fn","extern","handler","entry", 0 }; static const char* LUDIC_KW_CLAUSE[] = { "phase","query","reads","writes", 0 diff --git a/tools/test-lsp.py b/tools/test-lsp.py index 012c194c..49b220a9 100755 --- a/tools/test-lsp.py +++ b/tools/test-lsp.py @@ -109,7 +109,7 @@ def main(): "signatureHelpProvider", "inlayHintProvider", "documentLinkProvider"]: check_true(f"advertises {cap}", cap in caps) - # ---- a fragment file: no `game` block, only reachable through an import -- + # ---- a fragment file: no `program` block, only reachable through an import -- frag = os.path.join(ROOT, "examples/chronorift/combat.ludic") text = c.open(frag) uri = {"uri": "file://" + frag} @@ -137,13 +137,13 @@ def main(): comp = c.request("textDocument/completion", {"textDocument": uri, "position": position_of(text, "st.guard", 3)}) labels = [i["label"] for i in comp["items"]] - check_true("completion after '.' offers only that component's fields", + check_true("completion after '.' offers only that property's fields", "guard" in labels and "hp" in labels and "clear" not in labels) - # a query's term list admits components and archetypes and nothing else — + # a query's term list admits propertys and models and nothing else — # not the loop variables, not builtins, not keywords - qsrc = ('game QT {\n component Pos { x: int = 0 }\n component Vel { dx: int = 0 }\n' - ' system S phase Update {\n for (a, b) in query [Pos, ] { }\n }\n}\n') + qsrc = ('program QT {\n property Pos { x: int = 0 }\n property Vel { dx: int = 0 }\n' + ' handler S phase Update {\n for (a, b) in query [Pos, ] { }\n }\n}\n') qfile = "/tmp/ludic_lsp_test_query.ludic" with open(qfile, "w") as fh: fh.write(qsrc) @@ -152,7 +152,7 @@ def main(): qcomp = c.request("textDocument/completion", {"textDocument": quri, "position": position_of(qsrc, "[Pos, ]", 6)}) qlabels = sorted(i["label"] for i in qcomp["items"]) - check("completion inside query terms lists components only", qlabels, ["Pos", "Vel"]) + check("completion inside query terms lists propertys only", qlabels, ["Pos", "Vel"]) body = c.request("textDocument/completion", {"textDocument": quri, "position": position_of(qsrc, "] { }", 3)}) blabels = [i["label"] for i in body["items"]] @@ -196,7 +196,7 @@ def main(): # any file and answers structural queries without a compiler present.) bad = "/tmp/ludic_lsp_test_bad.ludic" with open(bad, "w") as fh: - fh.write("game Bad {\n component P { x: nosuchtype = 0 }\n}\n") + fh.write("program Bad {\n property P { x: nosuchtype = 0 }\n}\n") c.open(bad) syms = c.request("textDocument/documentSymbol", {"textDocument": {"uri": "file://" + bad}}) check_true("LSP opens and analyses a file with no compiler present", @@ -206,7 +206,7 @@ def main(): # ---- markdown: ```ludic fences are real Ludic --------------------------- md = "/tmp/ludic_lsp_test.md" with open(md, "w") as fh: - fh.write("# Title\n\nprose\n\n```ludic\ngame D { component Pt { x: int = 0 } }\n```\n\n" + fh.write("# Title\n\nprose\n\n```ludic\nprogram D { property Pt { x: int = 0 } }\n```\n\n" "```python\nz = 1\n```\n") c.open(md, "markdown") mduri = {"uri": "file://" + md} @@ -241,17 +241,17 @@ def main(): # Renaming any one of them must leave the other three alone. amb = "/tmp/ludic_lsp_test_rename.ludic" with open(amb, "w") as fh: - fh.write("game R {\n" - " component Pos { x: int = 0, y: int = 0 }\n" - " component Vel { x: int = 0 }\n" + fh.write("program R {\n" + " property Pos { x: int = 0, y: int = 0 }\n" + " property Vel { x: int = 0 }\n" " fn helper(x: int) -> int { return x + 1 }\n" - " system A phase Update {\n" + " handler A phase Update {\n" " for (p) in query [Pos] {\n" " let x = 5\n" " p.x = p.x + x\n" " }\n" " }\n" - " system B phase Update {\n" + " handler B phase Update {\n" " for (v) in query [Vel] { v.x = v.x + 1 }\n" " }\n" "}\n") @@ -268,7 +268,7 @@ def main(): def lines_touched(edits): return sorted({e["range"]["start"]["line"] for e in edits}) - field = rename_at(position_of(atext, "component Pos { x", 16)) + field = rename_at(position_of(atext, "property Pos { x", 15)) check("renaming Pos.x touches only its declaration and its uses", lines_touched(field), [1, 7]) local = rename_at(position_of(atext, "let x = 5", 4)) @@ -280,7 +280,7 @@ def main(): # find-usages must be equally precise refs_x = c.request("textDocument/references", {"textDocument": auri, - "position": position_of(atext, "component Vel { x", 16), + "position": position_of(atext, "property Vel { x", 15), "context": {"includeDeclaration": True}}) check("find-usages of Vel.x does not pick up Pos.x", sorted({r["range"]["start"]["line"] for r in refs_x}), [2, 11]) @@ -288,7 +288,7 @@ def main(): # ---- workspace-wide symbol search --------------------------------------- ws = c.request("workspace/symbol", {"query": "Stats"}) - check_true("workspace symbol search finds a component", any(s["name"] == "Stats" for s in ws)) + check_true("workspace symbol search finds a property", any(s["name"] == "Stats" for s in ws)) c.close() print(f" {passed} passed, {failed} failed") diff --git a/tools/test-tools.sh b/tools/test-tools.sh index d4acdd56..407e4cb5 100755 --- a/tools/test-tools.sh +++ b/tools/test-tools.sh @@ -71,34 +71,34 @@ else bad "formatter altered non-whitespace bytes" "$DRIFT"; fi # --- multi-byte characters must survive intact ------------------------------ # A UTF-8 character outside a string is an error to the compiler, but the # formatter must still not split it: doing so silently corrupts the file. -printf 'game E {\n # \xe2\x80\xa6 ellipsis in a comment\n const S: str = "caf\xc3\xa9 \xe2\x86\x92 na\xc3\xafve"\n}\n' > "$TMP/utf8.ludic" +printf 'program E {\n # \xe2\x80\xa6 ellipsis in a comment\n const S: str = "caf\xc3\xa9 \xe2\x86\x92 na\xc3\xafve"\n}\n' > "$TMP/utf8.ludic" "$FMT" "$TMP/utf8.ludic" > "$TMP/utf8.out" if cmp -s "$TMP/utf8.ludic" "$TMP/utf8.out"; then ok "UTF-8 preserved byte for byte" else bad "UTF-8 mangled" "$(diff "$TMP/utf8.ludic" "$TMP/utf8.out" | head -2)"; fi # the same character where the compiler cannot make sense of it at all: it must # still come out as one character, not as three spaced-out replacement bytes -printf 'game F {\nfn f() -> int { return \xe2\x80\xa6 }\n}\n' > "$TMP/utf8b.ludic" +printf 'program F {\nfn f() -> int { return \xe2\x80\xa6 }\n}\n' > "$TMP/utf8b.ludic" a=$(tr -d ' \t\n' < "$TMP/utf8b.ludic" | shasum | cut -d' ' -f1) b=$("$FMT" "$TMP/utf8b.ludic" | tr -d ' \t\n' | shasum | cut -d' ' -f1) check "unrecognised characters pass through whole" "$b" "$a" # --- comments survive, which is the whole reason this is not ludicc --fmt --- -printf 'game C {\n # keep me\n component P { x: int = 0 } # and me\n}\n' > "$TMP/c.ludic" +printf 'program C {\n # keep me\n property P { x: int = 0 } # and me\n}\n' > "$TMP/c.ludic" N=$("$FMT" "$TMP/c.ludic" | grep -c '#') check "comments preserved" "$N" "2" # --- messy input is normalised ---------------------------------------------- -printf 'game M{\ncomponent P{x:int=0}\nsystem S phase Update{let a=1+2\nif a== -1 {a=-a}}\n}\n' > "$TMP/m.ludic" +printf 'program M{\nproperty P{x:int=0}\nhandler S phase Update{let a=1+2\nif a== -1 {a=-a}}\n}\n' > "$TMP/m.ludic" "$FMT" "$TMP/m.ludic" > "$TMP/m.out" -grep -q '^ component P { x: int = 0 }$' "$TMP/m.out" && ok "reindents and respaces" || bad "reindents and respaces" +grep -q '^ property P { x: int = 0 }$' "$TMP/m.out" && ok "reindents and respaces" || bad "reindents and respaces" grep -q 'a = -a' "$TMP/m.out" && ok "unary minus not spaced" || bad "unary minus not spaced" # --- language conventions are respected, not overwritten -------------------- -printf 'game U {\n ui M {\n panel id=Root w=10 {\n button id=Go text="go"\n }\n }\n}\n' > "$TMP/u.ludic" +printf 'program U {\n ui M {\n panel id=Root w=10 {\n button id=Go text="go"\n }\n }\n}\n' > "$TMP/u.ludic" "$FMT" "$TMP/u.ludic" | grep -q 'id=Root' && ok "widget props stay tight (id=Root)" || bad "widget props stay tight" -printf 'game Q {\n system S phase Update {\n for (p) in query [Pos, {Foe}] { }\n }\n component Pos { x: int = 0 }\n component Foe { }\n}\n' > "$TMP/q.ludic" +printf 'program Q {\n handler S phase Update {\n for (p) in query [Pos, {Foe}] { }\n }\n property Pos { x: int = 0 }\n property Foe { }\n}\n' > "$TMP/q.ludic" "$FMT" "$TMP/q.ludic" | grep -q '\[Pos, {Foe}\]' && ok "query tags stay tight ({Foe})" || bad "query tags stay tight" -printf 'game A {\n const R_A: int = 0 # one\n const R_BBB: int = 1 # two\n}\n' > "$TMP/a.ludic" +printf 'program A {\n const R_A: int = 0 # one\n const R_BBB: int = 1 # two\n}\n' > "$TMP/a.ludic" "$FMT" "$TMP/a.ludic" | grep -q 'R_A: int = 0 # one' && ok "hand alignment preserved" || bad "hand alignment preserved" # --- --check exit status, for CI and pre-commit hooks ----------------------- @@ -109,11 +109,11 @@ check "--check exits 1 on unformatted input" "$?" "1" check "--check exits 0 after -w" "$?" "0" # --- markdown: fences formatted, prose untouched ---------------------------- -printf '# T\n\nprose with spaces\n\n```ludic\ngame D{component P{x:int=0}}\n```\n\n```python\nz = 1\n```\n' > "$TMP/d.md" +printf '# T\n\nprose with spaces\n\n```ludic\nprogram D{property P{x:int=0}}\n```\n\n```python\nz = 1\n```\n' > "$TMP/d.md" "$FMT" "$TMP/d.md" > "$TMP/d.out" grep -q 'prose with spaces' "$TMP/d.out" && ok "markdown prose untouched" || bad "markdown prose untouched" grep -q 'z = 1' "$TMP/d.out" && ok "non-ludic fences untouched" || bad "non-ludic fences untouched" -grep -q 'game D { component P { x: int = 0 } }' "$TMP/d.out" && ok "ludic fences formatted" || bad "ludic fences formatted" +grep -q 'program D { property P { x: int = 0 } }' "$TMP/d.out" && ok "ludic fences formatted" || bad "ludic fences formatted" echo "language server" python3 tools/test-lsp.py