Commit 9ce36ba0cc

Andrew Kelley <superjoe30@gmail.com>
2015-12-23 23:49:34
inline assembly uses -> instead of return
1 parent e21369a
Changed files (4)
doc/langref.md
@@ -84,7 +84,7 @@ AsmOutput : token(Colon) list(AsmOutputItem, token(Comma)) option(AsmInput)
 
 AsmInput : token(Colon) list(AsmInputItem, token(Comma)) option(AsmClobbers)
 
-AsmOutputItem : token(LBracket) token(Symbol) token(RBracket) token(String) token(LParen) (token(Symbol) | token(Return) Type) token(RParen)
+AsmOutputItem : token(LBracket) token(Symbol) token(RBracket) token(String) token(LParen) (token(Symbol) | token(Arrow) Type) token(RParen)
 
 AsmInputItem : token(LBracket) token(Symbol) token(RBracket) token(String) token(LParen) Expression token(RParen)
 
src/parser.cpp
@@ -1761,7 +1761,7 @@ static void ast_parse_asm_input_item(ParseContext *pc, int *token_index, AstNode
 }
 
 /*
-AsmOutputItem : token(LBracket) token(Symbol) token(RBracket) token(String) token(LParen) (token(Symbol) | token(Return) Type) token(RParen)
+AsmOutputItem : token(LBracket) token(Symbol) token(RBracket) token(String) token(LParen) (token(Symbol) | token(Arrow) Type) token(RParen)
 */
 static void ast_parse_asm_output_item(ParseContext *pc, int *token_index, AstNode *node) {
     ast_eat_token(pc, token_index, TokenIdLBracket);
@@ -1778,7 +1778,7 @@ static void ast_parse_asm_output_item(ParseContext *pc, int *token_index, AstNod
     *token_index += 1;
     if (token->id == TokenIdSymbol) {
         ast_buf_from_token(pc, token, &asm_output->variable_name);
-    } else if (token->id == TokenIdKeywordReturn) {
+    } else if (token->id == TokenIdArrow) {
         asm_output->return_type = ast_parse_type(pc, token_index);
     } else {
         ast_invalid_token_error(pc, token);
std/bootstrap.zig
@@ -2,8 +2,8 @@ use "std.zig";
 
 #attribute("naked")
 export fn _start() -> unreachable {
-    const argc = asm("mov (%%rsp), %[argc]" : [argc] "=r" (return isize));
-    const argv = asm("lea 0x8(%%rsp), %[argv]" : [argv] "=r" (return &&u8));
-    const env = asm("lea 0x10(%%rsp,%%rdi,8), %[env]" : [env] "=r" (return &&u8));
+    const argc = asm("mov (%%rsp), %[argc]" : [argc] "=r" (-> isize));
+    const argv = asm("lea 0x8(%%rsp), %[argv]" : [argv] "=r" (-> &&u8));
+    const env = asm("lea 0x10(%%rsp,%%rdi,8), %[env]" : [env] "=r" (-> &&u8));
     exit(main(argc, argv, env))
 }
std/std.zig
@@ -4,14 +4,14 @@ const stdout_fileno : isize = 1;
 
 fn syscall1(number: isize, arg1: isize) -> isize {
     asm volatile ("syscall"
-        : [ret] "={rax}" (return isize)
+        : [ret] "={rax}" (-> isize)
         : [number] "{rax}" (number), [arg1] "{rdi}" (arg1)
         : "rcx", "r11")
 }
 
 fn syscall3(number: isize, arg1: isize, arg2: isize, arg3: isize) -> isize {
     asm volatile ("syscall"
-        : [ret] "={rax}" (return isize)
+        : [ret] "={rax}" (-> isize)
         : [number] "{rax}" (number), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3)
         : "rcx", "r11")
 }