@@ -591,25 +591,27 @@ public class ScratchRuntime {
591
591
}
592
592
593
593
public function renameVariable (oldName :String , newName :String , block :Block ):void {
594
- var v: Variable = app. viewedObj(). lookupVar(oldName);
594
+ var owner : ScratchObj = app. viewedObj();
595
+ var v: Variable = owner . lookupVar(oldName);
595
596
596
597
if (v != null ) {
598
+ if (! owner . ownsVar(v. name )) owner = app. stagePane;
597
599
v. name = newName;
598
600
if (v. watcher) v. watcher. changeVarName(newName);
599
601
} else {
600
- app . viewedObj() . lookupOrCreateVar(newName);
602
+ owner . lookupOrCreateVar(newName);
601
603
}
602
- updateVarRefs(oldName, newName);
604
+ updateVarRefs(oldName, newName, owner );
603
605
clearAllCaches();
604
606
}
605
607
606
608
public function updateVariable (v :Variable ):void {}
607
609
public function makeVariable (varObj :Object ):Variable { return new Variable(varObj. name , varObj. value ); }
608
610
public function makeListWatcher ():ListWatcher { return new ListWatcher(); }
609
611
610
- private function updateVarRefs (oldName :String , newName :String ):void {
612
+ private function updateVarRefs (oldName :String , newName :String , owner : ScratchObj ):void {
611
613
// Change the variable name in all blocks that use it.
612
- for each (var b : Block in allUsesOfVariable(oldName)) {
614
+ for each (var b : Block in allUsesOfVariable(oldName, owner )) {
613
615
if (b . op == Specs. GET_VAR ) b . setSpec(newName);
614
616
else b . args [ 0 ] . setArgValue(newName);
615
617
}
@@ -715,25 +717,26 @@ public class ScratchRuntime {
715
717
return false ;
716
718
}
717
719
718
- public function allUsesOfVariable (varName :String ):Array {
720
+ public function allUsesOfVariable (varName :String , owner :ScratchObj ):Array {
721
+ var variableBlocks: Array = [ Specs. SET_VAR , Specs. CHANGE_VAR , "showVariable:" , "hideVariable:" ];
719
722
var result : Array = [];
720
- for each (var stack : Block in allStacks()) {
723
+ var stacks: Array = owner . isStage ? allStacks() : owner . scripts;
724
+ for each (var stack : Block in stacks) {
721
725
// for each block in stack
722
726
stack . allBlocksDo(function (b : Block): void {
723
- if ((b . op == Specs. GET_VAR ) && (b . spec == varName)) result . push (b );
724
- if ((b . op == Specs. SET_VAR ) && (b . args [ 0 ] . argValue == varName)) result . push (b );
725
- if ((b . op == Specs. CHANGE_VAR ) && (b . args [ 0 ] . argValue == varName)) result . push (b );
727
+ if (b . op == Specs. GET_VAR && b . spec == varName) result . push (b );
728
+ if (variableBlocks. indexOf (b . op) != - 1 && b . args [ 0 ] . argValue == varName) result . push (b );
726
729
});
727
730
}
728
731
return result ;
729
732
}
730
733
731
- public function allCallsOf (callee :String ):Array {
734
+ public function allCallsOf (callee :String , owner : ScratchObj ):Array {
732
735
var result : Array = [];
733
- for each (var stack : Block in allStacks() ) {
736
+ for each (var stack : Block in owner . scripts ) {
734
737
// for each block in stack
735
738
stack . allBlocksDo(function (b : Block): void {
736
- if (( b . op == Specs. CALL ) && ( b . spec == callee ) ) result . push (b );
739
+ if (b . op == Specs. CALL && b . spec == callee ) result . push (b );
737
740
});
738
741
}
739
742
return result ;
0 commit comments