@@ -410,15 +410,17 @@ class TypeBlock
410
410
class BaseBlock
411
411
: public BitcodeReader::AnyBlock
412
412
{
413
- std::vector<BaseInfo>& v_;
413
+ BitcodeReader& br_;
414
+ BaseInfo& I_;
414
415
415
416
public:
416
417
explicit
417
418
BaseBlock (
418
- std::vector<BaseInfo>& v) noexcept
419
- : v_(v)
419
+ BaseInfo& I,
420
+ BitcodeReader& br) noexcept
421
+ : I_(I)
422
+ , br_(br)
420
423
{
421
- v_.emplace_back ();
422
424
}
423
425
424
426
Error
@@ -429,18 +431,30 @@ class BaseBlock
429
431
{
430
432
switch (ID)
431
433
{
432
- case BASE_ID:
433
- return decodeRecord (R, v_.back ().id , Blob);
434
- case BASE_NAME:
435
- return decodeRecord (R, v_.back ().Name , Blob);
436
434
case BASE_ACCESS:
437
- return decodeRecord (R, v_. back () .Access , Blob);
435
+ return decodeRecord (R, I_ .Access , Blob);
438
436
case BASE_IS_VIRTUAL:
439
- return decodeRecord (R, v_. back () .IsVirtual , Blob);
437
+ return decodeRecord (R, I_ .IsVirtual , Blob);
440
438
default :
441
439
return AnyBlock::parseRecord (R, ID, Blob);
442
440
}
443
441
}
442
+
443
+ Error
444
+ readSubBlock (
445
+ unsigned ID) override
446
+ {
447
+ switch (ID)
448
+ {
449
+ case BI_TYPE_BLOCK_ID:
450
+ {
451
+ TypeBlock B (I_.Type , br_);
452
+ return br_.readBlock (B, ID);
453
+ }
454
+ default :
455
+ return AnyBlock::readSubBlock (ID);
456
+ }
457
+ }
444
458
};
445
459
446
460
// ------------------------------------------------
@@ -687,9 +701,8 @@ class FunctionParamBlock
687
701
return br_.readBlock (B, ID);
688
702
}
689
703
default :
690
- break ;
704
+ return AnyBlock::readSubBlock (ID) ;
691
705
}
692
- return AnyBlock::readSubBlock (ID);
693
706
}
694
707
};
695
708
@@ -795,7 +808,7 @@ class RecordBlock
795
808
{
796
809
case BI_BASE_BLOCK_ID:
797
810
{
798
- BaseBlock B (I->Bases );
811
+ BaseBlock B (I->Bases . emplace_back (), br_ );
799
812
return br_.readBlock (B, ID);
800
813
}
801
814
case BI_TEMPLATE_BLOCK_ID:
@@ -805,9 +818,8 @@ class RecordBlock
805
818
return br_.readBlock (B, ID);
806
819
}
807
820
default :
808
- break ;
821
+ return TopLevelBlock::readSubBlock (ID) ;
809
822
}
810
- return TopLevelBlock::readSubBlock (ID);
811
823
}
812
824
};
813
825
0 commit comments