Migration of Empires
Dan Korostelev (@nadako)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6695313/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6695315/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6695316/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6695364/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6700489/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6700490/pasted-from-clipboard.png)
Team before me
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6642467/pasted-from-clipboard.png)
Team before me
- Settled with Haxe/OpenFL
- Made as3hx work
- Developed a "continous conversion" pipeline
Issues
- OpenFL HTML5 performance ✔️
- Flash/OpenFL behaviour inconsistencies ✔️
- Complex building pipeline 🤷
- Still AS3 source code 🤷♂️
Problems with as3hx
- OK for compiling, bad for developing
- Syntax-only AST
- Comments/whitespace are AST nodes
- Typing is very complicated
- done on writing
- no typed program representation
- hard to transform the code
New converter: full-fidelity parsing
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6642548/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6642550/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6642570/pasted-from-clipboard.png)
New converter: typed tree
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643394/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643398/pasted-from-clipboard.png)
New converter: SWC support
- Load signatures from the ABC bytecode
- ...into the same typed tree structure (dummy tokens)
-
Thanks, format library!
New converter: Type annotations
- Override field, local and argument types
- Strict Array/Dictionary/Function types
- Supported in both AS3 and SWC
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643479/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643483/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643506/pasted-from-clipboard.png)
New converter: filters
- Adapt AS3 code for Haxe
- Insert missing type conversion
- Remove redundant code (e.g useless casts)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643535/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643538/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643543/pasted-from-clipboard.png)
New converter: output
- Prints the filtered typed tree
- ...with the comments and whitespace
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643615/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6643616/pasted-from-clipboard.png)
AS3
Haxe (formatted)
Encapsulated Reflection
-
*/Object -> ASAny/ASObject
-
Overriden property access and type conversions
- Thanks, abstracts! \o/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6681806/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6681811/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/80378/images/6681816/pasted-from-clipboard.png)
It works! :)
- HTML5 via JS and OpenFL
- Flash via SWF and SWC libs
- AS3 is only used for conversion
...converter is fully in Haxe/JVM
Using the Flash target
- Still relevant (payers on potatos)
- Using original SWCs (for now)
- Had to fix compiler a bit
- bytecode issues
- flash properties
- more interop (e.g. Vector)
Next step: full Haxe!
- Final touches on code conversion style
- Prepare dev environment
- Educate the teams
- Help other projects
Haxe 4
- Compiler cache finally reliable!
- IDE services work...
- ...but are slow :(
Thank you!
Questions?
Migration of Empires
By Dan Korostelev
Migration of Empires
- 1,322