From dce0e10f3f073b621d8c93de76306d57b22f7000 Mon Sep 17 00:00:00 2001 From: Kodi Arfer Date: Fri, 2 Aug 2019 17:08:27 -0400 Subject: [PATCH] Use `nonlocal` instead of a singleton list --- hy/contrib/walk.hy | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/hy/contrib/walk.hy b/hy/contrib/walk.hy index def9049..691645e 100644 --- a/hy/contrib/walk.hy +++ b/hy/contrib/walk.hy @@ -45,22 +45,24 @@ (setv module (or (and module-name (import-module module-name)) (calling-module)) - quote-level [0] + quote-level 0 ast-compiler (HyASTCompiler module)) ; TODO: make nonlocal after dropping Python2 (defn traverse [form] (walk expand identity form)) (defn expand [form] + (nonlocal quote-level) ;; manages quote levels (defn +quote [&optional [x 1]] + (nonlocal quote-level) (setv head (first form)) - (+= (get quote-level 0) x) - (when (neg? (get quote-level 0)) + (+= quote-level x) + (when (neg? quote-level) (raise (TypeError "unquote outside of quasiquote"))) (setv res (traverse (cut form 1))) - (-= (get quote-level 0) x) + (-= quote-level x) `(~head ~@res)) (if (call? form) - (cond [(get quote-level 0) + (cond [quote-level (cond [(in (first form) '[unquote unquote-splice]) (+quote -1)] [(= (first form) 'quasiquote) (+quote)]