@@ -469,13 +469,13 @@ func (is *Instructions) Add(i Instruction) {
469
469
// Returns a boolean as to whether the stream changed
470
470
func (is Instructions ) Pass (pass int ) bool {
471
471
addr := uint32 (0 )
472
- changed := pass == 0
472
+ changed := false
473
473
for _ , i := range is {
474
- i .SetPos (addr )
474
+ changed = changed || i .SetPos (addr )
475
475
if pass > 0 {
476
476
// Only resolve addresses on 2nd pass
477
477
if resolver , ok := i .(Resolver ); ok {
478
- changed = changed || resolver .Resolve ()
478
+ resolver .Resolve ()
479
479
}
480
480
}
481
481
addr += i .Size ()
@@ -502,13 +502,13 @@ done:
502
502
503
503
type Instruction interface {
504
504
Pos () uint32
505
- SetPos (uint32 )
505
+ SetPos (uint32 ) bool
506
506
Size () uint32
507
507
Output () []byte
508
508
}
509
509
510
510
type Resolver interface {
511
- Resolve () bool
511
+ Resolve ()
512
512
}
513
513
514
514
// Position
@@ -519,9 +519,12 @@ func (p *pos) Pos() uint32 {
519
519
return uint32 (* p )
520
520
}
521
521
522
- // Set Position
523
- func (p * pos ) SetPos (newPos uint32 ) {
524
- * p = pos (newPos )
522
+ // Set Position - returns changed
523
+ func (p * pos ) SetPos (newPos uint32 ) bool {
524
+ oldP := * p
525
+ newP := pos (newPos )
526
+ * p = newP
527
+ return oldP != newP
525
528
}
526
529
527
530
// A plain opcode
@@ -588,25 +591,8 @@ type JumpAbs struct {
588
591
}
589
592
590
593
// Set the Arg from the Jump Label
591
- //
592
- // Returns a changed flag
593
- func (o * JumpAbs ) Resolve () bool {
594
- newPos := o .Dest .Pos ()
595
- changed := o .OpArg .Arg == newPos
596
- o .OpArg .Arg = newPos
597
- return changed
598
- }
599
-
600
- // Bytes used in the output stream
601
- func (o * JumpAbs ) Size () uint32 {
602
- o .Resolve ()
603
- return o .OpArg .Size ()
604
- }
605
-
606
- // Output
607
- func (o * JumpAbs ) Output () []byte {
608
- o .Resolve ()
609
- return o .OpArg .Output ()
594
+ func (o * JumpAbs ) Resolve () {
595
+ o .OpArg .Arg = o .Dest .Pos ()
610
596
}
611
597
612
598
// FIXME Jump Relative
0 commit comments