Convert ActionScript 3 to Haxe 3 code.
Note: This repository is no longer actively maintained. Please refer to https://github.com/innogames/ax3 as an alternative!
You'll need Haxe 3.* to build the project and Neko 2.* to run it.
haxe --no-traces as3hx.hxml
Build the as3hx tool.
haxe -debug as3hx.hxml
Build with debug output when converting files.
neko run.n test/ out/
This will take all the ActionScript 3 files in the test/ directory and generate the corresponding Haxe files in out/
To generate the tests you can also use :
make run-test
This will generate the tests in test-out
To get the basic tool usage :
neko run.n -help
There are many configuration options to choose how the Haxe code is generated, check the src/as3hx/Config.hx file for the full list.
as3hx looks for, or creates, a config file in your home directory called ".as3hx_config.xml". You can also create one in the directory you are running as3hx from, which will override the home file.
MIT, see LICENCE.md
In ActionScript, the delete
keyword will cause an intentional failure in the
generated .hx file. Take a close look at the object being deleted.
- if it is a local variable, replace
delete varname
withvarname = null
- if it is a class member variable, remove the
delete
entirely - it it is an E4X (FastXML), well, hmmm... still working on that one.
Senocular did a little writeup on delete
that might make it more clear
http://www.kirupa.com/forum/showthread.php?223798-ActionScript-3-Tip-of-the-Day/page3
E4X is currently partly done. This will fail in some cases, just examine source and output carefully.
The output of
if (true) {
for (var i:uint = 0; i < 7; i++)
val += "0";
} else {
for (i = 0; i < 8; i++)
val += "0";
}
is
if (true) {
var i:UInt = 0;
while (i < 7) {
val += "0";
i++;
}
} else {
i = 0;
while (i < 8) {
val += "0";
i++;
}
}
As you can see, the scope of i
in Flash is not the same as in Haxe,
so the else
section will produce Unknown identifier : i. The solution
is to move the var i : UInt = 0;
outside of the blocks in the generated
code.
This can not be avoided by always creating the i
variable, as the code
for (var i:uint = 0; i < 7; i++)
val += "0";
for (i = 0; i < 8; i++)
val += "0";
would then produce a double initialization of i
, also causing a compiler error.
var i:UInt = 0;
while (i < 7) {
val += "0";
i++;
}
var i = 0;
while (i < 8) {
val += "0";
i++;
}