-
Notifications
You must be signed in to change notification settings - Fork 72
Macros Can't find any functions on the REPL or try-wisp #124
Copy link
Copy link
Open
Description
A lot of macros will fail to be accepted on the repl command line.
I give this ns first (so you know everything has been imported)
(ns dev
(:require
; normal runtime comparison and creation functions...
[wisp.runtime :refer [identity odd? even?
dictionary keys vals key-values merge map-dictionary
satisfies? contains-vector?
nil? true? false? string? number?
dictionary? date? boolean? error? re-pattern? object?
re-find re-matches re-pattern
inc dec str char int subs
== > >= < <= + - / *
and or print]]
; seq abstractions common to most functional languages
[wisp.sequence :refer [lazy-seq seq list vec cons conj
lazy-seq? seq? list? sequential? empty?
reverse map filter reduce count
first second third nth rest last butlast
take take-while drop assoc concat
repeat every? some
partition interleave sort]]
;; string functions:
;; split split-lines join
;; upper-case lower-case capitalize pattern-escape
;; replace-first replace blank? reverse
[wisp.string :as s]))And then I try something like:
=> (defn tack-on [tack coll] (map (fn [x] [x tack]) coll))
; everything is good here - the function works as expected
=> (defmacro tackmacro [vecs] (tack-on "=" vecs))
=> (tackmacro [1 2 3])
ReferenceError: tackOn is not defined
at tackmacro (eval at <anonymous> (/Users/Vishesh/repos/dng3/node_modules/wisp/backend/escodegen/generator.js:126:32), <anonymous>:3:9)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:72:36
at expand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:74:7)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:176:33
at macroexpand1 (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:177:11)
at loop (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:183:30)
at macroexpand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:188:11)
at /Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:597:31
at analyzeList (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:601:11)
at analyze (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:663:160)Which looks like there's something else going on here with the way regular functions and macros interact - it seems like they're not finding each other?
I can replicate this with a much simpler example:
=> (defn test [x] (+ 1 x))
=> (defmacro testm [x] (test x))
=> (testm 1)
ReferenceError: test is not defined
at testm (eval at <anonymous> (/Users/Vishesh/repos/dng3/node_modules/wisp/backend/escodegen/generator.js:126:32), <anonymous>:3:9)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:72:36
at expand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:74:7)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:176:33
at macroexpand1 (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:177:11)
at loop (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:183:30)
at macroexpand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:188:11)
at /Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:597:31
at analyzeList (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:601:11)
at analyze (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:663:160)
=> It's even replicable with the base functions
=> (defmacro component [m] (assoc m :restrict :EA))
=> (component {})
ReferenceError: assoc is not defined
at component (eval at <anonymous> (/Users/Vishesh/repos/dng3/node_modules/wisp/backend/escodegen/generator.js:126:32), <anonymous>:3:9)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:72:36
at expand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:74:7)
at /Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:176:33
at macroexpand1 (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:177:11)
at loop (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:183:30)
at macroexpand (/Users/Vishesh/repos/dng3/node_modules/wisp/expander.js:188:11)
at /Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:597:31
at analyzeList (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:601:11)
at analyze (/Users/Vishesh/repos/dng3/node_modules/wisp/analyzer.js:663:160)
=> Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels