fix? bug in call-fn with incorrect function call info

This commit is contained in:
Scott Richmond 2024-06-14 16:52:07 -04:00
parent 7a7a3b8977
commit 1841915d92

View File

@ -423,8 +423,8 @@
(when (= :function (type clauses)) (when (= :function (type clauses))
(break (clauses root-ast ;args))) (break (clauses root-ast ;args)))
(def len (length clauses)) (def len (length clauses))
(when (the-fn :match) (break ((the-fn :match) 0 args))) (when (the-fn :match) (break ((the-fn :match) root-ast 0 args)))
(defn match-fn [i args] (defn match-fn [root-ast i args]
(when (= len i) (when (= len i)
(error {:node root-ast :called the-fn :value args :msg "no match: function call"})) (error {:node root-ast :called the-fn :value args :msg "no match: function call"}))
(def clause (clauses i)) (def clause (clauses i))
@ -432,17 +432,17 @@
(def match? (def match?
(match-pattern patt args @{:^parent (the-fn :ctx)})) (match-pattern patt args @{:^parent (the-fn :ctx)}))
(when (not (match? :success)) (when (not (match? :success))
(break (match-fn (inc i) args))) (break (match-fn root-ast (inc i) args)))
# (print "matched!") # (print "matched!")
(def body-ctx (match? :ctx)) (def body-ctx (match? :ctx))
(def guard? (if guard (def guard? (if guard
(b/bool (interpret guard body-ctx)) true)) (b/bool (interpret guard body-ctx)) true))
# (print "passed guard") # (print "passed guard")
(when (not guard?) (when (not guard?)
(break (match-fn (inc i) args))) (break (match-fn root-ast (inc i) args)))
(interpret expr body-ctx)) (interpret expr body-ctx))
(set (the-fn :match) match-fn) (set (the-fn :match) match-fn)
(match-fn 0 args)) (match-fn root-ast 0 args))
(set call-fn call-fn*) (set call-fn call-fn*)