Skip to content

Commit 3a70350

Browse files
committed
Merge pull request scratchfoundation#171 from nathan/rename-fix
Fixed renaming procedures and variables
2 parents 27d5ec8 + 45fb50a commit 3a70350

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

src/scratch/BlockMenus.as

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ public class BlockMenus implements DragClient {
563563
if (block.nextBlock) block.nextBlock.allBlocksDo(function(b:Block):void {
564564
if (b.op == Specs.GET_PARAM) b.parameterIndex = -1; // parameters may have changed; clear cached indices
565565
});
566-
for each (var caller:Block in app.runtime.allCallsOf(oldSpec)) {
566+
for each (var caller:Block in app.runtime.allCallsOf(oldSpec, app.viewedObj())) {
567567
var oldArgs:Array = caller.args;
568568
caller.setSpec(newSpec, block.defaultArgValues);
569569
for (var i:int = 0; i < oldArgs.length; i++) {

src/scratch/ScratchRuntime.as

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -591,25 +591,27 @@ public class ScratchRuntime {
591591
}
592592

593593
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);
595596

596597
if (v != null) {
598+
if (!owner.ownsVar(v.name)) owner = app.stagePane;
597599
v.name = newName;
598600
if (v.watcher) v.watcher.changeVarName(newName);
599601
} else {
600-
app.viewedObj().lookupOrCreateVar(newName);
602+
owner.lookupOrCreateVar(newName);
601603
}
602-
updateVarRefs(oldName, newName);
604+
updateVarRefs(oldName, newName, owner);
603605
clearAllCaches();
604606
}
605607

606608
public function updateVariable(v:Variable):void {}
607609
public function makeVariable(varObj:Object):Variable { return new Variable(varObj.name, varObj.value); }
608610
public function makeListWatcher():ListWatcher { return new ListWatcher(); }
609611

610-
private function updateVarRefs(oldName:String, newName:String):void {
612+
private function updateVarRefs(oldName:String, newName:String, owner:ScratchObj):void {
611613
// 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)) {
613615
if (b.op == Specs.GET_VAR) b.setSpec(newName);
614616
else b.args[0].setArgValue(newName);
615617
}
@@ -715,25 +717,26 @@ public class ScratchRuntime {
715717
return false;
716718
}
717719

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:"];
719722
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) {
721725
// for each block in stack
722726
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);
726729
});
727730
}
728731
return result;
729732
}
730733

731-
public function allCallsOf(callee:String):Array {
734+
public function allCallsOf(callee:String, owner:ScratchObj):Array {
732735
var result:Array = [];
733-
for each (var stack:Block in allStacks()) {
736+
for each (var stack:Block in owner.scripts) {
734737
// for each block in stack
735738
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);
737740
});
738741
}
739742
return result;

0 commit comments

Comments
 (0)