From ab4f93dcee5a31deb2fcbe16e8a8890dc526c2ea Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 4 Jun 2022 15:29:00 -0600 Subject: [PATCH] do not emit indexing instructions for single clause subsequences (#1503) --- src/codegen.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/codegen.rs b/src/codegen.rs index 69edb0d0..c6e27cb0 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -1130,7 +1130,6 @@ impl<'b> CodeGenerator<'b> { if clauses.len() > 1 { let choice = match i { 0 => self.settings.internal_try_me_else(clause_code.len() + 1), - //Instruction::TryMeElse(clause_code.len() + 1), _ if i == clauses.len() - 1 => self.settings.internal_trust_me(), _ => self.settings.internal_retry_me_else(clause_code.len() + 1), }; @@ -1152,17 +1151,14 @@ impl<'b> CodeGenerator<'b> { skip_stub_try_me_else = !self.settings.is_dynamic(); } - let arg = match clause.args() { - Some(args) => match args.iter().nth(optimal_index) { - Some(term) => Some(term), - None => None, - }, - None => None, - }; + let arg = clause.args().and_then(|args| args.iter().nth(optimal_index)); if let Some(arg) = arg { let index = code.len(); - code_offsets.index_term(arg, index, &mut clause_index_info, self.atom_tbl); + + if clauses.len() > 1 { + code_offsets.index_term(arg, index, &mut clause_index_info, self.atom_tbl); + } } if !(code_offsets.no_indices() && clauses.len() == 1 && self.settings.is_extensible) { @@ -1182,7 +1178,12 @@ impl<'b> CodeGenerator<'b> { code.extend(clause_code.into_iter()); } - let index_code = code_offsets.compute_indices(skip_stub_try_me_else); + let index_code = if clauses.len() > 1 { + code_offsets.compute_indices(skip_stub_try_me_else) + } else { + vec![] + }; + self.global_jmp_by_locs_offset = jmp_by_locs_len; if !index_code.is_empty() { -- 2.54.0