Opened 10 years ago

Closed 10 years ago

#7677 closed Bugs (fixed)

add_macro_definition("TEST=") behaves different than #define TEST

Reported by: klaus.guetter@… Owned by: Hartmut Kaiser
Milestone: To Be Determined Component: wave
Version: Boost 1.52.0 Severity: Problem
Keywords: Cc:

Description

Test1 posted below produces:

INT SPACE EOF SPACE IDENTIFIER SEMICOLON NEWLINE EOF

While Test2 produces:

INT SPACE IDENTIFIER SEMICOLON NEWLINE EOF

The EOF in the third line of Test1 output is produced by the TEST macro expansion. If this expected behaviour? I found this surprising. (MSVC10, Boost 1.51)


Code:

typedef cpplexer::lex_token<> token_type;
typedef context<
    string::iterator, 
    cpplexer::lex_iterator<token_type>
    > lexer_context_type;

void Test1()
{
  string instring("int TEST x;\n");
  lexer_context_type ctx(instring.begin(), instring.end(), "");
  ctx.set_language(language_support(support_c99));
  ctx.add_macro_definition("TEST=");

  for (lexer_context_type::iterator_type it = ctx.begin(); it != ctx.end(); ++it)
    cout << get_token_name(token_id(*it)) << endl;
}

void Test2()
{
  string instring("#define TEST\nint TEST x;\n");
  lexer_context_type ctx(instring.begin(), instring.end(), "");
  ctx.set_language(language_support(support_c99));

  for (lexer_context_type::iterator_type it = ctx.begin(); it != ctx.end(); ++it)
    cout << get_token_name(token_id(*it)) << endl;
}

Change History (1)

comment:1 by Hartmut Kaiser, 10 years ago

Resolution: fixed
Status: newclosed

This has been fixed int rev. [81273]

Note: See TracTickets for help on using tickets.