Skip to content

Commit 54824b7

Browse files
committed
rename/delete gates: sweep #5 shipped idioms
rename.sh §11: defrecord+defunion idiom renames as one type (no split); multi-arity defn bodies renamed; ->Name constructor renames (same + cross-module); reader ~ unquote inside a quote escapes. delete.sh §8: multi-arity body refs and ->constructor refs are seen by the no-orphaned-refs scan.
1 parent efa0793 commit 54824b7

6 files changed

Lines changed: 99 additions & 1 deletion

File tree

bin/test/code-as-claims/delete.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,31 @@ pr="$(racket "$RT" --render /tmp/resolved-par.bclj.edn 2>/dev/null)"
111111
chk "parameterized union (Opt A) removed" "! grep -q 'defunion' <<<\"\$pr\""
112112
chk "'keep-me' survives" "grep -q 'defn keep-me' <<<\"\$pr\""
113113

114+
# --- 8. multi-arity body refs + ->ctor refs are seen by the orphan scan (sweep #5) ---
115+
echo "--- 8. multi-arity body + ->constructor references block delete ---"
116+
cat > "$W/ma.bclj" <<'EOF'
117+
#lang beagle/clj
118+
(ns delcorp.ma)
119+
(def base :- Int 5)
120+
(defn f
121+
([x :- Int] :- Int (+ x base))
122+
([x :- Int y :- Int] :- Int (+ x y base)))
123+
EOF
124+
racket "$RT" --emit-edn "$W/ma.bclj" 2>/dev/null > "$W/ma.edn"
125+
if bb -cp "$FRAM_OUT" "$RES" delete base ma "$W/ma.edn" >/dev/null 2>&1; then
126+
echo " FAIL multi-arity body ref not seen (delete wrongly succeeded)"; fail=1
127+
else echo " PASS multi-arity body reference blocks delete"; fi
128+
cat > "$W/ct.bclj" <<'EOF'
129+
#lang beagle/clj
130+
(ns delcorp.ct)
131+
(defrecord Point [(x :- Int)])
132+
(defn mk [] :- Point (->Point 1))
133+
EOF
134+
racket "$RT" --emit-edn "$W/ct.bclj" 2>/dev/null > "$W/ct.edn"
135+
if bb -cp "$FRAM_OUT" "$RES" delete Point ct "$W/ct.edn" >/dev/null 2>&1; then
136+
echo " FAIL ->ctor ref not seen (delete wrongly succeeded)"; fail=1
137+
else echo " PASS ->constructor reference blocks delete"; fi
138+
114139
echo
115140
if [ "$fail" = 0 ]; then
116141
echo "RESULT: PASS — delete projects when safe (no truncation), refuses orphans/variants, prunes own comment."

bin/test/code-as-claims/rename.sh

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,32 @@ racket "$RT" --emit-edn "$W/nv.bclj" 2>/dev/null > "$W/nv.edn"
210210
bb -cp "$FRAM_OUT" "$RES" rename None Nothing nv "$W/nv.edn" 2>/dev/null
211211
chk "nullary variant None -> Nothing" "grep -qF '(Some [v :- Int]) Nothing)' <<<\"\$(racket \"$RT\" --render /tmp/resolved-nv.bclj.edn 2>/dev/null)\""
212212

213+
# --- 11. shipped idioms: defrecord+defunion, multi-arity defn, ->ctor (sweep #5) -----
214+
echo "--- 11. defrecord+defunion idiom + multi-arity defn + ->Name constructor ---"
215+
# 11a. the shipped match-fixture idiom: a defrecord that is also a defunion member renames as ONE type
216+
printf '#lang beagle/clj\n(ns ri)\n(defrecord Ok [(value :- Any)])\n(defrecord Err [(error :- String)])\n(defunion Result Ok Err)\n(defn h [r :- Result] :- Any (match r [(Ok v) v] [(Err e) e]))\n' > "$W/ri.bclj"
217+
racket "$RT" --emit-edn "$W/ri.bclj" 2>/dev/null > "$W/ri.edn"
218+
bb -cp "$FRAM_OUT" "$RES" rename Ok Yes ri "$W/ri.edn" 2>/dev/null
219+
ri="$(racket "$RT" --render /tmp/resolved-ri.bclj.edn 2>/dev/null)"
220+
chk "defrecord+union+match all rename together (no type split)" "grep -qF '(defrecord Yes' <<<\"\$ri\" && grep -qF '(defunion Result Yes Err)' <<<\"\$ri\" && grep -qF '[(Yes v)' <<<\"\$ri\" && grep -qF '(defrecord Err' <<<\"\$ri\""
221+
# 11b. multi-arity defn: a def used in EVERY arity body renames
222+
printf '#lang beagle/clj\n(ns rm)\n(def base :- Int 5)\n(defn f\n ([x :- Int] :- Int (+ x base))\n ([x :- Int y :- Int] :- Int (+ x y base)))\n' > "$W/rm.bclj"
223+
racket "$RT" --emit-edn "$W/rm.bclj" 2>/dev/null > "$W/rm.edn"
224+
bb -cp "$FRAM_OUT" "$RES" rename base unit rm "$W/rm.edn" 2>/dev/null
225+
rmr="$(racket "$RT" --render /tmp/resolved-rm.bclj.edn 2>/dev/null)"
226+
chk "multi-arity defn: both arity bodies renamed" "grep -qF '(+ x unit)' <<<\"\$rmr\" && grep -qF '(+ x y unit)' <<<\"\$rmr\""
227+
# 11c. ->Name auto-constructor renames with the type (same-module)
228+
printf '#lang beagle/clj\n(ns rc)\n(defrecord Point [(x :- Int) (y :- Int)])\n(defn mk [] :- Point (->Point 0 0))\n' > "$W/rc.bclj"
229+
racket "$RT" --emit-edn "$W/rc.bclj" 2>/dev/null > "$W/rc.edn"
230+
bb -cp "$FRAM_OUT" "$RES" rename Point Pt rc "$W/rc.edn" 2>/dev/null
231+
chk "->Name constructor renamed (->Point -> ->Pt)" "grep -qF '(->Pt 0 0)' <<<\"\$(racket \"$RT\" --render /tmp/resolved-rc.bclj.edn 2>/dev/null)\""
232+
# 11d. quasiquote reader ~ escapes (live) inside a quote; quoted data preserved
233+
printf '#lang beagle/clj\n(ns rq)\n(def base :- Int 1)\n(defmacro mk [y] `(quote ~(base y)))\n' > "$W/rq.bclj"
234+
racket "$RT" --emit-edn "$W/rq.bclj" 2>/dev/null > "$W/rq.edn"
235+
bb -cp "$FRAM_OUT" "$RES" rename base root rq "$W/rq.edn" 2>/dev/null
236+
chk "reader ~ unquote inside quote escapes + renames" "grep -qF '(root y)' <<<\"\$(racket \"$RT\" --render /tmp/resolved-rq.bclj.edn 2>/dev/null)\""
237+
213238
echo
214239
if [ "$fail" = 0 ]; then
215-
echo "RESULT: PASS — one engine: collision/shadowing/cross-module/types/sequential/quasiquote, recompiles."
240+
echo "RESULT: PASS — one engine: collision/shadowing/cross-module/types/sequential/quasiquote/idioms, recompiles."
216241
else echo "RESULT: FAIL"; exit 1; fi

runtime/src/demo/match/repro.clj

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
(ns demo.match-repro)
2+
3+
^{:line 7 :file "/tmp/triage/mf-renamed.bclj"} (defrecord Ok [value])
4+
5+
(defn ok-value [r] (:value r))
6+
7+
^{:line 9 :file "/tmp/triage/mf-renamed.bclj"} (defrecord Err [error])
8+
9+
(defn err-error [r] (:error r))
10+
11+
;; Result = Yes | Err
12+
13+
^{:line 13 :file "/tmp/triage/mf-renamed.bclj"} (defn ^String handle [r]
14+
^{:line 13 :file "/tmp/triage/mf-renamed.bclj"} (let [match__0 r]
15+
(cond
16+
(instance? Yes match__0) "ok"
17+
(instance? Err match__0) (let [e (:error match__0)] e))))
18+
19+
^{:line 15 :file "/tmp/triage/mf-renamed.bclj"} (defn ^String handle2 [r]
20+
^{:line 15 :file "/tmp/triage/mf-renamed.bclj"} (let [match__1 r]
21+
(cond
22+
(instance? Yes match__1) "yes"
23+
(instance? Err match__1) (let [e (:error match__1)] "no"))))

runtime/src/fc/ma/type.clj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
(ns fc.ma-type)
2+
3+
^{:line 3 :file "/tmp/triage/matype.bclj"} (defrecord Box [v])
4+
5+
(defn box-v [r] (:v r))
6+
7+
^{:line 4 :file "/tmp/triage/matype.bclj"} (defn wrap
8+
([b]
9+
b)
10+
([b c]
11+
b))

runtime/src/qq/two.clj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(ns qq.two)
2+
3+
^{:line 3 :file "/tmp/sweep5/qq2.bclj"} (defn base [x]
4+
^{:line 3 :file "/tmp/sweep5/qq2.bclj"} (+ x 1))

runtime/src/single/mod.clj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
(ns single.mod)
2+
3+
^{:line 5 :file "/tmp/sweep5/renamed-single.bclj"} (defrecord Pt [x y])
4+
5+
(defn pt-x [r] (:x r))
6+
7+
(defn pt-y [r] (:y r))
8+
9+
^{:line 7 :file "/tmp/sweep5/renamed-single.bclj"} (defn ^Pt origin []
10+
^{:line 7 :file "/tmp/sweep5/renamed-single.bclj"} (->Point 0 0))

0 commit comments

Comments
 (0)