Last active
January 14, 2017 15:41
-
-
Save vizanto/d60cb466b1573026b893 to your computer and use it in GitHub Desktop.
Haxe / Clojure interop experiments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // Nasty code below: | |
| // | |
| package java.internal; | |
| import java.internal.Runtime; | |
| /** | |
| * These classes are automatically generated by the compiler. They are only | |
| * here so there is an option for e.g. defining them as externs if you are compiling | |
| * in modules (untested) | |
| * | |
| * @author waneck, vizanto | |
| */ | |
| @:abstract @:nativeGen @:native("haxe.lang.Function") @:keep class Function implements clojure.lang.IFn | |
| { | |
| function new(arity:Int, type:Int) | |
| { | |
| } | |
| public function applyTo(args) : Dynamic | |
| { | |
| return (untyped this).__hx_invokeDynamic(cast args); | |
| } | |
| public function run() : Void | |
| { | |
| (untyped this).__hx_invokeDynamic([]); | |
| } | |
| public function call() : Dynamic | |
| { | |
| return (untyped this).__hx_invokeDynamic([]); | |
| } | |
| @:overload public function invoke() : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic, arg17 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic, arg17 : Dynamic, arg18 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic, arg17 : Dynamic, arg18 : Dynamic, arg19 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic, arg17 : Dynamic, arg18 : Dynamic, arg19 : Dynamic, arg20 : Dynamic) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20]); | |
| } | |
| @:overload public function invoke(arg1 : Dynamic, arg2 : Dynamic, arg3 : Dynamic, arg4 : Dynamic, arg5 : Dynamic, arg6 : Dynamic, arg7 : Dynamic, arg8 : Dynamic, arg9 : Dynamic, arg10 : Dynamic, arg11 : Dynamic, arg12 : Dynamic, arg13 : Dynamic, arg14 : Dynamic, arg15 : Dynamic, arg16 : Dynamic, arg17 : Dynamic, arg18 : Dynamic, arg19 : Dynamic, arg20 : Dynamic, args : NativeArray<Dynamic>) : Dynamic { | |
| return (untyped this).__hx_invokeDynamic([ arg1, arg2, arg3, arg4, arg5, arg6, arg7, | |
| arg8, arg9, arg10, arg11, arg12, arg13, arg14, | |
| arg15, arg16, arg17, arg18, arg19, arg20 ]); //.concat(args)); | |
| } | |
| } | |
| // | |
| //... rest is standard | |
| // |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ➭ haxe build.hxml && java -cp ~/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar -jar ./bin/Test.jar | |
| haxelib run hxjava hxjava_build.txt --haxe-version 3200 --feature-level 1 | |
| javac "-sourcepath" "src" "-d" "obj" "-g:none" "-classpath" "./lib/clojure-1.6.0.jar" "@cmd" | |
| Test.hx:8: Hellow Clojure: #'user/whut | |
| Test.hx:14: 456 | |
| Test.hx:17: 789 | |
| Test.hx:21: clojure.lang.LazySeq@148d | |
| ([123 456]) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package clojure; | |
| import clojure.lang.IPersistentMap; | |
| /** | |
| This abstract allows accessing Clojure's PersistentMap like Haxe's Map. | |
| The keys are strong references. This is for the Java target only. | |
| **/ | |
| @:notNull | |
| abstract PersistentMap<K, V>(IPersistentMap) | |
| { | |
| public inline function new(underlying : IPersistentMap) { | |
| this = underlying; | |
| } | |
| @:arrayAccess public inline function get(k:K) { | |
| return this.valAt(k); | |
| } | |
| public inline function exists(k:K) { | |
| return this.containsKey(k); | |
| } | |
| @:from static inline function toCljMap<K,V>(t:IPersistentMap):PersistentMap<K,V> { | |
| return new PersistentMap<K,V>(t); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import clojure.lang.*; | |
| import clojure.java.api.Clojure; | |
| import clojure.PersistentMap; | |
| class Test { | |
| static function main() { | |
| var whut = Var.intern(Symbol.intern("user"), Symbol.intern("whut")); | |
| trace("Hellow Clojure: " + whut); | |
| var readed : APersistentMap = Clojure.read("{ 123 456 }"); | |
| //$type(readed); | |
| var map : PersistentMap<Int, Dynamic> = readed; | |
| trace( map[123] ); | |
| whut.bindRoot(function() return 789); | |
| trace( whut.invoke() ); | |
| var mapped = Var.intern(Symbol.intern("clojure.core"), Symbol.intern("map")) | |
| .invoke(function(key_value) return key_value, readed); | |
| trace(mapped); | |
| Var.intern(Symbol.intern("clojure.core"), Symbol.intern("println")).invoke(mapped); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment