diff options
author | Li Jin <dragon-fly@qq.com> | 2022-09-08 09:26:49 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2022-09-08 09:26:49 +0800 |
commit | d4af1fa275b1d27229fc995f4a45137380040933 (patch) | |
tree | 955c76511d7021e6d1a0f06b46de3852eeac4176 /spec/inputs | |
parent | df85ad2e7f975026ca1e6bd84b26fff81c8d99c8 (diff) | |
download | yuescript-d4af1fa275b1d27229fc995f4a45137380040933.tar.gz yuescript-d4af1fa275b1d27229fc995f4a45137380040933.tar.bz2 yuescript-d4af1fa275b1d27229fc995f4a45137380040933.zip |
redesigned metatable syntax. add support for destructuring a field with string and expression
Diffstat (limited to 'spec/inputs')
-rw-r--r-- | spec/inputs/assign.yue | 4 | ||||
-rw-r--r-- | spec/inputs/class.yue | 6 | ||||
-rw-r--r-- | spec/inputs/destructure.yue | 31 | ||||
-rw-r--r-- | spec/inputs/existential.yue | 4 | ||||
-rw-r--r-- | spec/inputs/import.yue | 6 | ||||
-rw-r--r-- | spec/inputs/macro.yue | 2 | ||||
-rw-r--r-- | spec/inputs/metatable.yue | 92 | ||||
-rw-r--r-- | spec/inputs/switch.yue | 4 |
8 files changed, 96 insertions, 53 deletions
diff --git a/spec/inputs/assign.yue b/spec/inputs/assign.yue index d04bcb8..da44dff 100644 --- a/spec/inputs/assign.yue +++ b/spec/inputs/assign.yue | |||
@@ -34,7 +34,7 @@ x = (do | |||
34 | 34 | ||
35 | (using nil) <- _ | 35 | (using nil) <- _ |
36 | 36 | ||
37 | a.# = do | 37 | a.<> = do |
38 | print 123 | 38 | print 123 |
39 | {} | 39 | {} |
40 | 40 | ||
@@ -63,7 +63,7 @@ do | |||
63 | 123, tb | 63 | 123, tb |
64 | 64 | ||
65 | do | 65 | do |
66 | a, b[], c, d.add# = if x | 66 | a, b[], c, d.<add> = if x |
67 | switch y | 67 | switch y |
68 | when 1 | 68 | when 1 |
69 | f! | 69 | f! |
diff --git a/spec/inputs/class.yue b/spec/inputs/class.yue index 9091d23..49537c2 100644 --- a/spec/inputs/class.yue +++ b/spec/inputs/class.yue | |||
@@ -237,9 +237,9 @@ class Example | |||
237 | 237 | ||
238 | class Foo | 238 | class Foo |
239 | new: (x) => @x = x | 239 | new: (x) => @x = x |
240 | mul#: (y) => @x * y | 240 | <mul>: (y) => @x * y |
241 | ["dsd-dsd"]#: 123 | 241 | <"dsd-dsd">: 123 |
242 | :add | 242 | :add |
243 | :add# | 243 | :<add> |
244 | 244 | ||
245 | nil | 245 | nil |
diff --git a/spec/inputs/destructure.yue b/spec/inputs/destructure.yue index 53f9ea3..ce593ec 100644 --- a/spec/inputs/destructure.yue +++ b/spec/inputs/destructure.yue | |||
@@ -160,17 +160,17 @@ do | |||
160 | 160 | ||
161 | {key1: {key2: value1 = 123}, :key3 = "abc"} = tb | 161 | {key1: {key2: value1 = 123}, :key3 = "abc"} = tb |
162 | 162 | ||
163 | {#: mt = {__index: {abc: 123}}, #: {:call# = (-> {}), :add#}} = tb | 163 | {<>: mt = {__index: {abc: 123}}, <>: {:<call> = (-> {}), :<add>}} = tb |
164 | 164 | ||
165 | {x: {#: mtx = {}}, :y, z: zItem, :index# = -> nil} = tb | 165 | {x: {<>: mtx = {}}, :y, z: zItem, :<index> = -> nil} = tb |
166 | 166 | ||
167 | {#: {func: a.b(-> 123).c = item?.defVal}} = tb | 167 | {<>: {func: a.b(-> 123).c = item?.defVal}} = tb |
168 | 168 | ||
169 | do | 169 | do |
170 | {#: mt = {}, sub#: subFunc} = tb.x | 170 | {<>: mt = {}, <sub>: subFunc} = tb.x |
171 | 171 | ||
172 | do | 172 | do |
173 | {x: {#: mt = {}, sub#: subFunc}} = tb | 173 | {x: {<>: mt = {}, <sub>: subFunc}} = tb |
174 | 174 | ||
175 | do | 175 | do |
176 | {a = 1, b = 2, c: {d.e = 3}} = tb | 176 | {a = 1, b = 2, c: {d.e = 3}} = tb |
@@ -189,5 +189,24 @@ do | |||
189 | const {:x = 0.0, :y = 0.0} = point | 189 | const {:x = 0.0, :y = 0.0} = point |
190 | 190 | ||
191 | do | 191 | do |
192 | x1, x2, x3, a[], d, {b}, e, c.# = 1, 2, 3, f! | 192 | x1, x2, x3, a[], d, {b}, e, c.<> = 1, 2, 3, f! |
193 | y1, :y2, :y3, y4 = f1!, f2! | 193 | y1, :y2, :y3, y4 = f1!, f2! |
194 | |||
195 | do | ||
196 | { | ||
197 | [["abc"]]: v1 = 111, | ||
198 | [1 + 1]: {v2 = 222, v3 = 333}, | ||
199 | @x: v4 = 444 | ||
200 | }, \ | ||
201 | 'x-y-z': v5, [func!]: {[func2!]: v6, v7} = tb, tb2 | ||
202 | |||
203 | do | ||
204 | <[name]>: value_meta, [name]: value = tb | ||
205 | |||
206 | do | ||
207 | {:<tostring> = (-> "name"), :<add>} = tb | ||
208 | |||
209 | switch tb | ||
210 | when {:<name> = "item", <"123">: meta_field} | ||
211 | print name, meta_field | ||
212 | |||
diff --git a/spec/inputs/existential.yue b/spec/inputs/existential.yue index 101e1d8..e73b421 100644 --- a/spec/inputs/existential.yue +++ b/spec/inputs/existential.yue | |||
@@ -49,9 +49,9 @@ with? io.open "test.txt", "w" | |||
49 | \write "hello" | 49 | \write "hello" |
50 | \close! | 50 | \close! |
51 | 51 | ||
52 | tb?.a#? 123 | 52 | tb?.<a>? 123 |
53 | 53 | ||
54 | with? tb.#?.index# | 54 | with? tb.<>?.<index> |
55 | .a = 1 | 55 | .a = 1 |
56 | 56 | ||
57 | nil | 57 | nil |
diff --git a/spec/inputs/import.yue b/spec/inputs/import.yue index 570b909..af5545d 100644 --- a/spec/inputs/import.yue +++ b/spec/inputs/import.yue | |||
@@ -64,8 +64,8 @@ do | |||
64 | import "org.package.module" as function:func, if:ifVar | 64 | import "org.package.module" as function:func, if:ifVar |
65 | 65 | ||
66 | do | 66 | do |
67 | import "m" as {a#: b} | 67 | import "m" as {<a>: b} |
68 | import "m" as {e: f, a#: c} | 68 | import "m" as {e: f, <a>: c} |
69 | import "m" as {c: d} | 69 | import "m" as {c: d} |
70 | import "m" as {g, {h#: i}} | 70 | import "m" as {g, {<h>: i}} |
71 | 71 | ||
diff --git a/spec/inputs/macro.yue b/spec/inputs/macro.yue index 3c89c1c..ac51d85 100644 --- a/spec/inputs/macro.yue +++ b/spec/inputs/macro.yue | |||
@@ -262,7 +262,7 @@ $chainC( | |||
262 | Destroy! | 262 | Destroy! |
263 | ) | 263 | ) |
264 | 264 | ||
265 | macro tb = -> "{'abc', a:123, call#:=> 998}" | 265 | macro tb = -> "{'abc', a:123, <call>:=> 998}" |
266 | print $tb[1], $tb.a, ($tb)!, $tb! | 266 | print $tb[1], $tb.a, ($tb)!, $tb! |
267 | 267 | ||
268 | print "current line: #{ $LINE }" | 268 | print "current line: #{ $LINE }" |
diff --git a/spec/inputs/metatable.yue b/spec/inputs/metatable.yue index 86991c2..61cc266 100644 --- a/spec/inputs/metatable.yue +++ b/spec/inputs/metatable.yue | |||
@@ -1,62 +1,86 @@ | |||
1 | a = close: true, close#: => print "out of scope" | 1 | a = close: true, <close>: => print "out of scope" |
2 | b = add#: (left, right)-> right - left | 2 | b = <add>: (left, right)-> right - left |
3 | c = key1: true, :add#, key2: true | 3 | c = key1: true, :<add>, key2: true |
4 | w = [name]#:123, ["new"]#:(val)=> {val} | 4 | w = <[name]>:123, <"new">:(val)=> {val} |
5 | w.#["new"] w.#[name] | 5 | w.<>["new"] w.<>[name] |
6 | 6 | ||
7 | do close _ = close#: -> print "out of scope" | 7 | do close _ = <close>: -> print "out of scope" |
8 | 8 | ||
9 | d, e = a.close, a.close# | 9 | d, e = a.close, a.<close> |
10 | 10 | ||
11 | f = a\close# 1 | 11 | f = a\<close> 1 |
12 | a.add# = (x, y)-> x + y | 12 | a.<add> = (x, y)-> x + y |
13 | 13 | ||
14 | do | 14 | do |
15 | {:new, :close#, close#: closeA} = a | 15 | {:new, :<close>, <close>: closeA} = a |
16 | print new, close, closeA | 16 | print new, close, closeA |
17 | 17 | ||
18 | do | 18 | do |
19 | local * | 19 | local * |
20 | x, \ | 20 | x, \ |
21 | {:new, :var, :close#, close#: closeA}, \ | 21 | {:new, :var, :<close>, <close>: closeA}, \ |
22 | :num, :add#, :sub# \ | 22 | :num, :<add>, :<sub> \ |
23 | = 123, a.b.c, func! | 23 | = 123, a.b.c, func! |
24 | 24 | ||
25 | x.abc, a.b.# = 123, {} | 25 | x.abc, a.b.<> = 123, {} |
26 | func!.# = mt --, extra | 26 | func!.<> = mt --, extra |
27 | a, b.c.#, d, e = 1, mt, "abc", nil | 27 | a, b.c.<>, d, e = 1, mt, "abc", nil |
28 | 28 | ||
29 | is_same = a.#.__index == a.index# | 29 | is_same = a.<>.__index == a.<index> |
30 | 30 | ||
31 | -- | 31 | -- |
32 | a.# = __index: tb | 32 | a.<> = __index: tb |
33 | a.#.__index = tb | 33 | a.<>.__index = tb |
34 | a.index# = tb | 34 | a.<index> = tb |
35 | -- | 35 | -- |
36 | 36 | ||
37 | mt = a.# | 37 | mt = a.<> |
38 | 38 | ||
39 | tb\func #list | 39 | tb\func #list |
40 | tb\func#list | 40 | tb\<func>list |
41 | tb\func# list | 41 | tb\<func> list |
42 | 42 | ||
43 | import "module" as :index#, newindex#:setFunc | 43 | import "module" as :<index>, <newindex>:setFunc |
44 | 44 | ||
45 | with tb | 45 | with tb |
46 | print .add#, .x\index# "key" | 46 | print .<add>, .x\<index> "key" |
47 | a = .index#.add#\new# 123 | 47 | a = .<index>.<add>\<new> 123 |
48 | b = t#.close#.test | 48 | b = t#.<close>.test |
49 | c = t #.close# .test | 49 | c = t #.<close> .test |
50 | 50 | ||
51 | #:mt = a | 51 | <>:mt = a |
52 | a = #:mt | 52 | a = <>:mt |
53 | a = #:__index:mt | 53 | a = <>:__index:mt |
54 | 54 | ||
55 | local index | 55 | local index |
56 | #:__index:index = a | 56 | <>:__index:index = a |
57 | :index# = a | 57 | :<index> = a |
58 | 58 | ||
59 | do #:{new:ctor, :update} = a | 59 | do <>:{new:ctor, :update} = a |
60 | do {new:ctor, :update} = a.# | 60 | do {new:ctor, :update} = a.<> |
61 | |||
62 | tb = {} | ||
63 | do | ||
64 | f = tb\<"value#{x < y}">(123, ...) | ||
65 | f tb\<'value'> 123, ... | ||
66 | tb\<[[ | ||
67 | value | ||
68 | 1 | ||
69 | ]]>(123, ...) | ||
70 | return tb\<["value" .. tostring x > y]>(123, ...) | ||
71 | |||
72 | do | ||
73 | f = tb\<value>(123, ...) | ||
74 | f tb\<value>(123, ...) | ||
75 | tb\<value>(123, ...) | ||
76 | return tb\<value> 123, ... | ||
77 | |||
78 | do | ||
79 | f = tb.<value> 123, ... | ||
80 | f = tb.<"value#{x < y}">(123, ...) | ||
81 | f tb.<'value'> 123, ... | ||
82 | tb.<[[ value | ||
83 | 1]]>(123, ...) | ||
84 | return tb.<["value" .. tostring x > y]>(123, ...) | ||
61 | 85 | ||
62 | nil | 86 | nil |
diff --git a/spec/inputs/switch.yue b/spec/inputs/switch.yue index 442d15f..cb1eb31 100644 --- a/spec/inputs/switch.yue +++ b/spec/inputs/switch.yue | |||
@@ -101,7 +101,7 @@ do | |||
101 | print "Object A" | 101 | print "Object A" |
102 | when ClassB | 102 | when ClassB |
103 | print "Object B" | 103 | print "Object B" |
104 | when #: mt | 104 | when <>: mt |
105 | print "A table with metatable" | 105 | print "A table with metatable" |
106 | else | 106 | else |
107 | print "item not accepted!" | 107 | print "item not accepted!" |
@@ -156,7 +156,7 @@ do | |||
156 | 156 | ||
157 | do | 157 | do |
158 | switch y | 158 | switch y |
159 | when {x: #: mt} | 159 | when {x: <>: mt} |
160 | print mt | 160 | print mt |
161 | 161 | ||
162 | nil | 162 | nil |