Skip to content

Commit d909179

Browse files
committed
Implement goroutine special form
Signed-off-by: James Hamlin <jfhamlin@gmail.com>
1 parent 573dad3 commit d909179

File tree

4 files changed

+229
-21
lines changed

4 files changed

+229
-21
lines changed

pkg/runtime/codegen.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -987,8 +987,7 @@ func (g *Generator) generateASTNode(node *ast.Node) (res string) {
987987
fmt.Println("LetFn not yet implemented; returning nil")
988988
return "nil"
989989
case ast.OpGo:
990-
fmt.Println("Go not yet implemented; returning nil")
991-
return "nil"
990+
return g.generateGo(node)
992991
case ast.OpSetBang:
993992
return g.generateSetBang(node)
994993
case ast.OpCase:
@@ -1074,6 +1073,26 @@ func (g *Generator) generateDef(node *ast.Node) string {
10741073
return vrVar
10751074
}
10761075

1076+
func (g *Generator) generateGo(node *ast.Node) string {
1077+
goNode := node.Sub.(*ast.GoNode)
1078+
1079+
invokeNode := goNode.Invoke.Sub.(*ast.InvokeNode)
1080+
fn := invokeNode.Fn
1081+
args := invokeNode.Args
1082+
1083+
// Generate the function expression
1084+
fnExpr := g.generateASTNode(fn)
1085+
1086+
// Generate the arguments
1087+
var argExprs []string
1088+
for _, arg := range args {
1089+
argExprs = append(argExprs, g.generateASTNode(arg))
1090+
}
1091+
1092+
g.writef("go lang.Apply(%s, []any{%s})\n", fnExpr, strings.Join(argExprs, ", "))
1093+
return "nil" // starting a goroutine returns nil
1094+
}
1095+
10771096
// generateVarDeref generates code for a Var dereference
10781097
func (g *Generator) generateVarDeref(node *ast.Node) string {
10791098
varNode := node.Sub.(*ast.VarNode)

pkg/runtime/testdata/codegen/test/core/load.go.out

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ func LoadNS() {
268268
sym_codegen_DOT_test_DOT_def_DASH_simple := lang.NewSymbol("codegen.test.def-simple")
269269
sym_codegen_DOT_test_DOT_fn_DASH_closure := lang.NewSymbol("codegen.test.fn-closure")
270270
sym_codegen_DOT_test_DOT_fn_DASH_recur := lang.NewSymbol("codegen.test.fn-recur")
271+
sym_codegen_DOT_test_DOT_goroutine := lang.NewSymbol("codegen.test.goroutine")
271272
sym_codegen_DOT_test_DOT_loop_DASH_simple := lang.NewSymbol("codegen.test.loop-simple")
272273
sym_codegen_DOT_test_DOT_maybe_DASH_class := lang.NewSymbol("codegen.test.maybe-class")
273274
sym_codegen_DOT_test_DOT_multifn := lang.NewSymbol("codegen.test.multifn")
@@ -1273,7 +1274,6 @@ func LoadNS() {
12731274
sym_with_DASH_bindings := lang.NewSymbol("with-bindings")
12741275
sym_with_DASH_bindings_STAR_ := lang.NewSymbol("with-bindings*")
12751276
sym_with_DASH_in_DASH_str := lang.NewSymbol("with-in-str")
1276-
sym_with_DASH_init := lang.NewSymbol("with-init")
12771277
sym_with_DASH_loading_DASH_context := lang.NewSymbol("with-loading-context")
12781278
sym_with_DASH_local_DASH_vars := lang.NewSymbol("with-local-vars")
12791279
sym_with_DASH_meta := lang.NewSymbol("with-meta")
@@ -2791,8 +2791,6 @@ func LoadNS() {
27912791
var_glojure_DOT_core_with_DASH_bindings_STAR_ := lang.InternVarName(sym_glojure_DOT_core, sym_with_DASH_bindings_STAR_)
27922792
// var glojure.core/with-in-str
27932793
var_glojure_DOT_core_with_DASH_in_DASH_str := lang.InternVarName(sym_glojure_DOT_core, sym_with_DASH_in_DASH_str)
2794-
// var glojure.core/with-init
2795-
var_glojure_DOT_core_with_DASH_init := lang.InternVarName(sym_glojure_DOT_core, sym_with_DASH_init)
27962794
// var glojure.core/with-loading-context
27972795
var_glojure_DOT_core_with_DASH_loading_DASH_context := lang.InternVarName(sym_glojure_DOT_core, sym_with_DASH_loading_DASH_context)
27982796
// var glojure.core/with-local-vars
@@ -3103,27 +3101,30 @@ func LoadNS() {
31033101
}
31043102
// *1
31053103
{
3106-
tmp0 := sym__STAR_1.WithMeta(lang.NewMap()).(*lang.Symbol)
3104+
tmp0 := sym__STAR_1.WithMeta(lang.NewMap(kw_dynamic, true, kw_file, "glojure/core.glj", kw_line, int(6268), kw_column, int(6), kw_end_DASH_line, int(6271), kw_end_DASH_column, int(3), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
31073105
var_glojure_DOT_core__STAR_1 = ns.Intern(tmp0)
31083106
if tmp0.Meta() != nil {
31093107
var_glojure_DOT_core__STAR_1.SetMeta(tmp0.Meta().(lang.IPersistentMap))
31103108
}
3109+
var_glojure_DOT_core__STAR_1.SetDynamic()
31113110
}
31123111
// *2
31133112
{
3114-
tmp0 := sym__STAR_2.WithMeta(lang.NewMap()).(*lang.Symbol)
3113+
tmp0 := sym__STAR_2.WithMeta(lang.NewMap(kw_dynamic, true, kw_file, "glojure/core.glj", kw_line, int(6273), kw_column, int(6), kw_end_DASH_line, int(6276), kw_end_DASH_column, int(3), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
31153114
var_glojure_DOT_core__STAR_2 = ns.Intern(tmp0)
31163115
if tmp0.Meta() != nil {
31173116
var_glojure_DOT_core__STAR_2.SetMeta(tmp0.Meta().(lang.IPersistentMap))
31183117
}
3118+
var_glojure_DOT_core__STAR_2.SetDynamic()
31193119
}
31203120
// *3
31213121
{
3122-
tmp0 := sym__STAR_3.WithMeta(lang.NewMap()).(*lang.Symbol)
3122+
tmp0 := sym__STAR_3.WithMeta(lang.NewMap(kw_dynamic, true, kw_file, "glojure/core.glj", kw_line, int(6278), kw_column, int(6), kw_end_DASH_line, int(6281), kw_end_DASH_column, int(3), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
31233123
var_glojure_DOT_core__STAR_3 = ns.Intern(tmp0)
31243124
if tmp0.Meta() != nil {
31253125
var_glojure_DOT_core__STAR_3.SetMeta(tmp0.Meta().(lang.IPersistentMap))
31263126
}
3127+
var_glojure_DOT_core__STAR_3.SetDynamic()
31273128
}
31283129
// *agent*
31293130
{
@@ -3193,11 +3194,12 @@ func LoadNS() {
31933194
}
31943195
// *e
31953196
{
3196-
tmp0 := sym__STAR_e.WithMeta(lang.NewMap()).(*lang.Symbol)
3197+
tmp0 := sym__STAR_e.WithMeta(lang.NewMap(kw_dynamic, true, kw_file, "glojure/core.glj", kw_line, int(6283), kw_column, int(6), kw_end_DASH_line, int(6286), kw_end_DASH_column, int(3), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
31973198
var_glojure_DOT_core__STAR_e = ns.Intern(tmp0)
31983199
if tmp0.Meta() != nil {
31993200
var_glojure_DOT_core__STAR_e.SetMeta(tmp0.Meta().(lang.IPersistentMap))
32003201
}
3202+
var_glojure_DOT_core__STAR_e.SetDynamic()
32013203
}
32023204
// *err*
32033205
{
@@ -3226,7 +3228,7 @@ func LoadNS() {
32263228
// *loaded-libs*
32273229
{
32283230
tmp0 := sym__STAR_loaded_DASH_libs_STAR_.WithMeta(lang.NewMap(kw_dynamic, true, kw_file, "glojure/core.glj", kw_line, int(5817), kw_column, int(10), kw_end_DASH_line, int(5820), kw_end_DASH_column, int(15), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
3229-
tmp1 := lang.NewRef(lang.CreatePersistentTreeSet(lang.NewSliceSeq([]any{sym_glojure_DOT_core_DOT_protocols, sym_glojure_DOT_string, sym_glojure_DOT_go_DOT_io, sym_codegen_DOT_test_DOT_case_DASH_switch, sym_codegen_DOT_test_DOT_const_DASH_keyword, sym_codegen_DOT_test_DOT_const_DASH_number, sym_codegen_DOT_test_DOT_const_DASH_string, sym_codegen_DOT_test_DOT_def_DASH_simple, sym_codegen_DOT_test_DOT_fn_DASH_closure, sym_codegen_DOT_test_DOT_fn_DASH_recur, sym_codegen_DOT_test_DOT_loop_DASH_simple, sym_codegen_DOT_test_DOT_maybe_DASH_class, sym_codegen_DOT_test_DOT_multifn, sym_codegen_DOT_test_DOT_ns_DASH_skip, sym_codegen_DOT_test_DOT_quote_DASH_simple, sym_codegen_DOT_test_DOT_ref, sym_codegen_DOT_test_DOT_set_DASH_bang, sym_codegen_DOT_test_DOT_the_DASH_var, sym_codegen_DOT_test_DOT_throw_DASH_simple, sym_codegen_DOT_test_DOT_try_DASH_advanced, sym_codegen_DOT_test_DOT_try_DASH_basic, sym_codegen_DOT_test_DOT_values, sym_codegen_DOT_test_DOT_with_DASH_meta})))
3231+
tmp1 := lang.NewRef(lang.CreatePersistentTreeSet(lang.NewSliceSeq([]any{sym_glojure_DOT_core_DOT_protocols, sym_glojure_DOT_string, sym_glojure_DOT_go_DOT_io, sym_codegen_DOT_test_DOT_case_DASH_switch, sym_codegen_DOT_test_DOT_const_DASH_keyword, sym_codegen_DOT_test_DOT_const_DASH_number, sym_codegen_DOT_test_DOT_const_DASH_string, sym_codegen_DOT_test_DOT_def_DASH_simple, sym_codegen_DOT_test_DOT_fn_DASH_closure, sym_codegen_DOT_test_DOT_fn_DASH_recur, sym_codegen_DOT_test_DOT_goroutine, sym_codegen_DOT_test_DOT_loop_DASH_simple, sym_codegen_DOT_test_DOT_maybe_DASH_class, sym_codegen_DOT_test_DOT_multifn, sym_codegen_DOT_test_DOT_ns_DASH_skip, sym_codegen_DOT_test_DOT_quote_DASH_simple, sym_codegen_DOT_test_DOT_ref, sym_codegen_DOT_test_DOT_set_DASH_bang, sym_codegen_DOT_test_DOT_the_DASH_var, sym_codegen_DOT_test_DOT_throw_DASH_simple, sym_codegen_DOT_test_DOT_try_DASH_advanced, sym_codegen_DOT_test_DOT_try_DASH_basic, sym_codegen_DOT_test_DOT_values, sym_codegen_DOT_test_DOT_with_DASH_meta})))
32303232
var_glojure_DOT_core__STAR_loaded_DASH_libs_STAR_ = ns.InternWithValue(tmp0, tmp1, true)
32313233
if tmp0.Meta() != nil {
32323234
var_glojure_DOT_core__STAR_loaded_DASH_libs_STAR_.SetMeta(tmp0.Meta().(lang.IPersistentMap))
@@ -4530,7 +4532,7 @@ func LoadNS() {
45304532
}
45314533
// gen-class
45324534
{
4533-
tmp0 := sym_gen_DASH_class.WithMeta(lang.NewMap()).(*lang.Symbol)
4535+
tmp0 := sym_gen_DASH_class.WithMeta(lang.NewMap(kw_file, "glojure/core.glj", kw_line, int(5732), kw_column, int(10), kw_end_DASH_line, int(5732), kw_end_DASH_column, int(18), kw_declared, true, kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
45344536
var_glojure_DOT_core_gen_DASH_class = ns.Intern(tmp0)
45354537
if tmp0.Meta() != nil {
45364538
var_glojure_DOT_core_gen_DASH_class.SetMeta(tmp0.Meta().(lang.IPersistentMap))
@@ -7618,15 +7620,15 @@ func LoadNS() {
76187620
}
76197621
// unquote
76207622
{
7621-
tmp0 := sym_unquote.WithMeta(lang.NewMap()).(*lang.Symbol)
7623+
tmp0 := sym_unquote.WithMeta(lang.NewMap(kw_file, "glojure/core.glj", kw_line, int(11), kw_column, int(6), kw_end_DASH_line, int(11), kw_end_DASH_column, int(12), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
76227624
var_glojure_DOT_core_unquote = ns.Intern(tmp0)
76237625
if tmp0.Meta() != nil {
76247626
var_glojure_DOT_core_unquote.SetMeta(tmp0.Meta().(lang.IPersistentMap))
76257627
}
76267628
}
76277629
// unquote-splicing
76287630
{
7629-
tmp0 := sym_unquote_DASH_splicing.WithMeta(lang.NewMap()).(*lang.Symbol)
7631+
tmp0 := sym_unquote_DASH_splicing.WithMeta(lang.NewMap(kw_file, "glojure/core.glj", kw_line, int(12), kw_column, int(6), kw_end_DASH_line, int(12), kw_end_DASH_column, int(21), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
76307632
var_glojure_DOT_core_unquote_DASH_splicing = ns.Intern(tmp0)
76317633
if tmp0.Meta() != nil {
76327634
var_glojure_DOT_core_unquote_DASH_splicing.SetMeta(tmp0.Meta().(lang.IPersistentMap))
@@ -8056,14 +8058,6 @@ func LoadNS() {
80568058
var_glojure_DOT_core_when_DASH_not.SetMeta(tmp0.Meta().(lang.IPersistentMap))
80578059
}
80588060
}
8059-
// with-init
8060-
{
8061-
tmp0 := sym_with_DASH_init.WithMeta(lang.NewMap(kw_file, "codegen/test/def_simple.glj", kw_line, int(7), kw_column, int(8), kw_end_DASH_line, int(7), kw_end_DASH_column, int(16), kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core))).(*lang.Symbol)
8062-
var_glojure_DOT_core_with_DASH_init = ns.InternWithValue(tmp0, int64(42), true)
8063-
if tmp0.Meta() != nil {
8064-
var_glojure_DOT_core_with_DASH_init.SetMeta(tmp0.Meta().(lang.IPersistentMap))
8065-
}
8066-
}
80678061
// with-meta
80688062
{
80698063
tmp0 := sym_with_DASH_meta.WithMeta(lang.NewMap(kw_arglists, lang.NewList(lang.NewVector(sym_obj, sym_m)), kw_doc, "Returns an object of the same type and value as obj, with\n map m as its metadata.", kw_static, true, kw_file, "glojure/core.glj", kw_added, "1.0", kw_ns, lang.FindOrCreateNamespace(sym_glojure_DOT_core), kw_end_DASH_column, int(10), kw_column, int(2), kw_line, int(211), kw_end_DASH_line, int(216))).(*lang.Symbol)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
(ns codegen.test.goroutine)
2+
3+
(defn send-on-chan [ch val]
4+
(let [chVal (reflect.ValueOf ch)
5+
valVal (reflect.ValueOf val)]
6+
(.Send chVal valVal)))
7+
8+
(defn ^{:expected-output 42} -main []
9+
(let [ch (go/make (go/chan-of go/int64))
10+
chVal (reflect.ValueOf ch)]
11+
(go/go (send-on-chan ch 42))
12+
(let [[recvResult ok] (.Recv chVal)]
13+
(if (not ok)
14+
(throw (fmt.Errorf "Channel closed")))
15+
(.Interface recvResult))))
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
// Code generated by glojure codegen. DO NOT EDIT.
2+
3+
package goroutine
4+
5+
import (
6+
fmt "fmt"
7+
lang "github.com/glojurelang/glojure/pkg/lang"
8+
runtime "github.com/glojurelang/glojure/pkg/runtime"
9+
reflect "reflect"
10+
)
11+
12+
func init() {
13+
runtime.RegisterNSLoader("codegen/test/goroutine", LoadNS)
14+
}
15+
16+
func checkDerefVar(v *lang.Var) any {
17+
if v.IsMacro() {
18+
panic(lang.NewIllegalArgumentError(fmt.Sprintf("can't take value of macro: %v", v)))
19+
}
20+
return v.Get()
21+
}
22+
23+
func checkArity(args []any, expected int) {
24+
if len(args) != expected {
25+
panic(lang.NewIllegalArgumentError("wrong number of arguments (" + fmt.Sprint(len(args)) + ")"))
26+
}
27+
}
28+
29+
func checkArityGTE(args []any, min int) {
30+
if len(args) < min {
31+
panic(lang.NewIllegalArgumentError("wrong number of arguments (" + fmt.Sprint(len(args)) + ")"))
32+
}
33+
}
34+
35+
// LoadNS initializes the namespace "codegen.test.goroutine"
36+
func LoadNS() {
37+
sym__DASH_main := lang.NewSymbol("-main")
38+
sym_ch := lang.NewSymbol("ch")
39+
sym_codegen_DOT_test_DOT_goroutine := lang.NewSymbol("codegen.test.goroutine")
40+
sym_glojure_DOT_core := lang.NewSymbol("glojure.core")
41+
sym_not := lang.NewSymbol("not")
42+
sym_nth := lang.NewSymbol("nth")
43+
sym_send_DASH_on_DASH_chan := lang.NewSymbol("send-on-chan")
44+
sym_val := lang.NewSymbol("val")
45+
kw_arglists := lang.NewKeyword("arglists")
46+
kw_column := lang.NewKeyword("column")
47+
kw_end_DASH_column := lang.NewKeyword("end-column")
48+
kw_end_DASH_line := lang.NewKeyword("end-line")
49+
kw_expected_DASH_output := lang.NewKeyword("expected-output")
50+
kw_file := lang.NewKeyword("file")
51+
kw_line := lang.NewKeyword("line")
52+
kw_ns := lang.NewKeyword("ns")
53+
kw_rettag := lang.NewKeyword("rettag")
54+
// var codegen.test.goroutine/-main
55+
var_codegen_DOT_test_DOT_goroutine__DASH_main := lang.InternVarName(sym_codegen_DOT_test_DOT_goroutine, sym__DASH_main)
56+
// var codegen.test.goroutine/send-on-chan
57+
var_codegen_DOT_test_DOT_goroutine_send_DASH_on_DASH_chan := lang.InternVarName(sym_codegen_DOT_test_DOT_goroutine, sym_send_DASH_on_DASH_chan)
58+
// var glojure.core/not
59+
var_glojure_DOT_core_not := lang.InternVarName(sym_glojure_DOT_core, sym_not)
60+
// var glojure.core/nth
61+
var_glojure_DOT_core_nth := lang.InternVarName(sym_glojure_DOT_core, sym_nth)
62+
// reference fmt to avoid unused import error
63+
_ = fmt.Printf
64+
// reference reflect to avoid unused import error
65+
_ = reflect.TypeOf
66+
ns := lang.FindOrCreateNamespace(sym_codegen_DOT_test_DOT_goroutine)
67+
_ = ns
68+
// send-on-chan
69+
{
70+
tmp0 := sym_send_DASH_on_DASH_chan.WithMeta(lang.NewMap(kw_file, "codegen/test/goroutine.glj", kw_line, int(3), kw_column, int(7), kw_end_DASH_line, int(3), kw_end_DASH_column, int(18), kw_arglists, lang.NewList(lang.NewVector(sym_ch, sym_val)), kw_ns, lang.FindOrCreateNamespace(sym_codegen_DOT_test_DOT_goroutine))).(*lang.Symbol)
71+
var tmp1 lang.FnFunc
72+
tmp1 = lang.NewFnFunc(func(args ...any) any {
73+
checkArity(args, 2)
74+
v2 := args[0]
75+
_ = v2
76+
v3 := args[1]
77+
_ = v3
78+
var tmp4 any
79+
{ // let
80+
// let binding "chVal"
81+
tmp5 := lang.Apply(reflect.ValueOf, []any{v2})
82+
var v6 any = tmp5
83+
_ = v6
84+
// let binding "valVal"
85+
tmp7 := lang.Apply(reflect.ValueOf, []any{v3})
86+
var v8 any = tmp7
87+
_ = v8
88+
tmp9, _ := lang.FieldOrMethod(v6, "Send")
89+
if reflect.TypeOf(tmp9).Kind() != reflect.Func {
90+
panic(lang.NewIllegalArgumentError(fmt.Sprintf("Send is not a function")))
91+
}
92+
tmp10 := lang.Apply(tmp9, []any{v8})
93+
tmp4 = tmp10
94+
} // end let
95+
return tmp4
96+
})
97+
tmp1 = tmp1.WithMeta(lang.NewMap(kw_rettag, nil)).(lang.FnFunc)
98+
var_codegen_DOT_test_DOT_goroutine_send_DASH_on_DASH_chan = ns.InternWithValue(tmp0, tmp1, true)
99+
if tmp0.Meta() != nil {
100+
var_codegen_DOT_test_DOT_goroutine_send_DASH_on_DASH_chan.SetMeta(tmp0.Meta().(lang.IPersistentMap))
101+
}
102+
}
103+
// -main
104+
{
105+
tmp0 := sym__DASH_main.WithMeta(lang.NewMap(kw_expected_DASH_output, int64(42), kw_file, "codegen/test/goroutine.glj", kw_line, int(8), kw_column, int(7), kw_end_DASH_line, int(8), kw_end_DASH_column, int(34), kw_arglists, lang.NewList(lang.NewVector()), kw_ns, lang.FindOrCreateNamespace(sym_codegen_DOT_test_DOT_goroutine))).(*lang.Symbol)
106+
var tmp1 lang.FnFunc
107+
tmp1 = lang.NewFnFunc(func(args ...any) any {
108+
checkArity(args, 0)
109+
var tmp2 any
110+
{ // let
111+
// let binding "ch"
112+
tmp3 := lang.Apply(lang.Builtins["chan-of"], []any{lang.Builtins["int64"]})
113+
tmp4 := lang.Apply(lang.Builtins["make"], []any{tmp3})
114+
var v5 any = tmp4
115+
_ = v5
116+
// let binding "chVal"
117+
tmp6 := lang.Apply(reflect.ValueOf, []any{v5})
118+
var v7 any = tmp6
119+
_ = v7
120+
tmp8 := checkDerefVar(var_codegen_DOT_test_DOT_goroutine_send_DASH_on_DASH_chan)
121+
go lang.Apply(tmp8, []any{v5, int64(42)})
122+
var tmp9 any
123+
{ // let
124+
// let binding "vec__368"
125+
tmp10, ok := lang.FieldOrMethod(v7, "Recv")
126+
if !ok {
127+
panic(lang.NewIllegalArgumentError(fmt.Sprintf("no such field or method on %T: %s", v7, "Recv")))
128+
}
129+
var tmp11 any
130+
switch reflect.TypeOf(tmp10).Kind() {
131+
case reflect.Func:
132+
tmp11 = lang.Apply(tmp10, nil)
133+
default:
134+
tmp11 = tmp10
135+
}
136+
var v12 any = tmp11
137+
_ = v12
138+
// let binding "recvResult"
139+
tmp13 := checkDerefVar(var_glojure_DOT_core_nth)
140+
tmp14 := lang.Apply(tmp13, []any{v12, int64(0), nil})
141+
var v15 any = tmp14
142+
_ = v15
143+
// let binding "ok"
144+
tmp16 := checkDerefVar(var_glojure_DOT_core_nth)
145+
tmp17 := lang.Apply(tmp16, []any{v12, int64(1), nil})
146+
var v18 any = tmp17
147+
_ = v18
148+
var tmp19 any
149+
tmp20 := checkDerefVar(var_glojure_DOT_core_not)
150+
tmp21 := lang.Apply(tmp20, []any{v18})
151+
if lang.IsTruthy(tmp21) {
152+
tmp22 := lang.Apply(fmt.Errorf, []any{"Channel closed"})
153+
panic(tmp22)
154+
} else {
155+
}
156+
_ = tmp19
157+
tmp23, ok := lang.FieldOrMethod(v15, "Interface")
158+
if !ok {
159+
panic(lang.NewIllegalArgumentError(fmt.Sprintf("no such field or method on %T: %s", v15, "Interface")))
160+
}
161+
var tmp24 any
162+
switch reflect.TypeOf(tmp23).Kind() {
163+
case reflect.Func:
164+
tmp24 = lang.Apply(tmp23, nil)
165+
default:
166+
tmp24 = tmp23
167+
}
168+
tmp9 = tmp24
169+
} // end let
170+
tmp2 = tmp9
171+
} // end let
172+
return tmp2
173+
})
174+
tmp1 = tmp1.WithMeta(lang.NewMap(kw_rettag, nil)).(lang.FnFunc)
175+
var_codegen_DOT_test_DOT_goroutine__DASH_main = ns.InternWithValue(tmp0, tmp1, true)
176+
if tmp0.Meta() != nil {
177+
var_codegen_DOT_test_DOT_goroutine__DASH_main.SetMeta(tmp0.Meta().(lang.IPersistentMap))
178+
}
179+
}
180+
}

0 commit comments

Comments
 (0)