Compare commits

...

24 Commits

Author SHA1 Message Date
agra
39488133c9 fix: vendored sqlite builds SQLITE_THREADSAFE=1 — std.thread exists now
THREADSAFE=0 was correct when sx had no threads; with std.thread (S6)
and std.http's pooled dispatch (S7b), concurrent connections corrupted
sqlite's unprotected globals (caught live: distd under ab -c20 died
with free-of-unallocated inside yy_reduce). Serialized mode is
sqlite's own default and safe for every consumer; per-connection use
across threads is the supported pattern.
2026-06-12 22:38:43 +03:00
agra
e57a27205e feat: std.http pooled handler dispatch (PLAN-HTTPZ S7b)
thread_pool_count = 0 (default) keeps handlers inline on the loop
thread — the measured fast path (BENCH-HTTPZ.md). N > 0 dispatches
each parsed request to a std.thread Pool of N workers, completing the
httpz two-pool shape: the connection freezes as CONN_HANDLING (no
reads, growth, eviction, or recycling — the worker borrows views into
its read buffer), the worker runs the handler under a per-job arena
and serializes into job-owned bytes, the completion queues under the
PoolState mutex, and the loop wakes through the new std.event wake
channel (kqueue EVFILT_USER + EV_CLEAR; the epoll twin maps to
eventfd), attaches the response, compacts the buffer, and resumes
keep-alive/pipeline handling. A full backlog sheds with 503. Stale
completions (generation mismatch after close) are dropped. Pool mode
requires the server's constructing allocator to be thread-safe
(GPA/malloc), documented on the knob.

PoolState lives behind a heap pointer (it embeds a Mutex and is shared
with workers; the Server struct itself is returned by value).
serialize_response/run_handler_job share one serialize_bytes.

examples/1633 gains the pooled section (GET, body echo, 404 across
worker threads) plus the loop-wake path exercised end to end; AOT run
five times. examples/1632 unchanged but the Event struct gains `user`.
2026-06-12 22:31:27 +03:00
agra
7f23bb7530 feat: std.thread — Thread, Mutex/Cond, bounded worker Pool (PLAN-HTTPZ S6)
pthread bindings with darwin opaque sizes (mutex 64B, cond 48B; glibc
divergence is a C3 per-OS item). Mutex/Cond initialize IN PLACE and
Pool lives behind Pool.create's heap pointer — POSIX sync objects are
address-sensitive, so nothing here moves after setup. Thread.spawn
takes the C2 re-entry contract entry (callconv(.c), fabricates its own
Context); Pool workers do exactly that with a per-worker malloc-backed
GPA, then run default-conv tasks inside it. submit returns false on a
full backlog (httpz thread_pool backpressure); shutdown finishes
queued work and joins every worker.

examples/1637 pins: 4 raw threads x 1000 locked increments, 100 pool
tasks summing exactly once across 4 workers, a held worker + full
backlog refusing the next submit, clean shutdown. JIT + AOT (AOT run
three times). The std.sx barrel carries thread; .ir snapshot regen is
the usual renumbering.
2026-06-12 22:21:40 +03:00
agra
4fa12853ed test: pin C function pointers into sx (PLAN-HTTPZ C2 — pre-existing)
Both halves of the C2 contract already work in JIT and AOT; these
examples pin them. 1635: libc qsort drives an sx callconv(.c)
comparator passed by name as a typed fn-pointer param. 1636: a real
pthread enters sx through a callconv(.c) entry, fabricates its own
Context (push Context with a local GPA), and runs default-conv sx code
that allocates through it — the re-entry contract std.thread (S6)
stands on. Also unblocks the sqlite callback APIs (hooks/UDFs) left
unbound by design in P5.1.
2026-06-12 22:14:14 +03:00
agra
fe4f059a52 issue 0131: RESOLVED (d7808f6) 2026-06-12 21:52:11 +03:00
agra
d7808f69a3 fix: protocol method calls arity-check (issue 0131)
emitProtocolDispatch now requires the user-arg count to equal the
protocol method's parameter list — exact, since protocol signatures
have no defaults, packs, or variadics — and emits the same
"expects N arguments, but M were given" diagnostic plain calls get.
Previously extra args were silently dropped (and missing args left the
thunk reading garbage). The dispatch gains the call-site span for the
diagnostic. examples/1634 pins the rejection; full sweep confirms no
existing code relied on the leniency.
2026-06-12 21:51:56 +03:00
agra
ff94b004c4 issue 0131: protocol method calls silently drop extra arguments 2026-06-12 21:44:07 +03:00
agra
81fa50c77d fix: std.http dealloc_bytes calls match the Allocator protocol arity
The protocol declares dealloc_bytes(ptr) — the size argument I passed
at three sites was silently accepted and dropped by the compiler
(issue 0131); these calls would stop compiling the moment that
diagnostic gap is fixed.
2026-06-12 21:43:19 +03:00
agra
f3aa2716ae fix: std.http per-request arenas are backed by the server's own allocator
No conjured GPA: the arena chunks come from own_alloc (captured at
Server.init), so all server memory flows from the allocator the app
constructed it with — the point of the implicit context model.
2026-06-12 21:37:39 +03:00
agra
0db4262833 fix: std.http dispatch + error responses run under a per-request arena
Handler and serialization allocations through the implicit context die
with the request; response bytes survive via the own_alloc copy made
inside the push scope. Without this every request leaked its render
concats into the loop's long-lived context.
2026-06-12 21:34:22 +03:00
agra
8641441fad feat: std.http read buffers grow on demand toward read_buf_cap
read_buf_cap is now the per-request LIMIT, not a preallocation: slots
start at 16K, double when full (one-step sizing when a Content-Length
declares the body), and keep their grown capacity for slot reuse. At
the limit the refusal distinguishes oversized headers (431) from an
oversized body (413). Unblocks A1: distd accepts multi-hundred-MB
artifact uploads — preallocating that per slot was never an option.
examples/1633 adds a body past the initial capacity echoing intact.
2026-06-12 21:29:13 +03:00
agra
3a97019aa7 feat: std.http handler carries an opaque ctx word (PLAN-HTTPZ A1 prep)
Server.init(cfg, handler, ctx); the handler signature gains a usize
third argument delivered verbatim per dispatch — typically a pointer
to the app's own state, since the server owns the call site. A bare
(req, resp) handler had no way to reach app state without globals.
examples/1633 pins the round trip.
2026-06-12 21:22:42 +03:00
agra
721793b4bf feat: std.http — single-worker HTTP/1.1 server core (PLAN-HTTPZ S7a)
The httpz shape, one worker, handlers inline over the std.event Loop:
nonblocking accept, per-connection state machine (reading -> writing ->
keepalive/close) with incremental parsing (request line, headers,
Content-Length body), partial-write continuation via on-demand write
interest, pipelined-request draining, and timeouts as EVICTION —
request-delivery and keepalive-idle deadlines on the monotonic clock,
checked after I/O each tick. Keep-alive is the HTTP/1.1 default;
Connection header, HTTP/1.0, or the per-connection request_count cap
turn it off. Config mirrors httpz: port/backlog/max_conn/read_buf_cap/
timeout_request_ms/timeout_keepalive_ms/request_count.

API: Server.init(cfg, handler) + tick(max_wait_ms); run() is the
forever-tick loop. tick makes the server drivable single-threaded —
examples/1633 runs a live server and its client sockets in ONE thread,
pinning: GET with keep-alive, actual connection reuse, the request cap
answering Connection: close then EOF, POST body echo, 404 routing, and
a half-header client evicted at the request deadline while a healthy
client keeps being served. Verified under sx run AND sx build.

Connection slots and read buffers are reused across connections
(httpz's min_conn/buffer-pool spirit); response buffers are allocated
per response and freed on completion. Serialization happens while
request views are valid, the served bytes are compacted, and only then
does sending start — write_more's pipelining check must see only the
remainder. The std.sx barrel carries http; .ir snapshot regen is the
usual mechanical renumbering.

S7b adds worker counts + the handler thread pool (needs C2/S6); the
epoll backend activates with the linux target (S4/S7c).
2026-06-12 21:16:56 +03:00
agra
92e220ee24 feat: std.event — OS-neutral readiness Loop over kqueue (PLAN-HTTPZ S5)
Loop.init/close, add_read/del_read/add_write/del_write with a
per-registration udata word, and wait() normalizing backend events
into Event{fd, udata, readable, writable, eof, err, nbytes}. The epoll
twin (S4) slots in behind this surface when the linux target lands.
No timer registrations by design: request/keepalive eviction is
deadline math — deadline_in/expired/remaining_ms over std.time's
monotonic clock, with remaining_ms feeding wait's timeout. std.sx
barrel carries ; .ir snapshot regen is the usual mechanical
renumbering. examples/1632 pins idle timeout (and that it honors the
deadline), readable with fd/udata/nbytes, immediate writability on an
empty send buffer, and the eof flag on peer close; JIT + AOT.
2026-06-12 21:05:56 +03:00
agra
1017657c90 feat: std/net/kqueue — raw kqueue/kevent bindings, darwin (PLAN-HTTPZ S3)
32-byte darwin struct kevent, EVFILT_READ/WRITE/TIMER, EV_* flags, and
three thin helpers: kev_change (one registration entry), kq_apply
(immediate change, no drain), kq_wait (bounded drain, EINTR reissued,
negative timeout = forever). Off the std.sx barrel by design — the
OS-neutral facade over this and the epoll twin is std.event (S5).
examples/1631 pins zero-cost idle timeout, READ readiness with pending
byte count + udata round-trip, and EV_EOF on peer close; verified under
sx run AND sx build.
2026-06-12 20:57:25 +03:00
agra
659c43c8d6 feat: std.socket nonblocking surface — fcntl, errno, typed _nb wrappers (PLAN-HTTPZ S2)
set_nonblocking (C-variadic fcntl), errno via __error (darwin; C3
selects per-OS), and accept_nb/read_nb/write_nb returning a typed
SockErr — WouldBlock / Closed / Fault — so readiness-loop callers never
parse -1/errno pairs. EINTR retries internally; accept_nb skips
ECONNABORTED. Adds connect, shutdown, socketpair, AF_UNIX, SHUT_*.
examples/1630 pins the result algebra on a socketpair and a nonblocking
TCP listener (WouldBlock on empty backlog, accept after loopback
connect); verified under sx run AND sx build. The .ir snapshot regen is
mechanical: new std decls shift @str/@tag.str numbering and grow the
type table (179 -> 185).
2026-06-12 20:53:35 +03:00
agra
da2f76b383 feat: std.time — wall + monotonic clocks over clock_gettime (PLAN-HTTPZ S1)
now_secs (CLOCK_REALTIME, epoch seconds) and mono_ms (CLOCK_MONOTONIC,
process-local milliseconds for deadlines). Clock ids are darwin's; the
per-OS selection mechanism is PLAN-HTTPZ C3. No error channel: with
module-constant clock ids and a stack timespec, clock_gettime is total.
std.sx namespace tail carries the time alias; examples/1629 pins epoch
plausibility, monotone advance, and the alias carry.
2026-06-12 20:33:01 +03:00
agra
f6b0029249 fix: AOT build cache disabled for programs with top-level #run
The JIT path already guards its object cache with hasTopLevelRun (the
#run interp executes during codegen; a cache hit skips codegen and
loses its effects). The build path had no such guard, so a second
'sx build --cache' of any app with a '#run configure_build()' block
linked WITHOUT the build.sx config — no link flags (m3te: undefined
SDL3 symbols), and on a binary-level hit the output path and bundling
would have been wrong too. Both cache levels and both save sites now
share the guard; #run-free programs keep full cache behavior
(verified: second build hits the binary cache in <1ms; m3te's
build/--cache/build sequence now links and bundles both times).
2026-06-12 19:11:18 +03:00
agra
9fb7290861 feat: duplicate C exports across #import c units are a compile diagnostic
All units share one link namespace (per-unit isolation is PLAN-C C3.2,
deferred), so a symbol defined by two units previously died inside the
JIT dylib link or the AOT link with raw linker spew. The clang shim
gains sx_clang_object_exported_symbols (llvm::object scan: defined +
global, format-specific excluded) and compileCToObjects cross-checks
every unit object — collisions name both source files. Scan failures
are non-fatal; the linker remains the backstop. Covers JIT and native
AOT; the emcc path still relies on wasm-ld's own error.
2026-06-12 19:01:43 +03:00
agra
6114b51073 feat: emcc C compiles go through the object cache
compileCWithEmcc now probes/saves .sx-cache/c-<key>.o with the same
content key as the native path (source + declared headers + transitive
deps + defines/flags/incdirs), keyed by the emcc --version line and the
wasm triple so emsdk upgrades and wasm32/64 variants never collide with
each other or with native objects. Cache hits hand the linker the cache
path directly. objectMagicOk accepts the wasm magic. Verified: warm
wasm build of a c-unit drops 1.85s -> 0.61s (emcc -c skipped).
2026-06-12 18:52:43 +03:00
agra
4b9324e585 feat: transitive quoted includes participate in the c-object cache key
The key previously covered the #source bytes + the block's DECLARED
headers, so a unit whose impl is a thin wrapper over an undeclared
header (vendors/kb_text_shape: two-line impl.c, all code in
kb/kb_text_shape.h) would serve STALE cached objects after an
upstream upgrade. collectIncludeDepBytes now walks the transitive
closure of quoted #include lines (includer-dir first, then -I dirs;
angle/system includes never participate; unresolvable names skip) and
the dep contents fold into the key — no sidecar, no compare logic, a
changed header is just a different key. Verified live: appending to
kb_text_shape.h mints a new cache entry; reverting hits the old one.
2026-06-12 18:48:56 +03:00
agra
b06776d6e9 library: vendors/kb_text_shape + vendors/file_utils; modules/ffi/stb_truetype.sx retired
kb_text_shape (v2.10, JimmyLefevre) had been LOST from the sx tree —
ffi/stb_truetype.sx referenced repo paths that no longer existed (and
nothing runs glyph_cache, so the dangling unit never fired). The
trimmed copy returns from the m3te project as a proper vendor:
curated c/kbts_api.h decls over the full upstream header, README with
provenance, and examples/1627 pinning context + font creation so the
unit compiles and runs in-suite. file_utils (in-house asset-read
helper with the Android AAssetManager hook) gets the same unit shape.

modules/ffi/stb_truetype.sx is gone: glyph_cache imports the three
vendored units (stb_truetype, kb_text_shape, file_utils) directly.
2026-06-12 17:58:23 +03:00
agra
58af806b7a library: vendors/stb_image + vendors/stb_truetype — stb ships with sx
The stb headers move from the repo-root vendors/ (resolvable only
with CWD = sx repo) into library/vendors/ following the sqlite
convention — bindings module + c/ sources + provenance README — so
'#import "vendors/stb_image/stb_image.sx"' (image v2.30 + image_write
v1.16) and '#import "vendors/stb_truetype/stb_truetype.sx"' (v1.26)
work from any consumer via the stdlib search paths. modules/ffi/stb.sx
dissolves into the stb_image vendor; modules/ffi/stb_truetype.sx keeps
its non-stb text-shaping companions and re-imports the vendored unit.
examples/1625 pins a deterministic in-memory BMP decode; examples/1626
pins font init + metric invariants against the system Helvetica.
2026-06-12 17:50:21 +03:00
agra
2097772ec9 library: vendors/sqlite — SQLite ships with sx
The vendored amalgamation (3.53.2, public domain) plus the curated
bindings move from the distribution repo into the sx library:
'#import "vendors/sqlite/sqlite.sx"' gives any sx program SQLite
with no system dependency and no build flags — the bindings declare
the C as a named #import c unit (pinned defines + -O2), compiled
through the object cache and shadow-proof via unit-first resolution.
examples/1624 pins the version and a typed round trip in-suite.
2026-06-12 17:39:26 +03:00
168 changed files with 453337 additions and 50104 deletions

View File

@@ -319,3 +319,54 @@ extern "C" LLVMMemoryBufferRef sx_clang_compile_to_object(
llvm::StringRef(obj_buf.data(), obj_buf.size()), "c_import.o");
return llvm::wrap(buf.release());
}
/* ------------------------------------------------------------------ */
/* Exported-symbol scan over a compiled object buffer */
/* ------------------------------------------------------------------ */
#include <llvm/Object/ObjectFile.h>
extern "C" SxCSymbolList *sx_clang_object_exported_symbols(
LLVMMemoryBufferRef obj,
char **out_error)
{
using namespace llvm;
MemoryBufferRef ref(
StringRef(LLVMGetBufferStart(obj), LLVMGetBufferSize(obj)),
"sx-c-import-object");
auto objOrErr = object::ObjectFile::createObjectFile(ref);
if (!objOrErr) {
if (out_error)
*out_error = strdup(toString(objOrErr.takeError()).c_str());
return nullptr;
}
std::vector<std::string> names;
for (const object::SymbolRef &sym : (*objOrErr)->symbols()) {
auto flagsOrErr = sym.getFlags();
if (!flagsOrErr) { consumeError(flagsOrErr.takeError()); continue; }
uint32_t flags = *flagsOrErr;
if (flags & object::SymbolRef::SF_Undefined) continue;
if (!(flags & object::SymbolRef::SF_Global)) continue;
if (flags & object::SymbolRef::SF_FormatSpecific) continue;
auto nameOrErr = sym.getName();
if (!nameOrErr) { consumeError(nameOrErr.takeError()); continue; }
names.push_back(nameOrErr->str());
}
SxCSymbolList *list = (SxCSymbolList *)malloc(sizeof(SxCSymbolList));
list->num_names = (int)names.size();
list->names = (const char **)malloc(sizeof(char *) * (names.empty() ? 1 : names.size()));
for (size_t i = 0; i < names.size(); i++)
list->names[i] = strdup(names[i].c_str());
return list;
}
extern "C" void sx_clang_free_symbol_list(SxCSymbolList *list)
{
if (!list) return;
for (int i = 0; i < list->num_names; i++)
free((void *)list->names[i]);
free(list->names);
free(list);
}

View File

@@ -50,6 +50,19 @@ LLVMMemoryBufferRef sx_clang_compile_to_object(
const char **args, int num_args,
char **out_error);
/* --- Exported (defined, global) symbols of an object buffer --- */
typedef struct {
const char **names;
int num_names;
} SxCSymbolList;
SxCSymbolList *sx_clang_object_exported_symbols(
LLVMMemoryBufferRef obj,
char **out_error);
void sx_clang_free_symbol_list(SxCSymbolList *list);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,5 @@
#import "modules/std.sx";
stb :: #import "modules/ffi/stb.sx";
stb :: #import "vendors/stb_image/stb_image.sx";
main :: () -> i32 {
w: i32 = 0;

View File

@@ -0,0 +1,37 @@
// The sx library ships SQLite: `#import "vendors/sqlite/sqlite.sx"`
// resolves through the stdlib search paths, compiles the vendored
// amalgamation as a `#import c` unit (cached), and the bindings just
// work — no system dependency, no flags. Pins the vendored version
// (an OS libsqlite3 of another version must never shadow the unit)
// and a typed round trip.
#import "modules/std.sx";
sq :: #import "vendors/sqlite/sqlite.sx";
main :: () -> i32 {
v := sq.sqlite_version();
if v != "3.53.2" {
print("unexpected sqlite version: {}\n", v);
return 1;
}
db, oe := sq.Sqlite.open(":memory:");
if oe { print("open failed\n"); return 1; }
ee := false;
db.exec("CREATE TABLE t (name TEXT, n INTEGER); INSERT INTO t VALUES ('a', 1), ('b', 2)") catch { ee = true; };
if ee { print("exec failed: {}\n", db.errmsg()); db.close(); return 1; }
st, pe := db.prepare("SELECT name, n FROM t WHERE n > ?1 ORDER BY n");
if pe { print("prepare failed\n"); db.close(); return 1; }
st.bind_int64(1, 1) catch { ee = true; };
rc, se := st.step();
serr := false;
if se { serr = true; }
if serr or ee { print("step failed\n"); st.finalize(); db.close(); return 1; }
if rc == sq.SQLITE_ROW {
print("row: {} {}\n", st.column_text(0), st.column_int64(1));
}
st.finalize();
db.close();
print("vendored sqlite {} ok\n", v);
0
}

View File

@@ -0,0 +1,35 @@
// The sx library ships stb_image: `#import "vendors/stb_image/
// stb_image.sx"` resolves through the stdlib search paths and the
// implementation compiles through the object cache. Decodes a 2x2
// 24-bit BMP built in memory — fully deterministic: dimensions,
// channel count, and the top-left pixel (blue) are pinned.
#import "modules/std.sx";
stb :: #import "vendors/stb_image/stb_image.sx";
main :: () -> i32 {
// BITMAPFILEHEADER (14) + BITMAPINFOHEADER (40) + 2 rows of
// 2 BGR pixels padded to 4-byte rows (8 each) = 70 bytes.
// Bottom row: red, green; top row: blue, white (BMP is bottom-up).
bmp : [70]u8 = .{
66, 77, 70, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
40, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 24, 0,
0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 0, 255, 0, 0, 0,
255, 0, 0, 255, 255, 255, 0, 0,
};
w : i32 = 0;
h : i32 = 0;
ch : i32 = 0;
img := stb.stbi_load_from_memory(@bmp[0], 70, @w, @h, @ch, 3);
if xx img == 0 {
print("decode failed\n");
return 1;
}
p : [*]u8 = xx img;
print("decoded {}x{} ({} channels)\n", w, h, ch);
print("top-left pixel: {} {} {}\n", p[0], p[1], p[2]);
stb.stbi_image_free(xx img);
0
}

View File

@@ -0,0 +1,36 @@
// The sx library ships stb_truetype: `#import "vendors/stb_truetype/
// stb_truetype.sx"` resolves through the stdlib search paths and the
// implementation compiles through the object cache. Loads the system
// Helvetica collection and pins INVARIANTS only (font versions vary
// across macOS releases): init succeeds, the pixel-height scale is
// positive, the ascender is positive and the descender negative.
#import "modules/std.sx";
fs :: #import "modules/std/fs.sx";
tt :: #import "vendors/stb_truetype/stb_truetype.sx";
main :: () -> i32 {
data := fs.read_file("/System/Library/Fonts/Helvetica.ttc");
if data == null {
print("font missing\n");
return 1;
}
bytes := data!;
off := tt.stbtt_GetFontOffsetForIndex(bytes.ptr, 0);
print("font offset >= 0: {}\n", off >= 0);
info : *void = xx context.allocator.alloc_bytes(256);
ok := tt.stbtt_InitFont(info, bytes.ptr, off);
print("init ok: {}\n", ok != 0);
px : f32 = 32.0;
scale := tt.stbtt_ScaleForPixelHeight(info, px);
print("scale > 0: {}\n", scale > 0.0);
ascent : i32 = 0;
descent : i32 = 0;
linegap : i32 = 0;
tt.stbtt_GetFontVMetrics(info, @ascent, @descent, @linegap);
print("ascent > 0, descent < 0: {} {}\n", ascent > 0, descent < 0);
0
}

View File

@@ -0,0 +1,28 @@
// The sx library ships kb_text_shape: `#import "vendors/kb_text_shape/
// kb_text_shape.sx"` resolves through the stdlib search paths and the
// ~30k-line implementation compiles through the object cache (decls
// come from the curated c/kbts_api.h). Pins INVARIANTS only: a shape
// context constructs, the system Helvetica loads as a shaping font,
// and teardown is clean.
#import "modules/std.sx";
fs :: #import "modules/std/fs.sx";
kb :: #import "vendors/kb_text_shape/kb_text_shape.sx";
main :: () -> i32 {
data := fs.read_file("/System/Library/Fonts/Helvetica.ttc");
if data == null {
print("font missing\n");
return 1;
}
bytes := data!;
ctx := kb.kbts_CreateShapeContext(xx 0, xx 0);
print("context created: {}\n", xx ctx != 0);
font := kb.kbts_ShapePushFontFromMemory(ctx, xx bytes.ptr, xx bytes.len, 0);
print("font pushed: {}\n", xx font != 0);
kb.kbts_DestroyShapeContext(ctx);
print("context destroyed\n");
0
}

View File

@@ -0,0 +1,20 @@
// Two `#import c` units defining the same exported symbol is a
// compile-time diagnostic naming both sources — previously it died
// inside the JIT dylib link (or the AOT link) with raw linker spew.
// All units share one link namespace; per-unit symbol isolation is
// PLAN-C C3.2 (deferred).
#import "modules/std.sx";
ua :: #import c {
#source "1628-cimport-duplicate-export/a.c";
};
ub :: #import c {
#source "1628-cimport-duplicate-export/b.c";
};
clash :: () -> i32 #foreign ua "clash";
main :: () -> i32 {
print("{}\n", clash());
0
}

View File

@@ -0,0 +1 @@
int clash(void) { return 1; }

View File

@@ -0,0 +1 @@
int clash(void) { return 2; }

35
examples/1629-std-time.sx Normal file
View File

@@ -0,0 +1,35 @@
// std.time (PLAN-HTTPZ S1): the wall clock reads a plausible epoch and
// the monotonic clock advances and never runs backwards. The `time`
// alias rides the std.sx namespace tail like its siblings.
#import "modules/std.sx";
main :: () -> i32 {
now := time.now_secs();
if now < 1767225600 { // before 2026-01-01: implausible
print("wall clock implausibly old: {}\n", now);
return 1;
}
if now > 4102444800 { // after 2100-01-01: implausible
print("wall clock implausibly far: {}\n", now);
return 1;
}
a := time.mono_ms();
b := a;
spins := 0;
while b == a and spins < 100000000 { // a real ms tick arrives long before the bound
b = time.mono_ms();
spins += 1;
}
if b < a {
print("monotonic went backwards: {} -> {}\n", a, b);
return 1;
}
if b == a {
print("monotonic never advanced\n");
return 1;
}
print("std.time ok\n");
return 0;
}

View File

@@ -0,0 +1,94 @@
// std.socket nonblocking surface (PLAN-HTTPZ S2): set_nonblocking via
// the C-variadic fcntl, and the typed _nb wrappers' full result
// algebra — bytes, WouldBlock, Closed — on a unix socketpair, plus
// accept_nb on a nonblocking TCP listener (WouldBlock with an empty
// backlog, a connection after a loopback connect).
#import "modules/std.sx";
PORT :: 18931;
main :: () -> i32 {
// ── socketpair: read/write algebra ────────────────────────────────
pair : [2]i32 = ---;
if socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM, 0, @pair[0]) != 0 {
print("socketpair failed\n");
return 1;
}
a := pair[0];
b := pair[1];
if !socket.set_nonblocking(a) or !socket.set_nonblocking(b) {
print("set_nonblocking failed\n");
return 1;
}
buf : [16]u8 = ---;
n, e := socket.read_nb(a, @buf[0], 16);
if e != error.WouldBlock {
print("empty pair read: expected WouldBlock\n");
return 1;
}
print("empty read: WouldBlock\n");
msg := "ping";
wn, we := socket.write_nb(b, msg.ptr, 4);
if we { print("write_nb failed\n"); return 1; }
if wn != 4 { print("short write: {}\n", wn); return 1; }
rn, re := socket.read_nb(a, @buf[0], 16);
if re { print("read_nb after write failed\n"); return 1; }
if rn != 4 { print("short read: {}\n", rn); return 1; }
print("pair round trip: {} bytes\n", rn);
socket.close(b);
cn, ce := socket.read_nb(a, @buf[0], 16);
if ce != error.Closed {
print("read after peer close: expected Closed\n");
return 1;
}
print("peer close: Closed\n");
socket.close(a);
// ── nonblocking listener: accept_nb ───────────────────────────────
lfd := socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0);
if lfd < 0 { print("listener socket failed\n"); return 1; }
one : i32 = 1;
socket.setsockopt(lfd, socket.SOL_SOCKET, socket.SO_REUSEADDR, @one, 4);
addr : socket.SockAddr = .{
sin_len = 16, sin_family = xx socket.AF_INET,
sin_port = socket.htons(PORT), sin_addr = 0x0100007F, // 127.0.0.1
};
if socket.bind(lfd, @addr, 16) != 0 { print("bind failed\n"); return 1; }
if socket.listen(lfd, 4) != 0 { print("listen failed\n"); return 1; }
if !socket.set_nonblocking(lfd) { print("listener set_nonblocking failed\n"); return 1; }
afd, ae := socket.accept_nb(lfd);
if ae != error.WouldBlock {
print("empty backlog: expected WouldBlock\n");
return 1;
}
print("empty backlog: WouldBlock\n");
// A blocking loopback connect completes the handshake against the
// listen queue without an accept having run yet.
cfd := socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0);
if cfd < 0 { print("client socket failed\n"); return 1; }
if socket.connect(cfd, @addr, 16) != 0 {
print("connect failed: errno {}\n", socket.errno());
return 1;
}
got := -1;
tries := 0;
while got < 0 and tries < 1000 {
c2, ae2 := socket.accept_nb(lfd);
if !ae2 { got = xx c2; }
else if ae2 != error.WouldBlock { print("accept_nb fault\n"); return 1; }
tries += 1;
}
if got < 0 { print("accept never produced the connection\n"); return 1; }
print("accept after connect: ok\n");
socket.close(xx got);
socket.close(cfd);
socket.close(lfd);
print("socket nonblocking ok\n");
return 0;
}

View File

@@ -0,0 +1,55 @@
// std/net/kqueue (PLAN-HTTPZ S3): readiness without blocking — an idle
// registration times out at zero cost, a write makes the peer readable
// (with the pending byte count in `data` and the registration's udata
// handed back), and a peer close reports EV_EOF.
#import "modules/std.sx";
kq :: #import "modules/std/net/kqueue.sx";
main :: () -> i32 {
pair : [2]i32 = ---;
if socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM, 0, @pair[0]) != 0 {
print("socketpair failed\n");
return 1;
}
a := pair[0];
b := pair[1];
q := kq.kqueue();
if q < 0 { print("kqueue failed\n"); return 1; }
if !kq.kq_apply(q, kq.kev_change(a, kq.EVFILT_READ, kq.EV_ADD, 7777)) {
print("EV_ADD failed\n");
return 1;
}
evs : [4]kq.Kevent = ---;
// Nothing pending: a bounded wait returns 0 events.
n := kq.kq_wait(q, @evs[0], 4, 50);
if n != 0 { print("idle wait: expected 0 events, got {}\n", n); return 1; }
print("idle wait: timeout, 0 events\n");
// Bytes pending: READ readiness with the byte count and our udata.
msg := "ping";
socket.write(b, msg.ptr, 4);
n = kq.kq_wait(q, @evs[0], 4, 1000);
if n != 1 { print("after write: expected 1 event, got {}\n", n); return 1; }
if evs[0].ident != xx a { print("event names the wrong fd\n"); return 1; }
if evs[0].filter != kq.EVFILT_READ { print("event names the wrong filter\n"); return 1; }
if evs[0].udata != 7777 { print("udata did not round-trip\n"); return 1; }
if evs[0].data != 4 { print("pending byte count: expected 4, got {}\n", evs[0].data); return 1; }
print("after write: READ ready, 4 pending, udata 7777\n");
// Drain, then close the peer: readiness again, now flagged EV_EOF.
buf : [16]u8 = ---;
socket.read(a, @buf[0], 16);
socket.close(b);
n = kq.kq_wait(q, @evs[0], 4, 1000);
if n != 1 { print("after close: expected 1 event, got {}\n", n); return 1; }
if (evs[0].flags & kq.EV_EOF) == 0 { print("after close: EV_EOF not set\n"); return 1; }
print("after close: EV_EOF\n");
socket.close(a);
socket.close(q);
print("kqueue ok\n");
return 0;
}

View File

@@ -0,0 +1,71 @@
// std.event (PLAN-HTTPZ S5): the OS-neutral Loop — idle timeout costs
// nothing, read readiness carries the registration's udata, write
// interest reports an empty send buffer immediately, EOF is a flag not
// an errno, and the deadline helpers do monotonic timeout math.
#import "modules/std.sx";
main :: () -> i32 {
pair : [2]i32 = ---;
if socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM, 0, @pair[0]) != 0 {
print("socketpair failed\n");
return 1;
}
a := pair[0];
b := pair[1];
loop, ie := event.Loop.init();
if ie { print("loop init failed\n"); return 1; }
are := false;
loop.add_read(a, 41) catch { are = true; };
if are { print("add_read failed\n"); return 1; }
evs : [8]event.Event = ---;
// Idle: a bounded wait returns 0 events, and roughly honors the bound.
t0 := event.deadline_in(40);
n, we := loop.wait(.{ ptr = @evs[0], len = 8 }, 40);
if we { print("wait failed\n"); return 1; }
if n != 0 { print("idle wait: expected 0 events, got {}\n", n); return 1; }
if !event.expired(t0) { print("idle wait returned before its timeout\n"); return 1; }
print("idle wait: 0 events, deadline expired\n");
// Readable: the event carries fd, udata, and the pending byte count.
msg := "ping";
socket.write(b, msg.ptr, 4);
n2, we2 := loop.wait(.{ ptr = @evs[0], len = 8 }, 1000);
if we2 { print("wait failed\n"); return 1; }
if n2 != 1 { print("after write: expected 1 event, got {}\n", n2); return 1; }
if !evs[0].readable { print("event not readable\n"); return 1; }
if evs[0].fd != a { print("event names the wrong fd\n"); return 1; }
if evs[0].udata != 41 { print("udata did not round-trip\n"); return 1; }
if evs[0].nbytes != 4 { print("expected 4 pending bytes, got {}\n", evs[0].nbytes); return 1; }
print("readable: fd/udata/nbytes all correct\n");
// Write interest on an empty send buffer reports writable at once.
awe := false;
loop.add_write(b, 42) catch { awe = true; };
if awe { print("add_write failed\n"); return 1; }
buf : [16]u8 = ---;
socket.read(a, @buf[0], 16); // drain so only the WRITE event fires
n3, we3 := loop.wait(.{ ptr = @evs[0], len = 8 }, 1000);
if we3 { print("wait failed\n"); return 1; }
if n3 != 1 { print("write interest: expected 1 event, got {}\n", n3); return 1; }
if !evs[0].writable { print("event not writable\n"); return 1; }
if evs[0].udata != 42 { print("write udata did not round-trip\n"); return 1; }
print("writable: immediate, udata correct\n");
loop.del_write(b);
// Peer close: readable with the eof flag set.
socket.close(b);
n4, we4 := loop.wait(.{ ptr = @evs[0], len = 8 }, 1000);
if we4 { print("wait failed\n"); return 1; }
if n4 != 1 { print("after close: expected 1 event, got {}\n", n4); return 1; }
if !evs[0].eof { print("after close: eof flag not set\n"); return 1; }
print("peer close: eof flagged\n");
loop.del_read(a);
socket.close(a);
loop.close();
print("event loop ok\n");
return 0;
}

View File

@@ -0,0 +1,249 @@
// std.http S7a (PLAN-HTTPZ): a live single-worker server and its
// clients driven in ONE thread via Server.tick — keep-alive reuse,
// POST body echo, the per-connection request cap closing politely,
// 404 routing, and half-a-header eviction at the request deadline
// while the server keeps serving others.
#import "modules/std.sx";
PORT :: 18933;
handler :: (req: *http.Request, resp: *http.Response, ctx: usize) {
if req.path == "/hello" {
resp.body = concat("hello ", req.method);
// the ctx word arrives verbatim (init passed 77)
if ctx != 77 { resp.status = 500; resp.body = "ctx lost"; }
return;
}
if req.path == "/echo" {
resp.body = req.body;
return;
}
resp.status = 404;
resp.body = "nope";
}
contains :: (hay: string, needle: string) -> bool {
if needle.len > hay.len { return false; }
i := 0;
while i + needle.len <= hay.len {
j := 0;
ok := true;
while j < needle.len {
if hay[i + j] != needle[j] { ok = false; break; }
j += 1;
}
if ok { return true; }
i += 1;
}
return false;
}
// Connect a nonblocking loopback client.
dial_port :: (port: i64) -> i32 {
fd := socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0);
if fd < 0 { return -1; }
addr : socket.SockAddr = .{
sin_len = 16, sin_family = xx socket.AF_INET,
sin_port = socket.htons(port), sin_addr = 0x0100007F,
};
if socket.connect(fd, @addr, 16) != 0 { socket.close(fd); return -1; }
if !socket.set_nonblocking(fd) { socket.close(fd); return -1; }
return fd;
}
dial :: () -> i32 {
return dial_port(PORT);
}
// True when `buf[0..len]` holds a complete response (headers + body).
resp_complete :: (buf: [*]u8, len: i64) -> bool {
s := string.{ ptr = buf, len = xx len };
he := -1;
i := 0;
while i + 3 < s.len {
if s[i] == 13 and s[i+1] == 10 and s[i+2] == 13 and s[i+3] == 10 { he = i; break; }
i += 1;
}
if he < 0 { return false; }
// Content-Length digits
cl : i64 = 0;
seen := false;
j := 0;
needle := "Content-Length: ";
while j + needle.len < s.len {
k := 0;
ok := true;
while k < needle.len { if s[j + k] != needle[k] { ok = false; break; } k += 1; }
if ok {
d := j + needle.len;
while d < s.len and s[d] >= 48 and s[d] <= 57 { cl = cl * 10 + (s[d] - 48); d += 1; }
seen = true;
break;
}
j += 1;
}
if !seen { return false; }
return len >= he + 4 + cl;
}
// Send a request and tick the server until its full response arrives.
// Returns the response text ("" = the connection closed instead).
roundtrip :: (srv: *http.Server, fd: i32, reqtext: string, scratch: [*]u8) -> string {
socket.write(fd, reqtext.ptr, xx reqtext.len);
total : i64 = 0;
tries := 0;
while tries < 400 {
srv.tick(5) catch {};
n, re := socket.read_nb(fd, @scratch[total], xx (4096 - total));
if !re { total += n; }
else if re == error.Closed { return string.{ ptr = scratch, len = xx total }; }
if resp_complete(scratch, total) { return string.{ ptr = scratch, len = xx total }; }
tries += 1;
}
return "";
}
main :: () -> i32 {
cfg : http.Config = .{
port = PORT,
timeout_request_ms = 150,
timeout_keepalive_ms = 400,
request_count = 3,
max_conn = 8,
};
srv, se := http.Server.init(cfg, handler, 77);
if se { print("server init failed\n"); return 1; }
buf : [4096]u8 = ---;
// ── 1. GET, keep-alive default ────────────────────────────────────
c1 := dial();
if c1 < 0 { print("dial failed\n"); return 1; }
r1 := roundtrip(@srv, c1, "GET /hello HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r1, "HTTP/1.1 200 OK") { print("case1: bad status\n"); return 1; }
if !contains(r1, "hello GET") { print("case1: bad body\n"); return 1; }
if !contains(r1, "Connection: keep-alive") { print("case1: expected keep-alive\n"); return 1; }
print("GET 200, keep-alive\n");
// ── 2. same socket again: the connection was actually reused ─────
r2 := roundtrip(@srv, c1, "GET /hello HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r2, "hello GET") { print("case2: keep-alive reuse failed\n"); return 1; }
print("keep-alive reuse ok\n");
// ── 3. third request hits request_count: Connection: close + EOF ─
r3 := roundtrip(@srv, c1, "GET /hello HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r3, "Connection: close") { print("case3: expected close at cap\n"); return 1; }
drained := false;
tries := 0;
while !drained and tries < 200 {
srv.tick(5) catch {};
zq, ze := socket.read_nb(c1, @buf[0], 64);
if ze == error.Closed { drained = true; }
if !ze and zq == 0 { drained = true; }
tries += 1;
}
if !drained { print("case3: server did not close at the cap\n"); return 1; }
socket.close(c1);
print("request cap: close + EOF\n");
// ── 4. POST body echo ─────────────────────────────────────────────
c2 := dial();
if c2 < 0 { print("dial2 failed\n"); return 1; }
r4 := roundtrip(@srv, c2, "POST /echo HTTP/1.1\r\nHost: t\r\nContent-Length: 9\r\n\r\nping-pong", @buf[0]);
if !contains(r4, "ping-pong") { print("case4: body not echoed\n"); return 1; }
print("POST echo ok\n");
// ── 5. unknown path routes 404 ────────────────────────────────────
r5 := roundtrip(@srv, c2, "GET /missing HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r5, "HTTP/1.1 404 Not Found") { print("case5: expected 404\n"); return 1; }
socket.close(c2);
print("404 routing ok\n");
// ── 5b. a body past READ_BUF_INITIAL forces the buffer to grow ────
big_n := 50000;
payload : [*]u8 = xx context.allocator.alloc_bytes(xx big_n);
f := 0;
while f < big_n { payload[f] = 97 + cast(u8)(f % 26); f += 1; }
breq := concat("POST /echo HTTP/1.1\r\nHost: t\r\nContent-Length: ", concat(int_to_string(big_n), "\r\n\r\n"));
breq = concat(breq, string.{ ptr = payload, len = xx big_n });
c2b := dial();
if c2b < 0 { print("dial2b failed\n"); return 1; }
bigbuf : [*]u8 = xx context.allocator.alloc_bytes(xx (big_n + 4096));
socket.write(c2b, breq.ptr, xx breq.len);
btotal : i64 = 0;
btries := 0;
while btries < 2000 {
srv.tick(5) catch {};
bn, bre := socket.read_nb(c2b, @bigbuf[btotal], xx (big_n + 4096 - btotal));
if !bre { btotal += bn; }
else if bre == error.Closed { break; }
if resp_complete(bigbuf, btotal) { break; }
btries += 1;
}
bresp := string.{ ptr = bigbuf, len = xx btotal };
if !contains(bresp, "HTTP/1.1 200 OK") { print("case5b: big echo not 200\n"); return 1; }
if !contains(bresp, concat("Content-Length: ", int_to_string(big_n))) { print("case5b: wrong echo length\n"); return 1; }
if bigbuf[btotal - 1] != 97 + cast(u8)((big_n - 1) % 26) { print("case5b: tail byte wrong\n"); return 1; }
socket.close(c2b);
print("big body grows the buffer and echoes intact\n");
// ── 6. half a header is evicted at the request deadline, while a
// healthy client keeps being served ──────────────────────────
c3 := dial();
if c3 < 0 { print("dial3 failed\n"); return 1; }
half := "GET /hel";
socket.write(c3, half.ptr, xx half.len);
gone := event.deadline_in(300); // > timeout_request_ms
while !event.expired(gone) { srv.tick(5) catch {}; }
c4 := dial();
if c4 < 0 { print("dial4 failed\n"); return 1; }
r6 := roundtrip(@srv, c4, "GET /hello HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r6, "hello GET") { print("case6: healthy client starved\n"); return 1; }
evicted := false;
tries = 0;
while !evicted and tries < 200 {
srv.tick(5) catch {};
zq2, ze2 := socket.read_nb(c3, @buf[0], 64);
if ze2 == error.Closed { evicted = true; }
if !ze2 and zq2 == 0 { evicted = true; }
tries += 1;
}
if !evicted { print("case6: half-header connection never evicted\n"); return 1; }
socket.close(c3);
socket.close(c4);
print("slow client evicted, healthy client served\n");
srv.close();
// ── pooled dispatch (S7b): same contract through worker threads ──
// thread_pool_count > 0 runs handlers on a pool; completions come
// back through the loop's wake channel. Same assertions: routing,
// body echo, keep-alive reuse — now crossing threads per request.
pcfg : http.Config = .{
port = PORT + 1,
timeout_request_ms = 1000,
timeout_keepalive_ms = 1000,
request_count = 50,
max_conn = 8,
thread_pool_count = 2,
thread_pool_backlog = 16,
};
psrv, pse := http.Server.init(pcfg, handler, 77);
if pse { print("pooled server init failed\n"); return 1; }
c5 := dial_port(PORT + 1);
if c5 < 0 { print("dial5 failed\n"); return 1; }
r7 := roundtrip(@psrv, c5, "GET /hello HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r7, "HTTP/1.1 200 OK") { print("pooled: bad status\n"); return 1; }
if !contains(r7, "hello GET") { print("pooled: bad body\n"); return 1; }
r8 := roundtrip(@psrv, c5, "POST /echo HTTP/1.1\r\nHost: t\r\nContent-Length: 9\r\n\r\nping-pong", @buf[0]);
if !contains(r8, "ping-pong") { print("pooled: echo failed\n"); return 1; }
r9 := roundtrip(@psrv, c5, "GET /missing HTTP/1.1\r\nHost: t\r\n\r\n", @buf[0]);
if !contains(r9, "HTTP/1.1 404 Not Found") { print("pooled: expected 404\n"); return 1; }
socket.close(c5);
psrv.close();
print("pooled dispatch: GET, echo, 404 across worker threads ok\n");
print("http server ok\n");
return 0;
}

View File

@@ -0,0 +1,12 @@
// issue 0131 regression: a protocol method call must arity-check like a
// plain call. `Allocator.dealloc_bytes` declares (ptr); calling it with
// an extra argument used to compile and silently drop the extra.
#import "modules/std.sx";
main :: () -> i32 {
gpa := GPA.init();
a : Allocator = xx gpa;
p := a.alloc_bytes(64);
a.dealloc_bytes(p, 12345);
return 0;
}

View File

@@ -0,0 +1,26 @@
// PLAN-HTTPZ C2: an sx `callconv(.c)` function passes by name as a
// typed C function pointer — libc qsort drives an sx comparator.
#import "modules/std.sx";
clib :: #library "c";
qsort :: (base: [*]u8, nel: usize, width: usize, compar: (*void, *void) -> i32 callconv(.c)) #foreign clib;
cmp_i32 :: (a: *void, b: *void) -> i32 callconv(.c) {
pa : *i32 = xx a;
pb : *i32 = xx b;
if pa.* < pb.* { return -1; }
if pa.* > pb.* { return 1; }
return 0;
}
main :: () -> i32 {
arr : [5]i32 = .[ 4, 1, 5, 2, 3 ];
qsort(xx @arr[0], 5, 4, cmp_i32);
i := 0;
while i < 5 {
if arr[i] != cast(i32)(i + 1) { print("not sorted at {}\n", i); return 1; }
i += 1;
}
print("qsort via sx comparator ok\n");
return 0;
}

View File

@@ -0,0 +1,29 @@
// PLAN-HTTPZ C2: the C->sx re-entry contract. A real OS thread enters
// sx through a `callconv(.c)` entry (which has NO implicit context),
// fabricates its own Context via `push Context.{ allocator = xx gpa }`,
// and calls default-conv sx code that allocates through it.
#import "modules/std.sx";
clib :: #library "c";
pthread_create :: (thread: *usize, attr: *void, start: (*void) -> *void callconv(.c), arg: *void) -> i32 #foreign clib;
pthread_join :: (thread: usize, retval: **void) -> i32 #foreign clib;
entry :: (arg: *void) -> *void callconv(.c) {
p : *i64 = xx arg;
gpa := GPA.init();
push Context.{ allocator = xx gpa } {
s := concat("th", "read"); // allocate through the thread's OWN context
if s.len == 6 { p.* = p.* * 2; }
}
return null;
}
main :: () -> i32 {
v : i64 = 21;
th : usize = 0;
if pthread_create(@th, null, entry, xx @v) != 0 { print("create failed\n"); return 1; }
pthread_join(th, null);
if v != 42 { print("wrong result: {}\n", v); return 1; }
print("pthread into sx ok: {}\n", v);
return 0;
}

116
examples/1637-std-thread.sx Normal file
View File

@@ -0,0 +1,116 @@
// std.thread (PLAN-HTTPZ S6): raw threads contend correctly on a Mutex,
// the Pool runs every submitted task exactly once across its workers,
// a full backlog applies backpressure (submit returns false), and
// shutdown joins cleanly with queued work finished.
#import "modules/std.sx";
Shared :: struct {
mu: thread.Mutex = .{};
counter: i64 = 0;
gate: i64 = 0;
}
// Raw-thread entry: C->sx boundary, own fabricated context.
bump_entry :: (arg: *void) -> *void callconv(.c) {
sh : *Shared = xx arg;
gpa := GPA.init();
push Context.{ allocator = xx gpa } {
i := 0;
while i < 1000 {
sh.mu.lock();
sh.counter += 1;
sh.mu.unlock();
i += 1;
}
}
return null;
}
// Pool tasks are default-conv: they run inside a worker's context.
AddArg :: struct {
sh: *Shared;
v: i64;
}
add_task :: (arg: usize) {
a : *AddArg = xx arg;
a.sh.mu.lock();
a.sh.counter += a.v;
a.sh.mu.unlock();
}
// Holds its worker hostage until the gate opens (backpressure case).
gate_task :: (arg: usize) {
sh : *Shared = xx arg;
while true {
sh.mu.lock();
g := sh.gate;
sh.mu.unlock();
if g != 0 { return; }
}
}
main :: () -> i32 {
sh : Shared = .{};
if !sh.mu.setup() { print("mutex setup failed\n"); return 1; }
// ── 4 raw threads, 1000 locked increments each ────────────────────
ths : [4]thread.Thread = ---;
i := 0;
while i < 4 {
t, te := thread.Thread.spawn(bump_entry, xx @sh);
if te { print("spawn failed\n"); return 1; }
ths[i] = t;
i += 1;
}
i = 0;
while i < 4 {
ths[i].join();
i += 1;
}
if sh.counter != 4000 { print("raw threads: expected 4000, got {}\n", sh.counter); return 1; }
print("raw threads: 4 x 1000 locked increments = {}\n", sh.counter);
// ── pool: 100 tasks, each adds its index+1; sum = 5050 ───────────
sh.counter = 0;
pool, pe := thread.Pool.create(4, 128);
if pe { print("pool create failed\n"); return 1; }
args : [*]AddArg = xx context.allocator.alloc_bytes(100 * size_of(AddArg));
n := 0;
while n < 100 {
args[n] = AddArg.{ sh = @sh, v = xx (n + 1) };
if !pool.submit(add_task, xx @args[n]) { print("submit unexpectedly refused\n"); return 1; }
n += 1;
}
pool.shutdown(); // queued tasks finish before workers exit
if sh.counter != 5050 { print("pool: expected 5050, got {}\n", sh.counter); return 1; }
print("pool: 100 tasks across 4 workers summed to {}\n", sh.counter);
// ── backpressure: 1 worker held at the gate, backlog 2 fills ─────
sh.gate = 0;
p2, pe2 := thread.Pool.create(1, 2);
if pe2 { print("pool2 create failed\n"); return 1; }
if !p2.submit(gate_task, xx @sh) { print("gate submit refused\n"); return 1; }
// give the worker a beat to take the gate task off the queue
spins := 0;
taken := false;
while !taken and spins < 100000000 {
p2.mu.lock();
taken = p2.len == 0;
p2.mu.unlock();
spins += 1;
}
if !taken { print("worker never took the gate task\n"); return 1; }
if !p2.submit(gate_task_noop, 0) { print("backlog slot 1 refused\n"); return 1; }
if !p2.submit(gate_task_noop, 0) { print("backlog slot 2 refused\n"); return 1; }
if p2.submit(gate_task_noop, 0) { print("full backlog must refuse\n"); return 1; }
print("backpressure: full backlog refuses\n");
sh.mu.lock();
sh.gate = 1;
sh.mu.unlock();
p2.shutdown();
print("std.thread ok\n");
return 0;
}
gate_task_noop :: (arg: usize) {}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -311,9 +311,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -794,6 +827,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i64 @accept_c(ptr %0) #0 {
entry:

View File

@@ -4,34 +4,34 @@
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@__sx_objc_cstr_dealloc = internal constant [8 x i8] c"dealloc\00"
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.127 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@str.128 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.114 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.115 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.116 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.117 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.118 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.119 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.120 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.121 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.122 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.123 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.124 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.125 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.126 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.127 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.128 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.129 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@str.130 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.131 = private unnamed_addr constant [10 x i8] c"compiled\0A\00", align 1
@OBJC_IVAR_NAME_ = private unnamed_addr constant [11 x i8] c"__sx_state\00"
@OBJC_IVAR_TYPE_ = private unnamed_addr constant [3 x i8] c"^v\00"
@OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
@OBJC_CLASS_NAME_.130 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_CLASS_NAME_.132 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"bump\00"
@OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.131 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.132 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.133 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.134 = private unnamed_addr constant [4 x i8] c"@@:\00"
@OBJC_METH_VAR_NAME_.133 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.134 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.135 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.136 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -270,7 +270,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.112, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.114, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -366,7 +366,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
if.then.12: ; preds = %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -374,7 +374,7 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -384,13 +384,13 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.13
if.merge.13: ; preds = %if.then.12, %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -398,7 +398,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -412,7 +412,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
if.then.23: ; preds = %if.else.10
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -420,7 +420,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -431,7 +431,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -488,7 +488,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
if.then.32: ; preds = %if.then.29
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -496,7 +496,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -507,7 +507,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -527,7 +527,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
if.then.35: ; preds = %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -535,7 +535,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -546,7 +546,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.36
@@ -803,9 +803,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1287,115 +1320,325 @@ declare void @log_emit(ptr, ptr, ptr) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.76(i64, ptr) #0
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.85(i64) #0
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.90(i64) #0
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.91(i64) #0
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.92(i64) #0
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.94(i64) #0
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.95(i64) #0
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.96(i64) #0
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.97(i64) #0
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.99(i64) #0
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.100(i64) #0
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.102(i64) #0
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.106(i64) #0
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.107(i64) #0
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.108(i64) #0
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.111() #0
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.79(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.80(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.81(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.82(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.83(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.84(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.85(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.86(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.87(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.89(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.90(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.91(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.94(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.95(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.99(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.100(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.101(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.103(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.104(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.105(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.106(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.107(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.109(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.110(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.111(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.112(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.113() #0
; Function Attrs: nounwind
define internal void @SxFoo.bump(ptr %0, ptr %1) #0 {
@@ -1438,14 +1681,14 @@ entry:
define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 9 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.129, i64 9 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.128, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.130, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 9)
@@ -1461,7 +1704,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.129, i64 9 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.131, i64 9 })
ret { ptr, i64 } %call
}
@@ -1541,17 +1784,17 @@ declare ptr @class_getInstanceVariable(ptr, ptr)
define internal void @__sx_objc_defined_class_init() {
entry:
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.130, i64 0)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.132, i64 0)
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
%metacls = call ptr @object_getClass(ptr %cls)
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
%1 = call i8 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
call void @objc_registerClassPair(ptr %cls)
store ptr %cls, ptr @__SxFoo_class, align 8
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.131)
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.132)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.133)
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.134)
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.133)
%2 = call i8 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.134)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.135)
%3 = call i8 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.136)
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
ret void

View File

@@ -4,50 +4,50 @@
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@__sx_objc_cstr_dealloc = internal constant [8 x i8] c"dealloc\00"
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.127 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
@str.128 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
@str.129 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
@str.130 = private unnamed_addr constant [8 x i8] c"release\00", align 1
@str.131 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.132 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.114 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.115 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.116 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.117 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.118 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.119 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.120 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.121 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.122 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.123 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.124 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.125 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.126 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.127 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.128 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.129 = private unnamed_addr constant [6 x i8] c"SxFoo\00", align 1
@str.130 = private unnamed_addr constant [8 x i8] c"dealloc\00", align 1
@str.131 = private unnamed_addr constant [6 x i8] c"alloc\00", align 1
@str.132 = private unnamed_addr constant [8 x i8] c"release\00", align 1
@str.133 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.134 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.135 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.134 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.135 = private unnamed_addr constant [28 x i8] c"FAIL: SxFoo not registered\0A\00", align 1
@str.136 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.137 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.138 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.137 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.138 = private unnamed_addr constant [27 x i8] c"FAIL: dealloc IMP missing\0A\00", align 1
@str.139 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.140 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.141 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.140 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.141 = private unnamed_addr constant [28 x i8] c"FAIL: +alloc returned null\0A\00", align 1
@str.142 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.143 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.144 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.143 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.144 = private unnamed_addr constant [36 x i8] c"FAIL: +alloc round 2 returned null\0A\00", align 1
@str.145 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@str.146 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.147 = private unnamed_addr constant [13 x i8] c"dealloc: ok\0A\00", align 1
@OBJC_IVAR_NAME_ = private unnamed_addr constant [11 x i8] c"__sx_state\00"
@OBJC_IVAR_TYPE_ = private unnamed_addr constant [3 x i8] c"^v\00"
@OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"NSObject\00"
@OBJC_CLASS_NAME_.146 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_CLASS_NAME_.148 = private unnamed_addr constant [6 x i8] c"SxFoo\00"
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"bump\00"
@OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.148 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.150 = private unnamed_addr constant [4 x i8] c"@@:\00"
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [8 x i8] c"dealloc\00"
@OBJC_METH_VAR_TYPE_.150 = private unnamed_addr constant [4 x i8] c"v@:\00"
@OBJC_METH_VAR_NAME_.151 = private unnamed_addr constant [6 x i8] c"alloc\00"
@OBJC_METH_VAR_TYPE_.152 = private unnamed_addr constant [4 x i8] c"@@:\00"
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -286,7 +286,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.112, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.114, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -382,7 +382,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -400,13 +400,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -414,7 +414,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -428,7 +428,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -436,7 +436,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -447,7 +447,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -504,7 +504,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -512,7 +512,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -523,7 +523,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -543,7 +543,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -551,7 +551,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -562,7 +562,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -819,9 +819,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1303,115 +1336,325 @@ declare void @log_emit(ptr, ptr, ptr) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.76(i64, ptr) #0
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.85(i64) #0
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.90(i64) #0
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.91(i64) #0
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.92(i64) #0
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.94(i64) #0
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.95(i64) #0
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.96(i64) #0
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.97(i64) #0
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.99(i64) #0
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.100(i64) #0
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.102(i64) #0
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.106(i64) #0
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.107(i64) #0
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.108(i64) #0
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.111() #0
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.79(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.80(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.81(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.82(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.83(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.84(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.85(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.86(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.87(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.89(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.90(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.91(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.94(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.95(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.99(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.100(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.101(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.103(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.104(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.105(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.106(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.107(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.109(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.110(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.111(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.112(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.113() #0
; Function Attrs: nounwind
declare ptr @objc_getClass(ptr) #0
@@ -1498,7 +1741,7 @@ entry:
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%allocaN = alloca ptr, align 8
%call = call ptr @objc_getClass(ptr @str.127)
%call = call ptr @objc_getClass(ptr @str.129)
store ptr %call, ptr %alloca, align 8
%load = load ptr, ptr %alloca, align 8
%icmp = icmp eq ptr %load, null
@@ -1509,7 +1752,7 @@ if.then.0: ; preds = %entry
ret i32 1
if.merge.1: ; preds = %entry
%callN = call ptr @sel_registerName(ptr @str.128)
%callN = call ptr @sel_registerName(ptr @str.130)
store ptr %callN, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -1524,7 +1767,7 @@ if.then.39: ; preds = %if.merge.1
ret i32 1
if.merge.40: ; preds = %if.merge.1
%callN = call ptr @sel_registerName(ptr @str.129)
%callN = call ptr @sel_registerName(ptr @str.131)
store ptr %callN, ptr %allocaN, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%loadN = load ptr, ptr %alloca, align 8
@@ -1541,7 +1784,7 @@ if.then.41: ; preds = %if.merge.40
ret i32 1
if.merge.42: ; preds = %if.merge.40
%callN = call ptr @sel_registerName(ptr @str.130)
%callN = call ptr @sel_registerName(ptr @str.132)
store ptr %callN, ptr %allocaN, align 8
store ptr @objc_msgSend, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -1588,14 +1831,14 @@ entry:
define internal void @print__ct_s354c93d7643e1bdf__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.131, i64 27 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.133, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.132, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.134, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
@@ -1611,7 +1854,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.133, i64 27 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.135, i64 27 })
ret { ptr, i64 } %call
}
@@ -1619,14 +1862,14 @@ entry:
define internal void @print__ct_sfe783e2b27a4beff__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.134, i64 26 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.136, i64 26 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.135, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.137, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 26)
@@ -1642,7 +1885,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.136, i64 26 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.138, i64 26 })
ret { ptr, i64 } %call
}
@@ -1650,14 +1893,14 @@ entry:
define internal void @print__ct_scaebdbbd10c81716__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.137, i64 27 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.139, i64 27 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.138, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.140, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 27)
@@ -1673,7 +1916,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_2(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.139, i64 27 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.141, i64 27 })
ret { ptr, i64 } %call
}
@@ -1681,14 +1924,14 @@ entry:
define internal void @print__ct_s7c1052877b8cc801__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.140, i64 35 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.142, i64 35 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.141, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.143, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 35)
@@ -1704,7 +1947,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_3(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.142, i64 35 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.144, i64 35 })
ret { ptr, i64 } %call
}
@@ -1712,14 +1955,14 @@ entry:
define internal void @print__ct_sed4e79fbcbd67966__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.143, i64 12 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.145, i64 12 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.146, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 12)
@@ -1735,7 +1978,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_4(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.145, i64 12 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.147, i64 12 })
ret { ptr, i64 } %call
}
@@ -1793,17 +2036,17 @@ declare i8 @class_addIvar(ptr, ptr, i64, i8, ptr)
define internal void @__sx_objc_defined_class_init() {
entry:
%super_cls = call ptr @objc_getClass(ptr @OBJC_CLASS_NAME_)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.146, i64 0)
%cls = call ptr @objc_allocateClassPair(ptr %super_cls, ptr @OBJC_CLASS_NAME_.148, i64 0)
%0 = call i8 @class_addIvar(ptr %cls, ptr @OBJC_IVAR_NAME_, i64 8, i8 3, ptr @OBJC_IVAR_TYPE_)
%metacls = call ptr @object_getClass(ptr %cls)
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
%1 = call i1 @class_addMethod(ptr %cls, ptr %sel, ptr @__SxFoo_bump_imp, ptr @OBJC_METH_VAR_TYPE_)
call void @objc_registerClassPair(ptr %cls)
store ptr %cls, ptr @__SxFoo_class, align 8
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.148)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.150)
%sel_dealloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
%2 = call i1 @class_addMethod(ptr %cls, ptr %sel_dealloc, ptr @__SxFoo_dealloc_imp, ptr @OBJC_METH_VAR_TYPE_.150)
%sel_alloc = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.151)
%3 = call i1 @class_addMethod(ptr %metacls, ptr %sel_alloc, ptr @__SxFoo_alloc_imp, ptr @OBJC_METH_VAR_TYPE_.152)
%iv = call ptr @class_getInstanceVariable(ptr %cls, ptr @OBJC_IVAR_NAME_)
store ptr %iv, ptr @__SxFoo_state_ivar, align 8
ret void

File diff suppressed because one or more lines are too long

View File

@@ -3,26 +3,26 @@
@OBJC_SELECTOR_REFERENCES_init = internal global ptr null
@OBJC_SELECTOR_REFERENCES_release = internal global ptr null
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.127 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.128 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.114 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.115 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.116 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.117 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.118 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.119 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.120 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.121 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.122 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.123 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.124 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.125 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.126 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.127 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.128 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.129 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.130 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.131 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [5 x i8] c"init\00"
@OBJC_METH_VAR_NAME_.130 = private unnamed_addr constant [8 x i8] c"release\00"
@OBJC_METH_VAR_NAME_.132 = private unnamed_addr constant [8 x i8] c"release\00"
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
; Function Attrs: nounwind
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.112, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.114, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
if.then.12: ; preds = %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.13
if.merge.13: ; preds = %if.then.12, %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
if.then.23: ; preds = %if.else.10
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
if.then.32: ; preds = %if.then.29
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
if.then.35: ; preds = %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.36
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1279,115 +1312,325 @@ declare void @log_emit(ptr, ptr, ptr) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.76(i64, ptr) #0
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.85(i64) #0
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.90(i64) #0
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.91(i64) #0
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.92(i64) #0
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.94(i64) #0
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.95(i64) #0
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.96(i64) #0
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.97(i64) #0
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.99(i64) #0
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.100(i64) #0
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.102(i64) #0
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.106(i64) #0
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.107(i64) #0
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.108(i64) #0
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.111() #0
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.79(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.80(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.81(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.82(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.83(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.84(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.85(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.86(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.87(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.89(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.90(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.91(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.94(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.95(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.99(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.100(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.101(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.103(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.104(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.105(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.106(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.107(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.109(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.110(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.111(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.112(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.113() #0
; Function Attrs: nounwind
define i32 @main() #0 {
@@ -1423,14 +1666,14 @@ entry:
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.127, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.129, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.128, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.130, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1446,7 +1689,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.129, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.131, i64 3 })
ret { ptr, i64 } %call
}
@@ -1458,7 +1701,7 @@ define internal void @__sx_objc_selector_init() {
entry:
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_init, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.130)
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.132)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_release, align 8
ret void
}

File diff suppressed because one or more lines are too long

View File

@@ -8,47 +8,47 @@
@OBJC_SELECTOR_REFERENCES_initWithFrame_options_ = internal global ptr null
@OBJC_SELECTOR_REFERENCES_actualSelectorName = internal global ptr null
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.112 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.113 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.114 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.115 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.116 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.117 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.118 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.119 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.120 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.121 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.122 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.123 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.124 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.125 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.126 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.127 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1
@str.128 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1
@str.129 = private unnamed_addr constant [7 x i8] c"length\00", align 1
@str.130 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.131 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1
@str.132 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1
@str.133 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1
@str.134 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.135 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1
@str.136 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1
@str.137 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1
@str.138 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1
@str.139 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1
@str.140 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.141 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1
@str.142 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.143 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
@str.144 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.114 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.115 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.116 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.117 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.118 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.119 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.120 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.121 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.122 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.123 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.124 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.125 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.126 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.127 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.128 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.129 = private unnamed_addr constant [9 x i8] c"NSObject\00", align 1
@str.130 = private unnamed_addr constant [16 x i8] c"SxManglingProbe\00", align 1
@str.131 = private unnamed_addr constant [7 x i8] c"length\00", align 1
@str.132 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.133 = private unnamed_addr constant [11 x i8] c"addObject:\00", align 1
@str.134 = private unnamed_addr constant [5 x i8] c"i@:i\00", align 1
@str.135 = private unnamed_addr constant [13 x i8] c"combine:and:\00", align 1
@str.136 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.137 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00", align 1
@str.138 = private unnamed_addr constant [7 x i8] c"i@:iii\00", align 1
@str.139 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00", align 1
@str.140 = private unnamed_addr constant [8 x i8] c"i@:iiii\00", align 1
@str.141 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00", align 1
@str.142 = private unnamed_addr constant [6 x i8] c"i@:ii\00", align 1
@str.143 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00", align 1
@str.144 = private unnamed_addr constant [4 x i8] c"i@:\00", align 1
@str.145 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
@str.146 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.147 = private unnamed_addr constant [19 x i8] c"mangling table OK\0A\00", align 1
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [7 x i8] c"length\00"
@OBJC_METH_VAR_NAME_.146 = private unnamed_addr constant [11 x i8] c"addObject:\00"
@OBJC_METH_VAR_NAME_.147 = private unnamed_addr constant [13 x i8] c"combine:and:\00"
@OBJC_METH_VAR_NAME_.148 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00"
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00"
@OBJC_METH_VAR_NAME_.150 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00"
@OBJC_METH_VAR_NAME_.151 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00"
@OBJC_METH_VAR_NAME_.148 = private unnamed_addr constant [11 x i8] c"addObject:\00"
@OBJC_METH_VAR_NAME_.149 = private unnamed_addr constant [13 x i8] c"combine:and:\00"
@OBJC_METH_VAR_NAME_.150 = private unnamed_addr constant [20 x i8] c"insert:after:index:\00"
@OBJC_METH_VAR_NAME_.151 = private unnamed_addr constant [24 x i8] c"add:observer:for:event:\00"
@OBJC_METH_VAR_NAME_.152 = private unnamed_addr constant [23 x i8] c"initWithFrame:options:\00"
@OBJC_METH_VAR_NAME_.153 = private unnamed_addr constant [19 x i8] c"actualSelectorName\00"
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__sx_objc_selector_init, ptr null }]
; Function Attrs: nounwind
@@ -288,7 +288,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.112, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.114, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -384,7 +384,7 @@ if.merge.11: ; preds = %if.merge.25, %if.me
if.then.12: ; preds = %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.113, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -392,7 +392,7 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.114, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -402,13 +402,13 @@ if.then.12: ; preds = %if.then.9
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.115, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.13
if.merge.13: ; preds = %if.then.12, %if.then.9
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.116, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -416,7 +416,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.117, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -430,7 +430,7 @@ if.merge.13: ; preds = %if.then.12, %if.the
if.then.23: ; preds = %if.else.10
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.118, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -438,7 +438,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.119, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -449,7 +449,7 @@ if.then.23: ; preds = %if.else.10
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.120, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -506,7 +506,7 @@ if.merge.31: ; preds = %if.merge.34, %if.el
if.then.32: ; preds = %if.then.29
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.121, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -514,7 +514,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.122, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -525,7 +525,7 @@ if.then.32: ; preds = %if.then.29
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.123, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -545,7 +545,7 @@ if.merge.34: ; preds = %if.else.33, %if.the
if.then.35: ; preds = %while.exit.2
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.124, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -553,7 +553,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.125, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.127, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -564,7 +564,7 @@ if.then.35: ; preds = %while.exit.2
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.126, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.128, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.36
@@ -821,9 +821,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1305,115 +1338,325 @@ declare void @log_emit(ptr, ptr, ptr) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.76(i64, ptr) #0
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.85(i64) #0
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.90(i64) #0
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.91(i64) #0
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.92(i64) #0
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.94(i64) #0
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.95(i64) #0
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.96(i64) #0
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.97(i64) #0
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.99(i64) #0
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.100(i64) #0
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.102(i64) #0
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.106(i64) #0
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.107(i64) #0
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.108(i64) #0
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.111() #0
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.79(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.80(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.81(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.82(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.83(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.84(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.85(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.86(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.87(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.89(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.90(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.91(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.94(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.95(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.99(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.100(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.101(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.103(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.104(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.105(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.106(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.107(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.109(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.110(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.111(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.112(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.113() #0
; Function Attrs: nounwind
declare ptr @objc_getClass(ptr) #0
@@ -1495,17 +1738,14 @@ entry:
define i32 @main() #0 {
entry:
call void @__sx_objc_selector_init()
%call = call ptr @objc_getClass(ptr @str.127)
%call = call ptr @objc_getClass(ptr @str.129)
%alloca = alloca ptr, align 8
store ptr %call, ptr %alloca, align 8
%load = load ptr, ptr %alloca, align 8
%callN = call ptr @objc_allocateClassPair(ptr %load, ptr @str.128, i64 0)
%callN = call ptr @objc_allocateClassPair(ptr %load, ptr @str.130, i64 0)
%allocaN = alloca ptr, align 8
store ptr %callN, ptr %allocaN, align 8
%loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.129)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.130)
%loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.131)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.132)
%loadN = load ptr, ptr %allocaN, align 8
@@ -1524,6 +1764,9 @@ entry:
%callN = call ptr @sel_registerName(ptr @str.141)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.142)
%loadN = load ptr, ptr %allocaN, align 8
%callN = call ptr @sel_registerName(ptr @str.143)
%callN = call i1 @class_addMethod(ptr %loadN, ptr %callN, ptr @universal_imp, ptr @str.144)
%loadN = load ptr, ptr %allocaN, align 8
call void @objc_registerClassPair(ptr %loadN)
%allocaN = alloca ptr, align 8
%loadN = load ptr, ptr %allocaN, align 8
@@ -1572,14 +1815,14 @@ entry:
define internal void @print__ct_s4c1a58a7c89bfbba__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.143, i64 18 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.145, i64 18 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.144, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.146, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 18)
@@ -1595,7 +1838,7 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.145, i64 18 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.147, i64 18 })
ret { ptr, i64 } %call
}
@@ -1603,17 +1846,17 @@ define internal void @__sx_objc_selector_init() {
entry:
%sel = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_)
store ptr %sel, ptr @OBJC_SELECTOR_REFERENCES_length, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.146)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.147)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.148)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_addObject_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.149)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_add_observer_for_event_, align 8
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_combine_and_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.150)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_insert_after_index_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.151)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_add_observer_for_event_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.152)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_initWithFrame_options_, align 8
%selN = call ptr @sel_registerName(ptr @OBJC_METH_VAR_NAME_.153)
store ptr %selN, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8
ret void
}

View File

@@ -2,30 +2,30 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null
@str.94 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.95 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.97 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.98 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -264,7 +264,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -360,7 +360,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -368,7 +368,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -378,13 +378,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -392,7 +392,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -406,7 +406,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -414,7 +414,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -425,7 +425,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -482,7 +482,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -490,7 +490,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -501,7 +501,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -521,7 +521,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -529,7 +529,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -540,7 +540,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -797,9 +797,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1280,6 +1313,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1306,7 +1549,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont
@@ -1331,7 +1574,7 @@ jni.miss7: ; preds = %jni.cont
store ptr %jni.global.cls12, ptr @SX_JNI_CLS_noop____V, align 8
%9 = getelementptr inbounds ptr, ptr %jni.ifs4, i32 33
%jni.GetMethodID13 = load ptr, ptr %9, align 8
%jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.92, ptr @str.93)
%jni.fresh.mid14 = call ptr %jni.GetMethodID13(ptr %load, ptr %jni.global.cls12, ptr @str.94, ptr @str.95)
store ptr %jni.fresh.mid14, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont8
@@ -1383,14 +1626,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.96, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.97, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1406,6 +1649,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.98, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()I\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [9 x i8] c"getCount\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()I\00", align 1
@SX_JNI_CLS_getCount____I = internal global ptr null
@SX_JNI_MID_getCount____I = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i32 @read_int(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getCount____I, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getCount____I, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()J\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [18 x i8] c"currentTimeMillis\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()J\00", align 1
@SX_JNI_CLS_currentTimeMillis____J = internal global ptr null
@SX_JNI_MID_currentTimeMillis____J = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i64 @read_long(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_currentTimeMillis____J, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_currentTimeMillis____J, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()D\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [9 x i8] c"getValue\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()D\00", align 1
@SX_JNI_CLS_getValue____D = internal global ptr null
@SX_JNI_MID_getValue____D = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal double @read_double(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getValue____D, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getValue____D, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [8 x i8] c"isShown\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()Z\00", align 1
@SX_JNI_CLS_isShown____Z = internal global ptr null
@SX_JNI_MID_isShown____Z = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i1 @read_bool(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_isShown____Z, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_isShown____Z, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.91 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.93 = private unnamed_addr constant [24 x i8] c"()Landroid/view/Window;\00", align 1
@SX_JNI_CLS_getWindow____Landroid_view_Window_ = internal global ptr null
@SX_JNI_MID_getWindow____Landroid_view_Window_ = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal ptr @get_window(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Landroid_view_Window_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Landroid_view_Window_, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [4 x i8] c"max\00", align 1
@str.91 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [4 x i8] c"max\00", align 1
@str.93 = private unnamed_addr constant [6 x i8] c"(II)I\00", align 1
@SX_JNI_CLS_max___II_I = internal global ptr null
@SX_JNI_MID_max___II_I = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal i32 @call_static_max(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1301,7 +1544,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_max___II_I, align 8
%4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 113
%jni.GetStaticMethodID = load ptr, ptr %4, align 8
%jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetStaticMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_max___II_I, align 8
br label %jni.cont
@@ -1355,14 +1598,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1378,6 +1621,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.91 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [10 x i8] c"getWindow\00", align 1
@str.93 = private unnamed_addr constant [21 x i8] c"()Ljava/lang/Object;\00", align 1
@SX_JNI_CLS_getWindow____Ljava_lang_Object_ = internal global ptr null
@SX_JNI_MID_getWindow____Ljava_lang_Object_ = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1305,7 +1548,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_getWindow____Ljava_lang_Object_, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_getWindow____Ljava_lang_Object_, align 8
br label %jni.cont
@@ -1358,14 +1601,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1381,6 +1624,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,28 +2,28 @@
@g_should_call = internal global i1 false
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@str.75 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.76 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.77 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.78 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.79 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.80 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.81 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.82 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.83 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.84 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.85 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.86 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.87 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.88 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.89 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.90 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.91 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@str.77 = private unnamed_addr constant [15 x i8] c"result := \22\22; \00", align 1
@str.78 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.79 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.80 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.81 = private unnamed_addr constant [44 x i8] c"result = concat(result, any_to_string(args[\00", align 1
@str.82 = private unnamed_addr constant [6 x i8] c"])); \00", align 1
@str.83 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.84 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.85 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.86 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.87 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.88 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.89 = private unnamed_addr constant [37 x i8] c"result = concat(result, substr(fmt, \00", align 1
@str.90 = private unnamed_addr constant [3 x i8] c", \00", align 1
@str.91 = private unnamed_addr constant [5 x i8] c")); \00", align 1
@str.92 = private unnamed_addr constant [5 x i8] c"noop\00", align 1
@str.93 = private unnamed_addr constant [4 x i8] c"()V\00", align 1
@SX_JNI_CLS_noop____V = internal global ptr null
@SX_JNI_MID_noop____V = internal global ptr null
@str.92 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.93 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.94 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
@str.95 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.96 = private unnamed_addr constant [4 x i8] c"ok\0A\00", align 1
; Function Attrs: nounwind
declare void @out(ptr) #0
@@ -262,7 +262,7 @@ entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } %1, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.75, i64 14 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.77, i64 14 }, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 0, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
@@ -358,7 +358,7 @@ if.merge.13: ; preds = %if.merge.27, %if.me
if.then.14: ; preds = %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.76, i64 36 })
%call = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 36 })
store { ptr, i64 } %call, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -366,7 +366,7 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.77, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -376,13 +376,13 @@ if.then.14: ; preds = %if.then.11
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.78, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.15
if.merge.15: ; preds = %if.then.14, %if.then.11
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.79, i64 43 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 43 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -390,7 +390,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.80, i64 5 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 5 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 1
@@ -404,7 +404,7 @@ if.merge.15: ; preds = %if.then.14, %if.the
if.then.25: ; preds = %if.else.12
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.81, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -412,7 +412,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.82, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -423,7 +423,7 @@ if.then.25: ; preds = %if.else.12
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.83, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -480,7 +480,7 @@ if.merge.33: ; preds = %if.merge.36, %if.el
if.then.34: ; preds = %if.then.31
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.84, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -488,7 +488,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.85, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -499,7 +499,7 @@ if.then.34: ; preds = %if.then.31
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.86, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%addN = add i64 %loadN, 2
@@ -519,7 +519,7 @@ if.merge.36: ; preds = %if.else.35, %if.the
if.then.37: ; preds = %while.exit.4
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.87, i64 36 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 36 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
@@ -527,7 +527,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.88, i64 2 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.90, i64 2 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
@@ -538,7 +538,7 @@ if.then.37: ; preds = %while.exit.4
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.89, i64 4 })
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } { ptr @str.91, i64 4 })
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %if.merge.38
@@ -795,9 +795,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -1278,6 +1311,216 @@ declare void @log_emit(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
define internal void @unused_jni(ptr %0, ptr %1, ptr %2) #0 {
entry:
@@ -1304,7 +1547,7 @@ jni.miss: ; preds = %entry
store ptr %jni.global.cls, ptr @SX_JNI_CLS_noop____V, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %5, align 8
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.90, ptr @str.91)
%jni.fresh.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.global.cls, ptr @str.92, ptr @str.93)
store ptr %jni.fresh.mid, ptr @SX_JNI_MID_noop____V, align 8
br label %jni.cont
@@ -1356,14 +1599,14 @@ declare void @sx_jni_env_tl_set(ptr) #0
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.92, i64 3 }, ptr %alloca, align 8
store { ptr, i64 } { ptr @str.94, i64 3 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.93, i64 0 }, ptr %allocaN, align 8
store { ptr, i64 } { ptr @str.95, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%call = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 0, i64 3)
@@ -1379,6 +1622,6 @@ entry:
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.94, i64 3 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.96, i64 3 })
ret { ptr, i64 } %call
}

View File

@@ -2,10 +2,10 @@
@g_held_view = internal global ptr null
@__sx_default_context = internal constant { { ptr, ptr, ptr }, ptr } { { ptr, ptr, ptr } { ptr null, ptr @__thunk_CAllocator_Allocator_alloc_bytes, ptr @__thunk_CAllocator_Allocator_dealloc_bytes }, ptr null }
@str = private unnamed_addr constant [9 x i8] c"onCreate\00", align 1
@str.112 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1
@str.114 = private unnamed_addr constant [23 x i8] c"(Landroid/os/Bundle;)V\00", align 1
@jni.parent.path = private unnamed_addr constant [21 x i8] c"android/app/Activity\00", align 1
@str.113 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
@str.114 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1
@str.115 = private unnamed_addr constant [7 x i8] c"<init>\00", align 1
@str.116 = private unnamed_addr constant [29 x i8] c"(Landroid/content/Context;)V\00", align 1
@jni.ctor.path = private unnamed_addr constant [25 x i8] c"android/view/SurfaceView\00", align 1
; Function Attrs: nounwind
@@ -318,9 +318,42 @@ declare i32 @listen(i32, i32) #0
; Function Attrs: nounwind
declare i32 @accept(i32, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @connect(i32, ptr, i32) #0
; Function Attrs: nounwind
declare i32 @shutdown(i32, i32) #0
; Function Attrs: nounwind
declare i32 @socketpair(i32, i32, i32, ptr) #0
; Function Attrs: nounwind
declare i32 @fcntl(i32, i32, ...) #0
; Function Attrs: nounwind
declare i16 @htons(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @__error() #0
; Function Attrs: nounwind
declare i32 @errno(ptr) #0
; Function Attrs: nounwind
declare i1 @is_wouldblock(ptr, i32) #0
; Function Attrs: nounwind
declare i1 @set_nonblocking(ptr, i32) #0
; Function Attrs: nounwind
declare i64 @accept_nb(ptr, i32) #0
; Function Attrs: nounwind
declare [2 x i64] @read_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare [2 x i64] @write_nb(ptr, i32, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @mem_realloc.3(ptr, ptr, ptr, i64, i64, i64) #0
@@ -802,115 +835,325 @@ declare void @log_emit(ptr, ptr, ptr) #0
declare void @assert.74(ptr, i1) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.75(i64, ptr) #0
declare i32 @clock_gettime(i32, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.76(i64, ptr) #0
declare i64 @now_secs(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.77(i64, ptr) #0
declare i64 @mono_ms(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.78(i64, ptr) #0
declare i32 @kqueue() #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.79(i64, ptr, ptr) #0
declare i32 @kevent(i32, ptr, i32, ptr, i32, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.80(i64) #0
declare void @kev_change(ptr sret({ i64, i16, i16, i32, i64, i64 }), ptr, i32, i16, i16, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.81(i64, i64) #0
declare i1 @kq_apply(ptr, i32, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.82(i64, i64) #0
declare i32 @kq_wait(ptr, i32, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.83(i64, ptr) #0
declare i64 @now_secs.75(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.84(i64, ptr) #0
declare i64 @mono_ms.76(ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.85(i64) #0
declare i64 @Loop.init(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.86(i64, ptr) #0
declare void @Loop.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.87(i64, ptr) #0
declare i32 @Loop.add_read(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.88(i64, ptr) #0
declare void @Loop.del_read(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.89(i64, ptr) #0
declare i32 @Loop.add_write(ptr, ptr, i32, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.90(i64) #0
declare void @Loop.del_write(ptr, ptr, i32) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.91(i64) #0
declare i32 @Loop.add_wake(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.92(i64) #0
declare void @Loop.wake(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.93(i64) #0
declare [2 x i64] @Loop.wait(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.94(i64) #0
declare i64 @deadline_in(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.95(i64) #0
declare i1 @expired(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.96(i64) #0
declare i64 @remaining_ms(ptr, i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.97(i64) #0
declare ptr @find_header(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.98(i64) #0
declare i1 @ascii_ieq(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.99(i64) #0
declare ptr @reason_for(ptr, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.100(i64) #0
declare void @run_handler_job(ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.101(i64, i64) #0
declare [2 x i64] @serialize_bytes(ptr, ptr, i1, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.102(i64) #0
declare void @Server.init(ptr sret({ { { i64, i32, i64, i64, i64, i64, i64, i64, i64 }, { i32 }, i32, ptr, { ptr, ptr, ptr }, ptr, i64, ptr }, i32 }), ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.103(i64, i64) #0
declare void @Server.close(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.104(i64, ptr) #0
declare i64 @Server.free_slot(ptr, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.105(i64, ptr) #0
declare void @Server.conn_close(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.106(i64) #0
declare i32 @Server.tick(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.107(i64) #0
declare void @Server.run(ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.108(i64) #0
declare void @Server.accept_ready(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.109(i64, i64) #0
declare i1 @Server.grow_read_buf(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.110(i64, i64) #0
declare void @Server.read_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.111() #0
declare void @Server.serve_buffered(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare i1 @Server.try_serve_one(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.serialize_response(ptr, ptr, i64, ptr, i1) #0
; Function Attrs: nounwind
declare void @Server.drain_completions(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Server.write_more(ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Server.respond_error_close(ptr, ptr, i64, i64) #0
; Function Attrs: nounwind
declare i32 @pthread_create(ptr, ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_join(i64, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_detach(i64) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_mutex_destroy(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_wait(ptr, ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_signal(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_broadcast(ptr) #0
; Function Attrs: nounwind
declare i32 @pthread_cond_destroy(ptr) #0
; Function Attrs: nounwind
declare i1 @Mutex.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.lock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.unlock(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Mutex.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare i1 @Cond.setup(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.wait(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.signal(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.broadcast(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Cond.destroy(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Thread.spawn(ptr, ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.join(ptr, ptr) #0
; Function Attrs: nounwind
declare void @Thread.detach(ptr, ptr) #0
; Function Attrs: nounwind
declare [2 x i64] @Pool.create(ptr, i64, i64) #0
; Function Attrs: nounwind
declare i1 @Pool.submit(ptr, ptr, ptr, i64) #0
; Function Attrs: nounwind
declare void @Pool.shutdown(ptr, ptr) #0
; Function Attrs: nounwind
declare ptr @pool_worker(ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_link_flag.77(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_framework.78(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_output_path.79(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_wasm_shell.80(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.add_asset_dir.81(i64, ptr, ptr) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.asset_dir_count.82(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_src_at.83(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.asset_dir_dest_at.84(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_callback.85(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_post_link_module.86(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.binary_path.87(i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_path.88(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_bundle_id.89(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_codesign_identity.90(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_provisioning_profile.91(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_path.92(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.bundle_id.93(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.codesign_identity.94(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.provisioning_profile.95(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.target_triple.96(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_macos.97(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios.98(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_device.99(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_ios_simulator.100(i64) #0
; Function Attrs: nounwind
declare i1 @BuildOptions.is_android.101(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_count.102(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_at.103(i64, i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.framework_path_count.104(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.framework_path_at.105(i64, i64) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_manifest_path.106(i64, ptr) #0
; Function Attrs: nounwind
declare void @BuildOptions.set_keystore_path.107(i64, ptr) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.manifest_path.108(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.keystore_path.109(i64) #0
; Function Attrs: nounwind
declare i64 @BuildOptions.jni_main_count.110(i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_foreign_path_at.111(i64, i64) #0
; Function Attrs: nounwind
declare ptr @BuildOptions.jni_main_java_source_at.112(i64, i64) #0
; Function Attrs: nounwind
declare i64 @build_options.113() #0
; Function Attrs: nounwind
define i32 @main() #0 {
@@ -950,7 +1193,7 @@ entry:
%jni.parent.cls = call ptr %jni.FindClass(ptr %load, ptr @jni.parent.path)
%4 = getelementptr inbounds ptr, ptr %jni.ifs, i32 33
%jni.GetMethodID = load ptr, ptr %4, align 8
%jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.112)
%jni.mid = call ptr %jni.GetMethodID(ptr %load, ptr %jni.parent.cls, ptr @str, ptr @str.114)
%jni.parent.cls.slot = alloca ptr, align 8
store ptr %jni.parent.cls, ptr %jni.parent.cls.slot, align 8
%5 = getelementptr inbounds ptr, ptr %jni.ifs, i32 91
@@ -966,7 +1209,7 @@ entry:
%jni.ctor.cls = call ptr %jni.FindClass9(ptr %load, ptr @jni.ctor.path)
%7 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 33
%jni.GetMethodID10 = load ptr, ptr %7, align 8
%jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.113, ptr @str.114)
%jni.ctor.mid = call ptr %jni.GetMethodID10(ptr %load, ptr %jni.ctor.cls, ptr @str.115, ptr @str.116)
%8 = getelementptr inbounds ptr, ptr %jni.ifs8, i32 28
%jni.NewObject = load ptr, ptr %8, align 8
%jni.new.obj = call ptr %jni.NewObject(ptr %load, ptr %jni.ctor.cls, ptr %jni.ctor.mid, ptr %loadN)

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,2 @@
row: b 2
vendored sqlite 3.53.2 ok

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,2 @@
decoded 2x2 (3 channels)
top-left pixel: 0 0 255

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,4 @@
font offset >= 0: true
init ok: true
scale > 0: true
ascent > 0, descent < 0: true true

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,3 @@
context created: true
font pushed: true
context destroyed

View File

@@ -0,0 +1 @@
1

Some files were not shown because too many files have changed in this diff Show More