Commit 08d41da916

LemonBoy <thatlemon@gmail.com>
2019-05-13 11:22:42
Fix formatting for multiline asm expressions
1 parent 66d86ec
Changed files (3)
std/zig/parser_test.zig
@@ -2129,6 +2129,47 @@ test "zig fmt: comptime block in container" {
     );
 }
 
+test "zig fmt: inline asm parameter alignment" {
+    try testCanonical(
+        \\pub fn main() void {
+        \\    asm volatile (
+        \\        \\ foo
+        \\        \\ bar
+        \\    );
+        \\    asm volatile (
+        \\        \\ foo
+        \\        \\ bar
+        \\        : [_] "" (-> usize),
+        \\          [_] "" (-> usize)
+        \\    );
+        \\    asm volatile (
+        \\        \\ foo
+        \\        \\ bar
+        \\        :
+        \\        : [_] "" (0),
+        \\          [_] "" (0)
+        \\    );
+        \\    asm volatile (
+        \\        \\ foo
+        \\        \\ bar
+        \\        :
+        \\        :
+        \\        : "", ""
+        \\    );
+        \\    asm volatile (
+        \\        \\ foo
+        \\        \\ bar
+        \\        : [_] "" (-> usize),
+        \\          [_] "" (-> usize)
+        \\        : [_] "" (0),
+        \\          [_] "" (0)
+        \\        : "", ""
+        \\    );
+        \\}
+        \\
+    );
+}
+
 const std = @import("std");
 const mem = std.mem;
 const warn = std.debug.warn;
std/zig/render.zig
@@ -1549,7 +1549,14 @@ fn renderExpression(
             try renderExpression(allocator, stream, tree, indent, start_col, asm_node.template, Space.Newline);
 
             const indent_once = indent + indent_delta;
-            try stream.writeByteNTimes(' ', indent_once);
+
+            if (asm_node.template.id == ast.Node.Id.MultilineStringLiteral) {
+                // After rendering a multiline string literal the cursor is
+                // already offset by indent
+                try stream.writeByteNTimes(' ', indent_delta);
+            } else {
+                try stream.writeByteNTimes(' ', indent_once);
+            }
 
             const colon1 = tree.nextToken(asm_node.template.lastToken());
             const indent_extra = indent_once + 2;
std/valgrind.zig
@@ -12,7 +12,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
                 \\ roll $3,  %%edi ; roll $13, %%edi
                 \\ roll $29, %%edi ; roll $19, %%edi
                 \\ xchgl %%ebx,%%ebx
-                            : [_] "={edx}" (-> usize)
+                : [_] "={edx}" (-> usize)
                 : [_] "{eax}" (&[]usize{ request, a1, a2, a3, a4, a5 }),
                   [_] "0" (default)
                 : "cc", "memory"
@@ -23,7 +23,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
                 \\ rolq $3,  %%rdi ; rolq $13, %%rdi
                 \\ rolq $61, %%rdi ; rolq $51, %%rdi
                 \\ xchgq %%rbx,%%rbx
-                            : [_] "={rdx}" (-> usize)
+                : [_] "={rdx}" (-> usize)
                 : [_] "{rax}" (&[]usize{ request, a1, a2, a3, a4, a5 }),
                   [_] "0" (default)
                 : "cc", "memory"