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)
796
796
parse_LtoR (ps, parse_curry_chain, is_prec_pipe_gt)
797
797
end
798
798
799
- # x /> f(y) /> g(z) ==> (chain x (/> f y) (/> g z))
800
- # x /> A.f(y) ==> (chain x (/> (. A (quote f)) y))
801
799
function parse_curry_chain (ps:: ParseState )
802
800
mark = position (ps)
803
801
nterms = 0
804
802
if (k = peek (ps); k != K " />" && k != K "\> " )
803
+ # x /> f(a) ==> (chain x (/> (call f a)))
805
804
parse_range (ps)
806
805
nterms += 1
806
+ else
807
+ # /> f(a) ==> (/> (call f a))
807
808
end
808
809
while (k = peek (ps); k == K " />" || k == K "\> " )
809
- bump (ps, TRIVIA_FLAG)
810
810
m = position (ps)
811
+ bump (ps, TRIVIA_FLAG)
811
812
parse_range (ps)
812
813
nterms += 1
813
- if peek_behind (ps). kind != K " call"
814
+ if (kb = peek_behind (ps). kind; kb != K " call" && kb != K " $ " )
814
815
emit (ps, m, K " error" , error= " Expected call to the right of />" )
815
816
end
816
817
emit (ps, m, k)
817
818
end
818
819
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))))
819
826
emit (ps, mark, K " chain" )
820
827
end
821
828
end
Original file line number Diff line number Diff line change @@ -102,6 +102,16 @@ tests = [
102
102
JuliaSyntax. parse_pipe_gt => [
103
103
" x |> y |> z" => " (call-i (call-i x |> y) |> z)"
104
104
],
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
+ ],
105
115
JuliaSyntax. parse_range => [
106
116
" 1:2" => " (call-i 1 : 2)"
107
117
" 1:2:3" => " (call-i 1 : 2 3)"
You can’t perform that action at this time.
0 commit comments