From cd8a683229d4e207075e29b4aa07f88348cd136d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 10 Sep 2014 13:02:16 -0700 Subject: [PATCH] Improve error messages for invalid ubiquitous tokens --- spec/compiler/prepare_grammar/extract_tokens_spec.cc | 8 ++++++-- src/compiler/prepare_grammar/extract_tokens.cc | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/spec/compiler/prepare_grammar/extract_tokens_spec.cc b/spec/compiler/prepare_grammar/extract_tokens_spec.cc index d444adef..542535ee 100644 --- a/spec/compiler/prepare_grammar/extract_tokens_spec.cc +++ b/spec/compiler/prepare_grammar/extract_tokens_spec.cc @@ -214,7 +214,9 @@ describe("extract_tokens", []() { }).ubiquitous_tokens({ i_sym(1) })); AssertThat(get<2>(result), !Equals(nullptr)); - AssertThat(get<2>(result), EqualsPointer(new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, "Not a token: (sym 1)"))); + AssertThat(get<2>(result), EqualsPointer( + new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, + "Not a token: rule_B"))); }); }); @@ -226,7 +228,9 @@ describe("extract_tokens", []() { }).ubiquitous_tokens({ choice({ i_sym(1), blank() }) })); AssertThat(get<2>(result), !Equals(nullptr)); - AssertThat(get<2>(result), EqualsPointer(new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, "Not a token: (choice (sym 1) (blank))"))); + AssertThat(get<2>(result), EqualsPointer( + new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, + "Not a token: (choice (sym 1) (blank))"))); }); }); }); diff --git a/src/compiler/prepare_grammar/extract_tokens.cc b/src/compiler/prepare_grammar/extract_tokens.cc index 74780186..5b416a02 100644 --- a/src/compiler/prepare_grammar/extract_tokens.cc +++ b/src/compiler/prepare_grammar/extract_tokens.cc @@ -92,10 +92,10 @@ class TokenExtractor : public rules::IdentityRuleFn { }; static tuple ubiq_token_err( - const rule_ptr rule) { + const string &msg) { return make_tuple(SyntaxGrammar(), LexicalGrammar(), new GrammarError(GrammarErrorTypeInvalidUbiquitousToken, - "Not a token: " + rule->to_string())); + "Not a token: " + msg)); } tuple extract_tokens( @@ -128,11 +128,11 @@ tuple extract_tokens( } else { auto sym = dynamic_pointer_cast(extractor.apply(rule)); if (!sym.get()) - return ubiq_token_err(rule); + return ubiq_token_err(rule->to_string()); Symbol symbol = symbol_replacer.replace_symbol(*sym); if (!symbol.is_token()) - return ubiq_token_err(rule); + return ubiq_token_err(rules[symbol.index].first); ubiquitous_tokens.insert(symbol); }