diff options
author | Li Jin <dragon-fly@qq.com> | 2020-01-10 16:30:34 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-01-10 16:30:34 +0800 |
commit | 52a6536103f46c26a3ba9b149b0fe7b40d524d8c (patch) | |
tree | 67e4759f8e1ea922079d0e162d84ecba5e558261 /spec | |
parent | 975167856ed0b11c2ede03c6eb750ca4e4a6a7fc (diff) | |
download | yuescript-52a6536103f46c26a3ba9b149b0fe7b40d524d8c.tar.gz yuescript-52a6536103f46c26a3ba9b149b0fe7b40d524d8c.tar.bz2 yuescript-52a6536103f46c26a3ba9b149b0fe7b40d524d8c.zip |
update.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/inputs/assign.moon | 30 | ||||
-rw-r--r-- | spec/inputs/bubbling.moon | 28 | ||||
-rw-r--r-- | spec/inputs/class.moon | 213 | ||||
-rw-r--r-- | spec/inputs/comprehension.moon | 52 | ||||
-rw-r--r-- | spec/inputs/cond.moon | 190 | ||||
-rw-r--r-- | spec/inputs/destructure.moon | 100 | ||||
-rw-r--r-- | spec/inputs/do.moon | 27 | ||||
-rw-r--r-- | spec/inputs/export.moon | 77 | ||||
-rw-r--r-- | spec/inputs/funcs.moon | 158 | ||||
-rw-r--r-- | spec/inputs/import.moon | 48 | ||||
-rw-r--r-- | spec/inputs/lists.moon | 72 | ||||
-rw-r--r-- | spec/inputs/literals.moon | 46 | ||||
-rw-r--r-- | spec/inputs/local.moon | 94 | ||||
-rw-r--r-- | spec/inputs/loops.moon | 133 | ||||
-rw-r--r-- | spec/inputs/operators.moon | 72 | ||||
-rw-r--r-- | spec/inputs/plus.moon | 7 | ||||
-rw-r--r-- | spec/inputs/return.moon | 55 | ||||
-rw-r--r-- | spec/inputs/string.moon | 66 | ||||
-rw-r--r-- | spec/inputs/stub.moon | 16 | ||||
-rw-r--r-- | spec/inputs/switch.moon | 64 | ||||
-rw-r--r-- | spec/inputs/syntax.moon | 272 | ||||
-rw-r--r-- | spec/inputs/tables.moon | 161 | ||||
-rw-r--r-- | spec/inputs/unless_else.moon | 5 | ||||
-rw-r--r-- | spec/inputs/using.moon | 21 | ||||
-rw-r--r-- | spec/inputs/whitespace.moon | 102 | ||||
-rw-r--r-- | spec/inputs/with.moon | 118 |
26 files changed, 2227 insertions, 0 deletions
diff --git a/spec/inputs/assign.moon b/spec/inputs/assign.moon new file mode 100644 index 0000000..1e5e7a6 --- /dev/null +++ b/spec/inputs/assign.moon | |||
@@ -0,0 +1,30 @@ | |||
1 | |||
2 | -> | ||
3 | joop = 2302 | ||
4 | |||
5 | (hi) -> | ||
6 | d = 100 | ||
7 | hi = 1021 | ||
8 | |||
9 | a,b,c,d = 1,2,3,4 | ||
10 | |||
11 | hello[232], (5+5)[121], hello, x[99] = 100, 200, 300 | ||
12 | |||
13 | joop = 12 | ||
14 | |||
15 | joop = 2345 | ||
16 | |||
17 | a, b = if hello | ||
18 | "hello" | ||
19 | else | ||
20 | "nothing", "yeah" | ||
21 | |||
22 | |||
23 | a, b = if hello | ||
24 | if yeah then "one", "two" else "mmhh" | ||
25 | else | ||
26 | print "the other" | ||
27 | "nothing", "yeah" | ||
28 | |||
29 | |||
30 | |||
diff --git a/spec/inputs/bubbling.moon b/spec/inputs/bubbling.moon new file mode 100644 index 0000000..d1004f9 --- /dev/null +++ b/spec/inputs/bubbling.moon | |||
@@ -0,0 +1,28 @@ | |||
1 | |||
2 | -- vararg bubbling | ||
3 | f = (...) -> #{...} | ||
4 | |||
5 | dont_bubble = -> | ||
6 | [x for x in ((...)-> print ...)("hello")] | ||
7 | |||
8 | k = [x for x in ((...)-> print ...)("hello")] | ||
9 | |||
10 | j = for i=1,10 | ||
11 | (...) -> print ... | ||
12 | |||
13 | -- bubble me | ||
14 | |||
15 | m = (...) -> | ||
16 | [x for x in *{...} when f(...) > 4] | ||
17 | |||
18 | x = for i in *{...} do i | ||
19 | y = [x for x in *{...}] | ||
20 | z = [x for x in hallo when f(...) > 4] | ||
21 | |||
22 | |||
23 | a = for i=1,10 do ... | ||
24 | |||
25 | b = for i=1,10 | ||
26 | -> print ... | ||
27 | |||
28 | |||
diff --git a/spec/inputs/class.moon b/spec/inputs/class.moon new file mode 100644 index 0000000..9a98055 --- /dev/null +++ b/spec/inputs/class.moon | |||
@@ -0,0 +1,213 @@ | |||
1 | |||
2 | class Hello | ||
3 | new: (@test, @world) => | ||
4 | print "creating object.." | ||
5 | hello: => | ||
6 | print @test, @world | ||
7 | __tostring: => "hello world" | ||
8 | |||
9 | x = Hello 1,2 | ||
10 | x\hello() | ||
11 | |||
12 | print x | ||
13 | |||
14 | class Simple | ||
15 | cool: => print "cool" | ||
16 | |||
17 | class Yikes extends Simple | ||
18 | new: => print "created hello" | ||
19 | |||
20 | x = Yikes() | ||
21 | x\cool() | ||
22 | |||
23 | |||
24 | class Hi | ||
25 | new: (arg) => | ||
26 | print "init arg", arg | ||
27 | |||
28 | cool: (num) => | ||
29 | print "num", num | ||
30 | |||
31 | |||
32 | class Simple extends Hi | ||
33 | new: => super "man" | ||
34 | cool: => super 120302 | ||
35 | |||
36 | x = Simple() | ||
37 | x\cool() | ||
38 | |||
39 | print x.__class == Simple | ||
40 | |||
41 | |||
42 | class Okay | ||
43 | -- what is going on | ||
44 | something: 20323 | ||
45 | -- yeaha | ||
46 | |||
47 | |||
48 | class Biggie extends Okay | ||
49 | something: => | ||
50 | super 1,2,3,4 | ||
51 | super.something another_self, 1,2,3,4 | ||
52 | assert super == Okay | ||
53 | |||
54 | |||
55 | class Yeah | ||
56 | okay: => | ||
57 | super\something 1,2,3,4 | ||
58 | |||
59 | |||
60 | class What | ||
61 | something: => print "val:", @val | ||
62 | |||
63 | class Hello extends What | ||
64 | val: 2323 | ||
65 | something: => super\something | ||
66 | |||
67 | with Hello! | ||
68 | x = \something! | ||
69 | print x | ||
70 | x! | ||
71 | |||
72 | class CoolSuper | ||
73 | hi: => | ||
74 | super(1,2,3,4) 1,2,3,4 | ||
75 | super.something 1,2,3,4 | ||
76 | super.something(1,2,3,4).world | ||
77 | super\yeah"world".okay hi, hi, hi | ||
78 | something.super | ||
79 | super.super.super.super | ||
80 | super\hello | ||
81 | nil | ||
82 | |||
83 | |||
84 | -- selfing | ||
85 | x = @hello | ||
86 | x = @@hello | ||
87 | |||
88 | @hello "world" | ||
89 | @@hello "world" | ||
90 | |||
91 | @@one @@two(4,5) @three, @four | ||
92 | |||
93 | xx = (@hello, @@world, cool) -> | ||
94 | |||
95 | |||
96 | -- class properties | ||
97 | class ClassMan | ||
98 | @yeah: 343 | ||
99 | blue: => | ||
100 | @hello: 3434, @world: 23423 | ||
101 | green: => | ||
102 | @red: => | ||
103 | |||
104 | |||
105 | x = @ | ||
106 | y = @@ | ||
107 | |||
108 | @ something | ||
109 | |||
110 | @@ something | ||
111 | |||
112 | @ = @ + @ / @ | ||
113 | |||
114 | @ = 343 | ||
115 | @.hello 2,3,4 | ||
116 | |||
117 | hello[@].world | ||
118 | |||
119 | |||
120 | class Whacko | ||
121 | @hello | ||
122 | if something | ||
123 | print "hello world" | ||
124 | |||
125 | hello = "world" | ||
126 | @another = "day" | ||
127 | |||
128 | print "yeah" if something -- this is briken | ||
129 | |||
130 | |||
131 | print "hello" | ||
132 | |||
133 | yyy = -> | ||
134 | class Cool | ||
135 | nil | ||
136 | |||
137 | |||
138 | -- | ||
139 | |||
140 | class a.b.c.D | ||
141 | nil | ||
142 | |||
143 | |||
144 | class a.b["hello"] | ||
145 | nil | ||
146 | |||
147 | class (-> require "moon")!.Something extends Hello.World | ||
148 | nil | ||
149 | |||
150 | -- | ||
151 | |||
152 | a = class | ||
153 | b = class Something | ||
154 | c = class Something extends Hello | ||
155 | d = class extends World | ||
156 | |||
157 | print (class WhatsUp).__name | ||
158 | |||
159 | -- | ||
160 | |||
161 | export ^ | ||
162 | class Something | ||
163 | nil | ||
164 | |||
165 | |||
166 | -- | ||
167 | |||
168 | -- hoisting | ||
169 | class Something | ||
170 | val = 23 | ||
171 | {:insert} = table | ||
172 | new: => print insert, val -- prints nil 23 | ||
173 | |||
174 | -- | ||
175 | |||
176 | class X | ||
177 | new: hi | ||
178 | |||
179 | |||
180 | -- | ||
181 | |||
182 | class Cool extends Thing | ||
183 | dang: => | ||
184 | { | ||
185 | hello: -> super! | ||
186 | world: -> super.one | ||
187 | } | ||
188 | |||
189 | -- | ||
190 | |||
191 | class Whack extends Thing | ||
192 | dang: do_something => | ||
193 | super! | ||
194 | |||
195 | --- | ||
196 | |||
197 | class Wowha extends Thing | ||
198 | @butt: -> | ||
199 | super! | ||
200 | super.hello | ||
201 | super\hello! | ||
202 | super\hello | ||
203 | |||
204 | |||
205 | @zone: cool { | ||
206 | -> | ||
207 | super! | ||
208 | super.hello | ||
209 | super\hello! | ||
210 | super\hello | ||
211 | } | ||
212 | |||
213 | nil | ||
diff --git a/spec/inputs/comprehension.moon b/spec/inputs/comprehension.moon new file mode 100644 index 0000000..1609d79 --- /dev/null +++ b/spec/inputs/comprehension.moon | |||
@@ -0,0 +1,52 @@ | |||
1 | |||
2 | -- see lists.moon for list comprehension tests | ||
3 | |||
4 | items = {1,2,3,4,5,6} | ||
5 | out = {k,k*2 for k in items} | ||
6 | |||
7 | |||
8 | x = hello: "world", okay: 2323 | ||
9 | |||
10 | copy = {k,v for k,v in pairs x when k != "okay"} | ||
11 | |||
12 | -- | ||
13 | |||
14 | { unpack(x) for x in yes } | ||
15 | { unpack(x) for x in *yes } | ||
16 | |||
17 | { xxxx for x in yes } | ||
18 | { unpack [a*i for i, a in ipairs x] for x in *{{1,2}, {3,4}} } | ||
19 | |||
20 | |||
21 | -- | ||
22 | |||
23 | n1 = [i for i=1,10] | ||
24 | n2 = [i for i=1,10 when i % 2 == 1] | ||
25 | |||
26 | aa = [{x,y} for x=1,10 for y=5,14] | ||
27 | bb = [y for thing in y for i=1,10] | ||
28 | cc = [y for i=1,10 for thing in y] | ||
29 | dd = [y for i=1,10 when cool for thing in y when x > 3 when c + 3] | ||
30 | |||
31 | {"hello", "world" for i=1,10} | ||
32 | |||
33 | -- | ||
34 | |||
35 | j = [a for {a,b,c} in things] | ||
36 | k = [a for {a,b,c} in *things] | ||
37 | i = [hello for {:hello, :world} in *things] | ||
38 | |||
39 | hj = {a,c for {a,b,c} in things} | ||
40 | hk = {a,c for {a,b,c} in *things} | ||
41 | hi = {hello,world for {:hello, :world} in *things} | ||
42 | |||
43 | ok(a,b,c) for {a,b,c} in things | ||
44 | |||
45 | -- | ||
46 | |||
47 | [item for item in *items[1 + 2,3+4]] | ||
48 | [item for item in *items[hello! * 4, 2 - thing[4]]] | ||
49 | |||
50 | |||
51 | |||
52 | nil | ||
diff --git a/spec/inputs/cond.moon b/spec/inputs/cond.moon new file mode 100644 index 0000000..18e42b9 --- /dev/null +++ b/spec/inputs/cond.moon | |||
@@ -0,0 +1,190 @@ | |||
1 | |||
2 | you_cool = false | ||
3 | |||
4 | if cool | ||
5 | if you_cool | ||
6 | one | ||
7 | else if eatdic | ||
8 | yeah | ||
9 | else | ||
10 | two | ||
11 | three | ||
12 | else | ||
13 | no | ||
14 | |||
15 | if cool then no | ||
16 | if cool then no else yes | ||
17 | |||
18 | if cool then wow cool else | ||
19 | noso cool | ||
20 | |||
21 | if working | ||
22 | if cool then if cool then okay else what else nah | ||
23 | |||
24 | |||
25 | if yeah then no day elseif cool me then okay ya else u way | ||
26 | if yeah then no dad else if cool you then okay bah else p way | ||
27 | |||
28 | |||
29 | if (->)() then what ever | ||
30 | |||
31 | if nil then flip me else | ||
32 | it be,rad | ||
33 | |||
34 | |||
35 | if things great then no way elseif okay sure | ||
36 | what here | ||
37 | |||
38 | |||
39 | if things then no chance | ||
40 | elseif okay | ||
41 | what now | ||
42 | |||
43 | |||
44 | if things | ||
45 | yes man | ||
46 | elseif okay person then hi there else hmm sure | ||
47 | |||
48 | if lets go | ||
49 | print "greetings" | ||
50 | elseif "just us" | ||
51 | print "will smith" else show 5555555 | ||
52 | |||
53 | -- | ||
54 | |||
55 | if something = 10 | ||
56 | print something | ||
57 | else | ||
58 | print "else" | ||
59 | |||
60 | hello = if something = 10 | ||
61 | print something | ||
62 | else | ||
63 | print "else" | ||
64 | |||
65 | |||
66 | hello = 5 + if something = 10 | ||
67 | print something | ||
68 | |||
69 | --- | ||
70 | |||
71 | z = false | ||
72 | |||
73 | if false | ||
74 | one | ||
75 | elseif x = true | ||
76 | two | ||
77 | elseif z = true | ||
78 | three | ||
79 | else | ||
80 | four | ||
81 | |||
82 | |||
83 | out = if false | ||
84 | one | ||
85 | elseif x = true | ||
86 | two | ||
87 | elseif z = true | ||
88 | three | ||
89 | else | ||
90 | four | ||
91 | |||
92 | kzy = -> | ||
93 | if something = true | ||
94 | 1 | ||
95 | elseif another = false | ||
96 | 2 | ||
97 | |||
98 | --- | ||
99 | |||
100 | unless true | ||
101 | print "cool!" | ||
102 | |||
103 | unless true and false | ||
104 | print "cool!" | ||
105 | |||
106 | unless false then print "cool!" | ||
107 | unless false then print "cool!" else print "no way!" | ||
108 | |||
109 | unless nil | ||
110 | print "hello" | ||
111 | else | ||
112 | print "world" | ||
113 | |||
114 | -- | ||
115 | |||
116 | x = unless true | ||
117 | print "cool!" | ||
118 | |||
119 | x = unless true and false | ||
120 | print "cool!" | ||
121 | |||
122 | y = unless false then print "cool!" | ||
123 | y = unless false then print "cool!" else print "no way!" | ||
124 | |||
125 | z = unless nil | ||
126 | print "hello" | ||
127 | else | ||
128 | print "world" | ||
129 | |||
130 | print unless true | ||
131 | print "cool!" | ||
132 | |||
133 | print unless true and false | ||
134 | print "cool!" | ||
135 | |||
136 | print unless false then print "cool!" | ||
137 | print unless false then print "cool!" else print "no way!" | ||
138 | |||
139 | print unless nil | ||
140 | print "hello" | ||
141 | else | ||
142 | print "world" | ||
143 | |||
144 | -- | ||
145 | |||
146 | print "hello" unless value | ||
147 | |||
148 | dddd = {1,2,3} unless value | ||
149 | |||
150 | |||
151 | -- | ||
152 | |||
153 | do | ||
154 | j = 100 | ||
155 | unless j = hi! | ||
156 | error "not j!" | ||
157 | |||
158 | ---------------- | ||
159 | |||
160 | a = 12 | ||
161 | a,c,b = "cool" if something | ||
162 | |||
163 | |||
164 | |||
165 | --- | ||
166 | |||
167 | j = if 1 | ||
168 | if 2 | ||
169 | 3 | ||
170 | else 6 | ||
171 | |||
172 | |||
173 | m = if 1 | ||
174 | |||
175 | |||
176 | |||
177 | if 2 | ||
178 | |||
179 | |||
180 | 3 | ||
181 | |||
182 | |||
183 | else 6 | ||
184 | |||
185 | |||
186 | |||
187 | nil | ||
188 | |||
189 | |||
190 | |||
diff --git a/spec/inputs/destructure.moon b/spec/inputs/destructure.moon new file mode 100644 index 0000000..beb79d6 --- /dev/null +++ b/spec/inputs/destructure.moon | |||
@@ -0,0 +1,100 @@ | |||
1 | |||
2 | do | ||
3 | {a, b} = hello | ||
4 | |||
5 | {{a}, b, {c}} = hello | ||
6 | |||
7 | { :hello, :world } = value | ||
8 | |||
9 | do | ||
10 | { yes: no, thing } = world | ||
11 | |||
12 | {:a,:b,:c,:d} = yeah | ||
13 | |||
14 | {a} = one, two | ||
15 | {b}, c = one | ||
16 | {d}, e = one, two | ||
17 | |||
18 | x, {y} = one, two | ||
19 | |||
20 | xx, yy = 1, 2 | ||
21 | {yy, xx} = {xx, yy} | ||
22 | |||
23 | {a, :b, c, :d, e, :f, g} = tbl | ||
24 | |||
25 | --- | ||
26 | |||
27 | do | ||
28 | futurists = | ||
29 | sculptor: "Umberto Boccioni" | ||
30 | painter: "Vladimir Burliuk" | ||
31 | poet: | ||
32 | name: "F.T. Marinetti" | ||
33 | address: { | ||
34 | "Via Roma 42R" | ||
35 | "Bellagio, Italy 22021" | ||
36 | } | ||
37 | |||
38 | {poet: {:name, address: {street, city}}} = futurists | ||
39 | |||
40 | -- | ||
41 | |||
42 | do | ||
43 | { @world } = x | ||
44 | { a.b, c.y, func!.z } = x | ||
45 | |||
46 | { world: @world } = x | ||
47 | |||
48 | -- | ||
49 | |||
50 | do | ||
51 | thing = {{1,2}, {3,4}} | ||
52 | |||
53 | for {x,y} in *thing | ||
54 | print x,y | ||
55 | |||
56 | |||
57 | -- | ||
58 | |||
59 | do | ||
60 | with {a,b} = thing | ||
61 | print a, b | ||
62 | |||
63 | |||
64 | -- | ||
65 | |||
66 | do | ||
67 | thing = nil | ||
68 | if {a} = thing | ||
69 | print a | ||
70 | else | ||
71 | print "nothing" | ||
72 | |||
73 | thang = {1,2} | ||
74 | if {a,b} = thang | ||
75 | print a,b | ||
76 | |||
77 | if {a,b} = thing | ||
78 | print a,b | ||
79 | elseif {c,d} = thang | ||
80 | print c,d | ||
81 | else | ||
82 | print "NO" | ||
83 | |||
84 | -- | ||
85 | |||
86 | do | ||
87 | z = "yeah" | ||
88 | {a,b,c} = z | ||
89 | |||
90 | do | ||
91 | {a,b,c} = z | ||
92 | |||
93 | (z) -> | ||
94 | {a,b,c} = z | ||
95 | |||
96 | do | ||
97 | z = "oo" | ||
98 | (k) -> | ||
99 | {a,b,c} = z | ||
100 | |||
diff --git a/spec/inputs/do.moon b/spec/inputs/do.moon new file mode 100644 index 0000000..334e68f --- /dev/null +++ b/spec/inputs/do.moon | |||
@@ -0,0 +1,27 @@ | |||
1 | |||
2 | do | ||
3 | print "hello" | ||
4 | print "world" | ||
5 | |||
6 | x = do | ||
7 | print "hello" | ||
8 | print "world" | ||
9 | |||
10 | y = do | ||
11 | things = "shhh" | ||
12 | -> "hello: " .. things | ||
13 | |||
14 | -> if something then do "yeah" | ||
15 | |||
16 | t = { | ||
17 | y: do | ||
18 | number = 100 | ||
19 | (x) -> x + number | ||
20 | } | ||
21 | |||
22 | (y=(do | ||
23 | x = 10 + 2 | ||
24 | x), k=do | ||
25 | "nothing") -> do | ||
26 | "uhhh" | ||
27 | |||
diff --git a/spec/inputs/export.moon b/spec/inputs/export.moon new file mode 100644 index 0000000..0a56379 --- /dev/null +++ b/spec/inputs/export.moon | |||
@@ -0,0 +1,77 @@ | |||
1 | |||
2 | do | ||
3 | export a,b,c = 223, 343 | ||
4 | export cool = "dad" | ||
5 | |||
6 | do | ||
7 | export class Something | ||
8 | umm: "cool" | ||
9 | |||
10 | do | ||
11 | export a,b,c | ||
12 | a,b,c,d = "hello" | ||
13 | |||
14 | |||
15 | do | ||
16 | What = if this | ||
17 | 232 | ||
18 | else | ||
19 | 4343 | ||
20 | |||
21 | export ^ | ||
22 | |||
23 | another = 3434 | ||
24 | Another = 7890 | ||
25 | |||
26 | if inner then Yeah = "10000" | ||
27 | |||
28 | What = if this | ||
29 | 232 | ||
30 | else | ||
31 | 4343 | ||
32 | |||
33 | |||
34 | do | ||
35 | export * | ||
36 | |||
37 | What = if this | ||
38 | 232 | ||
39 | else | ||
40 | 4343 | ||
41 | |||
42 | x,y,z = 1,2,3 | ||
43 | |||
44 | y = -> | ||
45 | hallo = 3434 | ||
46 | |||
47 | with tmp | ||
48 | j = 2000 | ||
49 | |||
50 | |||
51 | do | ||
52 | export * | ||
53 | x = 3434 | ||
54 | if y then | ||
55 | x = 10 | ||
56 | |||
57 | do | ||
58 | export * | ||
59 | if y then | ||
60 | x = 10 | ||
61 | x = 3434 | ||
62 | |||
63 | do | ||
64 | do | ||
65 | export * | ||
66 | |||
67 | k = 1212 | ||
68 | |||
69 | do | ||
70 | h = 100 | ||
71 | |||
72 | y = -> | ||
73 | h = 100 | ||
74 | k = 100 | ||
75 | |||
76 | h = 100 | ||
77 | |||
diff --git a/spec/inputs/funcs.moon b/spec/inputs/funcs.moon new file mode 100644 index 0000000..08a29b6 --- /dev/null +++ b/spec/inputs/funcs.moon | |||
@@ -0,0 +1,158 @@ | |||
1 | |||
2 | |||
3 | x = -> print what | ||
4 | |||
5 | -> | ||
6 | |||
7 | -> -> -> | ||
8 | |||
9 | go to the barn | ||
10 | |||
11 | open -> the -> door | ||
12 | |||
13 | open -> | ||
14 | the door | ||
15 | hello = -> | ||
16 | my func | ||
17 | |||
18 | h = -> hi | ||
19 | |||
20 | eat ->, world | ||
21 | |||
22 | |||
23 | (->)() | ||
24 | |||
25 | x = (...) -> | ||
26 | |||
27 | hello! | ||
28 | hello.world! | ||
29 | |||
30 | hello!.something | ||
31 | what!["ofefe"] | ||
32 | |||
33 | what! the! heck! | ||
34 | |||
35 | (a,b,c,d,e) -> | ||
36 | |||
37 | (a,a,a,a,a) -> | ||
38 | print a | ||
39 | |||
40 | (x=23023) -> | ||
41 | |||
42 | (x=(y=()->) ->) -> | ||
43 | |||
44 | (x = if something then yeah else no) -> | ||
45 | |||
46 | something = (hello=100, world=(x=[[yeah cool]])-> print "eat rice") -> | ||
47 | print hello | ||
48 | |||
49 | (x, y) => | ||
50 | (@x, @y) => | ||
51 | (x=1) => | ||
52 | (@x=1,y,@z="hello world") => | ||
53 | |||
54 | |||
55 | x -> return | ||
56 | y -> return 1 | ||
57 | z -> return 1, "hello", "world" | ||
58 | k -> if yes then return else return | ||
59 | |||
60 | -> real_name if something | ||
61 | |||
62 | -- | ||
63 | |||
64 | d( | ||
65 | -> | ||
66 | print "hello world" | ||
67 | 10 | ||
68 | ) | ||
69 | |||
70 | |||
71 | |||
72 | d( | ||
73 | 1,2,3 | ||
74 | 4 | ||
75 | 5 | ||
76 | 6 | ||
77 | |||
78 | if something | ||
79 | print "okay" | ||
80 | 10 | ||
81 | |||
82 | 10,20 | ||
83 | ) | ||
84 | |||
85 | |||
86 | f( | ||
87 | |||
88 | )( | ||
89 | |||
90 | )( | ||
91 | what | ||
92 | )(-> | ||
93 | print "srue" | ||
94 | 123) | ||
95 | |||
96 | -- | ||
97 | |||
98 | x = (a, | ||
99 | b) -> | ||
100 | print "what" | ||
101 | |||
102 | |||
103 | y = (a="hi", | ||
104 | b=23) -> | ||
105 | print "what" | ||
106 | |||
107 | z = ( | ||
108 | a="hi", | ||
109 | b=23) -> | ||
110 | print "what" | ||
111 | |||
112 | |||
113 | j = (f,g,m, | ||
114 | a="hi", | ||
115 | b=23 | ||
116 | ) -> | ||
117 | print "what" | ||
118 | |||
119 | |||
120 | y = (a="hi", | ||
121 | b=23, | ||
122 | ...) -> | ||
123 | print "what" | ||
124 | |||
125 | |||
126 | y = (a="hi", | ||
127 | b=23, | ||
128 | ... | ||
129 | ) -> | ||
130 | print "what" | ||
131 | |||
132 | -- | ||
133 | |||
134 | args = (a | ||
135 | b) -> | ||
136 | print "what" | ||
137 | |||
138 | |||
139 | args = (a="hi" | ||
140 | b=23) -> | ||
141 | print "what" | ||
142 | |||
143 | args = ( | ||
144 | a="hi" | ||
145 | b=23) -> | ||
146 | print "what" | ||
147 | |||
148 | |||
149 | args = (f,g,m | ||
150 | a="hi" | ||
151 | b=23 | ||
152 | ) -> | ||
153 | print "what" | ||
154 | |||
155 | |||
156 | |||
157 | |||
158 | nil | ||
diff --git a/spec/inputs/import.moon b/spec/inputs/import.moon new file mode 100644 index 0000000..d86d724 --- /dev/null +++ b/spec/inputs/import.moon | |||
@@ -0,0 +1,48 @@ | |||
1 | |||
2 | |||
3 | import hello from yeah | ||
4 | import hello, world from table["cool"] | ||
5 | |||
6 | import a, \b, c from items | ||
7 | |||
8 | |||
9 | import master, \ghost from find "mytable" | ||
10 | |||
11 | |||
12 | a, yumm = 3434, "hello" | ||
13 | |||
14 | |||
15 | _table_0 = 232 | ||
16 | |||
17 | import something from a table | ||
18 | |||
19 | |||
20 | if indent | ||
21 | import okay, \well from tables[100] | ||
22 | |||
23 | do | ||
24 | import a, b, c from z | ||
25 | |||
26 | do | ||
27 | import a, | ||
28 | b, c from z | ||
29 | |||
30 | do | ||
31 | import a | ||
32 | b | ||
33 | c from z | ||
34 | |||
35 | do | ||
36 | import | ||
37 | a | ||
38 | b | ||
39 | c from z | ||
40 | |||
41 | |||
42 | do | ||
43 | import | ||
44 | a | ||
45 | b | ||
46 | c | ||
47 | from z | ||
48 | |||
diff --git a/spec/inputs/lists.moon b/spec/inputs/lists.moon new file mode 100644 index 0000000..c119185 --- /dev/null +++ b/spec/inputs/lists.moon | |||
@@ -0,0 +1,72 @@ | |||
1 | |||
2 | hi = [x*2 for _, x in ipairs{1,2,3,4}] | ||
3 | |||
4 | items = {1,2,3,4,5,6} | ||
5 | |||
6 | [z for z in ipairs items when z > 4] | ||
7 | |||
8 | rad = [{a} for a in ipairs { | ||
9 | 1,2,3,4,5,6, | ||
10 | } when good_number a] | ||
11 | |||
12 | |||
13 | [z for z in items for j in list when z > 4] | ||
14 | |||
15 | require "util" | ||
16 | |||
17 | dump = (x) -> print util.dump x | ||
18 | |||
19 | range = (count) -> | ||
20 | i = 0 | ||
21 | return coroutine.wrap -> | ||
22 | while i < count | ||
23 | coroutine.yield i | ||
24 | i = i + 1 | ||
25 | |||
26 | dump [x for x in range 10] | ||
27 | dump [{x, y} for x in range 5 when x > 2 for y in range 5] | ||
28 | |||
29 | things = [x + y for x in range 10 when x > 5 for y in range 10 when y > 7] | ||
30 | |||
31 | print x,y for x in ipairs{1,2,4} for y in ipairs{1,2,3} when x != 2 | ||
32 | |||
33 | print "hello", x for x in items | ||
34 | |||
35 | [x for x in x] | ||
36 | x = [x for x in x] | ||
37 | |||
38 | print x,y for x in ipairs{1,2,4} for y in ipairs{1,2,3} when x != 2 | ||
39 | |||
40 | double = [x*2 for x in *items] | ||
41 | |||
42 | print x for x in *double | ||
43 | |||
44 | cut = [x for x in *items when x > 3] | ||
45 | |||
46 | hello = [x + y for x in *items for y in *items] | ||
47 | |||
48 | print z for z in *hello | ||
49 | |||
50 | |||
51 | -- slice | ||
52 | x = {1, 2, 3, 4, 5, 6, 7} | ||
53 | print y for y in *x[2,-5,2] | ||
54 | print y for y in *x[,3] | ||
55 | print y for y in *x[2,] | ||
56 | print y for y in *x[,,2] | ||
57 | print y for y in *x[2,,2] | ||
58 | |||
59 | a, b, c = 1, 5, 2 | ||
60 | print y for y in *x[a,b,c] | ||
61 | |||
62 | |||
63 | normal = (hello) -> | ||
64 | [x for x in yeah] | ||
65 | |||
66 | |||
67 | test = x 1,2,3,4,5 | ||
68 | print thing for thing in *test | ||
69 | |||
70 | -> a = b for row in *rows | ||
71 | |||
72 | |||
diff --git a/spec/inputs/literals.moon b/spec/inputs/literals.moon new file mode 100644 index 0000000..c3a24a6 --- /dev/null +++ b/spec/inputs/literals.moon | |||
@@ -0,0 +1,46 @@ | |||
1 | |||
2 | |||
3 | 121 | ||
4 | 121.2323 | ||
5 | 121.2323e-1 | ||
6 | 121.2323e13434 | ||
7 | 2323E34 | ||
8 | 0x12323 | ||
9 | |||
10 | 0xfF2323 | ||
11 | 0xabcdef | ||
12 | 0xABCDEF | ||
13 | |||
14 | .2323 | ||
15 | .2323e-1 | ||
16 | .2323e13434 | ||
17 | |||
18 | |||
19 | 1LL | ||
20 | 1ULL | ||
21 | 9332LL | ||
22 | 9332 | ||
23 | 0x2aLL | ||
24 | 0x2aULL | ||
25 | |||
26 | [[ hello world ]] | ||
27 | |||
28 | [=[ hello world ]=] | ||
29 | [====[ hello world ]====] | ||
30 | |||
31 | "another world" | ||
32 | |||
33 | 'what world' | ||
34 | |||
35 | |||
36 | " | ||
37 | hello world | ||
38 | " | ||
39 | |||
40 | 'yeah | ||
41 | what is going on | ||
42 | here is something cool' | ||
43 | |||
44 | |||
45 | nil | ||
46 | |||
diff --git a/spec/inputs/local.moon b/spec/inputs/local.moon new file mode 100644 index 0000000..fec78b1 --- /dev/null +++ b/spec/inputs/local.moon | |||
@@ -0,0 +1,94 @@ | |||
1 | |||
2 | do | ||
3 | local a | ||
4 | local a,b,c | ||
5 | |||
6 | b,g = 23232 | ||
7 | |||
8 | |||
9 | do | ||
10 | x = 1212 | ||
11 | something = -> | ||
12 | local x | ||
13 | x = 1212 | ||
14 | |||
15 | do | ||
16 | local * | ||
17 | y = 2323 | ||
18 | z = 2323 | ||
19 | |||
20 | do | ||
21 | local * | ||
22 | print "Nothing Here!" | ||
23 | |||
24 | do | ||
25 | local ^ | ||
26 | x = 3434 | ||
27 | y = 3434 | ||
28 | X = 3434 | ||
29 | Y = "yeah" | ||
30 | |||
31 | do | ||
32 | local ^ | ||
33 | x,y = "a", "b" | ||
34 | |||
35 | do | ||
36 | local * | ||
37 | x,y = "a", "b" | ||
38 | |||
39 | |||
40 | do | ||
41 | local * | ||
42 | if something | ||
43 | x = 2323 | ||
44 | |||
45 | do | ||
46 | local * | ||
47 | do | ||
48 | x = "one" | ||
49 | |||
50 | x = 100 | ||
51 | |||
52 | do | ||
53 | x = "two" | ||
54 | |||
55 | do | ||
56 | local * | ||
57 | k = if what | ||
58 | 10 | ||
59 | x = 100 | ||
60 | |||
61 | {:a,:b, :c} = y | ||
62 | |||
63 | |||
64 | do | ||
65 | local * | ||
66 | |||
67 | a = 100 | ||
68 | print "hi" | ||
69 | b = 200 | ||
70 | |||
71 | local * | ||
72 | c = 100 | ||
73 | print "hi" | ||
74 | d = 200 | ||
75 | d = 2323 | ||
76 | |||
77 | |||
78 | do | ||
79 | local ^ | ||
80 | lowercase = 5 | ||
81 | Uppercase = 3 | ||
82 | |||
83 | class One | ||
84 | Five = 6 | ||
85 | |||
86 | class Two | ||
87 | class No | ||
88 | |||
89 | do | ||
90 | local * | ||
91 | -- this generates a nil value in the body | ||
92 | for a in *{} do a | ||
93 | |||
94 | g = 2323 -- test if anything leaked | ||
diff --git a/spec/inputs/loops.moon b/spec/inputs/loops.moon new file mode 100644 index 0000000..a704e56 --- /dev/null +++ b/spec/inputs/loops.moon | |||
@@ -0,0 +1,133 @@ | |||
1 | |||
2 | for x=1,10 | ||
3 | print "yeah" | ||
4 | |||
5 | for x=1,#something | ||
6 | print "yeah" | ||
7 | |||
8 | for y=100,60,-3 | ||
9 | print "count down", y | ||
10 | |||
11 | for a=1,10 do print "okay" | ||
12 | |||
13 | for a=1,10 | ||
14 | for b = 2,43 | ||
15 | print a,b | ||
16 | |||
17 | for i in iter | ||
18 | for j in yeah | ||
19 | x = 343 + i + j | ||
20 | print i, j | ||
21 | |||
22 | for x in *something | ||
23 | print x | ||
24 | |||
25 | for k,v in pairs hello do print k,v | ||
26 | |||
27 | for x in y, z | ||
28 | print x | ||
29 | |||
30 | for x in y, z, k | ||
31 | print x | ||
32 | |||
33 | |||
34 | x = -> | ||
35 | for x in y | ||
36 | y | ||
37 | |||
38 | hello = {1,2,3,4,5} | ||
39 | |||
40 | x = for y in *hello | ||
41 | if y % 2 == 0 | ||
42 | y | ||
43 | |||
44 | x = -> | ||
45 | for x in *hello | ||
46 | y | ||
47 | |||
48 | t = for i=10,20 do i * 2 | ||
49 | |||
50 | hmm = 0 | ||
51 | y = for j = 3,30, 8 | ||
52 | hmm += 1 | ||
53 | j * hmm | ||
54 | |||
55 | -> | ||
56 | for k=10,40 | ||
57 | "okay" | ||
58 | |||
59 | -> | ||
60 | return for k=10,40 | ||
61 | "okay" | ||
62 | |||
63 | while true do print "name" | ||
64 | |||
65 | while 5 + 5 | ||
66 | print "okay world" | ||
67 | working man | ||
68 | |||
69 | while also do | ||
70 | i work too | ||
71 | "okay" | ||
72 | |||
73 | i = 0 | ||
74 | x = while i < 10 | ||
75 | i += 1 | ||
76 | |||
77 | -- values that can'e be coerced | ||
78 | |||
79 | x = for thing in *3 | ||
80 | y = "hello" | ||
81 | |||
82 | x = for x=1,2 | ||
83 | y = "hello" | ||
84 | |||
85 | |||
86 | -- continue | ||
87 | |||
88 | while true | ||
89 | continue if false | ||
90 | print "yes" | ||
91 | break if true | ||
92 | print "no" | ||
93 | |||
94 | |||
95 | for x=1,10 | ||
96 | continue if x > 3 and x < 7 | ||
97 | print x | ||
98 | |||
99 | |||
100 | list = for x=1,10 | ||
101 | continue if x > 3 and x < 7 | ||
102 | x | ||
103 | |||
104 | |||
105 | for a in *{1,2,3,4,5,6} | ||
106 | continue if a == 1 | ||
107 | continue if a == 3 | ||
108 | print a | ||
109 | |||
110 | |||
111 | |||
112 | for x=1,10 | ||
113 | continue if x % 2 == 0 | ||
114 | for y = 2,12 | ||
115 | continue if y % 3 == 0 | ||
116 | |||
117 | |||
118 | while true | ||
119 | continue if false | ||
120 | break | ||
121 | |||
122 | while true | ||
123 | continue if false | ||
124 | return 22 | ||
125 | |||
126 | -- | ||
127 | |||
128 | do | ||
129 | xxx = {1,2,3,4} | ||
130 | for thing in *xxx | ||
131 | print thing | ||
132 | |||
133 | |||
diff --git a/spec/inputs/operators.moon b/spec/inputs/operators.moon new file mode 100644 index 0000000..142ef62 --- /dev/null +++ b/spec/inputs/operators.moon | |||
@@ -0,0 +1,72 @@ | |||
1 | |||
2 | -- binary ops | ||
3 | x = 1 + 3 | ||
4 | |||
5 | y = 1 + | ||
6 | 3 | ||
7 | |||
8 | z = 1 + | ||
9 | 3 + | ||
10 | 4 | ||
11 | |||
12 | -- | ||
13 | |||
14 | k = b and c and | ||
15 | g | ||
16 | |||
17 | |||
18 | h = thing and | ||
19 | -> | ||
20 | print "hello world" | ||
21 | |||
22 | -- TODO: should fail, indent still set to previous line so it thinks body is | ||
23 | -- indented | ||
24 | i = thing or | ||
25 | -> | ||
26 | print "hello world" | ||
27 | |||
28 | p = thing and | ||
29 | -> | ||
30 | print "hello world" | ||
31 | |||
32 | s = thing or | ||
33 | -> and 234 | ||
34 | |||
35 | |||
36 | -- | ||
37 | u = { | ||
38 | color: 1 and 2 and | ||
39 | 3 | ||
40 | 4 | ||
41 | 4 | ||
42 | } | ||
43 | |||
44 | v = { | ||
45 | color: 1 and | ||
46 | -> | ||
47 | "yeah" | ||
48 | "great" | ||
49 | oksy: 3 ^ | ||
50 | 2 | ||
51 | } | ||
52 | |||
53 | -- parens | ||
54 | |||
55 | nno = ( | ||
56 | yeah + 2 ) | ||
57 | |||
58 | nn = ( | ||
59 | yeah + 2 | ||
60 | ) | ||
61 | |||
62 | n = hello( | ||
63 | b | ||
64 | ) -> | ||
65 | |||
66 | hello a, | ||
67 | ( | ||
68 | yeah + | ||
69 | 2 | ||
70 | ) - | ||
71 | okay | ||
72 | |||
diff --git a/spec/inputs/plus.moon b/spec/inputs/plus.moon new file mode 100644 index 0000000..fdca8be --- /dev/null +++ b/spec/inputs/plus.moon | |||
@@ -0,0 +1,7 @@ | |||
1 | |||
2 | func a\do!\end("OK")\if "abc",123 | ||
3 | |||
4 | res = b.function\do!\while("OK")\if "def",998 | ||
5 | |||
6 | c.repeat.if\then("xyz")\else res | ||
7 | |||
diff --git a/spec/inputs/return.moon b/spec/inputs/return.moon new file mode 100644 index 0000000..61d3dca --- /dev/null +++ b/spec/inputs/return.moon | |||
@@ -0,0 +1,55 @@ | |||
1 | -- testing `return` propagation | ||
2 | |||
3 | -> x for x in *things | ||
4 | -> [x for x in *things] | ||
5 | |||
6 | |||
7 | -- doesn't make sense on purpose | ||
8 | do | ||
9 | return x for x in *things | ||
10 | |||
11 | do | ||
12 | return [x for x in *things] | ||
13 | |||
14 | do | ||
15 | return {x,y for x,y in *things} | ||
16 | |||
17 | -> | ||
18 | if a | ||
19 | if a | ||
20 | a | ||
21 | else | ||
22 | b | ||
23 | elseif b | ||
24 | if a | ||
25 | a | ||
26 | else | ||
27 | b | ||
28 | else | ||
29 | if a | ||
30 | a | ||
31 | else | ||
32 | b | ||
33 | |||
34 | |||
35 | do | ||
36 | return if a | ||
37 | if a | ||
38 | a | ||
39 | else | ||
40 | b | ||
41 | elseif b | ||
42 | if a | ||
43 | a | ||
44 | else | ||
45 | b | ||
46 | else | ||
47 | if a | ||
48 | a | ||
49 | else | ||
50 | b | ||
51 | |||
52 | -> a\b | ||
53 | do a\b | ||
54 | |||
55 | |||
diff --git a/spec/inputs/string.moon b/spec/inputs/string.moon new file mode 100644 index 0000000..897056a --- /dev/null +++ b/spec/inputs/string.moon | |||
@@ -0,0 +1,66 @@ | |||
1 | |||
2 | hi = "hello" | ||
3 | hello = "what the heckyes" | ||
4 | print hi | ||
5 | |||
6 | umm = 'umm' | ||
7 | |||
8 | here, another = "yeah", 'world' | ||
9 | |||
10 | aye = "YU'M" | ||
11 | you '"hmmm" I said' | ||
12 | |||
13 | print aye, you | ||
14 | |||
15 | another = [[ hello world ]] | ||
16 | |||
17 | |||
18 | hi_there = [[ | ||
19 | hi there | ||
20 | ]] | ||
21 | |||
22 | well = [==[ "helo" ]==] | ||
23 | |||
24 | hola = [===[ | ||
25 | eat noots]===] | ||
26 | |||
27 | mm = [[well trhere]] | ||
28 | |||
29 | oo = "" | ||
30 | |||
31 | x = "\\" | ||
32 | x = "a\\b" | ||
33 | x = "\\\n" | ||
34 | x = "\"" | ||
35 | |||
36 | -- | ||
37 | |||
38 | a = "hello #{hello} hello" | ||
39 | b = "#{hello} hello" | ||
40 | c = "hello #{5+1}" | ||
41 | d = "#{hello world}" | ||
42 | e = "#{1} #{2} #{3}" | ||
43 | |||
44 | f = [[hello #{world} world]] | ||
45 | |||
46 | -- | ||
47 | |||
48 | a = 'hello #{hello} hello' | ||
49 | b = '#{hello} hello' | ||
50 | c = 'hello #{hello}' | ||
51 | |||
52 | |||
53 | -- | ||
54 | |||
55 | "hello" | ||
56 | "hello"\format 1 | ||
57 | "hello"\format(1,2,3) | ||
58 | "hello"\format(1,2,3) 1,2,3 | ||
59 | |||
60 | "hello"\world! | ||
61 | "hello"\format!.hello 1,2,3 | ||
62 | "hello"\format 1,2,3 | ||
63 | |||
64 | something"hello"\world! | ||
65 | something "hello"\world! | ||
66 | |||
diff --git a/spec/inputs/stub.moon b/spec/inputs/stub.moon new file mode 100644 index 0000000..f8f6c3f --- /dev/null +++ b/spec/inputs/stub.moon | |||
@@ -0,0 +1,16 @@ | |||
1 | |||
2 | |||
3 | x = { | ||
4 | val: 100 | ||
5 | hello: => | ||
6 | print @val | ||
7 | } | ||
8 | |||
9 | fn = x\val | ||
10 | print fn! | ||
11 | print x\val! | ||
12 | |||
13 | |||
14 | -- ... should be bubbled up anon functions | ||
15 | x = hello(...)\world | ||
16 | |||
diff --git a/spec/inputs/switch.moon b/spec/inputs/switch.moon new file mode 100644 index 0000000..3bc179b --- /dev/null +++ b/spec/inputs/switch.moon | |||
@@ -0,0 +1,64 @@ | |||
1 | |||
2 | switch value | ||
3 | when "cool" | ||
4 | print "hello world" | ||
5 | |||
6 | |||
7 | switch value | ||
8 | when "cool" | ||
9 | print "hello world" | ||
10 | else | ||
11 | print "okay rad" | ||
12 | |||
13 | |||
14 | switch value | ||
15 | when "cool" | ||
16 | print "hello world" | ||
17 | when "yeah" | ||
18 | [[FFFF]] + [[MMMM]] | ||
19 | when 2323 + 32434 | ||
20 | print "okay" | ||
21 | else | ||
22 | print "okay rad" | ||
23 | |||
24 | out = switch value | ||
25 | when "cool" then print "hello world" | ||
26 | else print "okay rad" | ||
27 | |||
28 | out = switch value | ||
29 | when "cool" then xxxx | ||
30 | when "umm" then 34340 | ||
31 | else error "this failed big time" | ||
32 | |||
33 | with something | ||
34 | switch \value! | ||
35 | when .okay | ||
36 | "world" | ||
37 | else | ||
38 | "yesh" | ||
39 | |||
40 | fix this | ||
41 | call_func switch something | ||
42 | when 1 then "yes" | ||
43 | else "no" | ||
44 | |||
45 | -- | ||
46 | |||
47 | switch hi | ||
48 | when hello or world | ||
49 | greene | ||
50 | |||
51 | -- | ||
52 | |||
53 | switch hi | ||
54 | when "one", "two" | ||
55 | print "cool" | ||
56 | when "dad" | ||
57 | no | ||
58 | |||
59 | switch hi | ||
60 | when 3+1, hello!, (-> 4)! | ||
61 | yello | ||
62 | else | ||
63 | print "cool" | ||
64 | |||
diff --git a/spec/inputs/syntax.moon b/spec/inputs/syntax.moon new file mode 100644 index 0000000..854f629 --- /dev/null +++ b/spec/inputs/syntax.moon | |||
@@ -0,0 +1,272 @@ | |||
1 | #!/this/is/ignored | ||
2 | |||
3 | a = 1 + 2* 3 / 6 | ||
4 | |||
5 | a, bunch, go, here = another, world | ||
6 | |||
7 | func arg1, arg2, another, arg3 | ||
8 | |||
9 | here, we = () ->, yeah | ||
10 | the, different = () -> approach; yeah | ||
11 | |||
12 | dad() | ||
13 | dad(lord) | ||
14 | hello(one,two)() | ||
15 | (5 + 5)(world) | ||
16 | |||
17 | fun(a)(b) | ||
18 | |||
19 | fun(a) b | ||
20 | |||
21 | fun(a) b, bad hello | ||
22 | |||
23 | hello world what are you doing here | ||
24 | |||
25 | |||
26 | what(the)[3243] world, yeck heck | ||
27 | |||
28 | hairy[hands][are](gross) okay okay[world] | ||
29 | |||
30 | (get[something] + 5)[years] | ||
31 | |||
32 | i,x = 200, 300 | ||
33 | |||
34 | yeah = (1 + 5) * 3 | ||
35 | yeah = ((1+5)*3)/2 | ||
36 | yeah = ((1+5)*3)/2 + i % 100 | ||
37 | |||
38 | whoa = (1+2) * (3+4) * (4+5) | ||
39 | |||
40 | -> | ||
41 | if something | ||
42 | return 1,2,4 | ||
43 | |||
44 | print "hello" | ||
45 | |||
46 | -> | ||
47 | if hello | ||
48 | "heloo", "world" | ||
49 | else | ||
50 | no, way | ||
51 | |||
52 | |||
53 | -> 1,2,34 | ||
54 | |||
55 | return 5 + () -> 4 + 2 | ||
56 | |||
57 | return 5 + (() -> 4) + 2 | ||
58 | |||
59 | print 5 + () -> | ||
60 | 34 | ||
61 | good nads | ||
62 | |||
63 | |||
64 | something 'else', "ya" | ||
65 | |||
66 | something'else' | ||
67 | something"else" | ||
68 | |||
69 | something[[hey]] * 2 | ||
70 | something[======[hey]======] * 2 | ||
71 | |||
72 | |||
73 | something'else', 2 | ||
74 | something"else", 2 | ||
75 | something[[else]], 2 | ||
76 | |||
77 | something 'else', 2 | ||
78 | something "else", 2 | ||
79 | something [[else]], 2 | ||
80 | |||
81 | here(we)"go"[12123] | ||
82 | |||
83 | -- this runs | ||
84 | something = | ||
85 | test: 12323 | ||
86 | what: -> print "hello world" | ||
87 | |||
88 | print something.test | ||
89 | |||
90 | frick = hello: "world" | ||
91 | |||
92 | argon = | ||
93 | num: 100 | ||
94 | world: (self) -> | ||
95 | print self.num | ||
96 | return { | ||
97 | something: -> print "hi from something" | ||
98 | } | ||
99 | somethin: (self, str) -> | ||
100 | print "string is", str | ||
101 | return world: (a,b) -> print "sum", a + b | ||
102 | |||
103 | something.what() | ||
104 | argon\world().something() | ||
105 | |||
106 | argon\somethin"200".world(1,2) | ||
107 | |||
108 | x = -434 | ||
109 | |||
110 | x = -hello world one two | ||
111 | |||
112 | hi = -"herfef" | ||
113 | |||
114 | x = -[x for x in x] | ||
115 | |||
116 | print "hello" if cool | ||
117 | print "hello" unless cool | ||
118 | print "hello" unless 1212 and 3434 -- hello | ||
119 | print "hello" for i=1,10 | ||
120 | |||
121 | print "nutjob" | ||
122 | |||
123 | if hello then 343 | ||
124 | |||
125 | print "what" if cool else whack | ||
126 | |||
127 | arg = {...} | ||
128 | |||
129 | x = (...) -> | ||
130 | dump {...} | ||
131 | |||
132 | |||
133 | x = not true | ||
134 | |||
135 | y = not(5+5) | ||
136 | |||
137 | |||
138 | y = #"hello" | ||
139 | |||
140 | x = #{#{},#{1},#{1,2}} | ||
141 | |||
142 | hello, world | ||
143 | |||
144 | something\hello(what) a,b | ||
145 | something\hello what | ||
146 | something.hello\world a,b | ||
147 | something.hello\world(1,2,3) a,b | ||
148 | |||
149 | |||
150 | x = 1232 | ||
151 | x += 10 + 3 | ||
152 | j -= "hello" | ||
153 | y *= 2 | ||
154 | y /= 100 | ||
155 | m %= 2 | ||
156 | hello ..= "world" | ||
157 | |||
158 | @@something += 10 | ||
159 | @something += 10 | ||
160 | |||
161 | a["hello"] += 10 | ||
162 | a["hello#{tostring ff}"] += 10 | ||
163 | a[four].x += 10 | ||
164 | |||
165 | x = 0 | ||
166 | (if ntype(v) == "fndef" then x += 1) for v in *values | ||
167 | |||
168 | |||
169 | hello = | ||
170 | something: world | ||
171 | if: "hello" | ||
172 | else: 3434 | ||
173 | function: "okay" | ||
174 | good: 230203 | ||
175 | |||
176 | |||
177 | div class: "cool" | ||
178 | |||
179 | 5 + what wack | ||
180 | what whack + 5 | ||
181 | |||
182 | 5 - what wack | ||
183 | what whack - 5 | ||
184 | |||
185 | x = hello - world - something | ||
186 | |||
187 | ((something = with what | ||
188 | \cool 100) -> | ||
189 | print something)! | ||
190 | |||
191 | if something | ||
192 | 03589 | ||
193 | |||
194 | -- okay what about this | ||
195 | |||
196 | else | ||
197 | 3434 | ||
198 | |||
199 | |||
200 | if something | ||
201 | yeah | ||
202 | |||
203 | |||
204 | elseif "ymmm" | ||
205 | |||
206 | print "cool" | ||
207 | |||
208 | else | ||
209 | |||
210 | okay | ||
211 | |||
212 | |||
213 | -- test names containing keywords | ||
214 | x = notsomething | ||
215 | y = ifsomething | ||
216 | z = x and b | ||
217 | z = x andb | ||
218 | |||
219 | |||
220 | -- undelimited tables | ||
221 | |||
222 | while 10 > something | ||
223 | something: "world" | ||
224 | print "yeah" | ||
225 | |||
226 | x = | ||
227 | okay: sure | ||
228 | |||
229 | yeah | ||
230 | okay: man | ||
231 | sure: sir | ||
232 | |||
233 | hello "no comma" | ||
234 | yeah: dada | ||
235 | another: world | ||
236 | |||
237 | hello "comma", | ||
238 | something: hello_world | ||
239 | frick: you | ||
240 | |||
241 | -- creates two tables | ||
242 | another hello, one, | ||
243 | two, three, four, yeah: man | ||
244 | okay: yeah | ||
245 | |||
246 | -- | ||
247 | a += 3 - 5 | ||
248 | a *= 3 + 5 | ||
249 | a *= 3 | ||
250 | a >>= 3 | ||
251 | a <<= 3 | ||
252 | a /= func "cool" | ||
253 | |||
254 | --- | ||
255 | |||
256 | x.then = "hello" | ||
257 | x.while.true = "hello" | ||
258 | |||
259 | -- | ||
260 | |||
261 | x or= "hello" | ||
262 | x and= "hello" | ||
263 | |||
264 | -- | ||
265 | |||
266 | z = a-b | ||
267 | z = a -b | ||
268 | z = a - b | ||
269 | z = a- b | ||
270 | |||
271 | |||
272 | -- cooool | ||
diff --git a/spec/inputs/tables.moon b/spec/inputs/tables.moon new file mode 100644 index 0000000..2bf66d7 --- /dev/null +++ b/spec/inputs/tables.moon | |||
@@ -0,0 +1,161 @@ | |||
1 | |||
2 | backpack = | ||
3 | something: | ||
4 | yeah: 200 | ||
5 | they: -> | ||
6 | print "hello" | ||
7 | yor_feet"small" | ||
8 | pretty: hair | ||
9 | gold: hmm | ||
10 | yow: 1000 | ||
11 | |||
12 | eat: goo | ||
13 | yeah: dudd | ||
14 | |||
15 | |||
16 | start = | ||
17 | something: "cold" | ||
18 | |||
19 | bathe = | ||
20 | on: "fire" | ||
21 | |||
22 | another = | ||
23 | [4]: 232 | ||
24 | ["good food"]: "is the best" | ||
25 | |||
26 | fwip = | ||
27 | something: hello"what", number: 2323, | ||
28 | what: yo "momma", "yeah", | ||
29 | fruit: basket | ||
30 | nuts: day | ||
31 | |||
32 | |||
33 | frick = hello: "world" | ||
34 | |||
35 | frack, best = hello: "world", rice: 3434, "what" | ||
36 | |||
37 | ya = { 1,2,3, key: 100, 343, "hello", umm: 232 } | ||
38 | |||
39 | |||
40 | x = { 1,2, | ||
41 | 4343, 343 ,343 } | ||
42 | |||
43 | |||
44 | g, p = { | ||
45 | 1,2, nowy: "yes", 3,4, | ||
46 | hey: 232, another: "day" | ||
47 | }, 234 | ||
48 | |||
49 | annother = { | ||
50 | 1,2,3 | ||
51 | 3,4,5 | ||
52 | 6,7,8 | ||
53 | } | ||
54 | |||
55 | yeah = { | ||
56 | [232]: 3434, "helo" | ||
57 | ice: "cake" | ||
58 | } | ||
59 | |||
60 | -- confusing stuff... | ||
61 | whatabout = { | ||
62 | hello world, another | ||
63 | what, about, now | ||
64 | |||
65 | hello"world", yeah | ||
66 | hello "world", yeah | ||
67 | } | ||
68 | |||
69 | x = | ||
70 | -- yeah | ||
71 | something: => "hello" | ||
72 | cool: -- umm | ||
73 | --so ething | ||
74 | bed: { | ||
75 | 2323,2323 | ||
76 | } | ||
77 | red: 2343 -- here | ||
78 | -- what | ||
79 | name: (node) => @value node -- here | ||
80 | -- comment me | ||
81 | -- okay | ||
82 | |||
83 | |||
84 | x = { :something, something: something } | ||
85 | |||
86 | y = { | ||
87 | :hi, :there, :how, :you | ||
88 | :thing | ||
89 | } | ||
90 | |||
91 | call_me "hello", :x, :y, :z | ||
92 | |||
93 | t = { | ||
94 | a: 'a' | ||
95 | [b]: 'b' | ||
96 | } | ||
97 | |||
98 | xam = { | ||
99 | hello: 1234 | ||
100 | "hello": 12354 | ||
101 | ["hello"]: 12354 | ||
102 | } | ||
103 | |||
104 | |||
105 | kam = { | ||
106 | hello: 12 | ||
107 | goodcheese: | ||
108 | "mmm" | ||
109 | |||
110 | yeah: | ||
111 | 12 + 232 | ||
112 | |||
113 | lets: | ||
114 | keepit going: true, | ||
115 | okay: "yeah" | ||
116 | |||
117 | more: | ||
118 | { | ||
119 | 1, [x for x=1,10] | ||
120 | } | ||
121 | |||
122 | [{"one", "two"}]: | ||
123 | one_thing => | ||
124 | } | ||
125 | |||
126 | -- TODO: both of these have undesirable output | ||
127 | keepit going: true, | ||
128 | okay: "yeah", | ||
129 | workd: "okay" | ||
130 | |||
131 | thing what: | ||
132 | "great", no: | ||
133 | "more" | ||
134 | okay: 123 | ||
135 | |||
136 | |||
137 | -- | ||
138 | thing what: | ||
139 | "great", no: | ||
140 | "more" | ||
141 | okay: 123 -- a anon table | ||
142 | |||
143 | |||
144 | -- | ||
145 | |||
146 | k = { "hello": "world" } | ||
147 | k = { 'hello': 'world' } | ||
148 | k = { "hello": 'world', "hat": "zat" } | ||
149 | |||
150 | please "hello": "world" | ||
151 | k = "hello": "world", "one": "zone" | ||
152 | |||
153 | f = "one", "two": three, "four" | ||
154 | f = "two": three, "four" | ||
155 | f = { "one", "two": three, "four" } | ||
156 | |||
157 | |||
158 | j = "one", "two": three, "four": five, 6, 7 | ||
159 | |||
160 | |||
161 | nil | ||
diff --git a/spec/inputs/unless_else.moon b/spec/inputs/unless_else.moon new file mode 100644 index 0000000..fe96c0b --- /dev/null +++ b/spec/inputs/unless_else.moon | |||
@@ -0,0 +1,5 @@ | |||
1 | if a | ||
2 | unless b | ||
3 | print "hi" | ||
4 | elseif c | ||
5 | print "not hi" | ||
diff --git a/spec/inputs/using.moon b/spec/inputs/using.moon new file mode 100644 index 0000000..55a16a7 --- /dev/null +++ b/spec/inputs/using.moon | |||
@@ -0,0 +1,21 @@ | |||
1 | |||
2 | hello = "hello" | ||
3 | world = "world" | ||
4 | |||
5 | (using nil) -> | ||
6 | hello = 3223 | ||
7 | |||
8 | (a using nil) -> | ||
9 | hello = 3223 | ||
10 | a = 323 | ||
11 | |||
12 | (a,b,c using a,b,c) -> | ||
13 | a,b,c = 1,2,3 | ||
14 | world = 12321 | ||
15 | |||
16 | (a,e,f using a,b,c, hello) -> | ||
17 | a,b,c = 1,2,3 | ||
18 | hello = 12321 | ||
19 | world = "yeah" | ||
20 | |||
21 | |||
diff --git a/spec/inputs/whitespace.moon b/spec/inputs/whitespace.moon new file mode 100644 index 0000000..4a2ff1f --- /dev/null +++ b/spec/inputs/whitespace.moon | |||
@@ -0,0 +1,102 @@ | |||
1 | |||
2 | { | ||
3 | 1, 2 | ||
4 | } | ||
5 | |||
6 | { 1, 2 | ||
7 | } | ||
8 | |||
9 | { 1, 2 } | ||
10 | |||
11 | {1,2} | ||
12 | |||
13 | { | ||
14 | 1,2 | ||
15 | |||
16 | } | ||
17 | |||
18 | { something 1,2, | ||
19 | 4,5,6, | ||
20 | 3,4,5 | ||
21 | } | ||
22 | |||
23 | { | ||
24 | a 1,2,3, | ||
25 | 4,5,6 | ||
26 | 1,2,3 | ||
27 | } | ||
28 | |||
29 | |||
30 | { | ||
31 | b 1,2,3, | ||
32 | 4,5,6 | ||
33 | 1,2,3, | ||
34 | 1,2,3 | ||
35 | } | ||
36 | |||
37 | { 1,2,3 } | ||
38 | |||
39 | { c 1,2,3, | ||
40 | } | ||
41 | |||
42 | |||
43 | hello 1,2,3,4, | ||
44 | 1,2,3,4,4,5 | ||
45 | |||
46 | x 1, | ||
47 | 2, 3, | ||
48 | 4, 5, 6 | ||
49 | |||
50 | |||
51 | hello 1,2,3, | ||
52 | world 4,5,6, | ||
53 | 5,6,7,8 | ||
54 | |||
55 | hello 1,2,3, | ||
56 | world 4,5,6, | ||
57 | 5,6,7,8, | ||
58 | 9,9 | ||
59 | |||
60 | |||
61 | { | ||
62 | hello 1,2, | ||
63 | 3,4, | ||
64 | 5, 6 | ||
65 | } | ||
66 | |||
67 | x = { | ||
68 | hello 1,2,3,4, | ||
69 | 5,6,7 | ||
70 | 1,2,3,4 | ||
71 | } | ||
72 | |||
73 | if hello 1,2,3, | ||
74 | world, | ||
75 | world | ||
76 | print "hello" | ||
77 | |||
78 | if hello 1,2,3, | ||
79 | world, | ||
80 | world | ||
81 | print "hello" | ||
82 | |||
83 | |||
84 | -- | ||
85 | |||
86 | a( | ||
87 | one, two, three | ||
88 | ) | ||
89 | |||
90 | b( | ||
91 | one, | ||
92 | two, | ||
93 | three | ||
94 | ) | ||
95 | |||
96 | |||
97 | c(one, two, | ||
98 | three, four) | ||
99 | |||
100 | -- | ||
101 | |||
102 | nil | ||
diff --git a/spec/inputs/with.moon b/spec/inputs/with.moon new file mode 100644 index 0000000..ae3c8c0 --- /dev/null +++ b/spec/inputs/with.moon | |||
@@ -0,0 +1,118 @@ | |||
1 | |||
2 | do | ||
3 | a = -> | ||
4 | with something | ||
5 | print .hello | ||
6 | print hi | ||
7 | print "world" | ||
8 | |||
9 | do | ||
10 | with leaf | ||
11 | .world! | ||
12 | .world 1,2,3 | ||
13 | |||
14 | g = .what.is.this | ||
15 | |||
16 | .hi 1,2,3 | ||
17 | |||
18 | \hi(1,2).world 2323 | ||
19 | |||
20 | \hi "yeah", "man" | ||
21 | .world = 200 | ||
22 | |||
23 | do | ||
24 | zyzyzy = with something | ||
25 | .set_state "hello world" | ||
26 | |||
27 | do | ||
28 | x = 5 + with Something! | ||
29 | \write "hello world" | ||
30 | |||
31 | |||
32 | do | ||
33 | x = { | ||
34 | hello: with yeah | ||
35 | \okay! | ||
36 | } | ||
37 | |||
38 | do | ||
39 | with foo | ||
40 | \prop"something".hello | ||
41 | .prop\send(one) | ||
42 | .prop\send one | ||
43 | |||
44 | |||
45 | -- | ||
46 | |||
47 | do | ||
48 | with a, b -- b is lost | ||
49 | print .world | ||
50 | |||
51 | mod = with _M = {} | ||
52 | .Thing = "hi" | ||
53 | |||
54 | -- operate on a only | ||
55 | with a, b = something, pooh | ||
56 | print .world | ||
57 | |||
58 | x = with a, b = 1, 2 | ||
59 | print a + b | ||
60 | |||
61 | print with a, b = 1, 2 | ||
62 | print a + b | ||
63 | |||
64 | -- assignment lhs must be evaluated in the order they appear | ||
65 | p = with hello!.x, world!.y = 1, 2 | ||
66 | print a + b | ||
67 | |||
68 | -- | ||
69 | |||
70 | do | ||
71 | x = "hello" | ||
72 | with x | ||
73 | x\upper! | ||
74 | |||
75 | do | ||
76 | with k = "jo" | ||
77 | print \upper! | ||
78 | |||
79 | do | ||
80 | with a,b,c = "", "", "" | ||
81 | print \upper! | ||
82 | |||
83 | do | ||
84 | a = "bunk" | ||
85 | with a,b,c = "", "", "" | ||
86 | print \upper! | ||
87 | |||
88 | do | ||
89 | with j | ||
90 | print \upper! | ||
91 | |||
92 | do | ||
93 | with k.j = "jo" | ||
94 | print \upper! | ||
95 | |||
96 | do | ||
97 | with a | ||
98 | print .b | ||
99 | -- nested `with`s should change the scope correctly | ||
100 | with .c | ||
101 | print .d | ||
102 | |||
103 | do | ||
104 | with a | ||
105 | -- nested `with`s with assignments should change the scope correctly | ||
106 | with .b = 2 | ||
107 | print .c | ||
108 | |||
109 | do | ||
110 | -> | ||
111 | with hi | ||
112 | return .a, .b | ||
113 | |||
114 | |||
115 | do | ||
116 | with dad | ||
117 | .if "yes" | ||
118 | y = .end.of.function | ||