set past end of stream, set Byte to -1, Char and Code to end_of_file, at end of stream (#479)
This commit is contained in:
@@ -1190,6 +1190,12 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
stream.set_past_end_of_stream();
|
||||
self.unify(self[temp_v!(2)], Addr::Fixnum(-1));
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let addr =
|
||||
match self.store(self.deref(self[temp_v!(2)])) {
|
||||
addr if addr.is_ref() => {
|
||||
@@ -1287,6 +1293,18 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
let end_of_file = clause_name!("end_of_file");
|
||||
let end_of_file = self.heap.to_unifiable(
|
||||
HeapCellValue::Atom(end_of_file, None),
|
||||
);
|
||||
|
||||
stream.set_past_end_of_stream();
|
||||
|
||||
self.unify(self[temp_v!(2)], end_of_file);
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let addr =
|
||||
match self.store(self.deref(self[temp_v!(2)])) {
|
||||
addr if addr.is_ref() => {
|
||||
@@ -1385,6 +1403,18 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
let end_of_file = clause_name!("end_of_file");
|
||||
let end_of_file = self.heap.to_unifiable(
|
||||
HeapCellValue::Atom(end_of_file, None),
|
||||
);
|
||||
|
||||
stream.set_past_end_of_stream();
|
||||
|
||||
self.unify(self[temp_v!(2)], end_of_file);
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let addr =
|
||||
match self.store(self.deref(self[temp_v!(2)])) {
|
||||
addr if addr.is_ref() => {
|
||||
@@ -2076,6 +2106,12 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
stream.set_past_end_of_stream();
|
||||
self.unify(self[temp_v!(2)], Addr::Fixnum(-1));
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let addr =
|
||||
match self.store(self.deref(self[temp_v!(2)])) {
|
||||
addr if addr.is_ref() => {
|
||||
@@ -2171,6 +2207,18 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
let end_of_file = clause_name!("end_of_file");
|
||||
let end_of_file = self.heap.to_unifiable(
|
||||
HeapCellValue::Atom(end_of_file, None),
|
||||
);
|
||||
|
||||
stream.set_past_end_of_stream();
|
||||
|
||||
self.unify(self[temp_v!(2)], end_of_file);
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let mut iter = self.open_parsing_stream(
|
||||
stream.clone(),
|
||||
"get_char",
|
||||
@@ -2273,6 +2321,18 @@ impl MachineState {
|
||||
}
|
||||
}
|
||||
|
||||
if stream.at_end_of_stream() {
|
||||
let end_of_file = clause_name!("end_of_file");
|
||||
let end_of_file = self.heap.to_unifiable(
|
||||
HeapCellValue::Atom(end_of_file, None),
|
||||
);
|
||||
|
||||
stream.set_past_end_of_stream();
|
||||
|
||||
self.unify(self[temp_v!(2)], end_of_file);
|
||||
return return_from_clause!(self.last_call, self);
|
||||
}
|
||||
|
||||
let addr =
|
||||
match self.store(self.deref(self[temp_v!(2)])) {
|
||||
addr if addr.is_ref() => {
|
||||
|
||||
Reference in New Issue
Block a user