Classes | |
| class | basic_token |
| Token template. More... | |
| class | loc |
| Test location. More... | |
| class | testing_token |
| Testing token. More... | |
| class | concat |
| Token concatenator. More... | |
| class | condition |
| Conditional directive. More... | |
| class | condition_stack |
| Conditional directive stack. More... | |
| class | cpp_token |
| C++ token. More... | |
| class | data_source |
| Abstract data source. More... | |
| class | encoder |
| Abstract encoder. More... | |
| class | encoder_ascii7 |
| 7 bit ASCII encoder. More... | |
| class | encoder_factory |
| Factory for encoders. More... | |
| class | encoder_test |
| Test encoder. More... | |
| class | encoder_host |
| Host chacter set encoder. More... | |
| class | encoder_utf8 |
| UTF-8 encoder. More... | |
| class | evaluator |
| Directives evaluator. More... | |
| class | expander |
| Macro expander. More... | |
| class | file_system |
| File system binding. More... | |
| class | lex_literal |
| Base class for literals. More... | |
| class | lex_integral_literal |
| Integral literal. More... | |
| class | lex_floating_literal |
| Floating literal. More... | |
| class | lex_character_literal |
| Character literal. More... | |
| class | lex_string_literal |
| String literal. More... | |
| class | lex_boolean_literal |
| Boolean literal. More... | |
| class | lex_literal_visitor |
| class | line_control |
| Line number control. More... | |
| class | line_join |
| Line joining filter. More... | |
| class | line_numbers |
| Token numbering filter. More... | |
| class | macro |
| Preprocessor macro. More... | |
| class | macro_argument |
| Macro argument. More... | |
| class | macro_arguments |
| Macro argument list. More... | |
| class | macro_body |
| class | macro_head |
| Macro parameter list. More... | |
| class | macro_item |
| Expansion list item. More... | |
| class | macro_storage |
| Storage of defined macros. More... | |
| class | named_istream |
| Named input stream. More... | |
| class | pp_filter |
| Token filter. More... | |
| class | pp_lex |
| Integration with flexer. More... | |
| class | pp_token |
| Preprocessor token. More... | |
| class | pre_lex |
| Character level processing. More... | |
| class | preprocessor |
| C++ preprocessor. More... | |
| class | simple_location |
| Simple token location. More... | |
| class | space_remover |
| Whitespace remover. More... | |
| class | special_tokens |
| Token type assignment filter. More... | |
| class | stream_source |
| Stream data source. More... | |
| class | string_joiner |
| String literal joining filter. More... | |
| class | string_source |
| String data source. More... | |
| class | string_translator |
| Encoder into execution character set. More... | |
| class | stringifier |
| Token stringifier. More... | |
| class | taboo_macros |
| Set of taboo macros. More... | |
| class | token_input |
| Abstract input of tokens. More... | |
| class | token_sequence |
| class | token_stream |
| Stream of tokens. More... | |
| class | token_value |
| Token value. More... | |
| class | trigraphs |
| Trigraphs filter. More... | |
| class | ucn_filter |
| Token filter. More... | |
| class | ucn_token |
| Single source character token. More... | |
| class | ucn_token_buffer |
| Token buffer. More... | |
| class | unit_part |
| Part of translation unit. More... | |
Namespaces | |
| namespace | concat_guts |
| namespace | pp_lex_guts |
Typedefs | |
| typedef basic_token< ttype, ptr< loc >, int > | basic_testing_token |
| Helper typedef for basic_token template test. | |
| typedef basic_token< int, ptr< source_location >, ptr< token_value > > | basic_cpp_token |
| Helper typedef. | |
| typedef cpp_token::type_type | cpp_token_type |
| Type of token in cpp_token. | |
| typedef encoder_test< 1 > | enc1 |
| Helper typedef for test encoder. | |
| typedef encoder_test< 2 > | enc2 |
| Helper typedef for test encoder. | |
| typedef encoder_test< 3 > | enc3 |
| Helper typedef for test encoder. | |
| typedef basic_token< lc_host_uint_least16, ptr< source_location >, ptr< token_value > > | basic_pp_token |
| Defines basic preprocessor token. | |
| typedef pp_token::type_type | pp_token_type |
| Type of token in pp_token. | |
| typedef vector< srp< simple_location > > | vec_loc |
| typedef basic_token< lc_host_uint_least9, ptr< simple_location >, ucn > | basic_ucn_token |
| Helper typedef. | |
| typedef ucn_token::type_type | ucn_token_type |
| Type of token in ucn_token. | |
Enumerations | |
| enum | ttype { POSITIVE = 1, ZERO = 0, NEGATIVE = -1 } |
| Token type. More... | |
Functions | |
| void | basic_token_test (void) |
| Tests basic token. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | unable_to_concatenate (::lestes::msg::message_stencil0< bool >::create("the concatenation does not result in a valid preprocessing token",::lestes::msg::message::FLG_ERROR)) |
| void | concat_test (void) |
| Tests concat class. | |
| void | condition_test (void) |
| Tests condition class. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | elif_without_if (::lestes::msg::message_stencil0< bool >::create("#elif without #if",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | endif_without_if (::lestes::msg::message_stencil0< bool >::create("#endif without #if",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | else_without_if (::lestes::msg::message_stencil0< bool >::create("#else without #if",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | elif_after_else (::lestes::msg::message_stencil0< bool >::create("#elif after #else",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | else_after_else (::lestes::msg::message_stencil0< bool >::create("#else after #else",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< lstring > > | unterminated_conditional (::lestes::msg::message_stencil1< lstring >::create("unterminated %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | conditional_starts_here (::lestes::msg::message_stencil0< bool >::create("the conditional starts here",::lestes::msg::message::FLG_ERROR)) |
| void | condition_stack_test (void) |
| Tests condition class. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_ascii_character (::lestes::msg::message_stencil0< bool >::create("the character is invalid for ASCII source encoding",::lestes::msg::message::FLG_ERROR)) |
| void | encoder_ascii7_test (void) |
| Tests encoder_ascii7 class. | |
| void | encoder_factory_test (void) |
| Tests encoder_factory class. | |
| void | encoder_host_test (void) |
| Tests encoder_host class. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_utf_character (::lestes::msg::message_stencil0< bool >::create("the character is invalid for UTF-8 source encoding",::lestes::msg::message::FLG_ERROR)) |
| void | encoder_utf8_test (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_character_in_filename (::lestes::msg::message_stencil0< bool >::create("unsupported character in filename",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< lstring > > | trailing_tokens_in_directive (::lestes::msg::message_stencil1< lstring >::create("extra tokens at the end of %0 directive",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())) |
| ptr< ::lestes::msg::message_stencil1< lstring > > | directive_expects_macro_name (::lestes::msg::message_stencil1< lstring >::create("expected macro name after %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())) |
| ptr< ::lestes::msg::message_stencil1< lstring > > | unable_to_open_file (::lestes::msg::message_stencil1< lstring >::create("unable to open file `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | malformed_include (::lestes::msg::message_stencil0< bool >::create("malformed #include, expecting <filename> or \"filename\"",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | invalid_directve (::lestes::msg::message_stencil1< ucn_string >::create("invalid preprocessing directive `#%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | line_expects_number (::lestes::msg::message_stencil0< bool >::create("first parameter of #line shall be decimal digit sequence between 1 and 32767",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | line_expects_string (::lestes::msg::message_stencil0< bool >::create("second parameter of #line shall be a string",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | user_error (::lestes::msg::message_stencil0< bool >::create("user defined error",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< ulint > > | nesting_too_deep (::lestes::msg::message_stencil1< ulint >::create("nesting of includes is too deep, only %0 levels supported",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ulint >::instance())) |
| initialize_logger (lex_logger,"lex", cplus_logger) | |
| declare_logger (lex_logger) | |
| initialize_logger (pp_lex_logger,"pp_lex", lex_logger) | |
| initialize_logger (pp_lex_guts_logger,"pp_lex_guts", lex_logger) | |
| initialize_logger (preprocessor_logger,"preprocessor", lex_logger) | |
| initialize_logger (trigraphs_logger,"trigraphs", lex_logger) | |
| initialize_logger (pre_lex_logger,"pre_lex", lex_logger) | |
| declare_logger (pp_lex_logger) | |
| declare_logger (pp_lex_guts_logger) | |
| declare_logger (preprocessor_logger) | |
| declare_logger (trigraphs_logger) | |
| declare_logger (pre_lex_logger) | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | unterminated_argument_list (::lestes::msg::message_stencil1< ucn_string >::create("unterminated argument list invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > | invalid_argument_count (::lestes::msg::message_stencil2< ucn_string, ulint >::create("invalid argument count %1 invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance(),::lestes::msg::formatter< ulint >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | definition_expects_macro_name (::lestes::msg::message_stencil0< bool >::create("expected name of a macro",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | macro_name_alt_operator (::lestes::msg::message_stencil1< ucn_string >::create("alternative spelling `%0' of a C++ operator cannot be used as a macro name",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | macro_name_identifier (::lestes::msg::message_stencil0< bool >::create("macro name must be an identifier",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | defined_invalid_macro_name (::lestes::msg::message_stencil0< bool >::create("`defined' cannot be used as a macro name",::lestes::msg::message::FLG_ERROR)) |
| void | macro_argument_test (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_without_parameter (::lestes::msg::message_stencil0< bool >::create("'#' is not followed by a macro parameter",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_hash_at_beginning (::lestes::msg::message_stencil0< bool >::create("'##' at the beginning of a macro expansion",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_hash_at_end (::lestes::msg::message_stencil0< bool >::create("'##' at the end of a macro expansion",::lestes::msg::message::FLG_ERROR)) |
| void | macro_body_test (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_macro_parameter (::lestes::msg::message_stencil0< bool >::create("expected macro parameter name",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_right_par (::lestes::msg::message_stencil0< bool >::create("expected `)' at the end of macro parameter list",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_comma (::lestes::msg::message_stencil0< bool >::create("expected `,' separator between macro parameters",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | expected_comma_right_par (::lestes::msg::message_stencil1< ucn_string >::create("`%0' is invalid after macro parameter name, expected `,' or `)'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | duplicate_macro_parameter (::lestes::msg::message_stencil1< ucn_string >::create("duplicate macro parameter `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| void | macro_head_test (void) |
| Tests macro_head class. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | predefined_macro_redefined (::lestes::msg::message_stencil1< ucn_string >::create("attempt to redefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | predefined_macro_undefined (::lestes::msg::message_stencil1< ucn_string >::create("attempt to undefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | macro_redefinition_different (::lestes::msg::message_stencil1< ucn_string >::create("macro `%0' redefinition is different from the previous definition",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_macro_name (::lestes::msg::message_stencil0< bool >::create("macro name must be identifier",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | previous_definition (::lestes::msg::message_stencil0< bool >::create("this is the location of the previous definition",::lestes::msg::message::FLG_ERROR)) |
| void | run (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | unterminated_comment (::lestes::msg::message_stencil0< bool >::create("unterminated comment",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | empty_character_constant (::lestes::msg::message_stencil0< bool >::create("empty character constant",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_terminating_quote (::lestes::msg::message_stencil0< bool >::create("missing terminating ' character",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_terminating_dquote (::lestes::msg::message_stencil0< bool >::create("missing terminating \" character",::lestes::msg::message::FLG_ERROR)) |
| void | pp_lex_test (void) |
| void | pp_token_test (void) |
| Tests pp_token class. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_newline (::lestes::msg::message_stencil0< bool >::create("newline at the end of file missing",::lestes::msg::message::FLG_ERROR)) |
| void | pre_lex_test (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_character_in_number (::lestes::msg::message_stencil0< bool >::create("invalid character in number",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | floating_exponent_empty (::lestes::msg::message_stencil0< bool >::create("floating literal exponent with no digits",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | floating_suffix_invalid (::lestes::msg::message_stencil0< bool >::create("floating literal with invalid suffix",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | integral_suffix_invalid (::lestes::msg::message_stencil0< bool >::create("integral literal with invalid suffix",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | integral_empty (::lestes::msg::message_stencil0< bool >::create("integral literal with no digits",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | invalid_cpp_token (::lestes::msg::message_stencil1< ucn_string >::create("cannot convert `%0' to C++ token",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | stray_character (::lestes::msg::message_stencil1< ucn_string >::create("stray character `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())) |
| ptr< ::lestes::msg::message_stencil0< bool > > | mixed_strings (::lestes::msg::message_stencil0< bool >::create("adjacent narrow and wide string literals",::lestes::msg::message::FLG_ERROR)) |
| void | string_joiner_test (void) |
| Tests string_joiner class. | |
| ::std::ostream & | operator<< (::std::ostream &o, const ptr< token_sequence > &ts) |
| prints debug dump of token sequence | |
| void | token_sequence_test (void) |
| ::std::ostream & | operator<< (::std::ostream &o, const ptr< token_stream > &ts) |
| Prints debug dump of token stream. | |
| void | trigraphs_test (void) |
| void | ucn_token_test (void) |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_value_invalid (::lestes::msg::message_stencil0< bool >::create("value of universal character escape sequence out of range",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_value_invalid_in_identifier (::lestes::msg::message_stencil0< bool >::create("value of universal character escape sequence out of range for identifiers",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_insufficient_digits (::lestes::msg::message_stencil0< bool >::create("insufficient digits in universal character escape sequence",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_escape_sequence (::lestes::msg::message_stencil0< bool >::create("invalid escape sequence",::lestes::msg::message::FLG_ERROR)) |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_hexadecimal_digits (::lestes::msg::message_stencil0< bool >::create("`\\x' with no hexadecimal digits",::lestes::msg::message::FLG_ERROR)) |
| void | ucn_token_buffer_test (void) |
| void | unit_part_test (void) |
Variables | |
| ptr< ::lestes::msg::message_stencil0< bool > > | unable_to_concatenate |
| Error message for token concatenation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | elif_without_if |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | endif_without_if |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | else_without_if |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | elif_after_else |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | else_after_else |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil1< lstring > > | unterminated_conditional |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | conditional_starts_here |
| Error message for conditional directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_ascii_character |
| Error message for encoder. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_utf_character |
| Error message for encoder. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_character_in_filename |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< lstring > > | trailing_tokens_in_directive |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< lstring > > | directive_expects_macro_name |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< lstring > > | unable_to_open_file |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | malformed_include |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | invalid_directve |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | line_expects_number |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | line_expects_string |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | user_error |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< ulint > > | nesting_too_deep |
| Error message for preprocessing directives. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | unterminated_argument_list |
| Error message for macro expansion. | |
| ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > | invalid_argument_count |
| Error message for macro expansion. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | definition_expects_macro_name |
| Error message for macro parsing. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | macro_name_alt_operator |
| Error message for macro parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | macro_name_identifier |
| Error message for macro parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | defined_invalid_macro_name |
| Error message for macro parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_without_parameter |
| Error message for macro expansion list. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_hash_at_beginning |
| Error message for macro expansion list. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | hash_hash_at_end |
| Error message for macro expansion list. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_macro_parameter |
| Error message for macro parameter list. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_right_par |
| Error message for macro parameter list. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_comma |
| Error message for macro parameter list. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | expected_comma_right_par |
| Error message for macro parameter list. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | duplicate_macro_parameter |
| Error message for macro parameter list. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | predefined_macro_redefined |
| Error message for macro manipulation. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | predefined_macro_undefined |
| Error message for macro manipulation. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | macro_redefinition_different |
| Error message for macro manipulation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | expected_macro_name |
| Error message for macro manipulation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | previous_definition |
| Error message for macro manipulation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | unterminated_comment |
| Error message for flexer. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | empty_character_constant |
| Error message for flexer. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_terminating_quote |
| Error message for flexer. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_terminating_dquote |
| Error message for flexer. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_newline |
| Error message for reading characters. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_character_in_number |
| Error message for number parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | floating_exponent_empty |
| Error message for number parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | floating_suffix_invalid |
| Error message for number parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | integral_suffix_invalid |
| Error message for number parsing. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | integral_empty |
| Error message for number parsing. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | invalid_cpp_token |
| Error message for token conversion. | |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > | stray_character |
| Error message for token conversion. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | mixed_strings |
| Error message for string joining. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_value_invalid |
| Error message for ucn translation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_value_invalid_in_identifier |
| Error message for ucn translation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | ucn_escape_insufficient_digits |
| Error message for ucn translation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | invalid_escape_sequence |
| Error message for ucn translation. | |
| ptr< ::lestes::msg::message_stencil0< bool > > | missing_hexadecimal_digits |
| Error message for ucn translation. | |
| typedef basic_token<int,ptr<source_location>,ptr<token_value> > lestes::lang::cplus::lex::basic_cpp_token |
| typedef basic_token<lc_host_uint_least16,ptr<source_location>, ptr<token_value> > lestes::lang::cplus::lex::basic_pp_token |
| typedef basic_token<ttype,ptr<loc>,int> lestes::lang::cplus::lex::basic_testing_token |
| typedef encoder_test<1> lestes::lang::cplus::lex::enc1 |
| typedef encoder_test<2> lestes::lang::cplus::lex::enc2 |
| typedef encoder_test<3> lestes::lang::cplus::lex::enc3 |
| typedef vector< srp<simple_location> > lestes::lang::cplus::lex::vec_loc |
Definition at line 46 of file pre_lex.test.cc.
| void lestes::lang::cplus::lex::basic_token_test | ( | void | ) |
Tests basic token.
Performs testing of basic token.
Definition at line 158 of file basic_token.test.cc.
References a, b, lestes::lang::cplus::lex::testing_token::create(), lestes::lang::cplus::lex::loc::create(), lestes::is_equal(), lassert, NEGATIVE, POSITIVE, and ZERO.
Referenced by main().
00159 { 00160 ptr<loc> el = loc::create(13); 00161 ptr<loc> em = loc::create(17); 00162 ptr<testing_token> a = testing_token::create(em,ZERO,0); 00163 00164 lassert(is_equal(a,a)); 00165 lassert(is_equal(a->location_get(),em)); 00166 lassert(is_equal(a->type_get(),ZERO)); 00167 lassert(is_equal(a->value_get(),0)); 00168 00169 a = testing_token::create(el,POSITIVE,13); 00170 00171 lassert(is_equal(a,a)); 00172 lassert(is_equal(a->location_get(),el)); 00173 lassert(is_equal(a->type_get(),POSITIVE)); 00174 lassert(is_equal(a->value_get(),13)); 00175 00176 ptr<testing_token> b = testing_token::create(em,NEGATIVE,-4); 00177 ptr<testing_token> c = b->clone(); 00178 00179 lassert(is_equal(c,b)); 00180 lassert(is_equal(b,c)); 00181 lassert(is_equal(b->type_get(),c->type_get())); 00182 lassert(is_equal(b->value_get(),c->value_get())); 00183 lassert(is_equal(b->location_get(),c->location_get())); 00184 00185 ptr<testing_token> d; 00186 00187 d = a; 00188 00189 lassert(is_equal(d,a)); 00190 lassert(is_equal(a,d)); 00191 lassert(is_equal(d->type_get(),POSITIVE)); 00192 lassert(is_equal(d->value_get(),13)); 00193 lassert(is_equal(d->location_get(),el)); 00194 }
| void lestes::lang::cplus::lex::concat_test | ( | void | ) |
Tests concat class.
Performs testing of concat class.
Definition at line 55 of file concat.test.cc.
References lestes::is_equal(), lassert, TOK_EQ, TOK_IDENT, TOK_PLUS, TOK_PLUS_EQ, and u.
Referenced by main().
00056 { 00057 ptr<concat> cat = concat::instance(); 00058 ptr<file_info> fi = file_info::create("<testing>",NULL); 00059 ptr<token_sequence> ts; 00060 00061 ptr<source_location> l = source_location::create(fi,1,1); 00062 ptr<source_location> m = source_location::create(fi,1,2); 00063 ptr<pp_token> t = pp_token::create(l,pp_token::TOK_PLUS); 00064 ptr<pp_token> u = pp_token::create(m,pp_token::TOK_EQ); 00065 ts = cat->process(t,u); 00066 lassert(ts); 00067 lassert(ts->length() == 1); 00068 ptr<pp_token> r = ts->read_front(); 00069 lassert(r); 00070 lassert(is_equal(r->type_get(),pp_token::TOK_PLUS_EQ)); 00071 lassert(is_equal(r->location_get(),l)); 00072 00073 ts = cat->process(u,t); 00074 lassert(ts); 00075 lassert(ts->length() == 2); 00076 r = ts->read_front(); 00077 lassert(is_equal(r,u)); 00078 ptr<pp_token> s = ts->read_front(); 00079 lassert(is_equal(s,t)); 00080 00081 t = pp_token::create(l,pp_token::TOK_IDENT,token_value::create("L")); 00082 u = pp_token::create(m,pp_token::TOK_STRING_LIT,token_value::create("abc")); 00083 ts = cat->process(t,u); 00084 lassert(ts->length() == 1); 00085 r = ts->read_front(); 00086 lassert(r); 00087 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00088 lassert(is_equal(r->location_get(),l)); 00089 00090 }
| void lestes::lang::cplus::lex::condition_stack_test | ( | void | ) |
Tests condition class.
Performs testing of condition_stack class.
Definition at line 52 of file condition_stack.test.cc.
References lestes::is_equal(), and lassert.
Referenced by main().
00053 { 00054 ptr<source_location> loc = source_location::create(file_info::create("abc",NULL),1,1); 00055 ptr<condition_stack> cs = condition_stack::create(); 00056 00057 lassert(is_equal(cs->active_get(),true)); 00058 lassert(is_equal(cs->depth(),0U)); 00059 00060 // error: #else without #if 00061 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),false)); 00062 lassert(is_equal(cs->active_get(),true)); 00063 lassert(is_equal(cs->depth(),0U)); 00064 00065 // error: #elif without #if 00066 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),false)); 00067 lassert(is_equal(cs->active_get(),true)); 00068 lassert(is_equal(cs->depth(),0U)); 00069 00070 // error: #endif without #if 00071 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),false)); 00072 lassert(is_equal(cs->active_get(),true)); 00073 lassert(is_equal(cs->depth(),0U)); 00074 00075 00076 // #if false 00077 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00078 lassert(is_equal(cs->active_get(),false)); 00079 lassert(is_equal(cs->depth(),1U)); 00080 00081 // #endif 00082 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00083 lassert(is_equal(cs->active_get(),true)); 00084 lassert(is_equal(cs->depth(),0U)); 00085 00086 00087 // #if true 00088 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00089 lassert(is_equal(cs->active_get(),true)); 00090 lassert(is_equal(cs->depth(),1U)); 00091 00092 // #endif 00093 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00094 lassert(is_equal(cs->active_get(),true)); 00095 lassert(is_equal(cs->depth(),0U)); 00096 00097 00098 // #if false 00099 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00100 lassert(is_equal(cs->active_get(),false)); 00101 lassert(is_equal(cs->depth(),1U)); 00102 00103 // #else 00104 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00105 lassert(is_equal(cs->active_get(),true)); 00106 lassert(is_equal(cs->depth(),1U)); 00107 00108 // #endif 00109 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00110 lassert(is_equal(cs->active_get(),true)); 00111 lassert(is_equal(cs->depth(),0U)); 00112 00113 00114 // #if true 00115 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00116 lassert(is_equal(cs->active_get(),true)); 00117 lassert(is_equal(cs->depth(),1U)); 00118 00119 // #else 00120 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00121 lassert(is_equal(cs->active_get(),false)); 00122 lassert(is_equal(cs->depth(),1U)); 00123 00124 // #endif 00125 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00126 lassert(is_equal(cs->active_get(),true)); 00127 lassert(is_equal(cs->depth(),0U)); 00128 00129 00130 // #if false 00131 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00132 lassert(is_equal(cs->active_get(),false)); 00133 lassert(is_equal(cs->depth(),1U)); 00134 00135 // #elif true 00136 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true)); 00137 lassert(is_equal(cs->active_get(),true)); 00138 lassert(is_equal(cs->depth(),1U)); 00139 00140 // #elif false 00141 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true)); 00142 lassert(is_equal(cs->active_get(),false)); 00143 lassert(is_equal(cs->depth(),1U)); 00144 00145 // #endif 00146 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00147 lassert(is_equal(cs->active_get(),true)); 00148 lassert(is_equal(cs->depth(),0U)); 00149 00150 00151 // #if false 00152 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00153 lassert(is_equal(cs->active_get(),false)); 00154 lassert(is_equal(cs->depth(),1U)); 00155 00156 // #elif false 00157 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true)); 00158 lassert(is_equal(cs->active_get(),false)); 00159 lassert(is_equal(cs->depth(),1U)); 00160 00161 // #elif true 00162 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true)); 00163 lassert(is_equal(cs->active_get(),true)); 00164 lassert(is_equal(cs->depth(),1U)); 00165 00166 // #endif 00167 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00168 lassert(is_equal(cs->active_get(),true)); 00169 lassert(is_equal(cs->depth(),0U)); 00170 00171 00172 // #if true 00173 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00174 lassert(is_equal(cs->active_get(),true)); 00175 lassert(is_equal(cs->depth(),1U)); 00176 00177 // #elif true 00178 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true)); 00179 lassert(is_equal(cs->active_get(),false)); 00180 lassert(is_equal(cs->depth(),1U)); 00181 00182 // #elif false 00183 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true)); 00184 lassert(is_equal(cs->active_get(),false)); 00185 lassert(is_equal(cs->depth(),1U)); 00186 00187 // #endif 00188 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00189 lassert(is_equal(cs->active_get(),true)); 00190 lassert(is_equal(cs->depth(),0U)); 00191 00192 00193 // #if true 00194 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00195 lassert(is_equal(cs->active_get(),true)); 00196 lassert(is_equal(cs->depth(),1U)); 00197 00198 // #elif false 00199 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true)); 00200 lassert(is_equal(cs->active_get(),false)); 00201 lassert(is_equal(cs->depth(),1U)); 00202 00203 // #elif true 00204 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true)); 00205 lassert(is_equal(cs->active_get(),false)); 00206 lassert(is_equal(cs->depth(),1U)); 00207 00208 // #endif 00209 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00210 lassert(is_equal(cs->active_get(),true)); 00211 lassert(is_equal(cs->depth(),0U)); 00212 00213 00214 // #if false 00215 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00216 lassert(is_equal(cs->active_get(),false)); 00217 lassert(is_equal(cs->depth(),1U)); 00218 00219 // #elif false 00220 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true)); 00221 lassert(is_equal(cs->active_get(),false)); 00222 lassert(is_equal(cs->depth(),1U)); 00223 00224 // #else 00225 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00226 lassert(is_equal(cs->active_get(),true)); 00227 lassert(is_equal(cs->depth(),1U)); 00228 00229 // #endif 00230 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00231 lassert(is_equal(cs->active_get(),true)); 00232 lassert(is_equal(cs->depth(),0U)); 00233 00234 00235 // #if false 00236 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00237 lassert(is_equal(cs->active_get(),false)); 00238 lassert(is_equal(cs->depth(),1U)); 00239 00240 // #elif true 00241 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true)); 00242 lassert(is_equal(cs->active_get(),true)); 00243 lassert(is_equal(cs->depth(),1U)); 00244 00245 // #else 00246 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00247 lassert(is_equal(cs->active_get(),false)); 00248 lassert(is_equal(cs->depth(),1U)); 00249 00250 // #endif 00251 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00252 lassert(is_equal(cs->active_get(),true)); 00253 lassert(is_equal(cs->depth(),0U)); 00254 00255 00256 // #if true 00257 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00258 lassert(is_equal(cs->active_get(),true)); 00259 lassert(is_equal(cs->depth(),1U)); 00260 00261 // error: eof in #if 00262 lassert(is_equal(cs->process(condition_stack::DIR_EOF,false,loc),false)); 00263 lassert(is_equal(cs->active_get(),true)); 00264 lassert(is_equal(cs->depth(),1U)); 00265 00266 // #else 00267 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00268 lassert(is_equal(cs->active_get(),false)); 00269 lassert(is_equal(cs->depth(),1U)); 00270 00271 // error: #else after #else 00272 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),false)); 00273 lassert(is_equal(cs->active_get(),false)); 00274 lassert(is_equal(cs->depth(),1U)); 00275 00276 // error: #elif after #else 00277 lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),false)); 00278 lassert(is_equal(cs->active_get(),false)); 00279 lassert(is_equal(cs->depth(),1U)); 00280 00281 // clear the #if with #endif 00282 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00283 lassert(is_equal(cs->active_get(),true)); 00284 lassert(is_equal(cs->depth(),0U)); 00285 00286 00287 // #if true 00288 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00289 lassert(is_equal(cs->active_get(),true)); 00290 lassert(is_equal(cs->depth(),1U)); 00291 00292 // nested #if true 00293 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00294 lassert(is_equal(cs->active_get(),true)); 00295 lassert(is_equal(cs->depth(),2U)); 00296 00297 // nested #else 00298 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00299 lassert(is_equal(cs->active_get(),false)); 00300 lassert(is_equal(cs->depth(),2U)); 00301 00302 // nested #endif 00303 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00304 lassert(is_equal(cs->active_get(),true)); 00305 lassert(is_equal(cs->depth(),1U)); 00306 00307 // nested #if false 00308 lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true)); 00309 lassert(is_equal(cs->active_get(),false)); 00310 lassert(is_equal(cs->depth(),2U)); 00311 00312 // nested #else 00313 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00314 lassert(is_equal(cs->active_get(),true)); 00315 lassert(is_equal(cs->depth(),2U)); 00316 00317 // nested #endif 00318 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00319 lassert(is_equal(cs->active_get(),true)); 00320 lassert(is_equal(cs->depth(),1U)); 00321 00322 // #else 00323 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00324 lassert(is_equal(cs->active_get(),false)); 00325 lassert(is_equal(cs->depth(),1U)); 00326 00327 // nested #if true 00328 lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true)); 00329 lassert(is_equal(cs->active_get(),false)); 00330 lassert(is_equal(cs->depth(),2U)); 00331 00332 // nested #else 00333 lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true)); 00334 lassert(is_equal(cs->active_get(),false)); 00335 lassert(is_equal(cs->depth(),2U)); 00336 00337 // nested #endif 00338 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00339 lassert(is_equal(cs->active_get(),false)); 00340 lassert(is_equal(cs->depth(),1U)); 00341 00342 // #endif 00343 lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true)); 00344 lassert(is_equal(cs->active_get(),true)); 00345 lassert(is_equal(cs->depth(),0U)); 00346 00347 }
| void lestes::lang::cplus::lex::condition_test | ( | void | ) |
Tests condition class.
Performs testing of condition class.
Definition at line 52 of file condition.test.cc.
References lestes::is_equal(), and lassert.
Referenced by main().
00053 { 00054 ptr<source_location> loc = source_location::create(file_info::create("abc",NULL),1,1); 00055 00056 // empty condition 00057 ptr<condition> c0 = condition::create_empty(); 00058 lassert(is_equal(c0,c0)); 00059 lassert(is_equal(c0->type_get(),condition::COND_EMPTY)); 00060 lassert(is_equal(c0->active_get(),true)); 00061 00062 // normal condition 00063 ptr<condition> c1 = condition::create(condition::COND_IF,true,false,loc); 00064 lassert(is_equal(c1,c1)); 00065 lassert(!is_equal(c1,c0)); 00066 lassert(is_equal(c1->type_get(),condition::COND_IF)); 00067 lassert(is_equal(c1->waiting_get(),true)); 00068 lassert(is_equal(c1->active_get(),false)); 00069 lassert(is_equal(c1->location_get(),loc)); 00070 00071 // another normal condition 00072 ptr<condition> c2 = condition::create(condition::COND_ELIF,false,true,loc); 00073 lassert(is_equal(c2,c2)); 00074 lassert(!is_equal(c2,c1)); 00075 lassert(is_equal(c2->type_get(),condition::COND_ELIF)); 00076 lassert(is_equal(c2->waiting_get(),false)); 00077 lassert(is_equal(c2->active_get(),true)); 00078 lassert(is_equal(c2->location_get(),loc)); 00079 00080 // same condition 00081 ptr<condition> c3 = condition::create(condition::COND_ELIF,false,true,loc); 00082 lassert(is_equal(c3,c3)); 00083 lassert(!is_equal(c3,c1)); 00084 lassert(is_equal(c3,c2)); 00085 lassert(is_equal(c2->type_get(),condition::COND_ELIF)); 00086 lassert(is_equal(c2->waiting_get(),false)); 00087 lassert(is_equal(c2->active_get(),true)); 00088 lassert(is_equal(c2->location_get(),loc)); 00089 }
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::conditional_starts_here | ( | ::lestes::msg::message_stencil0< bool >:: | create("the conditional starts here",::lestes::msg::message::FLG_ERROR) | ) |
Issued to show the actual start of the conditional.
| lestes::lang::cplus::lex::declare_logger | ( | pre_lex_logger | ) |
| lestes::lang::cplus::lex::declare_logger | ( | trigraphs_logger | ) |
| lestes::lang::cplus::lex::declare_logger | ( | preprocessor_logger | ) |
| lestes::lang::cplus::lex::declare_logger | ( | pp_lex_guts_logger | ) |
| lestes::lang::cplus::lex::declare_logger | ( | pp_lex_logger | ) |
| lestes::lang::cplus::lex::declare_logger | ( | lex_logger | ) |
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::defined_invalid_macro_name | ( | ::lestes::msg::message_stencil0< bool >:: | create("`defined' cannot be used as a macro name",::lestes::msg::message::FLG_ERROR) | ) |
Issued when `defined' is used as a name of the macro.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::definition_expects_macro_name | ( | ::lestes::msg::message_stencil0< bool >:: | create("expected name of a macro",::lestes::msg::message::FLG_ERROR) | ) |
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::directive_expects_macro_name | ( | ::lestes::msg::message_stencil1< lstring >:: | create("expected macro name after %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()) | ) |
Issued when no macro name is given in a directive where expected. The zeroth parameter is the string representation of the directive name.
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::duplicate_macro_parameter | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("duplicate macro parameter `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when the same identifier is used for two macro parameters. The parameter name is passed as an argument for the message.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_after_else | ( | ::lestes::msg::message_stencil0< bool >:: | create("#elif after #else",::lestes::msg::message::FLG_ERROR) | ) |
Issued when elif is encountered after else.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_without_if | ( | ::lestes::msg::message_stencil0< bool >:: | create("#elif without #if",::lestes::msg::message::FLG_ERROR) | ) |
Issued when elif is encountered prior to if.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_after_else | ( | ::lestes::msg::message_stencil0< bool >:: | create("#else after #else",::lestes::msg::message::FLG_ERROR) | ) |
Issued when else is encountered after else.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_without_if | ( | ::lestes::msg::message_stencil0< bool >:: | create("#else without #if",::lestes::msg::message::FLG_ERROR) | ) |
Issued when else is encountered prior to if.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::empty_character_constant | ( | ::lestes::msg::message_stencil0< bool >:: | create("empty character constant",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a (wide) character literal does not contain any characters.
Referenced by lexer_parse().
| void lestes::lang::cplus::lex::encoder_ascii7_test | ( | void | ) |
Tests encoder_ascii7 class.
Performs testing of encoder_ascii7 class.
Definition at line 52 of file encoder_ascii7.test.cc.
References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.
Referenced by main().
00053 { 00054 char *in[TEST_CNT] = { 00055 /* allowed */ 00056 "\x01" 00057 , 00058 /* allowed */ 00059 "\x4D" 00060 , 00061 /* allowed */ 00062 "\x7E" 00063 , 00064 /* allowed */ 00065 "\x7F" 00066 , 00067 /* disallowed */ 00068 "\x80" 00069 , 00070 /* disallowed */ 00071 "\x81" 00072 , 00073 /* disallowed */ 00074 "\x90" 00075 , 00076 /* disallowed */ 00077 "\xAF" 00078 , 00079 /* disallowed */ 00080 "\xFF" 00081 }; 00082 00083 ucn_token_type out[] = { 00084 ucn_token::TOK_NOT_EOF, 00085 ucn_token::TOK_EOF, 00086 ucn_token::TOK_NOT_EOF, 00087 ucn_token::TOK_EOF, 00088 ucn_token::TOK_NOT_EOF, 00089 ucn_token::TOK_EOF, 00090 ucn_token::TOK_NOT_EOF, 00091 ucn_token::TOK_EOF, 00092 ucn_token::TOK_ERROR, 00093 ucn_token::TOK_ERROR, 00094 ucn_token::TOK_ERROR, 00095 ucn_token::TOK_ERROR, 00096 ucn_token::TOK_ERROR, 00097 }; 00098 00099 ptr<ucn_token> tok; 00100 ucn_token_type utt; 00101 ulint test, i; 00102 00103 for (i = test = 0; test < TEST_CNT; test++) { 00104 ptr<data_source> ds = string_source::create(string_source::string_type(in[test])); 00105 ptr<encoder_ascii7> enc = encoder_ascii7::create(); 00106 00107 enc->input_set(ds); 00108 00109 while (true) { 00110 tok = enc->read(); 00111 utt = tok->type_get(); 00112 lassert(utt == out[i]); 00113 i++; 00114 if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break; 00115 } 00116 } 00117 }
| void lestes::lang::cplus::lex::encoder_factory_test | ( | void | ) |
Tests encoder_factory class.
Performs testing of encoder_factory class.
Definition at line 111 of file encoder_factory.test.cc.
References lestes::lang::cplus::lex::encoder_factory::instance(), lestes::is_equal(), and lassert.
Referenced by main().
00112 { 00113 ptr<encoder_factory> ef = encoder_factory::instance(); 00114 00115 // instance exists 00116 lassert(ef); 00117 00118 // the factory is empty 00119 lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL))); 00120 lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL))); 00121 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL))); 00122 00123 // inserted first 00124 ef->insert("first",encoder_factory::encoder_create_adaptor<enc1>); 00125 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL))); 00126 lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL))); 00127 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL))); 00128 lassert(is_equal(ef->summon("first")->read()->value_get(),1U)); 00129 00130 // inserted second 00131 ef->insert("second",&encoder_factory::encoder_create_adaptor<enc2>); 00132 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL))); 00133 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL))); 00134 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL))); 00135 lassert(is_equal(ef->summon("first")->read()->value_get(),1U)); 00136 lassert(is_equal(ef->summon("second")->read()->value_get(),2U)); 00137 00138 // inserted third 00139 ef->insert("third",&encoder_factory::encoder_create_adaptor<enc3>); 00140 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL))); 00141 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL))); 00142 lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL))); 00143 lassert(is_equal(ef->summon("first")->read()->value_get(),1U)); 00144 lassert(is_equal(ef->summon("second")->read()->value_get(),2U)); 00145 lassert(is_equal(ef->summon("third")->read()->value_get(),3U)); 00146 00147 // removed first 00148 ef->remove("first"); 00149 lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL))); 00150 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL))); 00151 lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL))); 00152 lassert(is_equal(ef->summon("second")->read()->value_get(),2U)); 00153 lassert(is_equal(ef->summon("third")->read()->value_get(),3U)); 00154 00155 }
| void lestes::lang::cplus::lex::encoder_host_test | ( | void | ) |
Tests encoder_host class.
Performs testing of encoder_host class.
Definition at line 53 of file encoder_host.test.cc.
References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.
Referenced by main().
00054 { 00055 char *supported = 00056 "\a\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@" 00057 "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; 00058 00059 // search for char value not expressable 00060 // TODO pt ugly 00061 ptr< set<ulint> > sch = set<ulint>::create(); 00062 for (char *s = supported; *s; s++) { 00063 sch->insert(static_cast<ulint>(*s)); 00064 } 00065 00066 set<ulint>::iterator it = sch->begin(); 00067 char c = static_cast<char>(*it); 00068 if (c > CHAR_MIN) { 00069 c--; 00070 } else { 00071 set<ulint>::reverse_iterator rit = sch->rbegin(); 00072 c = static_cast<char>(*rit); 00073 lassert(c < CHAR_MAX); 00074 c++; 00075 } 00076 00077 char unsupported[] = { c, '\0' }; 00078 00079 char *in[TEST_CNT] = { 00080 /* allowed */ 00081 supported 00082 , 00083 /* disallowed */ 00084 unsupported 00085 }; 00086 00087 ucn_token_type out[] = { 00088 ucn_token::TOK_NOT_EOF, 00089 ucn_token::TOK_NOT_EOF, 00090 ucn_token::TOK_NOT_EOF, 00091 ucn_token::TOK_NOT_EOF, 00092 ucn_token::TOK_NOT_EOF, 00093 ucn_token::TOK_NOT_EOF, 00094 ucn_token::TOK_NOT_EOF, 00095 ucn_token::TOK_NOT_EOF, 00096 ucn_token::TOK_NOT_EOF, 00097 ucn_token::TOK_NOT_EOF, 00098 ucn_token::TOK_NOT_EOF, 00099 ucn_token::TOK_NOT_EOF, 00100 ucn_token::TOK_NOT_EOF, 00101 ucn_token::TOK_NOT_EOF, 00102 ucn_token::TOK_NOT_EOF, 00103 ucn_token::TOK_NOT_EOF, 00104 ucn_token::TOK_NOT_EOF, 00105 ucn_token::TOK_NOT_EOF, 00106 ucn_token::TOK_NOT_EOF, 00107 ucn_token::TOK_NOT_EOF, 00108 ucn_token::TOK_NOT_EOF, 00109 ucn_token::TOK_NOT_EOF, 00110 ucn_token::TOK_NOT_EOF, 00111 ucn_token::TOK_NOT_EOF, 00112 ucn_token::TOK_NOT_EOF, 00113 ucn_token::TOK_NOT_EOF, 00114 ucn_token::TOK_NOT_EOF, 00115 ucn_token::TOK_NOT_EOF, 00116 ucn_token::TOK_NOT_EOF, 00117 ucn_token::TOK_NOT_EOF, 00118 ucn_token::TOK_NOT_EOF, 00119 ucn_token::TOK_NOT_EOF, 00120 ucn_token::TOK_NOT_EOF, 00121 ucn_token::TOK_NOT_EOF, 00122 ucn_token::TOK_NOT_EOF, 00123 ucn_token::TOK_NOT_EOF, 00124 ucn_token::TOK_NOT_EOF, 00125 ucn_token::TOK_NOT_EOF, 00126 ucn_token::TOK_NOT_EOF, 00127 ucn_token::TOK_NOT_EOF, 00128 ucn_token::TOK_NOT_EOF, 00129 ucn_token::TOK_NOT_EOF, 00130 ucn_token::TOK_NOT_EOF, 00131 ucn_token::TOK_NOT_EOF, 00132 ucn_token::TOK_NOT_EOF, 00133 ucn_token::TOK_NOT_EOF, 00134 ucn_token::TOK_NOT_EOF, 00135 ucn_token::TOK_NOT_EOF, 00136 ucn_token::TOK_NOT_EOF, 00137 ucn_token::TOK_NOT_EOF, 00138 ucn_token::TOK_NOT_EOF, 00139 ucn_token::TOK_NOT_EOF, 00140 ucn_token::TOK_NOT_EOF, 00141 ucn_token::TOK_NOT_EOF, 00142 ucn_token::TOK_NOT_EOF, 00143 ucn_token::TOK_NOT_EOF, 00144 ucn_token::TOK_NOT_EOF, 00145 ucn_token::TOK_NOT_EOF, 00146 ucn_token::TOK_NOT_EOF, 00147 ucn_token::TOK_NOT_EOF, 00148 ucn_token::TOK_NOT_EOF, 00149 ucn_token::TOK_NOT_EOF, 00150 ucn_token::TOK_NOT_EOF, 00151 ucn_token::TOK_NOT_EOF, 00152 ucn_token::TOK_NOT_EOF, 00153 ucn_token::TOK_NOT_EOF, 00154 ucn_token::TOK_NOT_EOF, 00155 ucn_token::TOK_NOT_EOF, 00156 ucn_token::TOK_NOT_EOF, 00157 ucn_token::TOK_NOT_EOF, 00158 ucn_token::TOK_NOT_EOF, 00159 ucn_token::TOK_NOT_EOF, 00160 ucn_token::TOK_NOT_EOF, 00161 ucn_token::TOK_NOT_EOF, 00162 ucn_token::TOK_NOT_EOF, 00163 ucn_token::TOK_NOT_EOF, 00164 ucn_token::TOK_NOT_EOF, 00165 ucn_token::TOK_NOT_EOF, 00166 ucn_token::TOK_NOT_EOF, 00167 ucn_token::TOK_NOT_EOF, 00168 ucn_token::TOK_NOT_EOF, 00169 ucn_token::TOK_NOT_EOF, 00170 ucn_token::TOK_NOT_EOF, 00171 ucn_token::TOK_NOT_EOF, 00172 ucn_token::TOK_NOT_EOF, 00173 ucn_token::TOK_NOT_EOF, 00174 ucn_token::TOK_NOT_EOF, 00175 ucn_token::TOK_NOT_EOF, 00176 ucn_token::TOK_NOT_EOF, 00177 ucn_token::TOK_NOT_EOF, 00178 ucn_token::TOK_NOT_EOF, 00179 ucn_token::TOK_NOT_EOF, 00180 ucn_token::TOK_NOT_EOF, 00181 ucn_token::TOK_NOT_EOF, 00182 ucn_token::TOK_NOT_EOF, 00183 ucn_token::TOK_NOT_EOF, 00184 ucn_token::TOK_NOT_EOF, 00185 ucn_token::TOK_NOT_EOF, 00186 ucn_token::TOK_NOT_EOF, 00187 ucn_token::TOK_NOT_EOF, 00188 ucn_token::TOK_NOT_EOF, 00189 ucn_token::TOK_NOT_EOF, 00190 ucn_token::TOK_EOF, 00191 ucn_token::TOK_ERROR, 00192 }; 00193 00194 ptr<ucn_token> tok; 00195 ucn_token_type utt; 00196 ulint test, i; 00197 00198 for (i = test = 0; test < TEST_CNT; test++) { 00199 ptr<data_source> ds = string_source::create(string_source::string_type(in[test])); 00200 ptr<encoder_host> enc = encoder_host::create(); 00201 00202 enc->input_set(ds); 00203 00204 while (true) { 00205 tok = enc->read(); 00206 utt = tok->type_get(); 00207 lassert(utt == out[i]); 00208 i++; 00209 if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break; 00210 } 00211 } 00212 }
| void lestes::lang::cplus::lex::encoder_utf8_test | ( | void | ) |
Definition at line 49 of file encoder_utf8.test.cc.
References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.
Referenced by main().
00050 { 00051 char *in[TEST_CNT] = { 00052 00053 /* disallowed 1st */ 00054 "\x80" 00055 , 00056 /* disallowed 1st */ 00057 "\xC0" 00058 , 00059 /* disallowed 1st */ 00060 "\xF5" 00061 , 00062 /* missing 2nd */ 00063 "\xC2" 00064 , 00065 /* disallowed 2nd */ 00066 "\xC2" 00067 "\x7F" 00068 , 00069 /* disallowed 2nd */ 00070 "\xC2" 00071 "\xC0" 00072 , 00073 /* missing 2nd */ 00074 "\xE0" 00075 , 00076 /* missing 3rd */ 00077 "\xE0" 00078 "\xA0" 00079 , 00080 /* disallowed 2nd */ 00081 "\xE0" 00082 "\x9F" 00083 "\x80" 00084 , 00085 /* disallowed 2nd */ 00086 "\xE0" 00087 "\xC0" 00088 "\x80" 00089 , 00090 /* disallowed 3rd */ 00091 "\xE0" 00092 "\xA0" 00093 "\x7F" 00094 , 00095 /* disallowed 3rd */ 00096 "\xE0" 00097 "\xA0" 00098 "\xC0" 00099 , 00100 /* disallowed 2nd */ 00101 "\xE1" 00102 "\x7F" 00103 "\x80" 00104 , 00105 /* disallowed 2nd */ 00106 "\xE1" 00107 "\xC0" 00108 "\x80" 00109 , 00110 /* disallowed 3rd */ 00111 "\xE1" 00112 "\x80" 00113 "\x7F" 00114 , 00115 /* disallowed 3rd */ 00116 "\xE1" 00117 "\x80" 00118 "\xC0" 00119 , 00120 /* disallowed 2nd */ 00121 "\xED" 00122 "\x7F" 00123 "\x80" 00124 , 00125 /* disallowed 2nd */ 00126 "\xED" 00127 "\xA0" 00128 "\x80" 00129 , 00130 /* disallowed 3rd */ 00131 "\xED" 00132 "\x80" 00133 "\x7F" 00134 , 00135 /* disallowed 3rd */ 00136 "\xED" 00137 "\x80" 00138 "\xC0" 00139 , 00140 /* disallowed 2nd */ 00141 "\xEE" 00142 "\x7F" 00143 "\x80" 00144 , 00145 /* disallowed 2nd */ 00146 "\xEE" 00147 "\xC0" 00148 "\x80" 00149 , 00150 /* disallowed 3rd */ 00151 "\xEE" 00152 "\x80" 00153 "\x7F" 00154 , 00155 /* disallowed 3rd */ 00156 "\xEE" 00157 "\x80" 00158 "\xC0" 00159 , 00160 /* missing 2nd */ 00161 "\xF0" 00162 , 00163 /* missing 3rd */ 00164 "\xF0" 00165 "\x90" 00166 , 00167 /* missing 4th */ 00168 "\xF0" 00169 "\x90" 00170 "\x80" 00171 , 00172 /* disallowed 2nd */ 00173 "\xF0" 00174 "\x8F" 00175 "\x80" 00176 "\x80" 00177 , 00178 /* disallowed 2nd */ 00179 "\xF0" 00180 "\xC0" 00181 "\x80" 00182 "\x80" 00183 , 00184 /* disallowed 3rd */ 00185 "\xF0" 00186 "\x90" 00187 "\x7F" 00188 "\x80" 00189 , 00190 /* disallowed 3rd */ 00191 "\xF0" 00192 "\x90" 00193 "\xC0" 00194 "\x80" 00195 , 00196 /* disallowed 4th */ 00197 "\xF0" 00198 "\x90" 00199 "\x80" 00200 "\x7F" 00201 , 00202 /* disallowed 4th */ 00203 "\xF0" 00204 "\x90" 00205 "\x80" 00206 "\xC0" 00207 , 00208 /* disallowed 2nd */ 00209 "\xF1" 00210 "\x7F" 00211 "\x80" 00212 "\x80" 00213 , 00214 /* disallowed 2nd */ 00215 "\xF1" 00216 "\xC0" 00217 "\x80" 00218 "\x80" 00219 , 00220 /* disallowed 3rd */ 00221 "\xF1" 00222 "\x80" 00223 "\x7F" 00224 "\x80" 00225 , 00226 /* disallowed 3rd */ 00227 "\xF1" 00228 "\x80" 00229 "\xC0" 00230 "\x80" 00231 , 00232 /* disallowed 4th */ 00233 "\xF1" 00234 "\x80" 00235 "\x80" 00236 "\x7F" 00237 , 00238 /* disallowed 4th */ 00239 "\xF1" 00240 "\x80" 00241 "\x80" 00242 "\xC0" 00243 , 00244 /* disallowed 2nd */ 00245 "\xF4" 00246 "\x7F" 00247 "\x80" 00248 "\x80" 00249 , 00250 /* disallowed 2nd */ 00251 "\xF4" 00252 "\x90" 00253 "\x80" 00254 "\x80" 00255 , 00256 /* disallowed 3rd */ 00257 "\xF4" 00258 "\x80" 00259 "\x7F" 00260 "\x80" 00261 , 00262 /* disallowed 3rd */ 00263 "\xF4" 00264 "\x80" 00265 "\xC0" 00266 "\x80" 00267 , 00268 /* disallowed 4th */ 00269 "\xF4" 00270 "\x80" 00271 "\x80" 00272 "\x7F" 00273 , 00274 /* disallowed 4th */ 00275 "\xF4" 00276 "\x80" 00277 "\x80" 00278 "\xC0" 00279 , 00280 /* ordinary characters */ 00281 "a" 00282 "z" 00283 , 00284 /* Czech characters */ 00285 "\xC3\xA1" 00286 "\xC4\x8D" 00287 "\xC4\x8F" 00288 "\xC3\xA9" 00289 "\xC4\x9B" 00290 "\xC3\xAD" 00291 "\xC5\x88" 00292 "\xC3\xB3" 00293 "\xC5\x99" 00294 "\xC5\xA1" 00295 "\xC5\xA5" 00296 "\xC3\xBA" 00297 "\xC5\xAF" 00298 "\xC5\xBE" 00299 }; 00300 00301 ucn_token_type out[] = { 00302 ucn_token::TOK_ERROR, 00303 ucn_token::TOK_ERROR, 00304 ucn_token::TOK_ERROR, 00305 ucn_token::TOK_ERROR, 00306 ucn_token::TOK_ERROR, 00307 ucn_token::TOK_ERROR, 00308 ucn_token::TOK_ERROR, 00309 ucn_token::TOK_ERROR, 00310 ucn_token::TOK_ERROR, 00311 ucn_token::TOK_ERROR, 00312 ucn_token::TOK_ERROR, 00313 ucn_token::TOK_ERROR, 00314 ucn_token::TOK_ERROR, 00315 ucn_token::TOK_ERROR, 00316 ucn_token::TOK_ERROR, 00317 ucn_token::TOK_ERROR, 00318 ucn_token::TOK_ERROR, 00319 ucn_token::TOK_ERROR, 00320 ucn_token::TOK_ERROR, 00321 ucn_token::TOK_ERROR, 00322 ucn_token::TOK_ERROR, 00323 ucn_token::TOK_ERROR, 00324 ucn_token::TOK_ERROR, 00325 ucn_token::TOK_ERROR, 00326 ucn_token::TOK_ERROR, 00327 ucn_token::TOK_ERROR, 00328 ucn_token::TOK_ERROR, 00329 ucn_token::TOK_ERROR, 00330 ucn_token::TOK_ERROR, 00331 ucn_token::TOK_ERROR, 00332 ucn_token::TOK_ERROR, 00333 ucn_token::TOK_ERROR, 00334 ucn_token::TOK_ERROR, 00335 ucn_token::TOK_ERROR, 00336 ucn_token::TOK_ERROR, 00337 ucn_token::TOK_ERROR, 00338 ucn_token::TOK_ERROR, 00339 ucn_token::TOK_ERROR, 00340 ucn_token::TOK_ERROR, 00341 ucn_token::TOK_ERROR, 00342 ucn_token::TOK_ERROR, 00343 ucn_token::TOK_ERROR, 00344 ucn_token::TOK_ERROR, 00345 ucn_token::TOK_ERROR, 00346 ucn_token::TOK_ERROR, 00347 ucn_token::TOK_NOT_EOF, 00348 ucn_token::TOK_NOT_EOF, 00349 ucn_token::TOK_EOF, 00350 ucn_token::TOK_NOT_EOF, 00351 ucn_token::TOK_NOT_EOF, 00352 ucn_token::TOK_NOT_EOF, 00353 ucn_token::TOK_NOT_EOF, 00354 ucn_token::TOK_NOT_EOF, 00355 ucn_token::TOK_NOT_EOF, 00356 ucn_token::TOK_NOT_EOF, 00357 ucn_token::TOK_NOT_EOF, 00358 ucn_token::TOK_NOT_EOF, 00359 ucn_token::TOK_NOT_EOF, 00360 ucn_token::TOK_NOT_EOF, 00361 ucn_token::TOK_NOT_EOF, 00362 ucn_token::TOK_NOT_EOF, 00363 ucn_token::TOK_NOT_EOF, 00364 ucn_token::TOK_EOF 00365 }; 00366 00367 ptr<file_info> fi = file_info::create(string("abc"),NULL); 00368 ptr<ucn_token> tok; 00369 ucn_token_type utt; 00370 ulint test, i; 00371 00372 for (i = test = 0; test < TEST_CNT; test++) { 00373 ptr<data_source> ds = string_source::create(string_source::string_type(in[test])); 00374 ptr<encoder_utf8> enc = encoder_utf8::create(); 00375 00376 enc->input_set(ds); 00377 00378 while (true) { 00379 tok = enc->read(); 00380 utt = tok->type_get(); 00381 lassert(utt == out[i]); 00382 i++; 00383 if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break; 00384 } 00385 } 00386 }
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::endif_without_if | ( | ::lestes::msg::message_stencil0< bool >:: | create("#endif without #if",::lestes::msg::message::FLG_ERROR) | ) |
Issued when endif is encountered prior to if.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_comma | ( | ::lestes::msg::message_stencil0< bool >:: | create("expected `,' separator between macro parameters",::lestes::msg::message::FLG_ERROR) | ) |
Issued when two macro parameters are not comma separated.
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::expected_comma_right_par | ( | ::lestes::msg::message_stencil1< ucn_string >::create("`%0' is invalid after macro parameter name, expected `,' or `)'" | , | |
| ::lestes::msg::message::FLG_ERROR | , | |||
| ::lestes::msg::formatter< ucn_string >:: | instance() | |||
| ) |
Issued when an invalid token is encountered after macro parameter. The token is passed as an argument of the message.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_name | ( | ::lestes::msg::message_stencil0< bool >:: | create("macro name must be identifier",::lestes::msg::message::FLG_ERROR) | ) |
Issued when undef, ifdef or ifndef directive is followed by a non identifier token, which can not be a name of a macro.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_parameter | ( | ::lestes::msg::message_stencil0< bool >:: | create("expected macro parameter name",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a non-identifier token is found in the place of a macro parameter name.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_right_par | ( | ::lestes::msg::message_stencil0< bool >::create("expected `)' at the end of macro parameter list" | , | |
| ::lestes::msg::message::FLG_ERROR | ||||
| ) |
Issued when the macro parameter list is not terminated by `)' token.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_exponent_empty | ( | ::lestes::msg::message_stencil0< bool >:: | create("floating literal exponent with no digits",::lestes::msg::message::FLG_ERROR) | ) |
Issued when `e' in floating number literal is not followed by digits.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_suffix_invalid | ( | ::lestes::msg::message_stencil0< bool >:: | create("floating literal with invalid suffix",::lestes::msg::message::FLG_ERROR) | ) |
Issued when floating number literal suffix is not one of `f', `F', `l', `L'.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_beginning | ( | ::lestes::msg::message_stencil0< bool >:: | create("'##' at the beginning of a macro expansion",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the '##' operator is found at the beginning of a macro expansion.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_end | ( | ::lestes::msg::message_stencil0< bool >:: | create("'##' at the end of a macro expansion",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the '##' operator is found at the end of a macro expansion.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_without_parameter | ( | ::lestes::msg::message_stencil0< bool >:: | create("'#' is not followed by a macro parameter",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the '#' operator is used without macro parameter.
| lestes::lang::cplus::lex::initialize_logger | ( | pre_lex_logger | , | |
| "pre_lex" | , | |||
| lex_logger | ||||
| ) |
| lestes::lang::cplus::lex::initialize_logger | ( | trigraphs_logger | , | |
| "trigraphs" | , | |||
| lex_logger | ||||
| ) |
| lestes::lang::cplus::lex::initialize_logger | ( | preprocessor_logger | , | |
| "preprocessor" | , | |||
| lex_logger | ||||
| ) |
| lestes::lang::cplus::lex::initialize_logger | ( | pp_lex_guts_logger | , | |
| "pp_lex_guts" | , | |||
| lex_logger | ||||
| ) |
| lestes::lang::cplus::lex::initialize_logger | ( | pp_lex_logger | , | |
| "pp_lex" | , | |||
| lex_logger | ||||
| ) |
| lestes::lang::cplus::lex::initialize_logger | ( | lex_logger | , | |
| "lex" | , | |||
| cplus_logger | ||||
| ) |
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_empty | ( | ::lestes::msg::message_stencil0< bool >:: | create("integral literal with no digits",::lestes::msg::message::FLG_ERROR) | ) |
Issued when integral number (hexadecimal) literal has no digits.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_suffix_invalid | ( | ::lestes::msg::message_stencil0< bool >:: | create("integral literal with invalid suffix",::lestes::msg::message::FLG_ERROR) | ) |
Issued when integral number literal suffix is not a proper combination of `u', `U', `l', `L'.
| ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > lestes::lang::cplus::lex::invalid_argument_count | ( | ::lestes::msg::message_stencil2< ucn_string, ulint >:: | create("invalid argument count %1 invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance(),::lestes::msg::formatter< ulint >::instance()) | ) |
Issued when a macro is invoked with invalid number of arguments.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_ascii_character | ( | ::lestes::msg::message_stencil0< bool >:: | create("the character is invalid for ASCII source encoding",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a character invalid in UTF-8 encoding is encountered.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_filename | ( | ::lestes::msg::message_stencil0< bool >:: | create("unsupported character in filename",::lestes::msg::message::FLG_ERROR) | ) |
Issued when there is an unsupported character in name of the include file.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_number | ( | ::lestes::msg::message_stencil0< bool >:: | create("invalid character in number",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a number literal contains invalid character (ucn or underscore).
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_cpp_token | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("cannot convert `%0' to C++ token",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when a token which has no meaning outside preprocessor would be emitted.
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_directve | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("invalid preprocessing directive `#%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when the token after `#' does not resemble any directive name. The zeroth parameter is the spelling of the .
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_escape_sequence | ( | ::lestes::msg::message_stencil0< bool >:: | create("invalid escape sequence",::lestes::msg::message::FLG_ERROR) | ) |
Issued when escape sequence was not recognized.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_utf_character | ( | ::lestes::msg::message_stencil0< bool >:: | create("the character is invalid for UTF-8 source encoding",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a character invalid in UTF-8 encoding is encountered.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_number | ( | ::lestes::msg::message_stencil0< bool >:: | create("first parameter of #line shall be decimal digit sequence between 1 and 32767",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the first token after line is not a sequence of decimal digits between 1 and 32767.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_string | ( | ::lestes::msg::message_stencil0< bool >:: | create("second parameter of #line shall be a string",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the second token after line is not a string.
| void lestes::lang::cplus::lex::macro_argument_test | ( | void | ) |
Definition at line 47 of file macro_argument.test.cc.
References BEGIN, lestes::is_equal(), lassert, TOK_COMMA, TOK_DOT, TOK_EQ, TOK_GT, TOK_HAT, TOK_LEFT_PAR, TOK_LT, TOK_QMARK, TOK_RIGHT_PAR, and TOK_STAR.
Referenced by main().
00048 { 00049 ptr<file_info> fi = file_info::create(string("abc"),NULL); 00050 ptr<source_location> loc = source_location::create(fi,0,0); 00051 00052 ptr<token_sequence> ts = token_sequence::create(); 00053 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00054 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00055 ts->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00056 00057 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00058 00059 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00060 00061 ts->add_back(pp_token::create(loc,pp_token::TOK_HAT)); 00062 ts->add_back(pp_token::create(loc,pp_token::TOK_LT)); 00063 ts->add_back(pp_token::create(loc,pp_token::TOK_GT)); 00064 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00065 00066 ts->add_back(pp_token::create(loc,pp_token::TOK_EQ)); 00067 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00068 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00069 00070 ts->add_back(pp_token::create(loc,pp_token::TOK_STAR)); 00071 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00072 ts->add_back(pp_token::create(loc,pp_token::TOK_EMARK)); 00073 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00074 ts->add_back(pp_token::create(loc,pp_token::TOK_QMARK)); 00075 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00076 00077 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00078 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00079 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00080 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00081 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00082 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00083 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00084 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00085 00086 ptr<token_sequence> os1 = token_sequence::create(); 00087 os1->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00088 00089 ptr<token_sequence> os2 = token_sequence::create(); 00090 os2->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00091 00092 ptr<token_sequence> os3 = token_sequence::create(); 00093 os3->add_back(pp_token::create(loc,pp_token::TOK_HAT)); 00094 os3->add_back(pp_token::create(loc,pp_token::TOK_LT)); 00095 os3->add_back(pp_token::create(loc,pp_token::TOK_GT)); 00096 os3->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00097 00098 ptr<token_sequence> os4 = token_sequence::create(); 00099 os4->add_back(pp_token::create(loc,pp_token::TOK_EQ)); 00100 os4->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00101 os4->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00102 00103 ptr<token_sequence> os5 = token_sequence::create(); 00104 os5->add_back(pp_token::create(loc,pp_token::TOK_STAR)); 00105 os5->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00106 os5->add_back(pp_token::create(loc,pp_token::TOK_EMARK)); 00107 os5->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00108 os5->add_back(pp_token::create(loc,pp_token::TOK_QMARK)); 00109 os5->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00110 00111 ptr<token_sequence> os6 = token_sequence::create(); 00112 os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00113 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00114 os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR)); 00115 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00116 os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00117 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00118 os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00119 os6->add_back(pp_token::create(loc,pp_token::TOK_FILE_END)); 00120 00121 ptr<macro_argument> ma0 = macro_argument::create(); 00122 00123 // created object 00124 lassert(is_equal(ma0->state_get(),macro_argument::BEGIN)); 00125 lassert(is_equal(ma0,ma0)); 00126 00127 // eof in argument 00128 lassert(is_equal(ma0->parse(ts,true),macro_argument::ERROR)); 00129 lassert(is_equal(ma0->state_get(),macro_argument::DEAD)); 00130 lassert(is_equal(ma0,ma0)); 00131 // discard the eof 00132 ts->read_front(); 00133 00134 ptr<macro_argument> ma1 = macro_argument::create(); 00135 00136 // empty first argument 00137 lassert(is_equal(ma1->parse(ts,true),macro_argument::EMPTY)); 00138 lassert(is_equal(ma1->state_get(),macro_argument::PARSED)); 00139 lassert(is_equal(ma1,ma1)); 00140 00141 lassert(is_equal(ma1->nonexpanded_get(),os1)); 00142 00143 ptr<macro_argument> ma2 = macro_argument::create(); 00144 lassert(!is_equal(ma2,ma1)); 00145 00146 // empty last argument 00147 lassert(is_equal(ma2->parse(ts,false),macro_argument::LAST)); 00148 lassert(is_equal(ma2->state_get(),macro_argument::PARSED)); 00149 lassert(is_equal(ma2,ma2)); 00150 lassert(is_equal(ma1->nonexpanded_get(),os2)); 00151 00152 ptr<macro_argument> ma3 = macro_argument::create(); 00153 00154 // argument with comma 00155 lassert(is_equal(ma3->parse(ts,true),macro_argument::CONTINUE)); 00156 lassert(is_equal(ma3->state_get(),macro_argument::PARSED)); 00157 lassert(is_equal(ma3,ma3)); 00158 lassert(is_equal(ma3->nonexpanded_get(),os3)); 00159 00160 ptr<macro_argument> ma4 = macro_argument::create(); 00161 00162 // argument with right parenthesis 00163 lassert(is_equal(ma4->parse(ts,true),macro_argument::LAST)); 00164 lassert(is_equal(ma4->state_get(),macro_argument::PARSED)); 00165 lassert(is_equal(ma4,ma4)); 00166 lassert(is_equal(ma4->nonexpanded_get(),os4)); 00167 00168 ptr<macro_argument> ma5 = macro_argument::create(); 00169 00170 // argument with inner parentheses 00171 lassert(is_equal(ma5->parse(ts,true),macro_argument::CONTINUE)); 00172 lassert(is_equal(ma5->state_get(),macro_argument::PARSED)); 00173 lassert(is_equal(ma5,ma5)); 00174 lassert(is_equal(ma5->nonexpanded_get(),os5)); 00175 00176 ptr<macro_argument> ma6 = macro_argument::create(); 00177 00178 // argument with inner parentheses and commas 00179 lassert(is_equal(ma6->parse(ts,true),macro_argument::LAST)); 00180 lassert(is_equal(ma6->state_get(),macro_argument::PARSED)); 00181 lassert(is_equal(ma6,ma6)); 00182 lassert(is_equal(ma6->nonexpanded_get(),os6)); 00183 00184 }
| void lestes::lang::cplus::lex::macro_body_test | ( | void | ) |
Definition at line 49 of file macro_body.test.cc.
References BEGIN, lestes::is_equal(), lassert, TOK_AMP, TOK_COMMA, TOK_EQ, TOK_GT, TOK_HAT, TOK_IDENT, TOK_LT, TOK_PLUS, and TOK_RIGHT_PAR.
Referenced by main().
00050 { 00051 ptr<file_info> fi = file_info::create(string("abc"),NULL); 00052 ptr<source_location> loc = source_location::create(fi,0,0); 00053 00054 ptr<token_sequence> mhts = token_sequence::create(); 00055 mhts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) ); 00056 mhts->add_back( pp_token::create(loc,pp_token::TOK_COMMA) ); 00057 mhts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("def")) ); 00058 mhts->add_back( pp_token::create(loc,pp_token::TOK_RIGHT_PAR) ); 00059 00060 ptr<macro_head> mh = macro_head::create(); 00061 lassert(is_equal(mh->parse(mhts),true)); 00062 00063 ptr<token_sequence> ts = token_sequence::create(); 00064 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00065 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00066 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00067 00068 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00069 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00070 00071 ts->add_back( pp_token::create(loc,pp_token::TOK_GT) ); 00072 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00073 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00074 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00075 00076 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00077 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00078 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00079 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00080 00081 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00082 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00083 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00084 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00085 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00086 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00087 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00088 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00089 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00090 00091 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00092 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00093 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00094 00095 ts->add_back( pp_token::create(loc,pp_token::TOK_EMARK) ); 00096 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00097 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00098 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00099 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00100 ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) ); 00101 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00102 00103 ts->add_back( pp_token::create(loc,pp_token::TOK_EMARK) ); 00104 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00105 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00106 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00107 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00108 ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) ); 00109 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00110 00111 ts->add_back( pp_token::create(loc,pp_token::TOK_LT) ); 00112 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00113 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00114 ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) ); 00115 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00116 00117 // function-like 00118 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00119 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00120 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00121 00122 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00123 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00124 00125 ts->add_back( pp_token::create(loc,pp_token::TOK_GT) ); 00126 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00127 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00128 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00129 00130 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00131 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00132 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00133 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00134 00135 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00136 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00137 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00138 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00139 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00140 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00141 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00142 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00143 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00144 00145 ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) ); 00146 ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) ); 00147 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00148 00149 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00150 ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) ); 00151 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00152 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) ); 00153 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00154 ts->add_back( pp_token::create(loc,pp_token::TOK_PLUS) ); 00155 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) ); 00156 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00157 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00158 00159 ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) ); 00160 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00161 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00162 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) ); 00163 ts->add_back( pp_token::create(loc,pp_token::TOK_PLUS) ); 00164 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) ); 00165 ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) ); 00166 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00167 00168 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH) ); 00169 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) ); 00170 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00171 00172 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH) ); 00173 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) ); 00174 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00175 00176 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) ); 00177 ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) ); 00178 ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) ); 00179 ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) ); 00180 00181 ptr<macro_body> mb0 = macro_body::create(); 00182 // created object 00183 lassert(is_equal(mb0,mb0)); 00184 lassert(is_equal(mb0->state_get(),macro_body::BEGIN)); 00185 00186 // object-like macro 00187 00188 // eol 00189 lassert(is_equal(mb0->parse(ts),true)); 00190 lassert(is_equal(mb0->state_get(),macro_body::PARSED)); 00191 lassert(is_equal(mb0,mb0)); 00192 00193 ptr<macro_body> mb1 = macro_body::create(); 00194 // ## at beginning 00195 lassert(is_equal(mb1->parse(ts),false)); 00196 lassert(is_equal(mb1->state_get(),macro_body::DEAD)); 00197 lassert(is_equal(mb1,mb1)); 00198 lassert(!is_equal(mb1,mb0)); 00199 00200 ptr<macro_body> mb2 = macro_body::create(); 00201 // ## at the end 00202 lassert(is_equal(mb2->parse(ts),false)); 00203 lassert(is_equal(mb2->state_get(),macro_body::DEAD)); 00204 lassert(is_equal(mb2,mb1)); 00205 00206 ptr<macro_body> mb3 = macro_body::create(); 00207 // normal tokens 00208 lassert(is_equal(mb3->parse(ts),true)); 00209 lassert(is_equal(mb3->state_get(),macro_body::PARSED)); 00210 00211 ptr<macro_body> mb4 = macro_body::create(); 00212 // the same tokens with front and back ws and extended internal ws 00213 lassert(is_equal(mb4->parse(ts),true)); 00214 lassert(is_equal(mb4->state_get(),macro_body::PARSED)); 00215 lassert(is_equal(mb4,mb4)); 00216 lassert(is_equal(mb4,mb3)); 00217 00218 ptr<macro_body> mb5 = macro_body::create(); 00219 // the same tokens with different ws 00220 lassert(is_equal(mb5->parse(ts),true)); 00221 lassert(is_equal(mb5->state_get(),macro_body::PARSED)); 00222 lassert(!is_equal(mb5,mb4)); 00223 00224 ptr<macro_body> mb6 = macro_body::create(); 00225 // tokens with ## inside and ws 00226 lassert(is_equal(mb6->parse(ts),true)); 00227 lassert(is_equal(mb6->state_get(),macro_body::PARSED)); 00228 lassert(is_equal(mb6,mb6)); 00229 00230 ptr<macro_body> mb7 = macro_body::create(); 00231 // tokens with ## inside and equivalent ws around 00232 lassert(is_equal(mb7->parse(ts),true)); 00233 lassert(is_equal(mb7->state_get(),macro_body::PARSED)); 00234 lassert(is_equal(mb7,mb7)); 00235 lassert(is_equal(mb7,mb6)); 00236 00237 ptr<macro_body> mb8 = macro_body::create(); 00238 // tokens with two ## successive ## 00239 lassert(is_equal(mb8->parse(ts),true)); 00240 lassert(is_equal(mb8->state_get(),macro_body::PARSED)); 00241 lassert(is_equal(mb8,mb8)); 00242 00243 // function-like macro 00244 ptr<macro_body> mb9 = macro_body::create(); 00245 00246 // eol 00247 lassert(is_equal(mb9->parse(ts,mh),true)); 00248 lassert(is_equal(mb9->state_get(),macro_body::PARSED)); 00249 lassert(is_equal(mb9,mb9)); 00250 00251 ptr<macro_body> mb10 = macro_body::create(); 00252 // ## at the beginning 00253 lassert(is_equal(mb10->parse(ts,mh),false)); 00254 lassert(is_equal(mb10->state_get(),macro_body::DEAD)); 00255 lassert(!is_equal(mb10,mb9)); 00256 00257 ptr<macro_body> mb11 = macro_body::create(); 00258 // ## at the end 00259 lassert(is_equal(mb11->parse(ts,mh),false)); 00260 lassert(is_equal(mb11->state_get(),macro_body::DEAD)); 00261 lassert(is_equal(mb11,mb10)); 00262 00263 ptr<macro_body> mb12 = macro_body::create(); 00264 // ordinary tokens 00265 lassert(is_equal(mb12->parse(ts,mh),true)); 00266 lassert(is_equal(mb12->state_get(),macro_body::PARSED)); 00267 lassert(is_equal(mb12,mb12)); 00268 00269 ptr<macro_body> mb13 = macro_body::create(); 00270 // ordinary tokens with equivalent ws 00271 lassert(is_equal(mb13->parse(ts,mh),true)); 00272 lassert(is_equal(mb13->state_get(),macro_body::PARSED)); 00273 lassert(is_equal(mb13,mb12)); 00274 00275 ptr<macro_body> mb14 = macro_body::create(); 00276 // ordinary tokens with nonequivalent ws 00277 lassert(is_equal(mb14->parse(ts,mh),true)); 00278 lassert(is_equal(mb14->state_get(),macro_body::PARSED)); 00279 lassert(!is_equal(mb14,mb13)); 00280 00281 ptr<macro_body> mb15 = macro_body::create(); 00282 // identifier and parameter 00283 lassert(is_equal(mb15->parse(ts,mh),true)); 00284 lassert(is_equal(mb15->state_get(),macro_body::PARSED)); 00285 lassert(is_equal(mb15,mb15)); 00286 00287 ptr<macro_body> mb16 = macro_body::create(); 00288 // identifier and parameter with equivalent ws 00289 lassert(is_equal(mb16->parse(ts,mh),true)); 00290 lassert(is_equal(mb16->state_get(),macro_body::PARSED)); 00291 lassert(is_equal(mb16,mb16)); 00292 00293 ptr<macro_body> mb17 = macro_body::create(); 00294 // # and parameter 00295 lassert(is_equal(mb17->parse(ts,mh),true)); 00296 lassert(is_equal(mb17->state_get(),macro_body::PARSED)); 00297 lassert(is_equal(mb17,mb17)); 00298 00299 ptr<macro_body> mb18 = macro_body::create(); 00300 // # and identifier 00301 lassert(is_equal(mb18->parse(ts,mh),false)); 00302 lassert(is_equal(mb18->state_get(),macro_body::DEAD)); 00303 00304 ptr<macro_body> mb19 = macro_body::create(); 00305 // identifier ## and parameter 00306 lassert(is_equal(mb19->parse(ts,mh),true)); 00307 lassert(is_equal(mb19->state_get(),macro_body::PARSED)); 00308 lassert(is_equal(mb19,mb19)); 00309 }
| void lestes::lang::cplus::lex::macro_head_test | ( | void | ) |
Tests macro_head class.
Performs testing of macro_head class.
Definition at line 53 of file macro_head.test.cc.
References BEGIN, lestes::is_equal(), lassert, TOK_COMMA, TOK_DOT, TOK_IDENT, and TOK_RIGHT_PAR.
Referenced by main().
00054 { 00055 ptr<file_info> fi = file_info::create("abc",NULL); 00056 ptr<source_location> loc = source_location::create(fi,0,0); 00057 00058 ptr<token_value> tv1 = token_value::create("abc"); 00059 ptr<token_value> tv2 = token_value::create("def"); 00060 00061 ptr<token_sequence> ts = token_sequence::create(); 00062 00063 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK)); 00064 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK)); 00065 ts->add_back(pp_token::create(loc,pp_token::TOK_LINE_END)); 00066 00067 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK)); 00068 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00069 00070 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1)); 00071 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK)); 00072 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT)); 00073 00074 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1)); 00075 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00076 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1)); 00077 00078 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1)); 00079 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00080 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2)); 00081 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00082 00083 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2)); 00084 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA)); 00085 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1)); 00086 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR)); 00087 00088 ptr<macro_head> mh0 = macro_head::create(); 00089 00090 // created object 00091 lassert(is_equal(mh0,mh0)); 00092 lassert(is_equal(mh0->state_get(),macro_head::BEGIN)); 00093 00094 // eol 00095 lassert(is_equal(mh0->parse(ts),false)); 00096 lassert(is_equal(mh0->state_get(),macro_head::DEAD)); 00097 lassert(is_equal(mh0,mh0)); 00098 00099 ptr<macro_head> mh1 = macro_head::create(); 00100 00101 // nonidentifier 00102 lassert(is_equal(mh1->parse(ts),false)); 00103 lassert(is_equal(mh1->state_get(),macro_head::DEAD)); 00104 00105 ptr<macro_head> mh2 = macro_head::create(); 00106 00107 // ident and noncomma 00108 lassert(is_equal(mh2->parse(ts),false)); 00109 lassert(is_equal(mh2->state_get(),macro_head::DEAD)); 00110 00111 ptr<macro_head> mh3 = macro_head::create(); 00112 00113 // duplicate ident 00114 lassert(is_equal(mh3->parse(ts),false)); 00115 lassert(is_equal(mh3->state_get(),macro_head::DEAD)); 00116 00117 ptr<macro_head> mh4 = macro_head::create(); 00118 00119 // two distinct idents 00120 lassert(is_equal(mh4->parse(ts),true)); 00121 lassert(is_equal(mh4->state_get(),macro_head::PARSED)); 00122 lassert(is_equal(mh4,mh4)); 00123 lassert(is_equal(mh4->length(),2U)); 00124 lassert(is_equal(mh4->index_of(tv1),0U)); 00125 lassert(is_equal(mh4->index_of(tv2),1U)); 00126 lassert(is_equal(mh4->index_of(token_value::create("ghi")),mh4->length())); 00127 00128 ptr<macro_head> mh5 = macro_head::create(); 00129 00130 // swapped idents 00131 lassert(is_equal(mh5->parse(ts),true)); 00132 lassert(is_equal(mh5->state_get(),macro_head::PARSED)); 00133 lassert(!is_equal(mh5,mh4)); 00134 lassert(is_equal(mh5->length(),2U)); 00135 lassert(is_equal(mh5->index_of(tv2),0U)); 00136 lassert(is_equal(mh5->index_of(tv1),1U)); 00137 lassert(is_equal(mh5->index_of(token_value::create("ghi")),mh5->length())); 00138 00139 }
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_name_alt_operator | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("alternative spelling `%0' of a C++ operator cannot be used as a macro name",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when a name of the macro being defined is alternative spelling of an operator.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::macro_name_identifier | ( | ::lestes::msg::message_stencil0< bool >:: | create("macro name must be an identifier",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a name of the macro being defined is not identifier.
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_redefinition_different | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("macro `%0' redefinition is different from the previous definition",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when a macro redefinition is different from the original definition.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::malformed_include | ( | ::lestes::msg::message_stencil0< bool >:: | create("malformed #include, expecting <filename> or \"filename\"",::lestes::msg::message::FLG_ERROR) | ) |
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_hexadecimal_digits | ( | ::lestes::msg::message_stencil0< bool >:: | create("`\\x' with no hexadecimal digits",::lestes::msg::message::FLG_ERROR) | ) |
Issued when hexadecimal escape sequence has no digits.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_newline | ( | ::lestes::msg::message_stencil0< bool >:: | create("newline at the end of file missing",::lestes::msg::message::FLG_ERROR) | ) |
Issued when there is no proper newline at the end of file.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_dquote | ( | ::lestes::msg::message_stencil0< bool >:: | create("missing terminating \" character",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a (wide) string literal does not end with a double quote.
Referenced by lexer_parse().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_quote | ( | ::lestes::msg::message_stencil0< bool >:: | create("missing terminating ' character",::lestes::msg::message::FLG_ERROR) | ) |
Issued when a (wide) character literal does not end with a quote.
Referenced by lexer_parse().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::mixed_strings | ( | ::lestes::msg::message_stencil0< bool >:: | create("adjacent narrow and wide string literals",::lestes::msg::message::FLG_ERROR) | ) |
Issued when both wide and narrow string literals are found in a sequence of string literals.
| ptr< ::lestes::msg::message_stencil1< ulint > > lestes::lang::cplus::lex::nesting_too_deep | ( | ::lestes::msg::message_stencil1< ulint >:: | create("nesting of includes is too deep, only %0 levels supported",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ulint >::instance()) | ) |
Issued for include directive if the nesting is too deep.
| std::ostream & lestes::lang::cplus::lex::operator<< | ( | ::std::ostream & | o, | |
| const ptr< token_stream > & | ts | |||
| ) |
Prints debug dump of token stream.
Prints debug dump of token sequence to stream.
| o | The stream to print to. | |
| ts | The token sequence to print. |
Definition at line 297 of file token_stream.cc.
| std::ostream & lestes::lang::cplus::lex::operator<< | ( | ::std::ostream & | o, | |
| const ptr< token_sequence > & | ts | |||
| ) |
prints debug dump of token sequence
Prints debug dump of token sequence to stream.
| o | The stream to print to. | |
| ts | The token sequence to print. |
Definition at line 463 of file token_sequence.cc.
| void lestes::lang::cplus::lex::pp_lex_test | ( | void | ) |
Definition at line 50 of file pp_lex.test.cc.
References lestes::is_equal(), lassert, TOK_AMP, TOK_AMP_AMP, TOK_AMP_EQ, TOK_ASM, TOK_AUTO, TOK_BOOL, TOK_BREAK, TOK_CASE, TOK_CATCH, TOK_CHAR, TOK_CLASS, TOK_COLON, TOK_COLON_COLON, TOK_COMMA, TOK_CONST_CAST, TOK_CONTINUE, TOK_DEFAULT, TOK_DELETE, TOK_DO, TOK_DOT, TOK_DOT_DOT_DOT, TOK_DOT_STAR, TOK_DOUBLE, TOK_DYNAMIC_CAST, TOK_ELSE, TOK_ENUM, TOK_EQ, TOK_EQ_EQ, TOK_ERROR, TOK_EXPLICIT, TOK_EXPORT, TOK_EXTERN, TOK_FLOAT, TOK_FOR, TOK_FRIEND, TOK_GOTO, TOK_GT, TOK_GT_EQ, TOK_GT_GT, TOK_GT_GT_EQ, TOK_HAT, TOK_HAT_EQ, TOK_IF, TOK_INLINE, TOK_INT, TOK_LEFT_BRACE, TOK_LEFT_BRACKET, TOK_LEFT_PAR, TOK_LONG, TOK_LT, TOK_LT_EQ, TOK_LT_LT, TOK_LT_LT_EQ, TOK_MINUS, TOK_MINUS_EQ, TOK_MINUS_GT, TOK_MINUS_GT_STAR, TOK_MINUS_MINUS, TOK_MUTABLE, TOK_NAMESPACE, TOK_NEW, TOK_OPERATOR, TOK_PERCENT, TOK_PERCENT_EQ, TOK_PLUS, TOK_PLUS_EQ, TOK_PLUS_PLUS, TOK_PRIVATE, TOK_PROTECTED, TOK_PUBLIC, TOK_QMARK, TOK_REGISTER, TOK_REINTERPRET_CAST, TOK_RETURN, TOK_RIGHT_BRACE, TOK_RIGHT_BRACKET, TOK_RIGHT_PAR, TOK_SEMICOLON, TOK_SHORT, TOK_SIGNED, TOK_SIZEOF, TOK_SLASH, TOK_SLASH_EQ, TOK_STAR, TOK_STAR_EQ, TOK_STATIC, TOK_STATIC_CAST, TOK_STRUCT, TOK_SWITCH, TOK_TEMPLATE, TOK_THIS, TOK_THROW, TOK_TILDE, TOK_TRY, TOK_TYPEDEF, TOK_TYPEID, TOK_TYPENAME, TOK_UNION, TOK_UNSIGNED, TOK_USING, TOK_VBAR, TOK_VBAR_EQ, TOK_VBAR_VBAR, TOK_VIRTUAL, TOK_VOID, TOK_VOLATILE, and TOK_WHILE.
Referenced by main().
00051 { 00052 char inp[] = 00053 " [<:]:>}%>{<%#%:##%:%:)(;:?.+*%/^xor&bitand|bitor" 00054 "~compl!not=<>,-::.*+=-=*=/=%=^=xor_eq&=and_eq|=or_eq<<>>" 00055 ">>=<<===!=not_eq<=>=&&and||or++--->*->..." 00056 "asm auto bool break case catch char class const_cast continue default delete do " 00057 "double dynamic_cast else enum explicit export extern float for friend goto if " 00058 "inline int long mutable namespace new operator private protected public register " 00059 "reinterpret_cast return short signed sizeof static static_cast struct switch " 00060 "template this throw try typedef typeid typename union unsigned using virtual " 00061 "void volatile wchar_t while false true define undef pragma error " 00062 "defined ifdef ifndef elif endif " 00063 "\n#include\n#line\n" 00064 "123 007 0xF00 1.23e+45 " 00065 "1eet 0range 0xygen 1.2.3e+e-45 " 00066 "'a''bcd''\\\'\\\"\\?\\\\\\a\\b\\r\\f\\n\\r\\t\\v''\\123\\xFaCe''\\udEaD\\U1234cdef'\n" 00067 "'''\\c\\d\\e\\g\\h\\i''\\xg\\x''\\u\\uabcx\\U\\Uabcdeef\\uf0''unterminated\n" 00068 "\"\"\"a\"\"bcd\"\"\\\'\\\"\\?\\\\\\a\\b\\r\\f\\n\\r\\t\\v\"\"\\123\\xFaCe\"\"\\udEaD\\U1234cdef\"\n" 00069 "\"\\c\\d\\e\\g\\h\\i\"\"\\xg\\x\"\"\\u\\uabcx\\U\\Uabcdef\\uf0\"\"unterminated\n" 00070 "\n"; 00071 00072 pp_token_type out[] = { 00073 pp_token::TOK_BLANK, 00074 pp_token::TOK_LEFT_BRACKET, 00075 pp_token::TOK_LEFT_BRACKET, 00076 pp_token::TOK_RIGHT_BRACKET, 00077 pp_token::TOK_RIGHT_BRACKET, 00078 pp_token::TOK_RIGHT_BRACE, 00079 pp_token::TOK_RIGHT_BRACE, 00080 pp_token::TOK_LEFT_BRACE, 00081 pp_token::TOK_LEFT_BRACE, 00082 pp_token::TOK_HASH, 00083 pp_token::TOK_HASH, 00084 pp_token::TOK_HASH_HASH, 00085 pp_token::TOK_HASH_HASH, 00086 pp_token::TOK_RIGHT_PAR, 00087 pp_token::TOK_LEFT_PAR, 00088 pp_token::TOK_SEMICOLON, 00089 pp_token::TOK_COLON, 00090 pp_token::TOK_QMARK, 00091 pp_token::TOK_DOT, 00092 pp_token::TOK_PLUS, 00093 pp_token::TOK_STAR, 00094 pp_token::TOK_PERCENT, 00095 pp_token::TOK_SLASH, 00096 pp_token::TOK_HAT, 00097 pp_token::TOK_HAT, 00098 pp_token::TOK_AMP, 00099 pp_token::TOK_AMP, 00100 pp_token::TOK_VBAR, 00101 pp_token::TOK_VBAR, 00102 pp_token::TOK_TILDE, 00103 pp_token::TOK_TILDE, 00104 pp_token::TOK_EMARK, 00105 pp_token::TOK_EMARK, 00106 pp_token::TOK_EQ, 00107 pp_token::TOK_LT, 00108 pp_token::TOK_GT, 00109 pp_token::TOK_COMMA, 00110 pp_token::TOK_MINUS, 00111 pp_token::TOK_COLON_COLON, 00112 pp_token::TOK_DOT_STAR, 00113 pp_token::TOK_PLUS_EQ, 00114 pp_token::TOK_MINUS_EQ, 00115 pp_token::TOK_STAR_EQ, 00116 pp_token::TOK_SLASH_EQ, 00117 pp_token::TOK_PERCENT_EQ, 00118 pp_token::TOK_HAT_EQ, 00119 pp_token::TOK_HAT_EQ, 00120 pp_token::TOK_AMP_EQ, 00121 pp_token::TOK_AMP_EQ, 00122 pp_token::TOK_VBAR_EQ, 00123 pp_token::TOK_VBAR_EQ, 00124 pp_token::TOK_LT_LT, 00125 pp_token::TOK_GT_GT, 00126 pp_token::TOK_GT_GT_EQ, 00127 pp_token::TOK_LT_LT_EQ, 00128 pp_token::TOK_EQ_EQ, 00129 pp_token::TOK_EMARK_EQ, 00130 pp_token::TOK_EMARK_EQ, 00131 pp_token::TOK_LT_EQ, 00132 pp_token::TOK_GT_EQ, 00133 pp_token::TOK_AMP_AMP, 00134 pp_token::TOK_AMP_AMP, 00135 pp_token::TOK_VBAR_VBAR, 00136 pp_token::TOK_VBAR_VBAR, 00137 pp_token::TOK_PLUS_PLUS, 00138 pp_token::TOK_MINUS_MINUS, 00139 pp_token::TOK_MINUS_GT_STAR, 00140 pp_token::TOK_MINUS_GT, 00141 pp_token::TOK_DOT_DOT_DOT, 00142 00143 pp_token::TOK_ASM, 00144 pp_token::TOK_BLANK, 00145 pp_token::TOK_AUTO, 00146 pp_token::TOK_BLANK, 00147 pp_token::TOK_BOOL, 00148 pp_token::TOK_BLANK, 00149 pp_token::TOK_BREAK, 00150 pp_token::TOK_BLANK, 00151 pp_token::TOK_CASE, 00152 pp_token::TOK_BLANK, 00153 pp_token::TOK_CATCH, 00154 pp_token::TOK_BLANK, 00155 pp_token::TOK_CHAR, 00156 pp_token::TOK_BLANK, 00157 pp_token::TOK_CLASS, 00158 pp_token::TOK_BLANK, 00159 pp_token::TOK_CONST_CAST, 00160 pp_token::TOK_BLANK, 00161 pp_token::TOK_CONTINUE, 00162 pp_token::TOK_BLANK, 00163 pp_token::TOK_DEFAULT, 00164 pp_token::TOK_BLANK, 00165 pp_token::TOK_DELETE, 00166 pp_token::TOK_BLANK, 00167 pp_token::TOK_DO, 00168 pp_token::TOK_BLANK, 00169 pp_token::TOK_DOUBLE, 00170 pp_token::TOK_BLANK, 00171 pp_token::TOK_DYNAMIC_CAST, 00172 pp_token::TOK_BLANK, 00173 pp_token::TOK_ELSE, 00174 pp_token::TOK_BLANK, 00175 pp_token::TOK_ENUM, 00176 pp_token::TOK_BLANK, 00177 pp_token::TOK_EXPLICIT, 00178 pp_token::TOK_BLANK, 00179 pp_token::TOK_EXPORT, 00180 pp_token::TOK_BLANK, 00181 pp_token::TOK_EXTERN, 00182 pp_token::TOK_BLANK, 00183 pp_token::TOK_FLOAT, 00184 pp_token::TOK_BLANK, 00185 pp_token::TOK_FOR, 00186 pp_token::TOK_BLANK, 00187 pp_token::TOK_FRIEND, 00188 pp_token::TOK_BLANK, 00189 pp_token::TOK_GOTO, 00190 pp_token::TOK_BLANK, 00191 pp_token::TOK_IF, 00192 pp_token::TOK_BLANK, 00193 pp_token::TOK_INLINE, 00194 pp_token::TOK_BLANK, 00195 pp_token::TOK_INT, 00196 pp_token::TOK_BLANK, 00197 pp_token::TOK_LONG, 00198 pp_token::TOK_BLANK, 00199 pp_token::TOK_MUTABLE, 00200 pp_token::TOK_BLANK, 00201 pp_token::TOK_NAMESPACE, 00202 pp_token::TOK_BLANK, 00203 pp_token::TOK_NEW, 00204 pp_token::TOK_BLANK, 00205 pp_token::TOK_OPERATOR, 00206 pp_token::TOK_BLANK, 00207 pp_token::TOK_PRIVATE, 00208 pp_token::TOK_BLANK, 00209 pp_token::TOK_PROTECTED, 00210 pp_token::TOK_BLANK, 00211 pp_token::TOK_PUBLIC, 00212 pp_token::TOK_BLANK, 00213 pp_token::TOK_REGISTER, 00214 pp_token::TOK_BLANK, 00215 pp_token::TOK_REINTERPRET_CAST, 00216 pp_token::TOK_BLANK, 00217 pp_token::TOK_RETURN, 00218 pp_token::TOK_BLANK, 00219 pp_token::TOK_SHORT, 00220 pp_token::TOK_BLANK, 00221 pp_token::TOK_SIGNED, 00222 pp_token::TOK_BLANK, 00223 pp_token::TOK_SIZEOF, 00224 pp_token::TOK_BLANK, 00225 pp_token::TOK_STATIC, 00226 pp_token::TOK_BLANK, 00227 pp_token::TOK_STATIC_CAST, 00228 pp_token::TOK_BLANK, 00229 pp_token::TOK_STRUCT, 00230 pp_token::TOK_BLANK, 00231 pp_token::TOK_SWITCH, 00232 pp_token::TOK_BLANK, 00233 pp_token::TOK_TEMPLATE, 00234 pp_token::TOK_BLANK, 00235 pp_token::TOK_THIS, 00236 pp_token::TOK_BLANK, 00237 pp_token::TOK_THROW, 00238 pp_token::TOK_BLANK, 00239 pp_token::TOK_TRY, 00240 pp_token::TOK_BLANK, 00241 pp_token::TOK_TYPEDEF, 00242 pp_token::TOK_BLANK, 00243 pp_token::TOK_TYPEID, 00244 pp_token::TOK_BLANK, 00245 pp_token::TOK_TYPENAME, 00246 pp_token::TOK_BLANK, 00247 pp_token::TOK_UNION, 00248 pp_token::TOK_BLANK, 00249 pp_token::TOK_UNSIGNED, 00250 pp_token::TOK_BLANK, 00251 pp_token::TOK_USING, 00252 pp_token::TOK_BLANK, 00253 pp_token::TOK_VIRTUAL, 00254 pp_token::TOK_BLANK, 00255 pp_token::TOK_VOID, 00256 pp_token::TOK_BLANK, 00257 pp_token::TOK_VOLATILE, 00258 pp_token::TOK_BLANK, 00259 pp_token::TOK_WCHAR, 00260 pp_token::TOK_BLANK, 00261 pp_token::TOK_WHILE, 00262 pp_token::TOK_BLANK, 00263 pp_token::TOK_BOOL_LIT, 00264 pp_token::TOK_BLANK, 00265 pp_token::TOK_BOOL_LIT, 00266 pp_token::TOK_BLANK, 00267 pp_token::TOK_DEFINE, 00268 pp_token::TOK_BLANK, 00269 pp_token::TOK_UNDEF, 00270 pp_token::TOK_BLANK, 00271 pp_token::TOK_PRAGMA, 00272 pp_token::TOK_BLANK, 00273 pp_token::TOK_ERROR, 00274 pp_token::TOK_BLANK, 00275 pp_token::TOK_DEFINED, 00276 pp_token::TOK_BLANK, 00277 pp_token::TOK_IFDEF, 00278 pp_token::TOK_BLANK, 00279 pp_token::TOK_IFNDEF, 00280 pp_token::TOK_BLANK, 00281 pp_token::TOK_ELIF, 00282 pp_token::TOK_BLANK, 00283 pp_token::TOK_ENDIF, 00284 pp_token::TOK_BLANK, 00285 pp_token::TOK_LINE_END, 00286 pp_token::TOK_HASH, 00287 pp_token::TOK_INCLUDE, 00288 pp_token::TOK_INCL_SIG, 00289 pp_token::TOK_LINE_END, 00290 pp_token::TOK_HASH, 00291 pp_token::TOK_LINE, 00292 pp_token::TOK_LINE_SIG, 00293 pp_token::TOK_LINE_END, 00294 00295 pp_token::TOK_NUMBER_LIT, 00296 pp_token::TOK_BLANK, 00297 pp_token::TOK_NUMBER_LIT, 00298 pp_token::TOK_BLANK, 00299 pp_token::TOK_NUMBER_LIT, 00300 pp_token::TOK_BLANK, 00301 pp_token::TOK_NUMBER_LIT, 00302 pp_token::TOK_BLANK, 00303 00304 pp_token::TOK_NUMBER_LIT, 00305 pp_token::TOK_BLANK, 00306 pp_token::TOK_NUMBER_LIT, 00307 pp_token::TOK_BLANK, 00308 pp_token::TOK_NUMBER_LIT, 00309 pp_token::TOK_BLANK, 00310 pp_token::TOK_NUMBER_LIT, 00311 pp_token::TOK_BLANK, 00312 00313 pp_token::TOK_CHAR_LIT, 00314 pp_token::TOK_CHAR_LIT, 00315 pp_token::TOK_CHAR_LIT, 00316 pp_token::TOK_CHAR_LIT, 00317 pp_token::TOK_CHAR_LIT, 00318 pp_token::TOK_LINE_END, 00319 00320 pp_token::TOK_CHAR_LIT, 00321 pp_token::TOK_CHAR_LIT, 00322 pp_token::TOK_CHAR_LIT, 00323 pp_token::TOK_CHAR_LIT, 00324 pp_token::TOK_CHAR_LIT, 00325 pp_token::TOK_LINE_END, 00326 00327 pp_token::TOK_STRING_LIT, 00328 pp_token::TOK_STRING_LIT, 00329 pp_token::TOK_STRING_LIT, 00330 pp_token::TOK_STRING_LIT, 00331 pp_token::TOK_STRING_LIT, 00332 pp_token::TOK_STRING_LIT, 00333 pp_token::TOK_LINE_END, 00334 00335 pp_token::TOK_STRING_LIT, 00336 pp_token::TOK_STRING_LIT, 00337 pp_token::TOK_STRING_LIT, 00338 pp_token::TOK_STRING_LIT, 00339 pp_token::TOK_LINE_END, 00340 00341 pp_token::TOK_LINE_END, 00342 pp_token::TOK_FILE_END 00343 }; 00344 00345 ptr<file_info> fi = file_info::create("abcd",NULL); 00346 00347 ptr<pre_lex> plx = pre_lex::create(string_source::create(inp),encoder_ascii7::create()); 00348 ptr<pp_lex> pp = pp_lex::create(plx,fi); 00349 ptr<pp_token> tok; 00350 00351 ulint i = 0; 00352 do { 00353 00354 tok = pp->read(tok && tok->type_get() == pp_token::TOK_LINE_END); 00355 #if 0 00356 ::std::cerr << " test " << i << " : " << 00357 tok->name_get() << " " << 00358 tok->type_get() << " ?== " << (int)out[i] << "" 00359 << ::std::endl; 00360 #if 0 00361 (int)tok->value_get() << " ?== " << (int)ouv[i] << " offset " << 00362 (int)tok->location_get()->offset_get() << " ?== " << loc[i]->offset_get() << " line " << 00363 (int)tok->location_get()->line_get() << " ?== " << loc[i]->line_get() << " column " << 00364 (int)tok->location_get()->column_get() << " ?== " << loc[i]->column_get() << " order " << 00365 (int)tok->location_get()->order_get() << " ?== " << loc[i]->order_get() << ::std::endl; 00366 #endif 00367 #endif 00368 lassert(is_equal(tok->type_get(),out[i])); 00369 00370 if (tok->type_get() == pp_token::TOK_FILE_END) break; 00371 i++; 00372 } while (true); 00373 }
| void lestes::lang::cplus::lex::pp_token_test | ( | void | ) |
Tests pp_token class.
Performs testing of pp_token class.
Definition at line 53 of file pp_token.test.cc.
References a, b, lestes::is_equal(), lassert, and u.
Referenced by main().
00054 { 00055 ptr<file_info> fi = file_info::create("foobar.h",NULL); 00056 ptr<source_location> loc = source_location::create(fi,2,3); 00057 ptr<token_value> s = token_value::create("123"); 00058 ptr<token_value> t = token_value::create("123"); 00059 ptr<token_value> u = token_value::create("abc"); 00060 ptr<token_value> v = token_value::create("abc"); 00061 00062 ptr<pp_token> a = pp_token::create(loc,pp_token::TOK_NUMBER_LIT,s); 00063 00064 lassert(is_equal(a,a)); 00065 lassert(is_equal(a->type_get(),pp_token::TOK_NUMBER_LIT)); 00066 lassert(is_equal(a->value_get(),t)); 00067 lassert(is_equal(a->location_get()->file_get(),fi)); 00068 lassert(is_equal(a->location_get()->line_get(),2U)); 00069 lassert(is_equal(a->location_get()->column_get(),3U)); 00070 lassert(is_equal(a->flags_get(),pp_token::FLG_LITERAL)); 00071 00072 a->type_set(pp_token::TOK_STRING_LIT); 00073 a->value_set(u); 00074 a->location_set(source_location::create(fi,0,0)); 00075 a->flags_set(pp_token::FLG_ERROR); 00076 00077 lassert(is_equal(a->type_get(),pp_token::TOK_STRING_LIT)); 00078 lassert(is_equal(a->value_get(),v)); 00079 lassert(is_equal(a->location_get()->file_get(),fi)); 00080 lassert(is_equal(a->location_get()->line_get(),0U)); 00081 lassert(is_equal(a->location_get()->column_get(),0U)); 00082 lassert(is_equal(a->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR))); 00083 00084 ptr<pp_token> b = a->clone(); 00085 00086 lassert(is_equal(b,a)); 00087 lassert(is_equal(a,b)); 00088 lassert(is_equal(b->type_get(),pp_token::TOK_STRING_LIT)); 00089 lassert(is_equal(b->value_get(),v)); 00090 lassert(is_equal(b->location_get()->file_get(),fi)); 00091 lassert(is_equal(b->location_get()->line_get(),0U)); 00092 lassert(is_equal(b->location_get()->column_get(),0U)); 00093 lassert(is_equal(b->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR))); 00094 00095 ptr<pp_token> c; 00096 00097 c = a; 00098 lassert(is_equal(c,a)); 00099 lassert(is_equal(a,c)); 00100 lassert(is_equal(c->type_get(),pp_token::TOK_STRING_LIT)); 00101 lassert(is_equal(c->value_get(),v)); 00102 lassert(is_equal(c->location_get()->file_get(),fi)); 00103 lassert(is_equal(c->location_get()->line_get(),0U)); 00104 lassert(is_equal(c->location_get()->column_get(),0U)); 00105 lassert(is_equal(c->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR))); 00106 }
| void lestes::lang::cplus::lex::pre_lex_test | ( | void | ) |
Definition at line 50 of file pre_lex.test.cc.
References lestes::is_equal(), lassert, and TOK_EOF.
Referenced by main().
00051 { 00052 char inp[] = "abc$@`\n?""?""?""?""?=?""?/?""?(?""?)?""?!?""?<?""?>?""?-?""?'?""?+\\\nx\n"; 00053 char ouv[] = "abc$@`\n?""?""?#\\[]|{}~^?""?+x\n"; 00054 ulint out[] = { 00055 ucn_token::TOK_BASIC, 00056 ucn_token::TOK_BASIC, 00057 ucn_token::TOK_BASIC, 00058 00059 ucn_token::TOK_TRANSLATED, 00060 ucn_token::TOK_TRANSLATED, 00061 ucn_token::TOK_TRANSLATED, 00062 00063 ucn_token::TOK_BASIC, 00064 00065 ucn_token::TOK_BASIC, 00066 ucn_token::TOK_BASIC, 00067 ucn_token::TOK_BASIC, 00068 00069 ucn_token::TOK_BASIC, 00070 ucn_token::TOK_BASIC, 00071 ucn_token::TOK_BASIC, 00072 ucn_token::TOK_BASIC, 00073 ucn_token::TOK_BASIC, 00074 ucn_token::TOK_BASIC, 00075 ucn_token::TOK_BASIC, 00076 ucn_token::TOK_BASIC, 00077 ucn_token::TOK_BASIC, 00078 00079 ucn_token::TOK_BASIC, 00080 ucn_token::TOK_BASIC, 00081 ucn_token::TOK_BASIC, 00082 00083 ucn_token::TOK_BASIC, 00084 00085 ucn_token::TOK_BASIC, 00086 }; 00087 00088 ptr<vec_loc> loc = vec_loc::create(); 00089 00090 loc->push_back(simple_location::create(1,1)); 00091 loc->push_back(simple_location::create(1,2)); 00092 loc->push_back(simple_location::create(1,3)); 00093 loc->push_back(simple_location::create(1,4)); 00094 loc->push_back(simple_location::create(1,5)); 00095 loc->push_back(simple_location::create(1,6)); 00096 loc->push_back(simple_location::create(1,7)); 00097 00098 loc->push_back(simple_location::create(2,1)); 00099 loc->push_back(simple_location::create(2,2)); 00100 loc->push_back(simple_location::create(2,3)); 00101 00102 loc->push_back(simple_location::create(2,4)); 00103 loc->push_back(simple_location::create(2,7)); 00104 loc->push_back(simple_location::create(2,10)); 00105 loc->push_back(simple_location::create(2,13)); 00106 loc->push_back(simple_location::create(2,16)); 00107 loc->push_back(simple_location::create(2,19)); 00108 loc->push_back(simple_location::create(2,22)); 00109 loc->push_back(simple_location::create(2,25)); 00110 loc->push_back(simple_location::create(2,28)); 00111 00112 loc->push_back(simple_location::create(2,31)); 00113 loc->push_back(simple_location::create(2,32)); 00114 loc->push_back(simple_location::create(2,33)); 00115 loc->push_back(simple_location::create(3,1)); 00116 loc->push_back(simple_location::create(3,2)); 00117 00118 ulint i; 00119 00120 ptr<pre_lex> plx = pre_lex::create(string_source::create(inp),encoder_host::create()); 00121 ptr<ucn_token> tok; 00122 00123 i = 0; 00124 do { 00125 00126 tok = plx->read(); 00127 if (tok->type_get() == ucn_token::TOK_EOF) break; 00128 #if 0 00129 ::std::cerr << " test " << i << " : " << 00130 "type " << 00131 (int)tok->type_get() << " ?== " << out[i] << 00132 "value " << 00133 (int)tok->value_get() << " ?== " << (int)ouv[i] << 00134 " line " << 00135 (int)tok->location_get()->line_get() << " ?== " << loc->at(i)->line_get() << 00136 " column " << 00137 (int)tok->location_get()->column_get() << " ?== " << loc->at(i)->column_get() 00138 << ::std::endl; 00139 #endif 00140 lassert(is_equal((char)tok->value_get(),ouv[i])); 00141 lassert(is_equal((char)tok->value_get(),ouv[i])); 00142 lassert(is_equal(tok->type_get(),out[i])); 00143 lassert(is_equal(tok->location_get(),ptr<simple_location>(loc->at(i)))); 00144 00145 i++; 00146 } while (true); 00147 }
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_redefined | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("attempt to redefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when an internal predefined macro would be redefined.
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_undefined | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("attempt to undefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when an internal predefined macro would be undefined.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::previous_definition | ( | ::lestes::msg::message_stencil0< bool >:: | create("this is the location of the previous definition",::lestes::msg::message::FLG_ERROR) | ) |
Issued to show location of previous definition of a macro.
| void lestes::lang::cplus::lex::run | ( | void | ) |
Definition at line 52 of file lang/cplus/lex/main.cc.
References lestes::msg::report_end::create(), lestes::msg::report_ostream::create(), lestes::msg::report_origin_filter::create(), lestes::msg::reporter::instance(), TOK_EOF, and TOK_LITERAL.
00053 { 00054 ::lestes::msg::reporter::instance()->filter_set( 00055 ::lestes::msg::report_origin_filter::create( 00056 ::lestes::msg::report_ostream::create( 00057 ::lestes::msg::report_end::create(), 00058 ostream_wrapper::create(&::std::cerr,false)))); 00059 00060 ptr<file_system> fs = file_system::create(); 00061 if (!fs->add_search_path("/usr/include")) { 00062 ::std::cout << "could not add path\n"; 00063 } 00064 ptr<preprocessor> pp = preprocessor::create(fs,""); 00065 00066 ptr<cpp_token> tok; 00067 ptr<source_location> loc; 00068 cpp_token::type_type type; 00069 ptr<token_value> tv; 00070 ptr<lex_literal> literal; 00071 00072 do { 00073 tok = pp->read(); 00074 loc = tok->location_get(); 00075 type = tok->type_get(); 00076 tv = tok->value_get(); 00077 literal = type == cpp_token::TOK_LITERAL ? tok->literal_get() : ptr<lex_literal>(NULL); 00078 00079 ::std::cout << loc->file_get()->name_get() << ':' << loc->line_get() << ':' << loc->column_get(); 00080 ::std::cout << ' ' << tok->description_get(); 00081 00082 if (tv) { 00083 ::std::cout << ' '; 00084 00085 ucn_string str(tv->content_get()); 00086 for (ucn_string::iterator it = str.begin(), end = str.end(); it != end; ++it) { 00087 ::std::cout << static_cast<ulint>(*it); 00088 } 00089 ::std::cout << ' ' << tv->content_get(); 00090 } 00091 00092 if (literal) { 00093 ::std::cout << ' ' << "LINFO"; 00094 } 00095 00096 ::std::cout << ::std::endl; 00097 00098 } while (tok->type_get() != cpp_token::TOK_EOF); 00099 00100 if (pp->pragma_flag_get()) ::std::cout << "saw pragma\n"; 00101 }
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::stray_character | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("stray character `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when encountering a token holding a character, which does not fall into any token category would be emitted.
| void lestes::lang::cplus::lex::string_joiner_test | ( | void | ) |
Tests string_joiner class.
Performs testing of string_joiner class.
Definition at line 54 of file string_joiner.test.cc.
References lestes::is_equal(), lassert, and TOK_EQ.
Referenced by main().
00055 { 00056 ptr<token_sequence> ts = token_sequence::create(); 00057 ptr<file_info> fi = file_info::create("abc",NULL); 00058 ptr<source_location> loc = source_location::create(fi,1,1); 00059 ptr<pp_token> sep = pp_token::create(loc,pp_token::TOK_EQ); 00060 00061 ts->add_back(sep); 00062 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("aaa"))); 00063 00064 ts->add_back(sep); 00065 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("bbb"))); 00066 00067 ts->add_back(sep); 00068 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ccc"))); 00069 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ddd"))); 00070 00071 ts->add_back(sep); 00072 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("eee"))); 00073 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("fff"))); 00074 00075 ts->add_back(sep); 00076 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx"))); 00077 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("yyy"))); 00078 00079 ts->add_back(sep); 00080 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ggg"))); 00081 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("hhh"))); 00082 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("iii"))); 00083 00084 ts->add_back(sep); 00085 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("jjj"))); 00086 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("kkk"))); 00087 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("lll"))); 00088 00089 ts->add_back(sep); 00090 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx"))); 00091 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("yyy"))); 00092 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("zzz"))); 00093 00094 ts->add_back(sep); 00095 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("www"))); 00096 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("vvv"))); 00097 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("uuu"))); 00098 00099 #if 0 00100 ts->add_back(sep); 00101 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx"))); 00102 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("yyy"))); 00103 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("zzz"))); 00104 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("aaa"))); 00105 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("bbb"))); 00106 ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("ccc"))); 00107 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ddd"))); 00108 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("eee"))); 00109 ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("fff"))); 00110 #endif 00111 ts->add_back(sep); 00112 00113 ptr<string_joiner> sj = string_joiner::create(ts); 00114 00115 ptr<pp_token> r = sj->read(); 00116 lassert(r); 00117 lassert(is_equal(r,sep)); 00118 00119 r = sj->read(); 00120 lassert(r); 00121 lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT)); 00122 lassert(is_equal(r->value_get(),token_value::create("aaa"))); 00123 00124 r = sj->read(); 00125 lassert(r); 00126 lassert(is_equal(r,sep)); 00127 00128 r = sj->read(); 00129 lassert(r); 00130 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00131 lassert(is_equal(r->value_get(),token_value::create("bbb"))); 00132 00133 r = sj->read(); 00134 lassert(r); 00135 lassert(is_equal(r,sep)); 00136 00137 r = sj->read(); 00138 lassert(r); 00139 lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT)); 00140 lassert(is_equal(r->value_get(),token_value::create("cccddd"))); 00141 00142 r = sj->read(); 00143 lassert(r); 00144 lassert(is_equal(r,sep)); 00145 00146 r = sj->read(); 00147 lassert(r); 00148 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00149 lassert(is_equal(r->value_get(),token_value::create("eeefff"))); 00150 00151 r = sj->read(); 00152 lassert(r); 00153 lassert(is_equal(r,sep)); 00154 00155 r = sj->read(); 00156 lassert(r); 00157 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00158 lassert(is_equal(r->value_get(),token_value::create("xxxyyy"))); 00159 00160 r = sj->read(); 00161 lassert(r); 00162 lassert(is_equal(r,sep)); 00163 00164 00165 r = sj->read(); 00166 lassert(r); 00167 lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT)); 00168 lassert(is_equal(r->value_get(),token_value::create("ggghhhiii"))); 00169 00170 r = sj->read(); 00171 lassert(r); 00172 lassert(is_equal(r,sep)); 00173 00174 r = sj->read(); 00175 lassert(r); 00176 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00177 lassert(is_equal(r->value_get(),token_value::create("jjjkkklll"))); 00178 00179 r = sj->read(); 00180 lassert(r); 00181 lassert(is_equal(r,sep)); 00182 00183 r = sj->read(); 00184 lassert(r); 00185 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00186 lassert(is_equal(r->value_get(),token_value::create("xxxyyyzzz"))); 00187 00188 r = sj->read(); 00189 lassert(r); 00190 lassert(is_equal(r,sep)); 00191 00192 r = sj->read(); 00193 lassert(r); 00194 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00195 lassert(is_equal(r->value_get(),token_value::create("wwwvvvuuu"))); 00196 00197 #if 0 00198 r = sj->read(); 00199 lassert(r); 00200 lassert(is_equal(r,sep)); 00201 00202 r = sj->read(); 00203 lassert(r); 00204 lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT)); 00205 lassert(is_equal(r->value_get(),token_value::create("xxxyyyzzz"))); 00206 00207 r = sj->read(); 00208 lassert(r); 00209 lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT)); 00210 lassert(is_equal(r->value_get(),token_value::create("aaabbbccc"))); 00211 00212 r = sj->read(); 00213 lassert(r); 00214 lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT)); 00215 lassert(is_equal(r->value_get(),token_value::create("dddeeefff"))); 00216 00217 r = sj->read(); 00218 lassert(r); 00219 lassert(is_equal(r,sep)); 00220 #endif 00221 00222 }
| void lestes::lang::cplus::lex::token_sequence_test | ( | void | ) |
Tests token sequence class.
Definition at line 51 of file token_sequence.test.cc.
References lestes::is_equal(), and lassert.
Referenced by main().
00052 { 00053 ptr<file_info> fi = file_info::create(string("abc"),NULL); 00054 ptr<source_location> loc = source_location::create(fi,0,0); 00055 00056 ptr<token_sequence> t1 = token_sequence::create(); 00057 00058 lassert(is_equal(t1,t1)); 00059 lassert(is_equal(t1->empty(),true)); 00060 lassert(is_equal(t1->length(),0U)); 00061 00062 // pp_token::create(loc,pp_token::TOK_COMMA), 00063 00064 }
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::trailing_tokens_in_directive | ( | ::lestes::msg::message_stencil1< lstring >:: | create("extra tokens at the end of %0 directive",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()) | ) |
Issued when there are extra tokens at the end of a preprocessor directive. The zeroth parameter is the string representation of the directive name.
| void lestes::lang::cplus::lex::trigraphs_test | ( | void | ) |
Definition at line 49 of file trigraphs.test.cc.
References lassert, and TOK_EOF.
Referenced by main().
00050 { 00051 char in[] = "?""?= ?""?/ ?""?( ?""?) ?""?! ?""?< ?""?> ?""?- ?""?' \\?""?/ ?\\?/\n"; 00052 char out[] = "# \\ [ ] | { } ~ ^ \\\\ ?\\?/\n"; 00053 lint i; 00054 ptr<file_info> fi = file_info::create(string("abcd"),NULL); 00055 ptr<data_source> ds = string_source::create(in); 00056 ptr<encoder_host> enc = encoder_host::create(); 00057 ptr<special_tokens> stok = special_tokens::create(); 00058 ptr<trigraphs> tri = trigraphs::create(); 00059 ptr<ucn_token> tok; 00060 00061 enc->input_set(ds); 00062 stok->input_set(enc); 00063 tri->input_set(stok); 00064 00065 i = 0; 00066 do { 00067 tok = tri->read(); 00068 //cout << i << ": " << (char)tok.get_value() << endl; 00069 if (tok->type_get() == ucn_token::TOK_EOF) break; 00070 lassert((char)tok->value_get() == out[i]); 00071 00072 i++; 00073 } while (true); 00074 }
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_insufficient_digits | ( | ::lestes::msg::message_stencil0< bool >:: | create("insufficient digits in universal character escape sequence",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the ucn escape sequence does not contain proper number of digits.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid | ( | ::lestes::msg::message_stencil0< bool >:: | create("value of universal character escape sequence out of range",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the value of ucn escape sequence does not fall into the allowed ranges.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid_in_identifier | ( | ::lestes::msg::message_stencil0< bool >:: | create("value of universal character escape sequence out of range for identifiers",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the value of ucn escape sequence does not fall into the allowed ranges for identifiers.
| void lestes::lang::cplus::lex::ucn_token_buffer_test | ( | void | ) |
Definition at line 49 of file ucn_token_buffer.test.cc.
References a, b, lestes::is_equal(), lassert, and u.
Referenced by main().
00050 { 00051 ptr<ucn_token> a = ucn_token::create(0,u(':')); 00052 ptr<ucn_token> b = ucn_token::create(0,u('h')); 00053 00054 ptr<ucn_token_buffer> cb = ucn_token_buffer::create(); 00055 00056 cb->add_back(a); 00057 lassert(is_equal(cb->peek_front(),a)); 00058 cb->add_back(b); 00059 lassert(is_equal(cb->peek_front(),a)); 00060 cb->add_back(ucn_token::create(0,u('e'))); 00061 00062 cb->advance(1); 00063 lassert(is_equal(cb->peek_front(),b)); 00064 00065 cb->add_back(ucn_token::create(0,u('l'))); 00066 cb->add_back(ucn_token::create(0,u('l'))); 00067 cb->add_back(ucn_token::create(0,u('o'))); 00068 00069 ptr<token_value> tv = cb->extract_ordinary(5); 00070 ucn_string text(tv->content_get()); 00071 00072 for (ulint i = 0; i < 6; i++) { 00073 // cerr << "text " << text[i] << " string " << (int)("hello"[i]) << endl; 00074 lassert(is_equal(text[i],static_cast<ucn>("hello"[i]))); 00075 } 00076 }
| void lestes::lang::cplus::lex::ucn_token_test | ( | void | ) |
Definition at line 45 of file ucn_token.test.cc.
References a, b, lestes::is_equal(), and lassert.
Referenced by main().
00046 { 00047 ptr<simple_location> loc = simple_location::create(3,5); 00048 ptr<ucn_token> a = ucn_token::create(ucn_token::TOK_NOT_EOF); 00049 00050 lassert(is_equal(a,a)); 00051 lassert(is_equal(a->location_get(),ptr<simple_location>(NULL))); 00052 lassert(is_equal(a->type_get(),ucn_token::TOK_NOT_EOF)); 00053 00054 ptr<ucn_token> b = ucn_token::create(ucn_token::TOK_BASIC,character::create_from_host('z')); 00055 00056 lassert(is_equal(b,b)); 00057 lassert(is_equal(b->type_get(),ucn_token::TOK_BASIC)); 00058 lassert(is_equal(b->value_get(),character::create_from_host('z'))); 00059 lassert(is_equal(a->location_get(),ptr<simple_location>(NULL))); 00060 00061 ptr<ucn_token> c = ucn_token::create(ucn_token::TOK_BASIC,character::create_from_host('v'),loc); 00062 lassert(is_equal(c->type_get(),ucn_token::TOK_BASIC)); 00063 lassert(is_equal(c->value_get(),character::create_from_host('v'))); 00064 lassert(is_equal(c->location_get(),loc)); 00065 00066 ptr<ucn_token> d; 00067 d = c; 00068 lassert(is_equal(c,d)); 00069 lassert(is_equal(d,c)); 00070 00071 lassert(is_equal(d->type_get(),ucn_token::TOK_BASIC)); 00072 lassert(is_equal(d->value_get(),character::create_from_host('v'))); 00073 lassert(is_equal(d->location_get(),loc)); 00074 }
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unable_to_concatenate | ( | ::lestes::msg::message_stencil0< bool >:: | create("the concatenation does not result in a valid preprocessing token",::lestes::msg::message::FLG_ERROR) | ) |
Issued when the concatenation does not produce a valid preprocessing token.
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unable_to_open_file | ( | ::lestes::msg::message_stencil1< lstring >:: | create("unable to open file `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()) | ) |
Issued when the file given in include does not exist or is not accessible. The zeroth parameter is the name of the file.
| void lestes::lang::cplus::lex::unit_part_test | ( | void | ) |
Definition at line 48 of file unit_part.test.cc.
References lestes::is_equal(), lassert, and TOK_PLUS.
Referenced by main().
00049 { 00050 char inp[] = "+\n"; 00051 pp_token_type out[] = { pp_token::TOK_PLUS, pp_token::TOK_LINE_END, pp_token::TOK_FILE_END }; 00052 ptr<file_info> fi = file_info::create("abcd",NULL); 00053 ptr<unit_part> up = 00054 unit_part::create(fi,string_source::create(inp),encoder_host::create(),macro_storage::create()); 00055 ptr<pp_token> tok; 00056 00057 ulint i = 0; 00058 do { 00059 00060 tok = up->read(); 00061 #if 0 00062 ::std::cerr << " test " << i << " : " << 00063 tok->name_get() << " " << 00064 tok->type_get() << " ?== " << (int)out[i] << "" 00065 << ::std::endl; 00066 #if 0 00067 (int)tok->value_get() << " ?== " << (int)ouv[i] << " offset " << 00068 (int)tok->location_get()->offset_get() << " ?== " << loc[i]->offset_get() << " line " << 00069 (int)tok->location_get()->line_get() << " ?== " << loc[i]->line_get() << " column " << 00070 (int)tok->location_get()->column_get() << " ?== " << loc[i]->column_get() << " order " << 00071 (int)tok->location_get()->order_get() << " ?== " << loc[i]->order_get() << ::std::endl; 00072 #endif 00073 #endif 00074 lassert(is_equal(tok->type_get(),out[i])); 00075 00076 if (tok->type_get() == pp_token::TOK_FILE_END) break; 00077 i++; 00078 } while (true); 00079 }
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::unterminated_argument_list | ( | ::lestes::msg::message_stencil1< ucn_string >:: | create("unterminated argument list invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()) | ) |
Issued when the invocation of a function-like macro lacks the terminating `)'.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unterminated_comment | ( | ::lestes::msg::message_stencil0< bool >:: | create("unterminated comment",::lestes::msg::message::FLG_ERROR) | ) |
Issued when end of file is encountered within a multi-line comment.
Referenced by lexer_parse().
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unterminated_conditional | ( | ::lestes::msg::message_stencil1< lstring >:: | create("unterminated %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()) | ) |
Issued for unterminated conditional directives. The zeroth parameter is the string representation of the directive name.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::user_error | ( | ::lestes::msg::message_stencil0< bool >:: | create("user defined error",::lestes::msg::message::FLG_ERROR) | ) |
Issued for error directive.
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::directive_expects_macro_name |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::duplicate_macro_parameter |
Error message for macro parameter list.
Referenced by lestes::lang::cplus::lex::macro_head::parse().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_after_else |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_without_if |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_after_else |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_without_if |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
Error message for flexer.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::endif_without_if |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_comma |
Error message for macro parameter list.
Referenced by lestes::lang::cplus::lex::macro_head::parse().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::expected_comma_right_par |
Error message for macro parameter list.
Referenced by lestes::lang::cplus::lex::macro_head::parse().
Error message for macro manipulation.
Referenced by lestes::lang::cplus::lex::macro_storage::defined(), and lestes::lang::cplus::lex::macro_storage::undef().
Error message for macro parameter list.
Referenced by lestes::lang::cplus::lex::macro_head::parse().
Error message for macro parameter list.
Referenced by lestes::lang::cplus::lex::macro_head::parse().
Error message for number parsing.
Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().
Error message for number parsing.
Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().
Error message for macro expansion list.
Referenced by lestes::lang::cplus::lex::macro_body::parse().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_end |
Error message for macro expansion list.
Referenced by lestes::lang::cplus::lex::macro_body::parse().
Error message for macro expansion list.
Referenced by lestes::lang::cplus::lex::macro_body::parse().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_empty |
Error message for number parsing.
Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().
Error message for number parsing.
Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().
| ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > lestes::lang::cplus::lex::invalid_argument_count |
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_filename |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_number |
Error message for number parsing.
Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_cpp_token |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_directve |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
Error message for ucn translation.
Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal().
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_name_alt_operator |
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_redefinition_different |
Error message for macro manipulation.
Referenced by lestes::lang::cplus::lex::macro_storage::define().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::malformed_include |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
Error message for ucn translation.
Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_newline |
Error message for flexer.
Error message for flexer.
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::mixed_strings |
| ptr< ::lestes::msg::message_stencil1< ulint > > lestes::lang::cplus::lex::nesting_too_deep |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_redefined |
Error message for macro manipulation.
Referenced by lestes::lang::cplus::lex::macro_storage::define().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_undefined |
Error message for macro manipulation.
Referenced by lestes::lang::cplus::lex::macro_storage::undef().
Error message for macro manipulation.
Referenced by lestes::lang::cplus::lex::macro_storage::define().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::stray_character |
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::trailing_tokens_in_directive |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::check_extra_tokens().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_insufficient_digits |
Error message for ucn translation.
Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn().
Error message for ucn translation.
Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal(), lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn(), lestes::lang::cplus::lex::ucn_token_buffer::extract_simple_ucn(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_ucn_literal().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid_in_identifier |
Error message for ucn translation.
Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_simple_ucn().
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unable_to_open_file |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::evaluator(), and lestes::lang::cplus::lex::evaluator::process_directive().
| ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::unterminated_argument_list |
Error message for flexer.
| ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unterminated_conditional |
Error message for conditional directives.
Referenced by lestes::lang::cplus::lex::condition_stack::process().
| ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::user_error |
Error message for preprocessing directives.
Referenced by lestes::lang::cplus::lex::evaluator::process_directive().
1.5.1-20070107