Skip to content

Commit 1018c68

Browse files
committed
hacky support for not expanding string defines
1 parent ab6ff67 commit 1018c68

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

nattlua/c_declarations/preprocessor.lua

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ do
176176
end
177177

178178
local pos = self:GetPosition()
179+
local parent = self:GetToken()
179180
self:Parse()
180181
self:SetPosition(pos)
181182
local tk = self:ConsumeToken()
@@ -186,6 +187,7 @@ do
186187
paren_depth = paren_depth - 1
187188
end
188189

190+
tk.parent = parent
189191
table.insert(tokens, tk)
190192
end
191193
end
@@ -207,9 +209,21 @@ do
207209
self:NewToken("space", " "),
208210
}
209211
end
212+
213+
if tk.parent then
214+
if tk.parent.whitespace then
215+
tk.parent.whitespace = {
216+
self:NewToken("space", " "),
217+
}
218+
end
219+
end
210220
end
211221

212222
if i == 1 then if tokens[1] then tokens[1].whitespace = nil end end
223+
224+
if i == 1 then
225+
if tokens[1] and tokens[1].parent then tokens[1].parent.whitespace = nil end
226+
end
213227
end
214228

215229
return args
@@ -357,25 +371,18 @@ do
357371
return false
358372
end
359373

360-
361374
local tk_left = self:GetToken()
362375
local pos = self:GetPosition()
363376
self:Advance(3)
364-
if self:GetDefinition() then
365-
self:Parse()
366-
end
377+
378+
if self:GetDefinition() then self:Parse() end
379+
367380
self:SetPosition(pos)
368-
369-
370-
self:AddTokens(
371-
{
372-
self:NewToken(
373-
"letter",
374-
tk_left.value .. self:GetToken(3).value
375-
),
376-
}
377-
)
381+
self:AddTokens({
382+
self:NewToken("letter", tk_left.value .. self:GetToken(3).value),
383+
})
378384
self:Advance(1)
385+
379386
for i = 1, 4 do
380387
self:RemoveToken(self:GetPosition())
381388
end
@@ -390,8 +397,14 @@ do
390397

391398
if not def then return false end
392399

400+
local original_tokens = {}
401+
402+
for i, v in pairs(def.tokens) do
403+
original_tokens[i] = v.parent
404+
end
405+
393406
self:RemoveToken(self:GetPosition())
394-
local tk = self:NewToken("string", "\"" .. self:ToString(def.tokens) .. "\"")
407+
local tk = self:NewToken("string", "\"" .. self:ToString(original_tokens) .. "\"")
395408
self:RemoveToken(self:GetPosition())
396409
self:AddTokens({tk})
397410
self:Advance(#def.tokens)
@@ -603,18 +616,14 @@ do -- tests
603616
assert_find("#define STRINGIFY(a) #a \n >STRINGIFY(1)<", "\"1\"")
604617
assert_find("#define STRINGIFY(a) #a \n >STRINGIFY((a,b,c))<", "\"(a,b,c)\"")
605618
assert_find("#define STR(x) #x \n >STR(a + b)<", "\"a + b\"")
606-
607-
if false then
608-
assert_find("#define A value \n #define STR(x) #x \n >STR(A)<", "\"A\"")
609-
end
619+
assert_find("#define A value \n #define STR(x) #x \n >STR(A)<", "\"A\"")
610620
end
611621

612622
do -- token concatenation (##)
613623
assert_find(
614624
"#define PREFIX(x) pre_##x \n #define SUFFIX(x) x##_post \n >PREFIX(fix) SUFFIX(fix)<",
615625
"pre_fix fix_post"
616626
)
617-
618627
assert_find("#define F(a, b) a##b \n >F(1,2)<", "12")
619628
assert_find("#define EMPTY_ARG(a, b) a##b \n >EMPTY_ARG(test, )<", "test")
620629
assert_find("#define EMPTY_ARG(a, b) a##b \n >EMPTY_ARG(, test)<", "test")

nattlua/lexer/token.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ function META:Copy()
4949
end
5050
end
5151

52+
if self.parent then copy.parent = self.parent end
53+
5254
return copy
5355
end
5456

0 commit comments

Comments
 (0)