Skip to content

Commit

Permalink
Rename fn and do expressions
Browse files Browse the repository at this point in the history
  • Loading branch information
jeaye committed Apr 27, 2019
1 parent 41d31b8 commit d5df734
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 19 deletions.
6 changes: 3 additions & 3 deletions resources/neo-grammar
Expand Up @@ -2,7 +2,7 @@
<atom> = regex / string / nil / number / boolean / set / map / vector /
qualified-keyword / keyword / qualified-identifier / identifier /
binding-definition /
fn-definition / do-definition /
fn-expression / do-expression /
if /
application

Expand Down Expand Up @@ -49,13 +49,13 @@ binding-definition = left-paren def-keyword identifier atom right-paren

<fn-keyword> = <'fn'>
argument-list = left-bracket identifier* right-bracket
fn-definition =
fn-expression =
left-paren fn-keyword identifier? argument-list
atom*
right-paren

<do-keyword> = <'do'>
do-definition =
do-expression =
left-paren do-keyword
atom*
right-paren
Expand Down
18 changes: 9 additions & 9 deletions src/com/jeaye/jank/parse/spec.clj
Expand Up @@ -24,8 +24,8 @@
(s/def ::kind (into types [:constant
:binding-definition
:argument-list
:fn-definition ; TODO: rename to fn-expression
:do-definition ; TODO: rename to do-expression
:fn-expression ; TODO: rename to fn-expression
:do-expression ; TODO: rename to do-expression
:if-expression
:application]))

Expand Down Expand Up @@ -75,12 +75,12 @@
::value]))

(s/def ::parameters (s/coll-of any?)) ; TODO: identifier
(s/def ::body any?) ; TODO: do-definition
(s/def ::fn-definition (s/keys :req [::parameters
(s/def ::body any?) ; TODO: do-expression
(s/def ::fn-expression (s/keys :req [::parameters
::body]
:opt [::name]))
(s/def ::return any?) ; TODO: ::node
(s/def ::do-definition (s/keys :req [::body
(s/def ::do-expression (s/keys :req [::body
::return]))

(s/def ::condition any?) ; TODO: ::node
Expand Down Expand Up @@ -109,10 +109,10 @@
:symbol (node (constant? :symbol) (single? ::symbol))
:binding-definition (node (kind? :binding-definition)
::binding-definition)
:fn-definition (node (kind? :fn-definition)
::fn-definition)
:do-definition (node (kind? :do-definition)
::do-definition)
:fn-expression (node (kind? :fn-expression)
::fn-expression)
:do-expression (node (kind? :do-expression)
::do-expression)
:if-expression (node (kind? :if-expression)
::if-expression)
:application (node (kind? :application)
Expand Down
14 changes: 7 additions & 7 deletions src/com/jeaye/jank/parse/transform.clj
Expand Up @@ -84,25 +84,25 @@
(deftransform argument-list [& more]
(vec more))

(deftransform do-definition [& more]
(deftransform do-expression [& more]
(let [ret (last more)]
{::parse.spec/kind :do-definition
{::parse.spec/kind :do-expression
::parse.spec/body (into [] (butlast more))
::parse.spec/return (if (some? ret)
ret
(constant none :nil))}))

(deftransform fn-definition [& more]
(deftransform fn-expression [& more]
(let [has-name? (= :identifier (-> more first :kind))
params (if has-name?
(second more)
(first more))
body (if has-name?
(drop 2 more)
(rest more))]
(merge {::parse.spec/kind :fn-definition
(merge {::parse.spec/kind :fn-expression
::parse.spec/parameters params
::parse.spec/body (apply do-definition body)}
::parse.spec/body (apply do-expression body)}
(when has-name?
{::parse.spec/name (first more)}))))

Expand Down Expand Up @@ -134,8 +134,8 @@
:symbol (partial constant single :symbol)
:binding-definition binding-definition
:argument-list argument-list
:fn-definition fn-definition
:do-definition do-definition
:fn-expression fn-expression
:do-expression do-expression
:if if-expression
:application application})

Expand Down

0 comments on commit d5df734

Please sign in to comment.