clause(H, B) :-
( var(H) -> throw(error(instantiation_error, clause/2))
- ; functor(H, Name, Arity) -> ( Name == '.' -> throw(error(type_error(callable, H), clause/2))
- ; Name == (:), Arity =:= 2 ->
- arg(1, H, Module),
- arg(2, H, F),
- '$module_clause'(F, B, Module)
- %% '$no_such_predicate' fails if H is not callable.
- ; '$no_such_predicate'(H) -> '$fail'
- ; '$head_is_dynamic'(H) -> '$clause_body_is_valid'(B),
- '$get_clause'(H, B)
- ; throw(error(permission_error(access, private_procedure, Name/Arity),
- clause/2))
- )
+ ; functor(H, Name, Arity) ->
+ ( Name == '.' -> throw(error(type_error(callable, H), clause/2))
+ ; Name == (:), Arity =:= 2 ->
+ arg(1, H, Module),
+ arg(2, H, F),
+ '$module_clause'(F, B, Module)
+ %% '$no_such_predicate' fails if H is not callable.
+ ; '$no_such_predicate'(H) -> '$fail'
+ ; '$head_is_dynamic'(H) -> '$clause_body_is_valid'(B),
+ '$get_clause'(H, B)
+ ; throw(error(permission_error(access, private_procedure, Name/Arity),
+ clause/2))
+ )
; throw(error(type_error(callable, H), clause/2))
).
if *offset == 0 =>
{
*offset = code_len - idx;
+ debug_assert!(*offset > 0);
+
break;
}
_ => {}
.term_dir_entry_len((clause_name!("term_expansion"), 2)),
orig_goal_expansion_lens: code_repo
.term_dir_entry_len((clause_name!("goal_expansion"), 2)),
- initialization_goals: (vec![], VecDeque::from(vec![])),
+ initialization_goals: (vec![], VecDeque::from(vec![])),
suppress_warnings,
listing_src
}
let (mut len, mut queue_len) = ((preds.0).0.len(), preds.1.len());
- if self.module.is_some() && hook.has_module_scope() {
- let module_preds = self
- .user_term_dir
- .entry(key.clone())
- .or_insert((Predicate::new(), VecDeque::from(vec![])));
+ let module_preds = self
+ .user_term_dir
+ .entry(key.clone())
+ .or_insert((Predicate::new(), VecDeque::from(vec![])));
- if let Some(ref mut module) = &mut self.module {
- module.add_expansion_record(hook, clause.clone(), queue.clone());
- module.add_local_expansion(hook, clause.clone(), queue.clone());
- }
+ if let Some(ref mut module) = &mut self.module {
+ module.add_expansion_record(hook, clause.clone(), queue.clone());
+ module.add_local_expansion(hook, clause.clone(), queue.clone());
+ }
- (module_preds.0).0.push(clause);
- module_preds.1.extend(queue.into_iter());
+ (module_preds.0).0.push(clause);
+ module_preds.1.extend(queue.into_iter());
- (preds.0).0.extend((module_preds.0).0.iter().cloned());
- preds.1.extend(module_preds.1.iter().cloned());
- } else {
- let module_preds = self
- .user_term_dir
- .entry(key.clone())
- .or_insert((Predicate::new(), VecDeque::from(vec![])));
+ (preds.0).0.extend((module_preds.0).0.iter().cloned());
+ preds.1.extend(module_preds.1.iter().cloned());
+ if !(self.module.is_some() && hook.has_module_scope()) {
len += 1;
queue_len += queue_len;
-
- (preds.0).0.push(clause);
- preds.1.extend(queue.into_iter());
-
- (preds.0).0.extend((module_preds.0).0.iter().cloned());
- preds.1.extend(module_preds.1.iter().cloned());
}
(len, queue_len)
Err(SessionError::from(ParserError::InvalidModuleDecl))
}
}
- Declaration::ModuleInitialization(query_terms, queue) => {
- self.initialization_goals.0.extend(query_terms.into_iter());
- self.initialization_goals.1.extend(queue.into_iter());
+ Declaration::ModuleInitialization(query_terms, queue) => {
+ self.initialization_goals.0.extend(query_terms.into_iter());
+ self.initialization_goals.1.extend(queue.into_iter());
- Ok(())
- }
+ Ok(())
+ }
Declaration::MultiFile(..) => {
Ok(())
}