diff options
author | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
commit | e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d (patch) | |
tree | 6e7c5e7e6f13157e9f8db26c38f6d8cba75683e5 /spec/inputs/unicode/macro.yue | |
parent | 289faf45ac26f7e0ac1a1e4305e5c42fc1e5b866 (diff) | |
download | yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.gz yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.bz2 yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.zip |
add unicode identifier support, fix more issue from #144
Diffstat (limited to 'spec/inputs/unicode/macro.yue')
-rw-r--r-- | spec/inputs/unicode/macro.yue | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/spec/inputs/unicode/macro.yue b/spec/inputs/unicode/macro.yue new file mode 100644 index 0000000..79d3c07 --- /dev/null +++ b/spec/inputs/unicode/macro.yue | |||
@@ -0,0 +1,291 @@ | |||
1 | import "unicode.macro_export" as { | ||
2 | $, -- import all macros | ||
3 | $配置: $我的配置, -- rename macro $config to $myconfig | ||
4 | } | ||
5 | |||
6 | import "unicode.macro_todo" as $ | ||
7 | |||
8 | $断言集 对象 == nil | ||
9 | |||
10 | $我的配置 false | ||
11 | |||
12 | 结果 = $断言 对象 == nil | ||
13 | |||
14 | macro 和 = (...)-> | ||
15 | 值们 = [元素 for 元素 in *{...}] | ||
16 | $显示宏 "和", "#{ table.concat 值们, " and " }" | ||
17 | |||
18 | if $和 函数1! | ||
19 | 打印 "没问题" | ||
20 | |||
21 | if $和 函数1!, 函数2!, 函数3! | ||
22 | 打印 "没问题" | ||
23 | |||
24 | 对象 = $复制( | ||
25 | @ | ||
26 | {位置: {}, 标签: 标签::转数字!} | ||
27 | 标识 | ||
28 | 连接们 | ||
29 | 位置.x坐标 | ||
30 | 位置.y坐标 | ||
31 | 位置.z坐标 | ||
32 | ) | ||
33 | |||
34 | macro 在 = (目标, ...)-> | ||
35 | 值们 = [元素 for 元素 in *{...}] | ||
36 | $显示宏 "在", table.concat ["#{目标} == #{值}" for 值 in *值们], " or " | ||
37 | |||
38 | if 变量x |> $在 "🍎", "🐷", "🐶" | ||
39 | 打印 "存在" | ||
40 | |||
41 | macro 映射 = (数组, 动作)-> | ||
42 | $显示宏 "映射", "[#{动作} for _ in *#{数组}]" | ||
43 | |||
44 | macro 过滤 = (数组, 动作)-> | ||
45 | $显示宏 "过滤", "[_ for _ in *#{数组} when #{动作}]" | ||
46 | |||
47 | macro 合并 = (数组, 默认值, 动作)-> | ||
48 | $显示宏 "合并", "if ##{数组} == 0 | ||
49 | #{默认值} | ||
50 | else | ||
51 | _1 = #{默认值} | ||
52 | for _2 in *#{数组} | ||
53 | _1 = #{动作} | ||
54 | _1" | ||
55 | |||
56 | macro 每一个 = (数组, 动作)-> | ||
57 | $显示宏 "每一个", "for _ in *#{数组} | ||
58 | #{动作}" | ||
59 | |||
60 | macro 管道 = (...)-> | ||
61 | switch select "#", ... | ||
62 | when 0 then return "" | ||
63 | when 1 then return ... | ||
64 | 操作数组 = {...} | ||
65 | 最后一个 = 操作数组[1] | ||
66 | 声明数组 = for 计数 = 2, #操作数组 | ||
67 | 声明 = "\tlocal _#{计数} = #{最后一个} |> #{操作数组[计数]}" | ||
68 | 最后一个 = "_#{计数}" | ||
69 | 声明 | ||
70 | 结果 = "do | ||
71 | #{table.concat 声明数组, "\n"} | ||
72 | #{最后一个}" | ||
73 | $显示宏 "管道", 结果 | ||
74 | |||
75 | {1,2,3} |> $映射(_ * 2) |> $过滤(_ > 4) |> $每一个 打印 _ | ||
76 | |||
77 | $每一个 $过滤($映射({1,2,3}, _ * 2), _ > 4), 打印 _ | ||
78 | |||
79 | 值 = $管道( | ||
80 | {1, 2, 3} | ||
81 | [[$映射(_ * 2)]] | ||
82 | [[$过滤(_ > 4)]] | ||
83 | [[$合并(0, _1 + _2)]] | ||
84 | ) | ||
85 | |||
86 | macro 加 = (参数a, 参数b)-> "#{参数a} + #{参数b}" | ||
87 | |||
88 | $加(1,2)\调用 123 | ||
89 | |||
90 | 结果 = 1 |> $加 2 | ||
91 | |||
92 | macro 柯里化 = (...)-> | ||
93 | 参数数组 = {...} | ||
94 | 长度 = #参数数组 | ||
95 | 主体 = 参数数组[长度] | ||
96 | 定义 = table.concat ["(#{参数数组[计数]})->" for 计数 = 1, 长度 - 1] | ||
97 | "#{定义}\n#{主体\gsub "^do%s*\n",""}" | ||
98 | |||
99 | f = $柯里化 参数x,参数y,参数z,do | ||
100 | 打印 参数x,参数y,参数z | ||
101 | |||
102 | macro 获取里值 = (值)-> "do | ||
103 | 变量a = 1 | ||
104 | 变量a + 1" | ||
105 | |||
106 | macro 获取里值_保持卫生 = (值)-> "(-> | ||
107 | local 变量a = 1 | ||
108 | 变量a + 1)!" | ||
109 | |||
110 | do | ||
111 | 变量a = 8 | ||
112 | 变量a = $获取里值! | ||
113 | 变量a += $获取里值! | ||
114 | 打印 变量a | ||
115 | |||
116 | do | ||
117 | 变量a = 8 | ||
118 | 变量a = $获取里值_保持卫生! | ||
119 | 变量a += $获取里值_保持卫生! | ||
120 | 打印 变量a | ||
121 | |||
122 | macro Lua代码 = (代码)-> { | ||
123 | code: 代码 | ||
124 | type: "lua" | ||
125 | } | ||
126 | |||
127 | 变量x = 0 | ||
128 | |||
129 | $Lua代码 [[ | ||
130 | local function f(a) | ||
131 | return a + 1 | ||
132 | end | ||
133 | x = x + f(3) | ||
134 | ]] | ||
135 | |||
136 | $Lua代码[[ | ||
137 | function tb:func() | ||
138 | print(123) | ||
139 | end | ||
140 | ]] | ||
141 | |||
142 | 打印 变量x | ||
143 | |||
144 | macro 定义函数 = (函数名, ...)-> | ||
145 | 参数数组 = {...} | ||
146 | 最后一个 = table.remove 参数数组 | ||
147 | { | ||
148 | code: $显示宏 "定义函数", "local function #{函数名}(#{table.concat 参数数组, ', '}) | ||
149 | #{最后一个} | ||
150 | end" | ||
151 | type: "lua" | ||
152 | } | ||
153 | |||
154 | sel = (参数a, 参数b, 参数c)-> if 参数a then 参数b else 参数c | ||
155 | |||
156 | $定义函数 sel, a, b, c, [[ | ||
157 | if a then | ||
158 | return b | ||
159 | else | ||
160 | return c | ||
161 | end | ||
162 | ]] | ||
163 | |||
164 | $定义函数 dummy,[[]] | ||
165 | |||
166 | macro 插入注释 = (文本)-> { | ||
167 | code: "-- #{文本\match '[\'"](.*)[\'"]'}" | ||
168 | type: "lua" | ||
169 | } | ||
170 | |||
171 | $插入注释 "这有个注释" | ||
172 | |||
173 | import '下划线' as _ | ||
174 | |||
175 | macro 链式调用 = (...)-> | ||
176 | 主调用 = nil | ||
177 | for 元素 in *{...} | ||
178 | 主调用 = 主调用? and "(#{主调用})\\#{元素}" or 元素 | ||
179 | $显示宏 "链式调用", 主调用 | ||
180 | |||
181 | 结果a = $链式调用( | ||
182 | _{1, 2, 3, 4, -2, 3} | ||
183 | 链! | ||
184 | 映射 => @ * 2 | ||
185 | 过滤 => @ > 3 | ||
186 | 取值! | ||
187 | ) | ||
188 | |||
189 | $链式调用( | ||
190 | _{1, 2, 3, 4, -2, 3} | ||
191 | 链! | ||
192 | 映射 => @ * 2 | ||
193 | 过滤 => @ > 3 | ||
194 | 每一个 => 打印 @ | ||
195 | ) | ||
196 | |||
197 | 结果 = $链式调用( | ||
198 | 原点.变换.根节点.游戏对象\父节点! | ||
199 | 后代! | ||
200 | 选择启用! | ||
201 | 选择可见! | ||
202 | 标签等于 "fx" | ||
203 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
204 | 摧毁! | ||
205 | ) | ||
206 | |||
207 | macro 链式调用B = (...)-> | ||
208 | switch select "#", ... | ||
209 | when 0 then return "" | ||
210 | when 1 then return ... | ||
211 | 参数数组 = {...} | ||
212 | 最后一个 = nil | ||
213 | 声明数组 = for 计数 = 1,#参数数组 | ||
214 | 声明 = if 计数 == #参数数组 | ||
215 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
216 | "\t#{最后的字符串}#{参数数组[计数]}" | ||
217 | else | ||
218 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
219 | "\tlocal _#{计数} = #{最后的字符串}#{参数数组[计数]}" | ||
220 | 最后一个 = "_#{计数}" | ||
221 | 声明 | ||
222 | 结果 = "do | ||
223 | #{table.concat 声明数组, '\n'} | ||
224 | " | ||
225 | $显示宏 "链式调用B", 结果 | ||
226 | |||
227 | $链式调用B( | ||
228 | 原点.变换.根节点.游戏对象\父节点! | ||
229 | 后代! | ||
230 | 选择启用! | ||
231 | 选择可见! | ||
232 | 标签等于 "fx" | ||
233 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
234 | 摧毁! | ||
235 | ) | ||
236 | |||
237 | macro 链式调用C = (...)-> | ||
238 | import "yue" as {:to_lua} | ||
239 | 主调用 = nil | ||
240 | 编译配置 = { | ||
241 | implicit_return_root: false | ||
242 | reserve_line_number: false | ||
243 | } | ||
244 | for 参数 in *{...} | ||
245 | 参数转代码 = to_lua(参数,编译配置)\gsub '%s*$','' | ||
246 | if 主调用? | ||
247 | 主调用 = "#{主调用}:#{参数转代码}" | ||
248 | else | ||
249 | 主调用 = 参数转代码 | ||
250 | { | ||
251 | code: $显示宏 "链式调用C", 主调用 | ||
252 | type: "lua" | ||
253 | } | ||
254 | |||
255 | $链式调用C( | ||
256 | 原点.变换.根节点.游戏对象\父节点! | ||
257 | 后代! | ||
258 | 选择启用! | ||
259 | 选择可见! | ||
260 | 标签等于 "fx" | ||
261 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
262 | 摧毁! | ||
263 | ) | ||
264 | |||
265 | macro 表 = -> "{'abc', 字段a:123, <call>:=> 998}" | ||
266 | 打印 $表[1], $表.字段a, ($表)!, $表! | ||
267 | |||
268 | 打印 "当前代码行数: #{ $LINE }" | ||
269 | |||
270 | $待办 | ||
271 | |||
272 | macro 跳过 = -> "" | ||
273 | |||
274 | do | ||
275 | 打印 1 | ||
276 | <- $跳过 | ||
277 | 打印 2 | ||
278 | 打印 3 | ||
279 | |||
280 | macro 跳过 = -> "while false do break" | ||
281 | |||
282 | _1 = -> | ||
283 | 打印 1 | ||
284 | <- $跳过 | ||
285 | 打印 2 | ||
286 | 打印 3 | ||
287 | |||
288 | macro 隐式返回宏是允许的 = -> "打印 'abc'\n123" | ||
289 | |||
290 | $隐式返回宏是允许的 | ||
291 | |||