fix(format): separate an empty TEXT body from the next block
The one-blank rule before a new block skipped every line that followed a TEXT directive, not just the function's first label, so a TEXT with an empty body ran straight into the next declaration. The exemption now applies to labels only, and the directive shapes around GLOBL and DATA ranges are pinned. Assisted-by: GLM 5.3
This commit is contained in:
1 parent
21b6348dbe
commit
71cc65ea48
2 files changed
+26
-1
No files matched your search
@@ -285,6 +285,31 @@ func TestFlagListRoundTrip(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestDirectiveShapesRoundTrip pins the directive shapes the corpus and the
|
||||
// runtime write around GLOBL and DATA: each formats to itself, because the
|
||||
// offset, width and flag spellings are load-bearing operand text. An empty
|
||||
// TEXT body followed by another declaration keeps the one-blank rule of any
|
||||
// new block, the previous function having no first label to carry it.
|
||||
func TestDirectiveShapesRoundTrip(t *testing.T) {
|
||||
for _, in := range []string{
|
||||
"TEXT ·f(SB), NOSPLIT, $0\n",
|
||||
"TEXT ·f(SB), NOSPLIT, $0\n\nTEXT ·g(SB), NOSPLIT, $0\n\tRET\n",
|
||||
"GLOBL divtab<>(SB), RODATA, $64\nDATA divtab<>+0x00(SB)/4, $0xf4f8fcff\nDATA divtab<>+0x04(SB)/4, $0xe6eaedf0\n",
|
||||
"DATA d<>+0(SB)/8, $-1\nDATA d<>+8(SB)/8, $0xFFFFFFFFFFFFFFFF\n\nGLOBL d<>(SB), $16\n",
|
||||
"GLOBL ·x(SB), $8\n",
|
||||
"GLOBL ·x(SB), 8, $8\n",
|
||||
"DATA d<>+0(SB)/4, $1\n\nGLOBL d<>(SB), RODATA, $4\n",
|
||||
} {
|
||||
if got := Source(in); got != in {
|
||||
t.Errorf("formatting %q:\n got %q", in, got)
|
||||
continue
|
||||
}
|
||||
if _, errs := parser.Parse("in.s", in); len(errs) > 0 {
|
||||
t.Errorf("%q does not parse: %v", in, errs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestCRLFInputIsNormalisedToLF checks that a CRLF file comes out with
|
||||
// uniform LF endings: a // comment must not carry its line's trailing \r
|
||||
// into the output.
|
||||
|
||||
Reference in new issue
Block a user