From 1abd12a9e8a1785cdf782fdf4627a92b721c903e Mon Sep 17 00:00:00 2001 From: Mike Blume Date: Sun, 3 May 2015 12:23:10 -0700 Subject: [PATCH] handle (ignore) extra args from LispReader with the new reader conditionals patch, readers are passed additional arguments. Ignore them. Fixes #153 --- src/marginalia/parser.clj | 60 +++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/src/marginalia/parser.clj b/src/marginalia/parser.clj index 3283d2d..78bfd0b 100644 --- a/src/marginalia/parser.clj +++ b/src/marginalia/parser.clj @@ -74,24 +74,27 @@ (directive)) (not directive))) -(defn read-comment [reader semicolon] - (let [sb (StringBuilder.)] - (.append sb semicolon) - (loop [c (.read reader)] - (let [ch (char c)] - (if (or (= ch \newline) - (= ch \return)) - (let [line (dec (.getLineNumber reader)) - text (.toString sb) - include? (process-directive! text)] - (when (and include? (comments-enabled?)) - (swap! *comments* conj {:form (Comment. text) - :start line - :end line})) - reader) - (do - (.append sb (Character/toString ch)) - (recur (.read reader)))))))) +(defn read-comment + ([reader semicolon] + (let [sb (StringBuilder.)] + (.append sb semicolon) + (loop [c (.read reader)] + (let [ch (char c)] + (if (or (= ch \newline) + (= ch \return)) + (let [line (dec (.getLineNumber reader)) + text (.toString sb) + include? (process-directive! text)] + (when (and include? (comments-enabled?)) + (swap! *comments* conj {:form (Comment. text) + :start line + :end line})) + reader) + (do + (.append sb (Character/toString ch)) + (recur (.read reader)))))))) + ([reader semicolon opts pending] + (read-comment reader semicolon))) (defn set-comment-reader [reader] (aset (get-field clojure.lang.LispReader :macros nil) @@ -116,15 +119,18 @@ [String] nil s)) -(defn read-keyword [reader colon] - (let [c (.read reader)] - (if (= (int \:) c) - (-> (read-token reader (char c)) - match-symbol - DoubleColonKeyword.) - (do (.unread reader c) - (-> (read-token reader colon) - match-symbol))))) +(defn read-keyword + ([reader colon] + (let [c (.read reader)] + (if (= (int \:) c) + (-> (read-token reader (char c)) + match-symbol + DoubleColonKeyword.) + (do (.unread reader c) + (-> (read-token reader colon) + match-symbol))))) + ([reader colon opts pending] + (read-keyword reader colon))) (defn set-keyword-reader [reader] (aset (get-field clojure.lang.LispReader :macros nil)