aboutsummaryrefslogtreecommitdiff
path: root/spec/inputs
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2022-07-12 17:41:19 +0800
committerLi Jin <dragon-fly@qq.com>2022-07-12 17:41:19 +0800
commit68e167e9f0b90968ea67b7f21fdc50a48d129173 (patch)
tree64612476c7cc5636d7a9eea68ea1e5b449bb9732 /spec/inputs
parent1a7c8e3c38fcf0af94ca799a3cd9fa7c4ef1bf08 (diff)
downloadyuescript-68e167e9f0b90968ea67b7f21fdc50a48d129173.tar.gz
yuescript-68e167e9f0b90968ea67b7f21fdc50a48d129173.tar.bz2
yuescript-68e167e9f0b90968ea67b7f21fdc50a48d129173.zip
add table pattern matching syntax and fix issue #93, remove a confusing default value syntax for destructuring.
Diffstat (limited to 'spec/inputs')
-rw-r--r--spec/inputs/destructure.yue3
-rw-r--r--spec/inputs/switch.yue86
2 files changed, 88 insertions, 1 deletions
diff --git a/spec/inputs/destructure.yue b/spec/inputs/destructure.yue
index a235abd..3007adf 100644
--- a/spec/inputs/destructure.yue
+++ b/spec/inputs/destructure.yue
@@ -181,3 +181,6 @@ do
181do 181do
182 {_, a, _, b} = tb -- list placeholder 182 {_, a, _, b} = tb -- list placeholder
183 183
184do
185 {x: a.b = 1, y: a.c = 2} = x.x.x
186
diff --git a/spec/inputs/switch.yue b/spec/inputs/switch.yue
index ac3dbea..36f9be6 100644
--- a/spec/inputs/switch.yue
+++ b/spec/inputs/switch.yue
@@ -58,7 +58,91 @@ switch hi
58 58
59switch hi 59switch hi
60 when 3+1, hello!, (-> 4)! 60 when 3+1, hello!, (-> 4)!
61 yello 61 _ = yello
62 else 62 else
63 print "cool" 63 print "cool"
64 64
65do
66 dict = {
67 {}
68 {1, 2, 3}
69 a: b: c: 1
70 x: y: z: 1
71 }
72
73 switch dict
74 when {
75 first
76 {one, two, three}
77 a: b: :c
78 x: y: :z
79 }
80 print first, one, two, three, c, z
81
82do
83 items =
84 * x: 100
85 y: 200
86 * width: 300
87 height: 400
88 * false
89
90 for item in *items
91 switch item
92 when :x, :y
93 print "Vec2 #{x}, #{y}"
94 when :width, :height
95 print "Size #{width}, #{height}"
96 when false
97 print "None"
98 when __class: cls
99 switch cls
100 when ClassA
101 print "Object A"
102 when ClassB
103 print "Object B"
104 when #: mt
105 print "A table with metatable"
106 else
107 print "item not accepted!"
108
109do
110 tb = {}
111 switch tb
112 when {:a = 1, :b = 2}
113 print a, b
114
115do
116 tb = x: "abc"
117 switch tb
118 when :x, :y
119 print "x: #{x} with y: #{y}"
120 when :x
121 print "x: #{x} only"
122
123do
124 matched = switch tb
125 when 1
126 "1"
127 when :x
128 x
129 when false
130 "false"
131 else
132 nil
133
134do
135 return switch tb
136 when nil
137 "invalid"
138 when :a, :b
139 "#{a + b}"
140 when 1, 2, 3, 4, 5
141 "number 1 - 5"
142 when {:alwaysMatch = "fallback"}
143 alwaysMatch
144 else
145 "should not reach here"
146
147nil
148