Commit 08107a555e

Andrew Kelley <andrew@ziglang.org>
2021-02-24 01:19:01
zig fmt: fix inline assembly test cases
All zig fmt test cases are now passing again in this branch.
1 parent bb89c61
Changed files (2)
lib/std/zig/parser_test.zig
@@ -1863,46 +1863,42 @@ test "zig fmt: extra newlines at the end" {
     );
 }
 
-//test "zig fmt: simple asm" {
-//    try testTransform(
-//        \\comptime {
-//        \\    asm volatile (
-//        \\        \\.globl aoeu;
-//        \\        \\.type aoeu, @function;
-//        \\        \\.set aoeu, derp;
-//        \\    );
-//        \\
-//        \\    asm ("not real assembly"
-//        \\        :[a] "x" (x),);
-//        \\    asm ("not real assembly"
-//        \\        :[a] "x" (->i32),:[a] "x" (1),);
-//        \\    asm ("still not real assembly"
-//        \\        :::"a","b",);
-//        \\}
-//    ,
-//        \\comptime {
-//        \\    asm volatile (
-//        \\        \\.globl aoeu;
-//        \\        \\.type aoeu, @function;
-//        \\        \\.set aoeu, derp;
-//        \\    );
-//        \\
-//        \\    asm ("not real assembly"
-//        \\        : [a] "x" (x)
-//        \\    );
-//        \\    asm ("not real assembly"
-//        \\        : [a] "x" (-> i32)
-//        \\        : [a] "x" (1)
-//        \\    );
-//        \\    asm ("still not real assembly"
-//        \\        :
-//        \\        :
-//        \\        : "a", "b"
-//        \\    );
-//        \\}
-//        \\
-//    );
-//}
+test "zig fmt: simple asm" {
+    try testTransform(
+        \\comptime {
+        \\    asm volatile (
+        \\        \\.globl aoeu;
+        \\        \\.type aoeu, @function;
+        \\        \\.set aoeu, derp;
+        \\    );
+        \\
+        \\    asm ("not real assembly"
+        \\        :[a] "x" (x),);
+        \\    asm ("not real assembly"
+        \\        :[a] "x" (->i32),:[a] "x" (1),);
+        \\    asm ("still not real assembly"
+        \\        :::"a","b",);
+        \\}
+    ,
+        \\comptime {
+        \\    asm volatile (
+        \\        \\.globl aoeu;
+        \\        \\.type aoeu, @function;
+        \\        \\.set aoeu, derp;
+        \\    );
+        \\
+        \\    asm ("not real assembly"
+        \\        : [a] "x" (x)
+        \\    );
+        \\    asm ("not real assembly"
+        \\        : [a] "x" (-> i32)
+        \\        : [a] "x" (1)
+        \\    );
+        \\    asm ("still not real assembly" ::: "a", "b");
+        \\}
+        \\
+    );
+}
 
 test "zig fmt: nested struct literal with one item" {
     try testCanonical(
@@ -3363,46 +3359,43 @@ 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)
-//        \\        : "", ""
-//        \\    );
-//        \\}
-//        \\
-//    );
-//}
+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)
+        \\        : "", ""
+        \\    );
+        \\}
+        \\
+    );
+}
 
 test "zig fmt: multiline string in array" {
     try testCanonical(
lib/std/zig/render.zig
@@ -1955,21 +1955,40 @@ fn renderAsm(
     }
 
     if (asm_node.ast.items.len == 0) {
-        try renderExpression(gpa, ais, tree, asm_node.ast.template, .none);
+        ais.pushIndent();
         if (asm_node.first_clobber) |first_clobber| {
             // asm ("foo" ::: "a", "b")
+            // asm ("foo" ::: "a", "b",)
+            try renderExpression(gpa, ais, tree, asm_node.ast.template, .space);
+            // Render the three colons.
+            try renderToken(ais, tree, first_clobber - 3, .none);
+            try renderToken(ais, tree, first_clobber - 2, .none);
+            try renderToken(ais, tree, first_clobber - 1, .space);
+
             var tok_i = first_clobber;
             while (true) : (tok_i += 1) {
                 try renderToken(ais, tree, tok_i, .none);
                 tok_i += 1;
                 switch (token_tags[tok_i]) {
-                    .r_paren => return renderToken(ais, tree, tok_i, space),
-                    .comma => try renderToken(ais, tree, tok_i, .space),
+                    .r_paren => {
+                        ais.popIndent();
+                        return renderToken(ais, tree, tok_i, space);
+                    },
+                    .comma => {
+                        if (token_tags[tok_i + 1] == .r_paren) {
+                            ais.popIndent();
+                            return renderToken(ais, tree, tok_i + 1, space);
+                        } else {
+                            try renderToken(ais, tree, tok_i, .space);
+                        }
+                    },
                     else => unreachable,
                 }
             }
         } else {
             // asm ("foo")
+            try renderExpression(gpa, ais, tree, asm_node.ast.template, .none);
+            ais.popIndent();
             return renderToken(ais, tree, asm_node.ast.rparen, space); // rparen
         }
     }