-
-
Save joshuamiller/20773273a234948013358f91e74c0392 to your computer and use it in GitHub Desktop.
Issues with Clojurescript eval
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns eval.test | |
(:require [cljs.js :refer [empty-state eval js-eval]])) | |
(defn present? | |
[x] | |
(not (or (nil? x) | |
(and (not (string? x)) (js/isNaN x)) | |
(and (seq? x) (empty? x))))) | |
(present? 1) ;; true | |
(def aliases | |
{'present? present?}) | |
(defn resolve-alias | |
[x] | |
(if (seq? x) | |
(map resolve-alias x) | |
(get aliases x x))) | |
(defn rewrite | |
[expr] | |
(map resolve-alias expr)) | |
(rewrite '(present? 1)) ;; (#object[eval$test$present_QMARK_] 1) | |
(eval (empty-state) (rewrite '(present? 1)) {:eval js-eval} :value) ;; true | |
(eval (empty-state) (rewrite '(or (present? 1))) {:eval js-eval} :value) ;; true | |
(rewrite '(or (present? 1) true)) ;; (or (#object[eval$test$present_QMARK_] 1) true) | |
;; why? | |
(eval (empty-state) (rewrite '(or (not (nil? 1)) true)) {:eval js-eval} :value) ;; nil | |
(eval (empty-state) (rewrite '(or (present? 1) true)) {:eval js-eval} :error) ;; nil | |
;;; Logging what's going on in js-eval | |
(defn js-eval* | |
"A default JavaScript evaluation function." | |
[{:keys [source] :as resource}] | |
(println source) | |
(js/eval source)) | |
(eval (empty-state) (rewrite '(present? 1)) {:eval js-eval*} :value) | |
;; cljs.js.get_fn( 90 ).call(null,(1)); | |
(eval (empty-state) (rewrite '(or (present? 1))) {:eval js-eval*} :value) | |
;; cljs.js.get_fn( 91 ).call(null,(1)); | |
;; Compiled down to the same thing. | |
(eval (empty-state) (rewrite '(or (present? 1) true)) {:eval js-eval*} :value) | |
;; var or__43529__auto___44 = cljs.js.get_fn( 97 ).call(null,(1)); | |
;; if(cljs.core.truth_(or__43529__auto___44)){ | |
;; } else { | |
;; } | |
;; Doesn't seem to be returning anything? | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment