https://gcc.gnu.org/g:5d2d1a2d9818bcde16e0c41df450e2537fb1fee4

commit r15-8187-g5d2d1a2d9818bcde16e0c41df450e2537fb1fee4
Author: jjasmine <tanghocle...@gmail.com>
Date:   Tue May 28 01:21:07 2024 -0700

    gccrs: Working towards parse_reg and parse_reg_operand
    
    gcc/rust/ChangeLog:
    
            * expand/rust-macro-builtins-asm.cc (parse_reg):
            Working towards parse_reg and parse_reg_operand
            (parse_reg_operand):
            Working towards parse_reg and parse_reg_operand
            (parse_asm_arg):
            Add todo about errors
            * expand/rust-macro-builtins-asm.h (parse_global_asm):
            remove dead code.
            (parse_nonglobal_asm):
            remove dead code.

Diff:
---
 gcc/rust/expand/rust-macro-builtins-asm.cc | 29 ++++++++++++++++++++---------
 gcc/rust/expand/rust-macro-builtins-asm.h  |  4 ----
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc 
b/gcc/rust/expand/rust-macro-builtins-asm.cc
index 3ce9bf9d78be..9e02400d77ff 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.cc
+++ b/gcc/rust/expand/rust-macro-builtins-asm.cc
@@ -141,11 +141,10 @@ parse_reg (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
   // InlineAsmRegOrRegClass of reg or reg class
   auto token = parser.peek_current_token ();
   auto tok_id = token->get_id ();
-
-  if (tok_id == IDENTIFIER)
+  AST::InlineAsmRegOrRegClass regClass;
+  if (parser.skip_token (IDENTIFIER))
     {
       // construct a InlineAsmRegOrRegClass
-      AST::InlineAsmRegOrRegClass regClass;
       regClass.type = RegType::RegClass;
       regClass.regClass.Symbol = token->as_string ();
     }
@@ -156,18 +155,27 @@ parse_reg (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
 
       // construct a InlineAsmRegOrRegClass
       // parse_format_string
+      regClass.type = RegType::Reg;
+      inlineAsmCtx.is_explicit = true;
+      regClass.regClass.Symbol = token->as_string ();
     }
   else
     {
-      // TODO
+      // TODO: This should emit error
+      //  return
+      //  
Err(p.dcx().create_err(errors::ExpectedRegisterClassOrExplicitRegister
+      //  {
+      //           span: p.token.span,
+      //       }));
     }
   if (!parser.skip_token (RIGHT_PAREN))
     {
-      // we expect a left parenthesis here, please return the correct error.
+      // TODO: we expect a left parenthesis here, please return the correct
+      // error.
       return tl::nullopt;
     }
 
-  return tl::nullopt;
+  return regClass;
 }
 
 int
@@ -193,7 +201,7 @@ parse_reg_operand (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
   //       };
 
   using RegisterType = AST::InlineAsmOperand::RegisterType;
-
+  AST::InlineAsmOperand reg_operand;
   auto token = parser.peek_current_token ();
   auto iden_token = parser.peek_current_token ();
   auto &inlineAsm = inlineAsmCtx.inlineAsm;
@@ -221,8 +229,9 @@ parse_reg_operand (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
     {}
   else if (!is_global_asm && check_identifier (parser, "inlateout"))
     {}
-  else if (false && check_identifier (parser, "const"))
+  else if (parser.peek_current_token ()->get_id () == CONST)
     {
+      rust_unreachable ();
       // todo: Please handle const
     }
   else if (false && check_identifier (parser, "sym"))
@@ -237,7 +246,7 @@ parse_reg_operand (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
     {
       return tl::nullopt;
     }
-  return tl::nullopt;
+  return reg_operand;
 }
 void
 check_and_set (Parser<MacroInvocLexer> &parser, InlineAsmContext &inlineAsmCtx,
@@ -410,6 +419,8 @@ parse_asm_arg (Parser<MacroInvocLexer> &parser, TokenId 
last_token_id,
        }
       else
        {
+         // TODO: we consumed comma, and there happens to also be a comma
+         // error should be: expected expression, found `,`
          break;
        }
 
diff --git a/gcc/rust/expand/rust-macro-builtins-asm.h 
b/gcc/rust/expand/rust-macro-builtins-asm.h
index a35d7707e6c9..c7fcf3017358 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.h
+++ b/gcc/rust/expand/rust-macro-builtins-asm.h
@@ -34,10 +34,6 @@ int
 parse_asm_arg (Parser<MacroInvocLexer> &p, TokenId last_token_id,
               InlineAsmContext &inlineAsmCtx);
 
-tl::optional<AST::Fragment>
-parse_global_asm (location_t invoc_locus, AST::MacroInvocData &invoc);
-tl::optional<AST::Fragment>
-parse_nonglobal_asm (location_t invoc_locus, AST::MacroInvocData &invoc);
 tl::optional<AST::Fragment>
 parse_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
           bool is_global_asm);

Reply via email to