f()
}
+ fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T {
+ debug!("read_tuple()");
+ self.read_seq(f)
+ }
+
+ fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+ debug!("read_tuple_arg(idx=%u)", idx);
+ self.read_seq_elt(idx, f)
+ }
+
+ fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T {
+ debug!("read_tuple_struct(name=%?)", name);
+ self.read_tuple(f)
+ }
+
+ fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+ debug!("read_tuple_struct_arg(idx=%u)", idx);
+ self.read_tuple_arg(idx, f)
+ }
+
fn read_option<T>(&self, f: &fn(bool) -> T) -> T {
debug!("read_option()");
do self.read_enum("Option") || {
f()
}
+ fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+ fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
fn emit_option(&self, f: &fn()) {
self.emit_enum("Option", f);
}
f();
}
+ fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+ fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
fn emit_option(&self, f: &fn()) { f(); }
fn emit_option_none(&self) { self.emit_nil(); }
fn emit_option_some(&self, f: &fn()) { f(); }
f();
}
+ fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+ fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+ fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
fn emit_option(&self, f: &fn()) { f(); }
fn emit_option_none(&self) { self.emit_nil(); }
fn emit_option_some(&self, f: &fn()) { f(); }
}
}
+ fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T {
+ debug!("read_tuple()");
+ self.read_seq(f)
+ }
+
+ fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+ debug!("read_tuple_arg(idx=%u)", idx);
+ self.read_seq_elt(idx, f)
+ }
+
+ fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T {
+ debug!("read_tuple_struct(name=%?)", name);
+ self.read_tuple(f)
+ }
+
+ fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+ debug!("read_tuple_struct_arg(idx=%u)", idx);
+ self.read_tuple_arg(idx, f)
+ }
+
fn read_option<T>(&self, f: &fn(bool) -> T) -> T {
match self.stack.pop() {
Null => f(false),
#[cfg(stage3)]
fn emit_struct_field(&self, f_name: &str, f_idx: uint, f: &fn());
+ fn emit_tuple(&self, len: uint, f: &fn());
+ fn emit_tuple_arg(&self, idx: uint, f: &fn());
+
+ fn emit_tuple_struct(&self, name: &str, len: uint, f: &fn());
+ fn emit_tuple_struct_arg(&self, f_idx: uint, f: &fn());
+
// Specialized types:
fn emit_option(&self, f: &fn());
fn emit_option_none(&self);
#[cfg(stage3)]
fn read_struct_field<T>(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T;
+ fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T;
+ fn read_tuple_arg<T>(&self, a_idx: uint, f: &fn() -> T) -> T;
+
+ fn read_tuple_struct<T>(&self, s_name: &str, f: &fn(uint) -> T) -> T;
+ fn read_tuple_struct_arg<T>(&self, a_idx: uint, f: &fn() -> T) -> T;
+
// Specialized types:
fn read_option<T>(&self, f: &fn(bool) -> T) -> T;
self.add_to_log(CallToEmitField (name.to_str(),idx)); f();
}
+ fn emit_tuple(&self, _len: uint, f: &fn()) {
+ self.add_unknown_to_log(); f();
+ }
+ fn emit_tuple_arg(&self, _idx: uint, f: &fn()) {
+ self.add_unknown_to_log(); f();
+ }
+
+ fn emit_tuple_struct(&self, _name: &str, _len: uint, f: &fn()) {
+ self.add_unknown_to_log(); f();
+ }
+ fn emit_tuple_struct_arg(&self, _idx: uint, f: &fn()) {
+ self.add_unknown_to_log(); f();
+ }
+
fn emit_option(&self, f: &fn()) {
self.add_to_log(CallToEmitOption);
f();