Compare commits

..

4 Commits

Author SHA1 Message Date
8375e19f1e Merge pull request 'expr-repeat' (#19) from expr-repeat into main
Reviewed-on: #19
2023-12-24 19:17:16 +00:00
Scott Richmond
7a2c404daf Light testing 2023-12-24 14:16:08 -05:00
Scott Richmond
7541d2499d Change interpreter (just change name of binding in interpret-repeat 2023-12-24 14:12:50 -05:00
Scott Richmond
a6d64ff827 Change grammar 2023-12-24 14:11:49 -05:00
3 changed files with 5 additions and 5 deletions

View File

@ -229,7 +229,7 @@
(defp loop-expr group order-1 [(quiet :loop) tuple (quiet :with) (defp loop-expr group order-1 [(quiet :loop) tuple (quiet :with)
(flat (choice :loop-body [fn-clause compound-loop]))]) (flat (choice :loop-body [fn-clause compound-loop]))])
(defp repeat-expr group order-1 [(quiet :repeat) (choice :times [:word :number]) block]) (defp repeat-expr group order-1 [(quiet :repeat) (choice :times [:word :number]) non-binding])
(defp collection flat choice [;struct-literal (defp collection flat choice [;struct-literal
dict list-literal set-literal tuple]) dict list-literal set-literal tuple])

View File

@ -811,9 +811,9 @@
times (if (= :word (:type times-expr)) times (if (= :word (:type times-expr))
(resolve-word times-expr ctx) (resolve-word times-expr ctx)
(-> times-expr :data first)) (-> times-expr :data first))
block (second data)] expr (second data)]
(if (not (number? times)) (throw (ex-info (str "Repeat needs a number, not a " (base/get-type times)) {}))) (if (not (number? times)) (throw (ex-info (str "Repeat needs a number, not a " (base/get-type times)) {})))
(dotimes [_ times] (interpret-ast block ctx)))) (dotimes [_ times] (interpret-ast expr ctx))))
(defn- interpret-literal [ast] (-> ast :data first)) (defn- interpret-literal [ast] (-> ast :data first))

View File

@ -60,8 +60,8 @@
(comment (comment
(def source " (def source "
let times = 4
:a (_) repeat times print! (:foo)
") ")