If you are looking for the decompiler itself, visit https://github.com/jindrapetrik/jpexs-decompiler
NEW : We have got a new blog where we post some interesting SWF internals info.
List of issues#1807 Error #1064, maybe related to constructprop vs callproperty?
Author: NoobTracker
Date created:
Type: bug
Visibility: Everybody
Assigned to:
Labels: AS3Decompilation
State: closed
> What steps will reproduce the problem?
I decompiled the Vex 3 swf and went to the Main script and added a space somewhere and
saved.
> What is the expected output? What do you see instead?
The function unlockAchievement (line 2018) has the following P-code (excerpt):
getlocal3
findpropstrict QName(PackageNamespace("flash.utils"),"getDefinitionByName")
getlocal 4
callproperty QName(PackageNamespace("flash.utils"),"getDefinitionByName"), 1
construct 0
After modifying the file it changes to:
getlocal3
findpropstrict QName(PackageNamespace("flash.utils"),"getDefinitionByName")
getlocal 4
constructprop QName(PackageNamespace("flash.utils"),"getDefinitionByName"), 1
getglobalscope
call 0
The debugger shows an error where those pieces of code are located and flash shows me
Error #1064. Using the P-code editor I can replace the entire new "code" section with the
old code section and it doesn't result in that problem anymore, maybe I should try
replacing portions of P-code. Sadly, it always reverts after another edit.
> What version of the product are you using? Is it "nightly build"? Which operating system
do you have?
I'm using the official version 15.1.0 on Win7.
> Please provide any additional information below. If the problem is related to a SWF
file, attach it here, otherwise we can't help you.
Attached the file, but if it helps, here's the function causing the problems:
private function unlockAchievement(param1:int) : void
{
var _loc2_:Array = achievementsLog["achievement" + param1];
trace("Achievement " + param1 + " unlocked! - create window");
var _loc3_:* = new achievementUnlocked();
_loc3_.x = 640 + _loc3_.width;
_loc3_.y = 100 + 100 * achievementUnlocked.achievementUnlocks;
_loc3_.achievementName.text = _loc2_[0];
addChild(_loc3_);
adjustColour.colourChange(_loc3_.bgColours,this.getColour(this.level)[0],this.getColour(th
is.level)[1],this.getColour(this.level)[2],this.getColour(this.level)[3]);
var _loc4_:* = "achievement" + param1 + "Button";
_loc3_.icon = new getDefinitionByName(_loc4_)();
_loc3_.icon.x = 31;
_loc3_.icon.y = 43;
_loc3_.addChild(_loc3_.icon);
API.unlockMedal(_loc2_[0]);
this.saveGame();
}
Also, is there a way to make certain functions unmodifyable?
Vex_3-unmodified.swf (7,450 KiB)
Oh, forgot to mention that _loc3_.icon = new getDefinitionByName(_loc4_)() is the line
that causes problems.
Sorry for posting this in an incomplete state, but I just replaced the new snippet with
the old snippet instead of replacing the entire code sections and that fixes it, too. So
that really seems to be the problem.
In nightly 2217 I added parenthesis around that getDefinitionName, like:
_loc3_.icon = new (getDefinitionByName(_loc4_))();
with it it compiles properly.
State: new→upgraded
State: upgraded→closed