From e4b9d9dfa9cd2873df2ea70a059554a44d3d8aa5 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 16 Jan 2019 20:56:36 -0800 Subject: [PATCH] Fix token conflict detection bugs --- cli/src/generate/build_tables/item.rs | 7 ++++--- cli/src/generate/build_tables/minimize_parse_table.rs | 5 +++-- cli/src/generate/build_tables/mod.rs | 2 +- cli/src/loader.rs | 3 --- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/cli/src/generate/build_tables/item.rs b/cli/src/generate/build_tables/item.rs index 0222ac21..6c74d465 100644 --- a/cli/src/generate/build_tables/item.rs +++ b/cli/src/generate/build_tables/item.rs @@ -236,7 +236,7 @@ impl<'a> ParseItemSet<'a> { Err(i) => { self.entries.insert(i, (item, lookaheads.clone())); &mut self.entries[i].1 - }, + } Ok(i) => { self.entries[i].1.insert_all(lookaheads); &mut self.entries[i].1 @@ -248,8 +248,9 @@ impl<'a> ParseItemSet<'a> { let mut previous_variable_index = u32::MAX; let mut previous_step_index = u32::MAX; for (item, _) in self.entries.iter() { - if item.step().is_none() && item.variable_index != previous_variable_index - || item.step_index != previous_step_index + if item.step().is_some() + && (item.variable_index != previous_variable_index + || item.step_index != previous_step_index) { h.write_u32(item.variable_index); h.write_u32(item.step_index); diff --git a/cli/src/generate/build_tables/minimize_parse_table.rs b/cli/src/generate/build_tables/minimize_parse_table.rs index a5cb5f81..bb9b26eb 100644 --- a/cli/src/generate/build_tables/minimize_parse_table.rs +++ b/cli/src/generate/build_tables/minimize_parse_table.rs @@ -228,8 +228,9 @@ impl<'a> Minimizer<'a> { // Do not add a token if it conflicts with an existing token. if token.is_terminal() { for existing_token in state.terminal_entries.keys() { - if (is_word_token && self.keywords.contains(existing_token)) - || is_keyword && self.syntax_grammar.word_token.as_ref() == Some(existing_token) + if (is_word_token || is_keyword) + && (self.keywords.contains(existing_token) + || self.syntax_grammar.word_token.as_ref() == Some(existing_token)) { continue; } diff --git a/cli/src/generate/build_tables/mod.rs b/cli/src/generate/build_tables/mod.rs index 28b18109..7811176b 100644 --- a/cli/src/generate/build_tables/mod.rs +++ b/cli/src/generate/build_tables/mod.rs @@ -232,7 +232,7 @@ fn identify_keywords( .filter(|token| { for other_token in keywords.iter() { if other_token != *token - && token_conflict_map.does_match_same_string(token.index, other_token.index) + && token_conflict_map.does_match_same_string(other_token.index, token.index) { info!( "Keywords - exclude {} because it matches the same string as {}", diff --git a/cli/src/loader.rs b/cli/src/loader.rs index 7aa0ca50..70056404 100644 --- a/cli/src/loader.rs +++ b/cli/src/loader.rs @@ -167,9 +167,6 @@ impl Loader { } if cfg!(windows) { - if !BUILD_TARGET.contains("64") { - command.env("Platform", "x86"); - } command .args(&["/nologo", "/LD", "/I"]) .arg(header_path)