Skip to content

Latest commit

 

History

History
111 lines (80 loc) · 2.34 KB

README.md

File metadata and controls

111 lines (80 loc) · 2.34 KB

#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.

  1. if it is a local variable, replace 'delete varname' with 'varname = null'
  2. if it is a class member variable, remove the delete entirely
  3. 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++; }