let is_initial_index = self.lists.is_empty();
self.lists.push(Self::add_index(is_initial_index, index));
},
- &Term::Constant(_, Constant::String(_))
- if !self.flags.double_quotes.is_atom() => { // strings are lists in this case.
+ &Term::Constant(_, Constant::String(ref s))
+ if !self.flags.double_quotes.is_atom() && !s.is_empty() => { // strings are lists in this case.
+ let is_initial_index = self.lists.is_empty();
+ self.lists.push(Self::add_index(is_initial_index, index));
+ },
+ &Term::Constant(_, Constant::String(ref s))
+ if !self.flags.double_quotes.is_atom() && s.is_expandable() => {
let is_initial_index = self.lists.is_empty();
self.lists.push(Self::add_index(is_initial_index, index));
},
_ => IntIndex::Fail
}
}
-
+
fn switch_on_constant(con_ind: HashMap<Constant, ThirdLevelIndex>, prelude: &mut CodeDeque)
-> IntIndex
{
match con_loc {
IntIndex::External(offset) => offset + prelude_len + 1,
IntIndex::Fail => 0,
- IntIndex::Internal(offset) => offset,
+ IntIndex::Internal(offset) => offset,
}
}
IntIndex::Internal(_) => prelude_len - lst_offset + 1
}
}
-
+
pub fn add_indices(self, code: &mut Code, mut code_body: Code)
{
if self.no_indices() {
let mut indices = default_index_store!(wam.indices.atom_tbl.clone());
let wam_indices = &mut wam.indices;
- compiler.process_decl(decl, &mut wam.code_repo, wam_indices, &mut indices, flags)?;
-
+ compiler.process_decl(decl, &mut wam.code_repo, wam_indices, &mut indices, flags)?;
+
Ok(indices)
}
let offset = match addr {
Addr::HeapCell(_) | Addr::StackCell(..) | Addr::AttrVar(..) => v,
- Addr::Con(Constant::String(_)) if !self.flags.double_quotes.is_atom() => l,
+ Addr::Con(Constant::String(ref s)) if !self.flags.double_quotes.is_atom() =>
+ if s.is_empty() && !s.is_expandable() { c } else { l },
Addr::Con(_) => c,
Addr::Lis(_) => l,
Addr::Str(_) => s,