#as3hx Convert ActionScript 3 to Haxe 3 code.
###Build You'll need Haxe 3.* to build the project and Neko 2.* to run it.
make
Build the as3hx tool.
make debug
Build with debug output when converting files.
###Use 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.
####Licence
MIT, see LICENCE.md
###Current failures:
####'delete' keyword: 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' with 'varname = 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: E4X is currently partly done. This will fail in some cases, just examine source and output carefully.
####For Initializations: 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++; }