Tokenizer: Skip inline assembly (Bug 2220727)
This commit is contained in:
parent
fd4b02e538
commit
eb86a0fc34
|
@ -36,6 +36,8 @@ private:
|
||||||
{
|
{
|
||||||
TEST_CASE( multiline );
|
TEST_CASE( multiline );
|
||||||
TEST_CASE( longtok );
|
TEST_CASE( longtok );
|
||||||
|
|
||||||
|
TEST_CASE( inlineasm );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,6 +94,40 @@ private:
|
||||||
DeallocateTokens();
|
DeallocateTokens();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void inlineasm()
|
||||||
|
{
|
||||||
|
const char filedata[] = "void foo()\n"
|
||||||
|
"{\n"
|
||||||
|
" __asm\n"
|
||||||
|
" {\n"
|
||||||
|
" jmp $jump1\n"
|
||||||
|
" $jump1:\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
// tokenize..
|
||||||
|
tokens = tokens_back = NULL;
|
||||||
|
std::istringstream istr(filedata);
|
||||||
|
TokenizeCode(istr, 0);
|
||||||
|
|
||||||
|
// Expected result..
|
||||||
|
const char *expected[] =
|
||||||
|
{
|
||||||
|
"void",
|
||||||
|
"foo",
|
||||||
|
"(",
|
||||||
|
")",
|
||||||
|
"{",
|
||||||
|
"}",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
// Compare..
|
||||||
|
ASSERT_EQUALS( true, cmptok(expected, tokens) );
|
||||||
|
|
||||||
|
DeallocateTokens();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST( TestTokenizer )
|
REGISTER_TEST( TestTokenizer )
|
||||||
|
|
24
tokenize.cpp
24
tokenize.cpp
|
@ -637,6 +637,30 @@ void TokenizeCode(std::istream &code, const unsigned int FileIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remove __asm..
|
||||||
|
for ( TOKEN *tok = tokens; tok; tok = tok->next )
|
||||||
|
{
|
||||||
|
if ( Match(tok->next, "__asm {") )
|
||||||
|
{
|
||||||
|
while ( tok->next )
|
||||||
|
{
|
||||||
|
bool last = Match( tok->next, "}" );
|
||||||
|
|
||||||
|
// Unlink and delete tok->next
|
||||||
|
TOKEN *next = tok->next;
|
||||||
|
tok->next = tok->next->next;
|
||||||
|
free(next->str);
|
||||||
|
delete next;
|
||||||
|
|
||||||
|
// break if this was the last token to delete..
|
||||||
|
if (last)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue