Skip to content
This repository has been archived by the owner on Jun 4, 2022. It is now read-only.

Macro expand strangeness #501

Open
stumitchell opened this issue Jun 30, 2020 · 1 comment
Open

Macro expand strangeness #501

stumitchell opened this issue Jun 30, 2020 · 1 comment

Comments

@stumitchell
Copy link

stumitchell commented Jun 30, 2020

Consider the following at the repl

Lumo 1.10.1
ClojureScript 1.10.520
Node.js v11.13.0
 Docs: (doc function-name-here)
       (find-doc "part-of-name-here")
 Source: (source function-name-here)
 Exit: Control+D or :cljs/quit or exit

ccljs.user=> (macroexpand '(inc 1))
(js* "(~{} + ~{})" 1 1)
cljs.user=> (macroexpand `(inc 1))
           ⬆

         (new)
         Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (NO_SOURCE_FILE <embedded>:2053:72)
         (NO_SOURCE_FILE <embedded>:3396:364)
         Object.cljs.analyzer.macroexpand_1_STAR_ (NO_SOURCE_FILE <embedded>:3397:47)
         Object.cljs.analyzer.macroexpand_1 (NO_SOURCE_FILE <embedded>:3400:68)
         Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3408:35)
         Object.cljs.analyzer.analyze_form (NO_SOURCE_FILE <embedded>:3447:213)
         Object.cljs.analyzer.analyze_STAR_ (NO_SOURCE_FILE <embedded>:3450:337)
         Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3454:452)
         (NO_SOURCE_FILE <embedded>:6014:452)

Assert failed: Argument to macroexpand must be quoted
(core/= (core/first quoted) (quote quote))
         Function.cljs.core$macros.macroexpand (NO_SOURCE_FILE <embedded>:5690:208)
         Function.cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$5 (NO_SOURCE_FILE <embedded>:867:165)
         Function.cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:866:199)
         Function.cljs.core.apply.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:879:297)
         (NO_SOURCE_FILE <embedded>:3396:251)
         Object.cljs.analyzer.macroexpand_1_STAR_ (NO_SOURCE_FILE <embedded>:3397:47)
         Object.cljs.analyzer.macroexpand_1 (NO_SOURCE_FILE <embedded>:3400:68)
         Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3408:35)
         Object.cljs.analyzer.analyze_form (NO_SOURCE_FILE <embedded>:3447:213)
         Object.cljs.analyzer.analyze_STAR_ (NO_SOURCE_FILE <embedded>:3450:337)

Also note the following

cljs.user=> (let [f '(inc 1)] (macroexpand f))
           ⬆

         (new)
         Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (NO_SOURCE_FILE <embedded>:2053:72)
         (NO_SOURCE_FILE <embedded>:3396:364)
         Object.cljs.analyzer.macroexpand_1_STAR_ (NO_SOURCE_FILE <embedded>:3397:47)
         Object.cljs.analyzer.macroexpand_1 (NO_SOURCE_FILE <embedded>:3400:68)
         Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3408:35)
         Object.cljs.analyzer.analyze_form (NO_SOURCE_FILE <embedded>:3447:213)
         Object.cljs.analyzer.analyze_STAR_ (NO_SOURCE_FILE <embedded>:3450:337)
         Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3454:452)
         Function.cljs.analyzer.analyze.cljs$core$IFn$_invoke$arity$3 (NO_SOURCE_FILE <embedded>:3453:234)

f is not ISeqable
         Object.cljs.core.seq (NO_SOURCE_FILE <embedded>:503:388)
         Object.cljs.core.first (NO_SOURCE_FILE <embedded>:504:195)
         Function.cljs.core$macros.macroexpand (NO_SOURCE_FILE <embedded>:5690:133)
         Function.cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$5 (NO_SOURCE_FILE <embedded>:867:165)
         Function.cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:866:199)
         Function.cljs.core.apply.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:879:297)
         (NO_SOURCE_FILE <embedded>:3396:251)
         Object.cljs.analyzer.macroexpand_1_STAR_ (NO_SOURCE_FILE <embedded>:3397:47)
         Object.cljs.analyzer.macroexpand_1 (NO_SOURCE_FILE <embedded>:3400:68)
         Function.cljs.analyzer.analyze_seq.cljs$core$IFn$_invoke$arity$4 (NO_SOURCE_FILE <embedded>:3408:35)
@stumitchell
Copy link
Author

This seems to be an issue with the implementation of cljs.core/macroexpand it is a macro while clojure.core/macroexpand is a function

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant