File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -796,26 +796,33 @@ function parse_pipe_gt(ps::ParseState)
796796 parse_LtoR (ps, parse_curry_chain, is_prec_pipe_gt)
797797end
798798
799- # x /> f(y) /> g(z) ==> (chain x (/> f y) (/> g z))
800- # x /> A.f(y) ==> (chain x (/> (. A (quote f)) y))
801799function parse_curry_chain (ps:: ParseState )
802800 mark = position (ps)
803801 nterms = 0
804802 if (k = peek (ps); k != K " />" && k != K "\> " )
803+ # x /> f(a) ==> (chain x (/> (call f a)))
805804 parse_range (ps)
806805 nterms += 1
806+ else
807+ # /> f(a) ==> (/> (call f a))
807808 end
808809 while (k = peek (ps); k == K " />" || k == K "\> " )
809- bump (ps, TRIVIA_FLAG)
810810 m = position (ps)
811+ bump (ps, TRIVIA_FLAG)
811812 parse_range (ps)
812813 nterms += 1
813- if peek_behind (ps). kind != K " call"
814+ if (kb = peek_behind (ps). kind; kb != K " call" && kb != K " $ " )
814815 emit (ps, m, K " error" , error= " Expected call to the right of />" )
815816 end
816817 emit (ps, m, k)
817818 end
818819 if nterms > 1
820+ # x /> f(a) /> g(b) ==> (chain x (/> (call f a)) (/> (call g b)))
821+ # x /> A.f(a,b) ==> (chain x (/> (call (. A (quote f)) a b)))
822+ # /> f(a) /> g(b) ==> (chain (/> (call f a)) (/> (call g b)))
823+ # x /> f() \> g() ==> (chain x (/> (call f)) (\> (call g)))
824+ # x /> $call ==> (chain x (/> ($ call)))
825+ # x /> notcall[] ==> (chain x (/> (error (ref notcall))))
819826 emit (ps, mark, K " chain" )
820827 end
821828end
Original file line number Diff line number Diff line change @@ -102,6 +102,16 @@ tests = [
102102 JuliaSyntax. parse_pipe_gt => [
103103 " x |> y |> z" => " (call-i (call-i x |> y) |> z)"
104104 ],
105+ JuliaSyntax. parse_curry_chain => [
106+ " x /> f(a)" => " (chain x (/> (call f a)))"
107+ " /> f(a)" => " (/> (call f a))"
108+ " x /> f(a) /> g(b)" => " (chain x (/> (call f a)) (/> (call g b)))"
109+ " x /> A.f(a,b)" => " (chain x (/> (call (. A (quote f)) a b)))"
110+ " /> f(a) /> g(b)" => " (chain (/> (call f a)) (/> (call g b)))"
111+ " x /> f() \\ > g()" => " (chain x (/> (call f)) (\\ > (call g)))"
112+ " x /> \$ call" => " (chain x (/> (\$ call)))"
113+ " x /> notcall[]" => " (chain x (/> (error (ref notcall))))"
114+ ],
105115 JuliaSyntax. parse_range => [
106116 " 1:2" => " (call-i 1 : 2)"
107117 " 1:2:3" => " (call-i 1 : 2 3)"
You can’t perform that action at this time.
0 commit comments