@@ -335,31 +335,61 @@ pub mod reader {
335
335
f()
336
336
}
337
337
338
- fn read_seq <T>(&self, f: &fn(uint) -> T) -> T {
339
- debug!(" read_seq ( ) ");
340
- do self.push_doc(self.next_doc(EsVec)) {
341
- let len = self._next_uint(EsVecLen );
342
- debug!(" len=%u ", len);
343
- f(len )
338
+ fn read_enum_struct_variant <T>(&self, _names: &[&str] , f: &fn(uint) -> T) -> T {
339
+ debug!(" read_enum_struct_variant ( ) ");
340
+ let idx = self._next_uint(EsEnumVid);
341
+ debug!(" idx=%u ", idx );
342
+ do self.push_doc(self.next_doc(EsEnumBody)) {
343
+ f(idx )
344
344
}
345
345
}
346
346
347
- fn read_seq_elt <T>(&self, idx: uint, f: &fn() -> T) -> T {
348
- debug!(" read_seq_elt ( idx=%u) ", idx);
349
- self.push_doc(self.next_doc(EsVecElt), f )
347
+ fn read_enum_struct_variant_field <T>(&self, name: &str , idx: uint, f: &fn() -> T) -> T {
348
+ debug!(" read_enum_struct_variant_arg ( name=%? , idx=%u) ", name , idx);
349
+ f( )
350
350
}
351
351
352
352
fn read_struct<T>(&self, name: &str, _len: uint, f: &fn() -> T) -> T {
353
353
debug!(" read_struct( name=%s) ", name);
354
354
f()
355
355
}
356
356
357
+ #[cfg(stage0)]
357
358
fn read_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T {
358
- debug!(" read_field( name=%s , idx=%u) ", name, idx);
359
+ debug!(" read_field( name=%? , idx=%u) ", name, idx);
359
360
self._check_label(name);
360
361
f()
361
362
}
362
363
364
+ #[cfg(stage1)]
365
+ #[cfg(stage2)]
366
+ #[cfg(stage3)]
367
+ fn read_struct_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T {
368
+ debug!(" read_struct_field( name=%?, idx=%u) ", name, idx);
369
+ self._check_label(name);
370
+ f()
371
+ }
372
+
373
+ fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T {
374
+ debug!(" read_tuple( ) ");
375
+ self.read_seq(f)
376
+ }
377
+
378
+ fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
379
+ debug!(" read_tuple_arg( idx=%u) ", idx);
380
+ self.read_seq_elt(idx, f)
381
+ }
382
+
383
+ fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T {
384
+ debug!(" read_tuple_struct( name=%?) ", name);
385
+ self.read_tuple(f)
386
+ }
387
+
388
+ fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
389
+ debug!(" read_tuple_struct_arg( idx=%u) ", idx);
390
+ self.read_tuple_arg(idx, f)
391
+ }
392
+
363
393
fn read_option<T>(&self, f: &fn(bool) -> T) -> T {
364
394
debug!(" read_option( ) ");
365
395
do self.read_enum(" Option ") || {
@@ -373,6 +403,20 @@ pub mod reader {
373
403
}
374
404
}
375
405
406
+ fn read_seq<T>(&self, f: &fn(uint) -> T) -> T {
407
+ debug!(" read_seq( ) ");
408
+ do self.push_doc(self.next_doc(EsVec)) {
409
+ let len = self._next_uint(EsVecLen);
410
+ debug!(" len=%u", len);
411
+ f(len)
412
+ }
413
+ }
414
+
415
+ fn read_seq_elt<T>(&self, idx: uint, f: &fn() -> T) -> T {
416
+ debug!(" read_seq_elt( idx=%u) ", idx);
417
+ self.push_doc(self.next_doc(EsVecElt), f)
418
+ }
419
+
376
420
fn read_map<T>(&self, _f: &fn(uint) -> T) -> T {
377
421
debug!(" read_map( ) ");
378
422
fail!(~" read_map is unimplemented");
@@ -606,29 +650,42 @@ pub mod writer {
606
650
self._emit_label(name);
607
651
self.wr_tag(EsEnum as uint, f)
608
652
}
653
+
609
654
fn emit_enum_variant(&self, _v_name: &str, v_id: uint, _cnt: uint,
610
655
f: &fn()) {
611
656
self._emit_tagged_uint(EsEnumVid, v_id);
612
657
self.wr_tag(EsEnumBody as uint, f)
613
658
}
659
+
614
660
fn emit_enum_variant_arg(&self, _idx: uint, f: &fn()) { f() }
615
661
616
- fn emit_seq(&self, len: uint, f: &fn()) {
617
- do self.wr_tag(EsVec as uint) {
618
- self._emit_tagged_uint(EsVecLen, len);
619
- f()
620
- }
662
+ fn emit_enum_struct_variant(&self, v_name: &str, v_id: uint, cnt: uint, f: &fn()) {
663
+ self.emit_enum_variant(v_name, v_id, cnt, f)
621
664
}
622
665
623
- fn emit_seq_elt (&self, _idx : uint, f: &fn()) {
624
- self.wr_tag(EsVecElt as uint , f)
666
+ fn emit_enum_struct_variant_field (&self, _f_name: &str, idx : uint, f: &fn()) {
667
+ self.emit_enum_variant_arg(idx , f)
625
668
}
626
669
627
670
fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) { f() }
671
+ #[cfg(stage0)]
628
672
fn emit_field(&self, name: &str, _idx: uint, f: &fn()) {
629
673
self._emit_label(name);
630
674
f()
631
675
}
676
+ #[cfg(stage1)]
677
+ #[cfg(stage2)]
678
+ #[cfg(stage3)]
679
+ fn emit_struct_field(&self, name: &str, _idx: uint, f: &fn()) {
680
+ self._emit_label(name);
681
+ f()
682
+ }
683
+
684
+ fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
685
+ fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
686
+
687
+ fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
688
+ fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
632
689
633
690
fn emit_option(&self, f: &fn()) {
634
691
self.emit_enum(" Option ", f);
@@ -640,6 +697,17 @@ pub mod writer {
640
697
self.emit_enum_variant(" Some ", 1, 1, f)
641
698
}
642
699
700
+ fn emit_seq(&self, len: uint, f: &fn()) {
701
+ do self.wr_tag(EsVec as uint) {
702
+ self._emit_tagged_uint(EsVecLen, len);
703
+ f()
704
+ }
705
+ }
706
+
707
+ fn emit_seq_elt(&self, _idx: uint, f: &fn()) {
708
+ self.wr_tag(EsVecElt as uint, f)
709
+ }
710
+
643
711
fn emit_map(&self, _len: uint, _f: &fn()) {
644
712
fail!(~" emit_map is unimplemented");
645
713
}
0 commit comments