fix(format): preserve macro adjacency and continuation bodies
The canonical spelling of a #define line glued a '(' to the macro name
whatever the input's spacing, turning an object macro whose body opens
with a parenthesis into a parameterised one, and it flattened the
backslash continuations of a multi-line body into one physical line,
fusing the statements the expansion splits at those boundaries. Both
change what a valid file assembles to, so renderPreproc now keeps the
name's adjacency (the same column check the preprocessor applies) and
restores the continuation boundaries from the token positions.
Assisted-by: GLM 5.3
This commit is contained in:
1 parent
acd30088af
commit
e600fc00e7
3 files changed
+202
-9
No files matched your search
@@ -329,10 +329,12 @@ func TestSemicolonSeparators(t *testing.T) {
|
||||
},
|
||||
{
|
||||
// The continuation-spliced macro shape of the runtime sources:
|
||||
// the lexer makes one logical line of the backslash continuations.
|
||||
// the lexer makes one logical line of the backslash continuations,
|
||||
// and the canonical form restores them, because the expansion
|
||||
// splits a macro body at those line boundaries.
|
||||
name: "inside a macro body, continued",
|
||||
in: "#define MOVLTOREG(v, off) \\\n\tMOVL $v, AX; \\\n\tMOVL AX, ret+off(FP)\n",
|
||||
want: "#define MOVLTOREG(v, off) MOVL $v, AX; MOVL AX, ret+off(FP)\n",
|
||||
want: "#define MOVLTOREG(v, off) \\\n\tMOVL $v, AX; \\\n\tMOVL AX, ret+off(FP)\n",
|
||||
},
|
||||
{
|
||||
name: "inside a macro body, one line",
|
||||
|
||||
Reference in new issue
Block a user