Skip to content

Commit 1ba3456

Browse files
committed
allow lua keyword property access on self #410
1 parent 0af9a8d commit 1ba3456

File tree

5 files changed

+55
-5
lines changed

5 files changed

+55
-5
lines changed

moonscript/cmd/lint.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ do
7676
_continue_0 = true
7777
break
7878
end
79-
names_by_position[pos] = names_by_position[pos] or { }
79+
local _update_0 = pos
80+
names_by_position[_update_0] = names_by_position[_update_0] or { }
8081
insert(names_by_position[pos], name)
8182
_continue_0 = true
8283
until true

moonscript/compile/value.lua

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,10 +296,44 @@ return {
296296
return self:line("not ", self:value(node[2]))
297297
end,
298298
self = function(self, node)
299-
return "self." .. self:name(node[2])
299+
if data.lua_keywords[node[2]] then
300+
return self:value({
301+
"chain",
302+
"self",
303+
{
304+
"index",
305+
{
306+
"string",
307+
'"',
308+
node[2]
309+
}
310+
}
311+
})
312+
else
313+
return "self." .. self:name(node[2])
314+
end
300315
end,
301316
self_class = function(self, node)
302-
return "self.__class." .. self:name(node[2])
317+
if data.lua_keywords[node[2]] then
318+
return self:value({
319+
"chain",
320+
"self",
321+
{
322+
"dot",
323+
"__class"
324+
},
325+
{
326+
"index",
327+
{
328+
"string",
329+
'"',
330+
node[2]
331+
}
332+
}
333+
})
334+
else
335+
return "self.__class." .. self:name(node[2])
336+
end
303337
end,
304338
self_colon = function(self, node)
305339
return "self:" .. self:name(node[2])

moonscript/compile/value.moon

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,20 @@ string_chars = {
183183
@line "not ", @value node[2]
184184

185185
self: (node) =>
186-
"self."..@name node[2]
186+
if data.lua_keywords[node[2]]
187+
@value {"chain", "self", {"index", {
188+
"string", '"', node[2]
189+
}}}
190+
else
191+
"self."..@name node[2]
187192

188193
self_class: (node) =>
189-
"self.__class."..@name node[2]
194+
if data.lua_keywords[node[2]]
195+
@value {"chain", "self", {"dot", "__class"}, {"index", {
196+
"string", '"', node[2]
197+
}}}
198+
else
199+
"self.__class."..@name node[2]
190200

191201
self_colon: (node) =>
192202
"self:"..@name node[2]

spec/inputs/syntax.moon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ hello ..= "world"
158158
@@something += 10
159159
@something += 10
160160

161+
@@then += 10
162+
@then += 10
163+
161164
a["hello"] += 10
162165
a["hello#{tostring ff}"] += 10
163166
a[four].x += 10

spec/outputs/syntax.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ local m = m % 2
162162
local hello = hello .. "world"
163163
self.__class.something = self.__class.something + 10
164164
self.something = self.something + 10
165+
self.__class["then"] = self.__class["then"] + 10
166+
self["then"] = self["then"] + 10
165167
local _update_0 = "hello"
166168
a[_update_0] = a[_update_0] + 10
167169
local _update_1 = "hello" .. tostring(tostring(ff))

0 commit comments

Comments
 (0)