diff options
author | John Hodge <tpg@mutabah.net> | 2017-09-22 18:38:25 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-09-22 18:38:25 +0800 |
commit | 285116d4de4a866725f3ae9c3f282f07e5fac72e (patch) | |
tree | 0cae1ff6623d7853da93ff951f25ceb4d3673b31 /src/expand/asm.cpp | |
parent | d0c9d063a1f19b64fa11c846a98d5ce46c1912d4 (diff) | |
download | mrust-285116d4de4a866725f3ae9c3f282f07e5fac72e.tar.gz |
Trans - Little fixes for MSVC 32-bit
Diffstat (limited to 'src/expand/asm.cpp')
-rw-r--r-- | src/expand/asm.cpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/expand/asm.cpp b/src/expand/asm.cpp index 6ca90f3e..336321f7 100644 --- a/src/expand/asm.cpp +++ b/src/expand/asm.cpp @@ -49,9 +49,12 @@ class CAsmExpander: ::std::vector<::std::string> flags; // Outputs - if( lex.lookahead(0) == TOK_COLON ) + if( lex.lookahead(0) == TOK_COLON || lex.lookahead(0) == TOK_DOUBLE_COLON ) { GET_TOK(tok, lex); + if( tok.type() == TOK_DOUBLE_COLON ) { + lex.putback(Token(TOK_COLON)); + } while( lex.lookahead(0) == TOK_STRING ) { @@ -73,9 +76,12 @@ class CAsmExpander: } // Inputs - if( lex.lookahead(0) == TOK_COLON ) + if( lex.lookahead(0) == TOK_COLON || lex.lookahead(0) == TOK_DOUBLE_COLON ) { GET_TOK(tok, lex); + if( tok.type() == TOK_DOUBLE_COLON ) { + lex.putback(Token(TOK_COLON)); + } while( lex.lookahead(0) == TOK_STRING ) { @@ -95,9 +101,12 @@ class CAsmExpander: } // Clobbers - if( lex.lookahead(0) == TOK_COLON ) + if( lex.lookahead(0) == TOK_COLON || lex.lookahead(0) == TOK_DOUBLE_COLON ) { GET_TOK(tok, lex); + if( tok.type() == TOK_DOUBLE_COLON ) { + lex.putback(Token(TOK_COLON)); + } while( lex.lookahead(0) == TOK_STRING ) { @@ -111,9 +120,12 @@ class CAsmExpander: } // Flags - if( lex.lookahead(0) == TOK_COLON ) + if( lex.lookahead(0) == TOK_COLON || lex.lookahead(0) == TOK_DOUBLE_COLON ) { GET_TOK(tok, lex); + if( tok.type() == TOK_DOUBLE_COLON ) { + lex.putback(Token(TOK_COLON)); + } while( lex.lookahead(0) == TOK_STRING ) { @@ -126,6 +138,28 @@ class CAsmExpander: } } + if( lex.lookahead(0) == TOK_COLON || lex.lookahead(0) == TOK_DOUBLE_COLON ) + { + GET_TOK(tok, lex); + if( tok.type() == TOK_DOUBLE_COLON ) { + lex.putback(Token(TOK_COLON)); + } + + if( GET_TOK(tok, lex) == TOK_IDENT && tok.str() == "volatile" ) + { + flags.push_back( "volatile" ); + } + else + { + PUTBACK(tok, lex); + } + } + + if( lex.lookahead(0) != TOK_EOF ) + { + ERROR(sp, E0000, "Unexpected token in asm! - " << lex.getToken()); + } + ::AST::ExprNodeP rv = ::AST::ExprNodeP( new ::AST::ExprNode_Asm { mv$(template_text), mv$(outputs), mv$(inputs), mv$(clobbers), mv$(flags) } ); // TODO: Convert this into an AST node return box$( TTStreamO(TokenTree(Token( InterpolatedFragment(InterpolatedFragment::EXPR, rv.release()) )))); |