ffi step 6: print / format migrate to ..\$args (comptime per-position pack)

`format` and `print` move from `..args: []Any` to `..$args`. The
pack-fn machinery monomorphises each call shape, so the
build_format-emitted body's `any_to_string(args[i])` substitutes
to the i-th concrete-typed call arg via packArgNodeAt — no more
runtime Any-boxing for static args. The Any boxing path still
fires for arg positions whose types collapse to `.any` (already
Any-typed inputs).

Net effect:
- Calls with statically-typed args produce per-shape monos
  (`print__ct_<fmt_hash>__pack_s64_string_bool` etc). The mono
  cache key now reflects both the format string AND the arg
  types, so different shapes get distinct emit paths.
- Compile-time arity errors are now possible (callers passing
  the wrong number of args mismatch the mono's positional
  binding instead of silently mis-boxing).
- Optionals flow through the new `case optional:` arm in
  `any_to_string` (commit ce77867); the variadic auto-unwrap
  in `packVariadicCallArgs` stays as a fast-path but is no
  longer load-bearing.

IR snapshots regenerated for 13 tests where the print/format
mono shape changed the string-constant pool: 142, the ffi-jni
test cluster, ffi-objc-call-03/06, ffi-objc-dsl-07. Test
08-types' undef-memory-read snapshot also shifted (the test
exercises `field = ---` reads from a print call's stack
neighbours; the new pack-mono lays out its stack frame
differently, so the previously-stale 1s now read as 0s — same
undefined behaviour, different garbage).

218/218 example tests + `zig build test` green.
This commit is contained in:
agra
2026-05-28 08:04:12 +03:00
parent b7c6ec24b0
commit 11eef8a6b1
15 changed files with 450 additions and 347 deletions

View File

@@ -390,12 +390,12 @@ build_format :: (fmt: string) -> string {
code;
}
format :: ($fmt: string, ..args: []Any) -> string {
format :: ($fmt: string, ..$args) -> string {
#insert build_format(fmt);
#insert "result;";
}
print :: ($fmt: string, ..args: []Any) {
print :: ($fmt: string, ..$args) {
#insert build_format(fmt);
#insert "out(result);";
}

View File

@@ -1,4 +1,4 @@
a 0 : Foo{a: 0, b: 42, c: 1, d: 17}
a 0 : Foo{a: 0, b: 42, c: 0, d: 17}
a 1 : Foo{a: 1, b: 42, c: 8, d: 17}
b: Foo{a: 1, b: 1, c: 101, d: 1}
b: Foo{a: 1, b: 0, c: 101, d: 0}
Pack{a: 1, b: 0, c: 3, d: 5, f: 9, v: 100, x: 3.500000}

View File

@@ -750,25 +750,8 @@ entry:
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
call void @print__ct_sfeff9eeccd48b824__pack(ptr @__sx_default_context)
call void @__sx_objc_defined_class_init()
%alloca = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.16, i64 9 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 9)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret i32 0
}
@@ -786,6 +769,30 @@ entry:
ret void
}
; Function Attrs: nounwind
define internal void @print__ct_sfeff9eeccd48b824__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.16, 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.17, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -687,24 +687,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%alloca = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.20, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.21, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -728,6 +711,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.20, 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.21, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -659,24 +659,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%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.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -700,6 +683,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -662,24 +662,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%alloca = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -703,6 +686,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -660,24 +660,7 @@ if.then.0: ; preds = %entry
br label %if.merge.1
if.merge.1: ; preds = %if.then.0, %entry
%alloca = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.19, i64 0 }, ptr %allocaN, align 8
%load = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -701,6 +684,30 @@ declare ptr @sx_jni_env_tl_get() #0
; Function Attrs: nounwind
declare void @sx_jni_env_tl_set(ptr) #0
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.18, 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.19, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -736,24 +736,7 @@ entry:
call void @objc_msgSend(ptr null, ptr %loadN)
%loadN = load ptr, ptr @OBJC_SELECTOR_REFERENCES_release, align 8
call void @objc_msgSend(ptr null, ptr %loadN)
%alloca = alloca { ptr, i64 }, align 8
%gep = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 0
store ptr null, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %alloca, i32 0, i32 1
store i64 0, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.16, i64 3 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.17, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%call = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 3)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_sbdbafa1a5fe828c0__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -771,6 +754,30 @@ entry:
ret void
}
; Function Attrs: nounwind
define internal void @print__ct_sbdbafa1a5fe828c0__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.16, 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.17, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry:

View File

@@ -36,9 +36,9 @@
@str.29 = private unnamed_addr constant [15 x i8] c"{Triple=qqq}@:\00", align 1
@str.30 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1
@str.31 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.32 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1
@str.33 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.34 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1
@str.32 = private unnamed_addr constant [16 x i8] c"addMethod = {}\0A\00", align 1
@str.33 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1
@str.34 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@str.35 = private unnamed_addr constant [23 x i8] c"triple = ({}, {}, {})\0A\00", align 1
@str.36 = private unnamed_addr constant [10 x i8] c"Allocator\00", align 1
@str.37 = private unnamed_addr constant [2 x i8] c"{\00", align 1
@@ -190,16 +190,16 @@
@str.181 = private unnamed_addr constant [6 x i8] c"*bool\00", align 1
@str.182 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.183 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.184 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1
@str.184 = private unnamed_addr constant [8 x i8] c"*string\00", align 1
@str.185 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.186 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.187 = private unnamed_addr constant [5 x i8] c"*Any\00", align 1
@str.188 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.189 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.190 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1
@str.190 = private unnamed_addr constant [8 x i8] c"*[1]Any\00", align 1
@str.191 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.192 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.193 = private unnamed_addr constant [8 x i8] c"*string\00", align 1
@str.193 = private unnamed_addr constant [7 x i8] c"*[]Any\00", align 1
@str.194 = private unnamed_addr constant [4 x i8] c"@0x\00", align 1
@str.195 = private unnamed_addr constant [5 x i8] c"null\00", align 1
@str.196 = private unnamed_addr constant [4 x i8] c"*u8\00", align 1
@@ -906,10 +906,10 @@ entry:
i64 39, label %match.arm.44
i64 34, label %match.arm.45
i64 35, label %match.arm.45
i64 45, label %match.arm.47
i64 47, label %match.arm.47
i64 52, label %match.arm.47
i64 33, label %match.arm.48
i64 44, label %match.arm.48
i64 45, label %match.arm.48
i64 17, label %match.arm.49
i64 20, label %match.arm.49
i64 22, label %match.arm.49
@@ -922,8 +922,8 @@ entry:
i64 41, label %match.arm.49
i64 42, label %match.arm.49
i64 43, label %match.arm.49
i64 44, label %match.arm.49
i64 46, label %match.arm.49
i64 47, label %match.arm.49
i64 48, label %match.arm.49
i64 49, label %match.arm.49
i64 50, label %match.arm.49
@@ -1007,7 +1007,7 @@ match.arm.47: ; preds = %entry, %entry
%loadN = load { i64, i64 }, ptr %alloca, align 8
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %loadN, label %dispatch.default.140 [
i64 45, label %dispatch.case.141
i64 47, label %dispatch.case.141
i64 52, label %dispatch.case.142
]
@@ -1017,7 +1017,7 @@ match.arm.48: ; preds = %entry, %entry
%allocaN = alloca { ptr, i64 }, align 8
switch i64 %loadN, label %dispatch.default.154 [
i64 33, label %dispatch.case.155
i64 44, label %dispatch.case.156
i64 45, label %dispatch.case.156
]
match.arm.49: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
@@ -1037,8 +1037,8 @@ match.arm.49: ; preds = %entry, %entry, %ent
i64 41, label %dispatch.case.178
i64 42, label %dispatch.case.179
i64 43, label %dispatch.case.180
i64 46, label %dispatch.case.181
i64 47, label %dispatch.case.182
i64 44, label %dispatch.case.181
i64 46, label %dispatch.case.182
i64 48, label %dispatch.case.183
i64 49, label %dispatch.case.184
i64 50, label %dispatch.case.185
@@ -1339,7 +1339,7 @@ dispatch.case.180: ; preds = %match.arm.49
dispatch.case.181: ; preds = %match.arm.49
%ua.raw141 = extractvalue { i64, i64 } %loadN, 1
%iNp142 = inttoptr i64 %ua.raw141 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp142)
%callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp142)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.167
@@ -1353,14 +1353,14 @@ dispatch.case.182: ; preds = %match.arm.49
dispatch.case.183: ; preds = %match.arm.49
%ua.raw147 = extractvalue { i64, i64 } %loadN, 1
%iNp148 = inttoptr i64 %ua.raw147 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp148)
%callN = call { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %iNp148)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.167
dispatch.case.184: ; preds = %match.arm.49
%ua.raw150 = extractvalue { i64, i64 } %loadN, 1
%iNp151 = inttoptr i64 %ua.raw150 to ptr
%callN = call { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %iNp151)
%callN = call { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %iNp151)
store { ptr, i64 } %callN, ptr %allocaN, align 8
br label %dispatch.merge.167
@@ -1875,44 +1875,8 @@ entry:
%callN = call i1 @class_addMethod(ptr %loadN, ptr %loadN, ptr @triple_imp, ptr @str.29)
%allocaN = alloca i1, align 1
store i1 %callN, ptr %allocaN, align 1
%allocaN = alloca [1 x { i64, i64 }], align 8
%loadN = load i1, ptr %allocaN, align 1
%zN = zext i1 %loadN to i64
%ba.val = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr12 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr12, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.30, i64 15 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.31, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 12)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%ig.data = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr = getelementptr { i64, i64 }, ptr %ig.data, i64 0
%ig.val = load { i64, i64 }, ptr %ig.ptr, align 8
%callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 14, i64 1)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_s7f3aff1506f207ab__pack_bool(ptr @__sx_default_context, i1 %loadN)
%loadN = load ptr, ptr %allocaN, align 8
call void @objc_registerClassPair(ptr %loadN)
%loadN = load ptr, ptr %allocaN, align 8
@@ -1926,80 +1890,13 @@ entry:
%objc.sret.load = load { i64, i64, i64 }, ptr %objc.sret, align 8
%allocaN = alloca { i64, i64, i64 }, align 8
store { i64, i64, i64 } %objc.sret.load, ptr %allocaN, align 8
%allocaN = alloca [3 x { i64, i64 }], align 8
%loadN = load { i64, i64, i64 }, ptr %allocaN, align 8
%sg = extractvalue { i64, i64, i64 } %loadN, 0
%ba.val38 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sg, 1
%igp.ptr39 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val38, ptr %igp.ptr39, align 8
%loadN = load { i64, i64, i64 }, ptr %allocaN, align 8
%sgN = extractvalue { i64, i64, i64 } %loadN, 1
%ba.val42 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sgN, 1
%igp.ptr43 = getelementptr { i64, i64 }, ptr %allocaN, i64 1
store { i64, i64 } %ba.val42, ptr %igp.ptr43, align 8
%loadN = load { i64, i64, i64 }, ptr %allocaN, align 8
%sgN = extractvalue { i64, i64, i64 } %loadN, 2
%ba.val46 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %sgN, 1
%igp.ptr47 = getelementptr { i64, i64 }, ptr %allocaN, i64 2
store { i64, i64 } %ba.val46, ptr %igp.ptr47, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr49 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr49, ptr %gepN, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 3, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.32, i64 22 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 10)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%ig.data60 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr61 = getelementptr { i64, i64 }, ptr %ig.data60, i64 0
%ig.val62 = load { i64, i64 }, ptr %ig.ptr61, align 8
%callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val62)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 12, i64 2)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%ig.data71 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr72 = getelementptr { i64, i64 }, ptr %ig.data71, i64 1
%ig.val73 = load { i64, i64 }, ptr %ig.ptr72, align 8
%callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val73)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 16, i64 2)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%ig.data82 = extractvalue { ptr, i64 } %loadN, 0
%ig.ptr83 = getelementptr { i64, i64 }, ptr %ig.data82, i64 2
%ig.val84 = load { i64, i64 }, ptr %ig.ptr83, align 8
%callN = call { ptr, i64 } @any_to_string(ptr @__sx_default_context, { i64, i64 } %ig.val84)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 20, i64 2)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr92 = extractvalue { ptr, i64 } %loadN, 0
%str.len93 = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr92, i64 %str.len93)
call void @print__ct_s337be2777a405332__pack_s64_s64_s64(ptr @__sx_default_context, i64 %sg, i64 %sgN, i64 %sgN)
ret i32 0
}
@@ -2017,13 +1914,135 @@ entry:
ret void
}
; Function Attrs: nounwind
define internal void @print__ct_s7f3aff1506f207ab__pack_bool(ptr %0, i1 %1) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.30, i64 15 }, ptr %alloca, align 8
%allocaN = alloca i1, align 1
store i1 %1, ptr %allocaN, align 1
%allocaN = alloca [1 x { i64, i64 }], align 8
%load = load i1, ptr %allocaN, align 1
%zN = zext i1 %load to i64
%ba.val = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr4 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr4, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 1, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.31, i64 0 }, ptr %allocaN, align 8
%loadN = 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i1, ptr %allocaN, align 1
%zN = zext i1 %loadN to i64
%ba.val13 = insertvalue { i64, i64 } { i64 1, i64 undef }, i64 %zN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val13)
%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
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 14, i64 1)
%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
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%2 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; 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.34, i64 15 })
%call = call { ptr, i64 } @build_format(ptr %0, { ptr, i64 } { ptr @str.32, i64 15 })
ret { ptr, i64 } %call
}
; Function Attrs: nounwind
define internal void @print__ct_s337be2777a405332__pack_s64_s64_s64(ptr %0, i64 %1, i64 %2, i64 %3) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.33, i64 22 }, ptr %alloca, align 8
%allocaN = alloca i64, align 8
store i64 %1, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 %2, ptr %allocaN, align 8
%allocaN = alloca i64, align 8
store i64 %3, ptr %allocaN, align 8
%allocaN = alloca [3 x { i64, i64 }], align 8
%load = load i64, ptr %allocaN, align 8
%ba.val = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %load, 1
%igp.ptr = getelementptr { i64, i64 }, ptr %allocaN, i64 0
store { i64, i64 } %ba.val, ptr %igp.ptr, align 8
%loadN = load i64, ptr %allocaN, align 8
%ba.val6 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%igp.ptr7 = getelementptr { i64, i64 }, ptr %allocaN, i64 1
store { i64, i64 } %ba.val6, ptr %igp.ptr7, align 8
%loadN = load i64, ptr %allocaN, align 8
%ba.val9 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%igp.ptr10 = getelementptr { i64, i64 }, ptr %allocaN, i64 2
store { i64, i64 } %ba.val9, ptr %igp.ptr10, align 8
%allocaN = alloca { ptr, i64 }, align 8
%igp.ptr12 = getelementptr { i64, i64 }, ptr %allocaN, i64 0
%gep = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 0
store ptr %igp.ptr12, ptr %gep, align 8
%gepN = getelementptr inbounds { ptr, i64 }, ptr %allocaN, i32 0, i32 1
store i64 3, ptr %gepN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.34, i64 0 }, ptr %allocaN, align 8
%loadN = 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 10)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %loadN, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load i64, ptr %allocaN, align 8
%ba.val20 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val20)
%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
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 12, i64 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
%loadN = load i64, ptr %allocaN, align 8
%ba.val29 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val29)
%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
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 16, i64 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
%loadN = load i64, ptr %allocaN, align 8
%ba.val38 = insertvalue { i64, i64 } { i64 5, i64 undef }, i64 %loadN, 1
%callN = call { ptr, i64 } @any_to_string(ptr %0, { i64, i64 } %ba.val38)
%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
%loadN = load { ptr, i64 }, ptr %alloca, align 8
%callN = call { ptr, i64 } @substr(ptr %0, { ptr, i64 } %loadN, i64 20, i64 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
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%4 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_1(ptr %0) #0 {
entry:
@@ -3419,7 +3438,7 @@ if.merge.244: ; preds = %if.else.243, %if.th
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %1) #0 {
define internal { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
@@ -3475,7 +3494,7 @@ if.merge.250: ; preds = %if.else.249, %if.th
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %1) #0 {
define internal { ptr, i64 } @pointer_to_string__ptr_AR_1_Any(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
@@ -3494,7 +3513,7 @@ if.else.252: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.191, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 6 }, { ptr, i64 } %callN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.190, i64 7 }, { ptr, i64 } %callN)
br label %if.merge.253
if.merge.253: ; preds = %if.else.252, %if.then.251
@@ -3503,7 +3522,7 @@ if.merge.253: ; preds = %if.else.252, %if.th
}
; Function Attrs: nounwind
define internal { ptr, i64 } @pointer_to_string__ptr_string(ptr %0, ptr %1) #0 {
define internal { ptr, i64 } @pointer_to_string__ptr_SL_Any(ptr %0, ptr %1) #0 {
entry:
%alloca = alloca ptr, align 8
store ptr %1, ptr %alloca, align 8
@@ -3522,7 +3541,7 @@ if.else.255: ; preds = %entry
%loadN = load i64, ptr %allocaN, align 8
%call = call { ptr, i64 } @int_to_hex_string(ptr %0, i64 %loadN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.194, i64 3 }, { ptr, i64 } %call)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.193, i64 7 }, { ptr, i64 } %callN)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } { ptr @str.193, i64 6 }, { ptr, i64 } %callN)
br label %if.merge.256
if.merge.256: ; preds = %if.else.255, %if.then.254

View File

@@ -891,24 +891,7 @@ entry:
%loadN = load ptr, ptr %allocaN, align 8
%loadN = load ptr, ptr @OBJC_SELECTOR_REFERENCES_actualSelectorName, align 8
%objc.msg47 = call i32 @objc_msgSend(ptr %loadN, ptr %loadN)
%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.32, i64 18 }, ptr %allocaN, align 8
%allocaN = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.33, i64 0 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%callN = call { ptr, i64 } @substr(ptr @__sx_default_context, { ptr, i64 } %loadN, i64 0, i64 18)
%callN = call { ptr, i64 } @concat(ptr @__sx_default_context, { ptr, i64 } %loadN, { ptr, i64 } %callN)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%0 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
call void @print__ct_s4c1a58a7c89bfbba__pack(ptr @__sx_default_context)
ret i32 0
}
@@ -926,6 +909,30 @@ entry:
ret void
}
; Function Attrs: nounwind
define internal void @print__ct_s4c1a58a7c89bfbba__pack(ptr %0) #0 {
entry:
%alloca = alloca { ptr, i64 }, align 8
store { ptr, i64 } { ptr @str.32, 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.33, 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)
%callN = call { ptr, i64 } @concat(ptr %0, { ptr, i64 } %load, { ptr, i64 } %call)
store { ptr, i64 } %callN, ptr %allocaN, align 8
%loadN = load { ptr, i64 }, ptr %allocaN, align 8
%str.ptr = extractvalue { ptr, i64 } %loadN, 0
%str.len = extractvalue { ptr, i64 } %loadN, 1
%1 = call i64 @write(i32 1, ptr %str.ptr, i64 %str.len)
ret void
}
; Function Attrs: nounwind
define internal { ptr, i64 } @__insert_0(ptr %0) #0 {
entry: