From d960960b2c30f51fd825c6bc12d53776c32f8fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 10:24:27 -0700 Subject: [PATCH 01/19] Always update submodules for `make test` I was getting failures for `make test` until I realized I hadn't pulled the test suite submodule. Now we always update submodules first so should work for everyone. Added report.html to clean target and ignored it. --- .gitignore | 5 +++-- Makefile | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 9eec3c9..033927e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -bin -doc/repl/glj.wasm +/bin +/doc/repl/glj.wasm +/report.html .direnv # useful to symlink in for context diff --git a/Makefile b/Makefile index aa24e0f..b01a77a 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,7 @@ build: $(GLJ) .PHONY: clean clean: + $(RM) report.html $(RM) -r bin/ pkg/gen/gljimports/gljimports_%.go: ./scripts/gen-gljimports.sh ./cmd/gen-import-interop/main.go ./internal/genpkg/genpkg.go \ From d740d8b64fab04acf491e71eedef6577f0a76140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 09:24:50 -0700 Subject: [PATCH 02/19] Makefile use bash for all commands Setting SHELL to bash allows us to make use of a more dependable environment. It also allows us to use bash syntax which in many cases is cleaner because you don't need to be concerned with supporting any shell. `bash` is preferable to `/bin/bash` since it will pick up possibly more preferable bash version from the PATH. Like on macOS, /bin/bash is stuck at 3.2, but its easy to `brew install bash` to get the latest version in /usr/local/bin/bash. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index b01a77a..de99c2a 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +SHELL := bash CLOJURE_STDLIB_VERSION := clojure-1.12.1 STDLIB_ORIGINALS_DIR := scripts/rewrite-core/originals From adbc2c57d43e1351c721ea2083ae22a83380004e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 09:30:38 -0700 Subject: [PATCH 03/19] Use FOO-BAR over FOO_BAR for Makefile vars Make allows `-` in var names. (Actually it allows nearly all chars :). Environment variables allow allow \w chars (alphanum and _). Make inherits vars from the environment. By using `-` over `_` we make clear which vars come from the environment and which are local to the Makefile. --- Makefile | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index de99c2a..55fbcaa 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ SHELL := bash -CLOJURE_STDLIB_VERSION := clojure-1.12.1 -STDLIB_ORIGINALS_DIR := scripts/rewrite-core/originals -STDLIB_ORIGINALS := $(shell find $(STDLIB_ORIGINALS_DIR) -name '*.clj') -STDLIB := $(STDLIB_ORIGINALS:scripts/rewrite-core/originals/%=%) -STDLIB_ORIGINALS := $(addprefix scripts/rewrite-core/originals/,$(STDLIB)) -STDLIB_TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB:.clj=.glj)) +CLOJURE-STDLIB-VERSION := clojure-1.12.1 +STDLIB-ORIGINALS-DIR := scripts/rewrite-core/originals +STDLIB-ORIGINALS := $(shell find $(STDLIB-ORIGINALS-DIR) -name '*.clj') +STDLIB := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) +STDLIB-ORIGINALS := $(addprefix scripts/rewrite-core/originals/,$(STDLIB)) +STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB:.clj=.glj)) OS-TYPE := $(shell bash -c 'echo $$OSTYPE') OS-NAME := \ @@ -29,8 +29,8 @@ GLJ := bin/$(OA)/glj endif endif -TEST_FILES := $(shell find ./test -name '*.glj' | sort) -TEST_TARGETS := $(addsuffix .test,$(TEST_FILES)) +TEST-FILES := $(shell find ./test -name '*.glj' | sort) +TEST-TARGETS := $(addsuffix .test,$(TEST-FILES)) GOPLATFORMS := darwin_arm64 darwin_amd64 linux_arm64 linux_amd64 windows_amd64 windows_arm js_wasm GLJIMPORTS=$(foreach platform,$(GOPLATFORMS),pkg/gen/gljimports/gljimports_$(platform).go) @@ -38,26 +38,26 @@ GLJIMPORTS=$(foreach platform,$(GOPLATFORMS),pkg/gen/gljimports/gljimports_$(pla BINS=$(foreach platform,$(GOPLATFORMS),bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) # eventually, support multiple minor versions -GO_VERSION := 1.19.3 -GO_CMD := go$(GO_VERSION) +GO-VERSION := 1.19.3 +GO-CMD := go$(GO-VERSION) .PHONY: all -all: gocmd $(STDLIB_TARGETS) go-generate aot $(GLJIMPORTS) $(BINS) +all: gocmd $(STDLIB-TARGETS) go-generate aot $(GLJIMPORTS) $(BINS) .PHONY: gocmd gocmd: - @$(GO_CMD) version 2>&1 > /dev/null || \ - (go install "golang.org/dl/$(GO_CMD)@latest" && \ - $(GO_CMD) download > /dev/null && $(GO_CMD) version > /dev/null) + @$(GO-CMD) version 2>&1 > /dev/null || \ + (go install "golang.org/dl/$(GO-CMD)@latest" && \ + $(GO-CMD) download > /dev/null && $(GO-CMD) version > /dev/null) .PHONY: go-generate generate: @go generate ./... .PHONY: aot -aot: gocmd $(STDLIB_TARGETS) +aot: gocmd $(STDLIB-TARGETS) @echo "(map compile '[clojure.core clojure.core.async clojure.string clojure.template clojure.test clojure.uuid clojure.walk glojure.go.types glojure.go.io])" | \ - GLOJURE_USE_AOT=false GLOJURE_STDLIB_PATH=./pkg/stdlib $(GO_CMD) run -tags glj_no_aot_stdlib ./cmd/glj + GLOJURE_USE_AOT=false GLOJURE_STDLIB_PATH=./pkg/stdlib $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj .PHONY: build build: $(GLJ) @@ -70,7 +70,7 @@ clean: pkg/gen/gljimports/gljimports_%.go: ./scripts/gen-gljimports.sh ./cmd/gen-import-interop/main.go ./internal/genpkg/genpkg.go \ $(wildcard ./pkg/lang/*.go) $(wildcard ./pkg/runtime/*.go) @echo "Generating $@" - @./scripts/gen-gljimports.sh $@ $* $(GO_CMD) + @./scripts/gen-gljimports.sh $@ $* $(GO-CMD) pkg/stdlib/clojure/%.glj: scripts/rewrite-core/originals/%.clj scripts/rewrite-core/run.sh scripts/rewrite-core/rewrite.clj @echo "Rewriting $< to $@" @@ -91,12 +91,12 @@ bin/%/glj.wasm: $(wildcard ./cmd/glj/*.go) $(wildcard ./pkg/**/*.go) $(wildcard vet: @go vet ./... -.PHONY: $(TEST_TARGETS) -$(TEST_TARGETS): gocmd $(GLJ) +.PHONY: $(TEST-TARGETS) +$(TEST-TARGETS): gocmd $(GLJ) @$(GLJ) $(basename $@) .PHONY: test -test: $(TEST_TARGETS) # vet - vet is disabled until we fix errors in generated code +test: $(TEST-TARGETS) # vet - vet is disabled until we fix errors in generated code @cd test/clojure-test-suite && \ ../../$(GLJ) test-glojure.glj --expect-failures 38 --expect-errors 151 2>/dev/null @@ -109,4 +109,4 @@ format: .PHONY: update-clojure-sources update-clojure-sources: - @scripts/rewrite-core/update-clojure-sources.sh $(CLOJURE_STDLIB_VERSION) + @scripts/rewrite-core/update-clojure-sources.sh $(CLOJURE-STDLIB-VERSION) From 04a5861725c4df007e26dc9fccf38e411df0c271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 09:49:51 -0700 Subject: [PATCH 04/19] All Makefiles vars have multiple words For consistency, added `-` where 2 words were made into one. Added 2nd word to a few one word vars. --- Makefile | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 55fbcaa..483728f 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ SHELL := bash CLOJURE-STDLIB-VERSION := clojure-1.12.1 STDLIB-ORIGINALS-DIR := scripts/rewrite-core/originals STDLIB-ORIGINALS := $(shell find $(STDLIB-ORIGINALS-DIR) -name '*.clj') -STDLIB := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) -STDLIB-ORIGINALS := $(addprefix scripts/rewrite-core/originals/,$(STDLIB)) -STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB:.clj=.glj)) +STDLIB-NAMES := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) +STDLIB-ORIGINALS := $(addprefix scripts/rewrite-core/originals/,$(STDLIB-NAMES)) +STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB-NAMES:.clj=.glj)) OS-TYPE := $(shell bash -c 'echo $$OSTYPE') OS-NAME := \ @@ -24,25 +24,24 @@ OA-linux-arm64 := linux_arm64 OA-linux-int64 := linux_amd64 OA-macos-arm64 := darwin_arm64 OA-macos-int64 := darwin_amd64 -OA := $(OA-$(OS-ARCH)) -GLJ := bin/$(OA)/glj +GLJ-CMD := bin/$(OA-$(OS-ARCH))/glj endif endif TEST-FILES := $(shell find ./test -name '*.glj' | sort) TEST-TARGETS := $(addsuffix .test,$(TEST-FILES)) -GOPLATFORMS := darwin_arm64 darwin_amd64 linux_arm64 linux_amd64 windows_amd64 windows_arm js_wasm -GLJIMPORTS=$(foreach platform,$(GOPLATFORMS),pkg/gen/gljimports/gljimports_$(platform).go) +GO-PLATFORMS := darwin_arm64 darwin_amd64 linux_arm64 linux_amd64 windows_amd64 windows_arm js_wasm +GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS),pkg/gen/gljimports/gljimports_$(platform).go) # wasm should have .wasm suffix; others should not -BINS=$(foreach platform,$(GOPLATFORMS),bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) +GLJ-BINS=$(foreach platform,$(GO-PLATFORMS),bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) # eventually, support multiple minor versions GO-VERSION := 1.19.3 GO-CMD := go$(GO-VERSION) .PHONY: all -all: gocmd $(STDLIB-TARGETS) go-generate aot $(GLJIMPORTS) $(BINS) +all: gocmd $(STDLIB-TARGETS) go-generate aot $(GLJ-IMPORTS) $(GLJ-BINS) .PHONY: gocmd gocmd: @@ -60,7 +59,7 @@ aot: gocmd $(STDLIB-TARGETS) GLOJURE_USE_AOT=false GLOJURE_STDLIB_PATH=./pkg/stdlib $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj .PHONY: build -build: $(GLJ) +build: $(GLJ-CMD) .PHONY: clean clean: @@ -92,13 +91,13 @@ vet: @go vet ./... .PHONY: $(TEST-TARGETS) -$(TEST-TARGETS): gocmd $(GLJ) - @$(GLJ) $(basename $@) +$(TEST-TARGETS): gocmd $(GLJ-CMD) + @$(GLJ-CMD) $(basename $@) .PHONY: test test: $(TEST-TARGETS) # vet - vet is disabled until we fix errors in generated code @cd test/clojure-test-suite && \ - ../../$(GLJ) test-glojure.glj --expect-failures 38 --expect-errors 151 2>/dev/null + ../../$(GLJ-CMD) test-glojure.glj --expect-failures 38 --expect-errors 151 2>/dev/null .PHONY: format format: From 9b54cf1d0b33ce159e70904f27374b9ae2589b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 10:01:54 -0700 Subject: [PATCH 05/19] Remove most .PHONY targets from Makefile Only `.PHONY: test` is needed because we have a `test` dir. The other .PHONY targets add little value and are noisy. --- Makefile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Makefile b/Makefile index 483728f..38edf39 100644 --- a/Makefile +++ b/Makefile @@ -40,28 +40,22 @@ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS),bin/$(platform)/glj$(if $(findstring GO-VERSION := 1.19.3 GO-CMD := go$(GO-VERSION) -.PHONY: all all: gocmd $(STDLIB-TARGETS) go-generate aot $(GLJ-IMPORTS) $(GLJ-BINS) -.PHONY: gocmd gocmd: @$(GO-CMD) version 2>&1 > /dev/null || \ (go install "golang.org/dl/$(GO-CMD)@latest" && \ $(GO-CMD) download > /dev/null && $(GO-CMD) version > /dev/null) -.PHONY: go-generate generate: @go generate ./... -.PHONY: aot aot: gocmd $(STDLIB-TARGETS) @echo "(map compile '[clojure.core clojure.core.async clojure.string clojure.template clojure.test clojure.uuid clojure.walk glojure.go.types glojure.go.io])" | \ GLOJURE_USE_AOT=false GLOJURE_STDLIB_PATH=./pkg/stdlib $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj -.PHONY: build build: $(GLJ-CMD) -.PHONY: clean clean: $(RM) report.html $(RM) -r bin/ @@ -86,11 +80,9 @@ bin/%/glj.wasm: $(wildcard ./cmd/glj/*.go) $(wildcard ./pkg/**/*.go) $(wildcard @mkdir -p $(dir $@) @scripts/build-glj.sh $@ $* -.PHONY: vet vet: @go vet ./... -.PHONY: $(TEST-TARGETS) $(TEST-TARGETS): gocmd $(GLJ-CMD) @$(GLJ-CMD) $(basename $@) @@ -99,13 +91,11 @@ test: $(TEST-TARGETS) # vet - vet is disabled until we fix errors in generated c @cd test/clojure-test-suite && \ ../../$(GLJ-CMD) test-glojure.glj --expect-failures 38 --expect-errors 151 2>/dev/null -.PHONY: format format: @if go fmt ./... | grep -q ''; then \ echo "Files were formatted. Please commit the changes."; \ exit 1; \ fi -.PHONY: update-clojure-sources update-clojure-sources: @scripts/rewrite-core/update-clojure-sources.sh $(CLOJURE-STDLIB-VERSION) From eed89b62af337d9a2400b1c8023348003d8cf39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 10:42:35 -0700 Subject: [PATCH 06/19] Fix bad target name in Makefile The generate target was not being run. It did not cause an error becase it was hidden by a bad .PHONY target. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 38edf39..1c0712b 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS),bin/$(platform)/glj$(if $(findstring GO-VERSION := 1.19.3 GO-CMD := go$(GO-VERSION) -all: gocmd $(STDLIB-TARGETS) go-generate aot $(GLJ-IMPORTS) $(GLJ-BINS) +all: gocmd $(STDLIB-TARGETS) generate aot $(GLJ-IMPORTS) $(GLJ-BINS) gocmd: @$(GO-CMD) version 2>&1 > /dev/null || \ From 1541babd9628d09e2712cdd0b61ad3c46f745c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 11:08:34 -0700 Subject: [PATCH 07/19] Wrap long lines in Makefile This makes things easier to understand and maintain. --- Makefile | 74 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 1c0712b..a9b5f25 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CLOJURE-STDLIB-VERSION := clojure-1.12.1 STDLIB-ORIGINALS-DIR := scripts/rewrite-core/originals STDLIB-ORIGINALS := $(shell find $(STDLIB-ORIGINALS-DIR) -name '*.clj') STDLIB-NAMES := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) -STDLIB-ORIGINALS := $(addprefix scripts/rewrite-core/originals/,$(STDLIB-NAMES)) +STDLIB-ORIGINALS := $(STDLIB-NAMES:%=scripts/rewrite-core/originals/,%) STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB-NAMES:.clj=.glj)) OS-TYPE := $(shell bash -c 'echo $$OSTYPE') @@ -31,10 +31,21 @@ endif TEST-FILES := $(shell find ./test -name '*.glj' | sort) TEST-TARGETS := $(addsuffix .test,$(TEST-FILES)) -GO-PLATFORMS := darwin_arm64 darwin_amd64 linux_arm64 linux_amd64 windows_amd64 windows_arm js_wasm -GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS),pkg/gen/gljimports/gljimports_$(platform).go) +GO-PLATFORMS := \ + darwin_arm64 \ + darwin_amd64 \ + linux_arm64 \ + linux_amd64 \ + windows_amd64 \ + windows_arm \ + js_wasm \ + +GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS) \ + ,pkg/gen/gljimports/gljimports_$(platform).go) + # wasm should have .wasm suffix; others should not -GLJ-BINS=$(foreach platform,$(GO-PLATFORMS),bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) +GLJ-BINS=$(foreach platform,$(GO-PLATFORMS) \ + ,bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) # eventually, support multiple minor versions GO-VERSION := 1.19.3 @@ -45,14 +56,29 @@ all: gocmd $(STDLIB-TARGETS) generate aot $(GLJ-IMPORTS) $(GLJ-BINS) gocmd: @$(GO-CMD) version 2>&1 > /dev/null || \ (go install "golang.org/dl/$(GO-CMD)@latest" && \ - $(GO-CMD) download > /dev/null && $(GO-CMD) version > /dev/null) + $(GO-CMD) download > /dev/null && \ + $(GO-CMD) version > /dev/null) generate: @go generate ./... aot: gocmd $(STDLIB-TARGETS) - @echo "(map compile '[clojure.core clojure.core.async clojure.string clojure.template clojure.test clojure.uuid clojure.walk glojure.go.types glojure.go.io])" | \ - GLOJURE_USE_AOT=false GLOJURE_STDLIB_PATH=./pkg/stdlib $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj + @echo "(map compile '[ \ + clojure.core \ + clojure.core.async \ + clojure.string \ + clojure.template \ + clojure.test \ + clojure.uuid \ + clojure.walk \ + glojure.go.types \ + glojure.go.io \ + ])" | \ + GLOJURE_USE_AOT=false \ + GLOJURE_STDLIB_PATH=./pkg/stdlib \ + $(GO-CMD) run \ + -tags glj_no_aot_stdlib \ + ./cmd/glj build: $(GLJ-CMD) @@ -60,22 +86,35 @@ clean: $(RM) report.html $(RM) -r bin/ -pkg/gen/gljimports/gljimports_%.go: ./scripts/gen-gljimports.sh ./cmd/gen-import-interop/main.go ./internal/genpkg/genpkg.go \ - $(wildcard ./pkg/lang/*.go) $(wildcard ./pkg/runtime/*.go) +pkg/gen/gljimports/gljimports_%.go: \ + ./scripts/gen-gljimports.sh \ + ./cmd/gen-import-interop/main.go \ + ./internal/genpkg/genpkg.go \ + $(wildcard ./pkg/lang/*.go) \ + $(wildcard ./pkg/runtime/*.go) @echo "Generating $@" @./scripts/gen-gljimports.sh $@ $* $(GO-CMD) -pkg/stdlib/clojure/%.glj: scripts/rewrite-core/originals/%.clj scripts/rewrite-core/run.sh scripts/rewrite-core/rewrite.clj +pkg/stdlib/clojure/%.glj: \ + scripts/rewrite-core/originals/%.clj \ + scripts/rewrite-core/run.sh \ + scripts/rewrite-core/rewrite.clj @echo "Rewriting $< to $@" @mkdir -p $(dir $@) @scripts/rewrite-core/run.sh $< > $@ -bin/%/glj: generate $(wildcard ./cmd/glj/*.go) $(wildcard ./pkg/**/*.go) $(wildcard ./internal/**/*.go) +bin/%/glj: generate \ + $(wildcard ./cmd/glj/*.go) \ + $(wildcard ./pkg/**/*.go) \ + $(wildcard ./internal/**/*.go) @echo "Building $@" @mkdir -p $(dir $@) @scripts/build-glj.sh $@ $* -bin/%/glj.wasm: $(wildcard ./cmd/glj/*.go) $(wildcard ./pkg/**/*.go) $(wildcard ./internal/**/*.go) +bin/%/glj.wasm: \ + $(wildcard ./cmd/glj/*.go) \ + $(wildcard ./pkg/**/*.go) \ + $(wildcard ./internal/**/*.go) @echo "Building $@" @mkdir -p $(dir $@) @scripts/build-glj.sh $@ $* @@ -87,9 +126,13 @@ $(TEST-TARGETS): gocmd $(GLJ-CMD) @$(GLJ-CMD) $(basename $@) .PHONY: test -test: $(TEST-TARGETS) # vet - vet is disabled until we fix errors in generated code +# vet - vet is disabled until we fix errors in generated code +test: $(TEST-TARGETS) @cd test/clojure-test-suite && \ - ../../$(GLJ-CMD) test-glojure.glj --expect-failures 38 --expect-errors 151 2>/dev/null + ../../$(GLJ-CMD) test-glojure.glj \ + --expect-failures 38 \ + --expect-errors 151 \ + 2>/dev/null format: @if go fmt ./... | grep -q ''; then \ @@ -98,4 +141,5 @@ format: fi update-clojure-sources: - @scripts/rewrite-core/update-clojure-sources.sh $(CLOJURE-STDLIB-VERSION) + @scripts/rewrite-core/update-clojure-sources.sh \ + $(CLOJURE-STDLIB-VERSION) From 538b8589a1b25c2d87f613c6141c853c5d26e91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 11:15:38 -0700 Subject: [PATCH 08/19] Move VERSION vars to top of Makefile and make them overridable by user. Added a usage comment to top. Note: Where env var overrides go before a command, Makefile var overrides go after the `make` command. --- Makefile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a9b5f25..4f3d800 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,12 @@ +# Usage: +# make clean all test GO-VERSION=1.25.1 + SHELL := bash -CLOJURE-STDLIB-VERSION := clojure-1.12.1 +GO-VERSION ?= 1.19.3 +CLOJURE-VERSION ?= 1.12.1 + +CLOJURE-STDLIB-VERSION := clojure-$(CLOJURE-VERSION) STDLIB-ORIGINALS-DIR := scripts/rewrite-core/originals STDLIB-ORIGINALS := $(shell find $(STDLIB-ORIGINALS-DIR) -name '*.clj') STDLIB-NAMES := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) @@ -47,8 +53,6 @@ GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS) \ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS) \ ,bin/$(platform)/glj$(if $(findstring wasm,$(platform)),.wasm,)) -# eventually, support multiple minor versions -GO-VERSION := 1.19.3 GO-CMD := go$(GO-VERSION) all: gocmd $(STDLIB-TARGETS) generate aot $(GLJ-IMPORTS) $(GLJ-BINS) From 27a8573b2a4c45b309646c9afb9c78ba2d410ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 11:24:08 -0700 Subject: [PATCH 09/19] Move aot namespaces into Makefile var Simplify to aot command --- Makefile | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 4f3d800..fa68000 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,17 @@ STDLIB-NAMES := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) STDLIB-ORIGINALS := $(STDLIB-NAMES:%=scripts/rewrite-core/originals/,%) STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB-NAMES:.clj=.glj)) +AOT-NAMESPACES := \ + clojure.core \ + clojure.core.async \ + clojure.string \ + clojure.template \ + clojure.test \ + clojure.walk \ + clojure.uuid \ + glojure.go.io \ + glojure.go.types \ + OS-TYPE := $(shell bash -c 'echo $$OSTYPE') OS-NAME := \ $(if $(findstring darwin,$(OS-TYPE))\ @@ -42,8 +53,8 @@ GO-PLATFORMS := \ darwin_amd64 \ linux_arm64 \ linux_amd64 \ - windows_amd64 \ windows_arm \ + windows_amd64 \ js_wasm \ GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS) \ @@ -67,22 +78,10 @@ generate: @go generate ./... aot: gocmd $(STDLIB-TARGETS) - @echo "(map compile '[ \ - clojure.core \ - clojure.core.async \ - clojure.string \ - clojure.template \ - clojure.test \ - clojure.uuid \ - clojure.walk \ - glojure.go.types \ - glojure.go.io \ - ])" | \ - GLOJURE_USE_AOT=false \ - GLOJURE_STDLIB_PATH=./pkg/stdlib \ - $(GO-CMD) run \ - -tags glj_no_aot_stdlib \ - ./cmd/glj + @GLOJURE_USE_AOT=false \ + GLOJURE_STDLIB_PATH=./pkg/stdlib \ + $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj \ + <<<"(map compile '[$(AOT-NAMESPACES)])" build: $(GLJ-CMD) From d4dc37710cc11c46c49c1fd77ed8f6791460c8a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 11:30:05 -0700 Subject: [PATCH 10/19] Don't hide important Makefile commands with @ Using @ is for noisy or inconsequential commands. It's important to see what make is actually running though. Helps see obvious mistakes as well. --- Makefile | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index fa68000..f3b5d10 100644 --- a/Makefile +++ b/Makefile @@ -75,10 +75,10 @@ gocmd: $(GO-CMD) version > /dev/null) generate: - @go generate ./... + go generate ./... aot: gocmd $(STDLIB-TARGETS) - @GLOJURE_USE_AOT=false \ + GLOJURE_USE_AOT=false \ GLOJURE_STDLIB_PATH=./pkg/stdlib \ $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj \ <<<"(map compile '[$(AOT-NAMESPACES)])" @@ -96,7 +96,7 @@ pkg/gen/gljimports/gljimports_%.go: \ $(wildcard ./pkg/lang/*.go) \ $(wildcard ./pkg/runtime/*.go) @echo "Generating $@" - @./scripts/gen-gljimports.sh $@ $* $(GO-CMD) + ./scripts/gen-gljimports.sh $@ $* $(GO-CMD) pkg/stdlib/clojure/%.glj: \ scripts/rewrite-core/originals/%.clj \ @@ -104,7 +104,7 @@ pkg/stdlib/clojure/%.glj: \ scripts/rewrite-core/rewrite.clj @echo "Rewriting $< to $@" @mkdir -p $(dir $@) - @scripts/rewrite-core/run.sh $< > $@ + scripts/rewrite-core/run.sh $< > $@ bin/%/glj: generate \ $(wildcard ./cmd/glj/*.go) \ @@ -112,7 +112,7 @@ bin/%/glj: generate \ $(wildcard ./internal/**/*.go) @echo "Building $@" @mkdir -p $(dir $@) - @scripts/build-glj.sh $@ $* + scripts/build-glj.sh $@ $* bin/%/glj.wasm: \ $(wildcard ./cmd/glj/*.go) \ @@ -120,18 +120,18 @@ bin/%/glj.wasm: \ $(wildcard ./internal/**/*.go) @echo "Building $@" @mkdir -p $(dir $@) - @scripts/build-glj.sh $@ $* + scripts/build-glj.sh $@ $* vet: - @go vet ./... + go vet ./... $(TEST-TARGETS): gocmd $(GLJ-CMD) - @$(GLJ-CMD) $(basename $@) + $(GLJ-CMD) $(basename $@) .PHONY: test # vet - vet is disabled until we fix errors in generated code test: $(TEST-TARGETS) - @cd test/clojure-test-suite && \ + cd test/clojure-test-suite && \ ../../$(GLJ-CMD) test-glojure.glj \ --expect-failures 38 \ --expect-errors 151 \ @@ -144,5 +144,5 @@ format: fi update-clojure-sources: - @scripts/rewrite-core/update-clojure-sources.sh \ + scripts/rewrite-core/update-clojure-sources.sh \ $(CLOJURE-STDLIB-VERSION) From 1a0a701237d15afbdd1e205787be9401cea09724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 11:59:27 -0700 Subject: [PATCH 11/19] Add phony targets to groups under 'all' Let's us make these individually if needed. --- Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f3b5d10..bfbfbc4 100644 --- a/Makefile +++ b/Makefile @@ -66,7 +66,7 @@ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS) \ GO-CMD := go$(GO-VERSION) -all: gocmd $(STDLIB-TARGETS) generate aot $(GLJ-IMPORTS) $(GLJ-BINS) +all: gocmd stdlib-targets generate aot glj-imports glj-bins gocmd: @$(GO-CMD) version 2>&1 > /dev/null || \ @@ -74,6 +74,8 @@ gocmd: $(GO-CMD) download > /dev/null && \ $(GO-CMD) version > /dev/null) +stdlib-targets: $(STDLIB-TARGETS) + generate: go generate ./... @@ -83,6 +85,10 @@ aot: gocmd $(STDLIB-TARGETS) $(GO-CMD) run -tags glj_no_aot_stdlib ./cmd/glj \ <<<"(map compile '[$(AOT-NAMESPACES)])" +glj-imports: $(GLJ-IMPORTS) + +glj-bins: $(GLJ-BINS) + build: $(GLJ-CMD) clean: From ebc5ae79e247e8af0f952f90e5d5b07c751b0900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 14:28:03 -0700 Subject: [PATCH 12/19] Separate 'make test-glj' from 'make test-suite' 'make test' runs both like before. Before TEST-FILES was picking up the test suite glj file by mistake, I believe. --- Makefile | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index bfbfbc4..d85fea0 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ CLOJURE-VERSION ?= 1.12.1 CLOJURE-STDLIB-VERSION := clojure-$(CLOJURE-VERSION) STDLIB-ORIGINALS-DIR := scripts/rewrite-core/originals -STDLIB-ORIGINALS := $(shell find $(STDLIB-ORIGINALS-DIR) -name '*.clj') +STDLIB-ORIGINALS := $(wildcard $(STDLIB-ORIGINALS-DIR)/*.clj) STDLIB-NAMES := $(STDLIB-ORIGINALS:scripts/rewrite-core/originals/%=%) STDLIB-ORIGINALS := $(STDLIB-NAMES:%=scripts/rewrite-core/originals/,%) STDLIB-TARGETS := $(addprefix pkg/stdlib/clojure/,$(STDLIB-NAMES:.clj=.glj)) @@ -45,8 +45,11 @@ GLJ-CMD := bin/$(OA-$(OS-ARCH))/glj endif endif -TEST-FILES := $(shell find ./test -name '*.glj' | sort) -TEST-TARGETS := $(addsuffix .test,$(TEST-FILES)) +TEST-GLJ-DIR := test/glojure +TEST-GLJ-FILES := $(shell find $(TEST-GLJ-DIR) -name '*.glj' | sort) +TEST-GLJ-TARGETS := $(addsuffix .test,$(TEST-GLJ-FILES)) +TEST-SUITE-DIR := test/clojure-test-suite +TEST-SUITE-FILE := test-glojure.glj GO-PLATFORMS := \ darwin_arm64 \ @@ -131,18 +134,22 @@ bin/%/glj.wasm: \ vet: go vet ./... -$(TEST-TARGETS): gocmd $(GLJ-CMD) - $(GLJ-CMD) $(basename $@) - .PHONY: test -# vet - vet is disabled until we fix errors in generated code -test: $(TEST-TARGETS) - cd test/clojure-test-suite && \ - ../../$(GLJ-CMD) test-glojure.glj \ +# vet is disabled until we fix errors in generated code +test: test-glj test-suite # vet + +test-glj: $(TEST-GLJ-TARGETS) + +test-suite: $(GLJ-CMD) + cd $(TEST-SUITE-DIR) && \ + $(abspath $<) $(TEST-SUITE-FILE) \ --expect-failures 38 \ --expect-errors 151 \ 2>/dev/null +$(TEST-GLJ-TARGETS): $(GLJ-CMD) + $< $(basename $@) + format: @if go fmt ./... | grep -q ''; then \ echo "Files were formatted. Please commit the changes."; \ From 23c5209ef44299af04b3d8d73f2aabd0fd0ba549 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 14:31:44 -0700 Subject: [PATCH 13/19] Fix compound bash command in Makefile a || b && c && d in bash always runs c and d, which was not the intent, I believe. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index d85fea0..1c557d8 100644 --- a/Makefile +++ b/Makefile @@ -72,10 +72,10 @@ GO-CMD := go$(GO-VERSION) all: gocmd stdlib-targets generate aot glj-imports glj-bins gocmd: - @$(GO-CMD) version 2>&1 > /dev/null || \ + @$(GO-CMD) version 2>&1 > /dev/null || { \ (go install "golang.org/dl/$(GO-CMD)@latest" && \ $(GO-CMD) download > /dev/null && \ - $(GO-CMD) version > /dev/null) + $(GO-CMD) version > /dev/null); } stdlib-targets: $(STDLIB-TARGETS) From dbed3255eaff8bf0b928c5021b1ce290f99ef8ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 14:35:20 -0700 Subject: [PATCH 14/19] In bash '&>' is cleaner way to do '2>&1 >' --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1c557d8..4c6948d 100644 --- a/Makefile +++ b/Makefile @@ -72,7 +72,7 @@ GO-CMD := go$(GO-VERSION) all: gocmd stdlib-targets generate aot glj-imports glj-bins gocmd: - @$(GO-CMD) version 2>&1 > /dev/null || { \ + @$(GO-CMD) version &> /dev/null || { \ (go install "golang.org/dl/$(GO-CMD)@latest" && \ $(GO-CMD) download > /dev/null && \ $(GO-CMD) version > /dev/null); } From 1235e301154995a03931e83f8b9083862487e59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Tue, 23 Sep 2025 14:39:02 -0700 Subject: [PATCH 15/19] Add Makefile 'default' target The command `make` runs the first Makefile target. Having the first target be called 'default' makes it obvious what is going on. I often specify no deps for the default target so running `make' prints: Nothing to be done for 'default'. --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 4c6948d..a09e030 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,9 @@ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS) \ GO-CMD := go$(GO-VERSION) +#------------------------------------------------------------------------------- +default: all + all: gocmd stdlib-targets generate aot glj-imports glj-bins gocmd: From 5747a3fb8f39b2b64f162fff2d6c58530cacec65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Wed, 24 Sep 2025 12:23:04 -0700 Subject: [PATCH 16/19] Support force=1 on make commands Add force=1 to the end of a make command to force rebuilds. Adds update-clojure-sources to the front of `make all`. --- Makefile | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index a09e030..0419b3e 100644 --- a/Makefile +++ b/Makefile @@ -69,10 +69,23 @@ GLJ-BINS=$(foreach platform,$(GO-PLATFORMS) \ GO-CMD := go$(GO-VERSION) +ALL-TARGETS := \ + $(if $(force),update-clojure-sources) \ + stdlib-targets \ + generate \ + aot \ + glj-imports \ + glj-bins \ + #------------------------------------------------------------------------------- default: all -all: gocmd stdlib-targets generate aot glj-imports glj-bins +# Dummy target for commands like: +# make all force=1 +# make stdlib-targets force=1 +force: + +all: $(ALL-TARGETS) gocmd: @$(GO-CMD) version &> /dev/null || { \ @@ -106,14 +119,16 @@ pkg/gen/gljimports/gljimports_%.go: \ ./cmd/gen-import-interop/main.go \ ./internal/genpkg/genpkg.go \ $(wildcard ./pkg/lang/*.go) \ - $(wildcard ./pkg/runtime/*.go) + $(wildcard ./pkg/runtime/*.go) \ + $(if $(force),force) @echo "Generating $@" ./scripts/gen-gljimports.sh $@ $* $(GO-CMD) pkg/stdlib/clojure/%.glj: \ scripts/rewrite-core/originals/%.clj \ scripts/rewrite-core/run.sh \ - scripts/rewrite-core/rewrite.clj + scripts/rewrite-core/rewrite.clj \ + $(if $(force),force) @echo "Rewriting $< to $@" @mkdir -p $(dir $@) scripts/rewrite-core/run.sh $< > $@ @@ -121,7 +136,8 @@ pkg/stdlib/clojure/%.glj: \ bin/%/glj: generate \ $(wildcard ./cmd/glj/*.go) \ $(wildcard ./pkg/**/*.go) \ - $(wildcard ./internal/**/*.go) + $(wildcard ./internal/**/*.go) \ + $(if $(force),force) @echo "Building $@" @mkdir -p $(dir $@) scripts/build-glj.sh $@ $* @@ -129,7 +145,8 @@ bin/%/glj: generate \ bin/%/glj.wasm: \ $(wildcard ./cmd/glj/*.go) \ $(wildcard ./pkg/**/*.go) \ - $(wildcard ./internal/**/*.go) + $(wildcard ./internal/**/*.go) \ + $(if $(force),force) @echo "Building $@" @mkdir -p $(dir $@) scripts/build-glj.sh $@ $* From 16d4e81ca3cbb9eb1f4a49fe61bfd7359cdb4d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Wed, 24 Sep 2025 12:25:22 -0700 Subject: [PATCH 17/19] Remove scripts/rewrite-core/.cpcache/ on 'make clean' --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0419b3e..05ca52f 100644 --- a/Makefile +++ b/Makefile @@ -112,7 +112,7 @@ build: $(GLJ-CMD) clean: $(RM) report.html - $(RM) -r bin/ + $(RM) -r bin/ scripts/rewrite-core/.cpcache/ pkg/gen/gljimports/gljimports_%.go: \ ./scripts/gen-gljimports.sh \ From ec8bc0ee3d97f274abb47074aaebca2d4dd701fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Wed, 24 Sep 2025 12:29:50 -0700 Subject: [PATCH 18/19] Support adding extra aot namespaces and Go platforms For use in Makefiles that sit in front of this one. For forks that are working on new AOT and platforms. --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 05ca52f..9824bc4 100644 --- a/Makefile +++ b/Makefile @@ -19,10 +19,11 @@ AOT-NAMESPACES := \ clojure.string \ clojure.template \ clojure.test \ - clojure.walk \ clojure.uuid \ + clojure.walk \ glojure.go.io \ glojure.go.types \ + $(EXTRA-AOT-NAMESPACES) OS-TYPE := $(shell bash -c 'echo $$OSTYPE') OS-NAME := \ @@ -59,6 +60,7 @@ GO-PLATFORMS := \ windows_arm \ windows_amd64 \ js_wasm \ + $(EXTRA-GO-PLATFORMS) GLJ-IMPORTS=$(foreach platform,$(GO-PLATFORMS) \ ,pkg/gen/gljimports/gljimports_$(platform).go) From 751490cad3e1995455bf2f2395dbb71434d8d64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingy=20d=C3=B6t=20Net?= Date: Wed, 24 Sep 2025 22:41:02 -0700 Subject: [PATCH 19/19] Changes from running 'make format; make all force=1' --- pkg/ast/ast.go | 24 +++++------ pkg/stdlib/clojure/walk/loader.go | 4 +- pkg/stdlib/glojure/go/io/loader.go | 62 +++++++++++++-------------- pkg/stdlib/glojure/go/types/loader.go | 2 +- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index 343d7d7..2586f48 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -190,21 +190,21 @@ type ( } CaseNode struct { - Test *Node // The expression to test - Shift int64 // Bit shift for hash compaction - Mask int64 // Bit mask for hash compaction - TestType interface{} // Keyword: :int, :hash-identity, or :hash-equiv - SwitchType interface{} // Keyword: :compact or :sparse - Default *Node // Default expression - Entries []CaseEntry // Case entries - SkipCheck map[int64]bool // Set of keys with collisions + Test *Node // The expression to test + Shift int64 // Bit shift for hash compaction + Mask int64 // Bit mask for hash compaction + TestType interface{} // Keyword: :int, :hash-identity, or :hash-equiv + SwitchType interface{} // Keyword: :compact or :sparse + Default *Node // Default expression + Entries []CaseEntry // Case entries + SkipCheck map[int64]bool // Set of keys with collisions } CaseEntry struct { - Key int64 // Map key (int value or shifted/masked hash) - TestConstant *Node // Original test constant (nil for collisions) - ResultExpr *Node // Result expression or condp for collisions - HasCollision bool // Whether this is a collision case + Key int64 // Map key (int value or shifted/masked hash) + TestConstant *Node // Original test constant (nil for collisions) + ResultExpr *Node // Result expression or condp for collisions + HasCollision bool // Whether this is a collision case } TheVarNode struct { diff --git a/pkg/stdlib/clojure/walk/loader.go b/pkg/stdlib/clojure/walk/loader.go index f31bd0e..b8a8fed 100644 --- a/pkg/stdlib/clojure/walk/loader.go +++ b/pkg/stdlib/clojure/walk/loader.go @@ -191,7 +191,7 @@ func LoadNS() { _ = v5 var tmp6 any { // let - // let binding "vec__1061" + // let binding "vec__1089" var v7 any = v5 _ = v7 // let binding "k" @@ -539,7 +539,7 @@ func LoadNS() { _ = v5 var tmp6 any { // let - // let binding "vec__1065" + // let binding "vec__1093" var v7 any = v5 _ = v7 // let binding "k" diff --git a/pkg/stdlib/glojure/go/io/loader.go b/pkg/stdlib/glojure/go/io/loader.go index ac5e80b..021f9df 100644 --- a/pkg/stdlib/glojure/go/io/loader.go +++ b/pkg/stdlib/glojure/go/io/loader.go @@ -285,7 +285,7 @@ func LoadNS() { tmp8 := lang.Apply(tmp7, nil) var v9 any = tmp8 _ = v9 - // let binding "vec__1098" + // let binding "vec__1123" var tmp10 any tmp11 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp12 := lang.Apply(tmp11, []any{v9}) @@ -312,22 +312,22 @@ func LoadNS() { } var v23 any = tmp10 _ = v23 - // let binding "vec__1101" + // let binding "vec__1126" tmp24 := checkDerefVar(var_clojure_DOT_core_nth) tmp25 := lang.Apply(tmp24, []any{v23, int64(0), nil}) var v26 any = tmp25 _ = v26 - // let binding "seq__1102" + // let binding "seq__1127" tmp27 := checkDerefVar(var_clojure_DOT_core_seq) tmp28 := lang.Apply(tmp27, []any{v26}) var v29 any = tmp28 _ = v29 - // let binding "first__1103" + // let binding "first__1128" tmp30 := checkDerefVar(var_clojure_DOT_core_first) tmp31 := lang.Apply(tmp30, []any{v29}) var v32 any = tmp31 _ = v32 - // let binding "seq__1102" + // let binding "seq__1127" tmp33 := checkDerefVar(var_clojure_DOT_core_next) tmp34 := lang.Apply(tmp33, []any{v29}) var v35 any = tmp34 @@ -380,7 +380,7 @@ func LoadNS() { tmp7 := lang.Apply(tmp6, nil) var v8 any = tmp7 _ = v8 - // let binding "vec__1092" + // let binding "vec__1117" var tmp9 any tmp10 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp11 := lang.Apply(tmp10, []any{v8}) @@ -407,22 +407,22 @@ func LoadNS() { } var v22 any = tmp9 _ = v22 - // let binding "vec__1095" + // let binding "vec__1120" tmp23 := checkDerefVar(var_clojure_DOT_core_nth) tmp24 := lang.Apply(tmp23, []any{v22, int64(0), nil}) var v25 any = tmp24 _ = v25 - // let binding "seq__1096" + // let binding "seq__1121" tmp26 := checkDerefVar(var_clojure_DOT_core_seq) tmp27 := lang.Apply(tmp26, []any{v25}) var v28 any = tmp27 _ = v28 - // let binding "first__1097" + // let binding "first__1122" tmp29 := checkDerefVar(var_clojure_DOT_core_first) tmp30 := lang.Apply(tmp29, []any{v28}) var v31 any = tmp30 _ = v31 - // let binding "seq__1096" + // let binding "seq__1121" tmp32 := checkDerefVar(var_clojure_DOT_core_next) tmp33 := lang.Apply(tmp32, []any{v28}) var v34 any = tmp33 @@ -534,7 +534,7 @@ func LoadNS() { tmp14 := lang.Apply(http7.NewRequest, []any{http7.MethodGet, tmp13, nil}) var v15 any = tmp14 _ = v15 - // let binding "vec__1071" + // let binding "vec__1096" var tmp16 any tmp17 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp18 := lang.Apply(tmp17, []any{v15}) @@ -561,22 +561,22 @@ func LoadNS() { } var v29 any = tmp16 _ = v29 - // let binding "vec__1074" + // let binding "vec__1099" tmp30 := checkDerefVar(var_clojure_DOT_core_nth) tmp31 := lang.Apply(tmp30, []any{v29, int64(0), nil}) var v32 any = tmp31 _ = v32 - // let binding "seq__1075" + // let binding "seq__1100" tmp33 := checkDerefVar(var_clojure_DOT_core_seq) tmp34 := lang.Apply(tmp33, []any{v32}) var v35 any = tmp34 _ = v35 - // let binding "first__1076" + // let binding "first__1101" tmp36 := checkDerefVar(var_clojure_DOT_core_first) tmp37 := lang.Apply(tmp36, []any{v35}) var v38 any = tmp37 _ = v38 - // let binding "seq__1075" + // let binding "seq__1100" tmp39 := checkDerefVar(var_clojure_DOT_core_next) tmp40 := lang.Apply(tmp39, []any{v35}) var v41 any = tmp40 @@ -627,7 +627,7 @@ func LoadNS() { tmp15 := lang.Apply(tmp14, []any{v12}) var v16 any = tmp15 _ = v16 - // let binding "vec__1077" + // let binding "vec__1102" var tmp17 any tmp18 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp19 := lang.Apply(tmp18, []any{v16}) @@ -654,22 +654,22 @@ func LoadNS() { } var v30 any = tmp17 _ = v30 - // let binding "vec__1080" + // let binding "vec__1105" tmp31 := checkDerefVar(var_clojure_DOT_core_nth) tmp32 := lang.Apply(tmp31, []any{v30, int64(0), nil}) var v33 any = tmp32 _ = v33 - // let binding "seq__1081" + // let binding "seq__1106" tmp34 := checkDerefVar(var_clojure_DOT_core_seq) tmp35 := lang.Apply(tmp34, []any{v33}) var v36 any = tmp35 _ = v36 - // let binding "first__1082" + // let binding "first__1107" tmp37 := checkDerefVar(var_clojure_DOT_core_first) tmp38 := lang.Apply(tmp37, []any{v36}) var v39 any = tmp38 _ = v39 - // let binding "seq__1081" + // let binding "seq__1106" tmp40 := checkDerefVar(var_clojure_DOT_core_next) tmp41 := lang.Apply(tmp40, []any{v36}) var v42 any = tmp41 @@ -779,7 +779,7 @@ func LoadNS() { _ = v2 var tmp3 any { // let - // let binding "vec__1083" + // let binding "vec__1108" tmp4 := lang.Apply(url5.ParseRequestURI, []any{v1}) var v5 any = tmp4 _ = v5 @@ -802,7 +802,7 @@ func LoadNS() { tmp15 := lang.Apply(os6.Open, []any{v1}) var v16 any = tmp15 _ = v16 - // let binding "vec__1086" + // let binding "vec__1111" var tmp17 any tmp18 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp19 := lang.Apply(tmp18, []any{v16}) @@ -829,22 +829,22 @@ func LoadNS() { } var v30 any = tmp17 _ = v30 - // let binding "vec__1089" + // let binding "vec__1114" tmp31 := checkDerefVar(var_clojure_DOT_core_nth) tmp32 := lang.Apply(tmp31, []any{v30, int64(0), nil}) var v33 any = tmp32 _ = v33 - // let binding "seq__1090" + // let binding "seq__1115" tmp34 := checkDerefVar(var_clojure_DOT_core_seq) tmp35 := lang.Apply(tmp34, []any{v33}) var v36 any = tmp35 _ = v36 - // let binding "first__1091" + // let binding "first__1116" tmp37 := checkDerefVar(var_clojure_DOT_core_first) tmp38 := lang.Apply(tmp37, []any{v36}) var v39 any = tmp38 _ = v39 - // let binding "seq__1090" + // let binding "seq__1115" tmp40 := checkDerefVar(var_clojure_DOT_core_next) tmp41 := lang.Apply(tmp40, []any{v36}) var v42 any = tmp41 @@ -1496,7 +1496,7 @@ func LoadNS() { tmp10 := lang.Apply(io4.Copy, []any{v7, v6}) var v11 any = tmp10 _ = v11 - // let binding "vec__1104" + // let binding "vec__1129" var tmp12 any tmp13 := checkDerefVar(var_clojure_DOT_core_vector_QMARK_) tmp14 := lang.Apply(tmp13, []any{v11}) @@ -1523,22 +1523,22 @@ func LoadNS() { } var v25 any = tmp12 _ = v25 - // let binding "vec__1107" + // let binding "vec__1132" tmp26 := checkDerefVar(var_clojure_DOT_core_nth) tmp27 := lang.Apply(tmp26, []any{v25, int64(0), nil}) var v28 any = tmp27 _ = v28 - // let binding "seq__1108" + // let binding "seq__1133" tmp29 := checkDerefVar(var_clojure_DOT_core_seq) tmp30 := lang.Apply(tmp29, []any{v28}) var v31 any = tmp30 _ = v31 - // let binding "first__1109" + // let binding "first__1134" tmp32 := checkDerefVar(var_clojure_DOT_core_first) tmp33 := lang.Apply(tmp32, []any{v31}) var v34 any = tmp33 _ = v34 - // let binding "seq__1108" + // let binding "seq__1133" tmp35 := checkDerefVar(var_clojure_DOT_core_next) tmp36 := lang.Apply(tmp35, []any{v31}) var v37 any = tmp36 diff --git a/pkg/stdlib/glojure/go/types/loader.go b/pkg/stdlib/glojure/go/types/loader.go index 57e20e3..efa2f24 100644 --- a/pkg/stdlib/glojure/go/types/loader.go +++ b/pkg/stdlib/glojure/go/types/loader.go @@ -1144,7 +1144,7 @@ func LoadNS() { _ = tmp3 var tmp9 any { // let - // let binding "vec__1068" + // let binding "vec__1135" tmp10 := lang.Apply(parser5.ParseExpr, []any{v2}) var v11 any = tmp10 _ = v11