浏览代码

[neko] make Math extern, provide implementation separately (see #4254)

Simon Krajewski 10 年之前
父节点
当前提交
f657ac1558
共有 1 个文件被更改,包括 42 次插入37 次删除
  1. 42 37
      std/neko/_std/Math.hx

+ 42 - 37
std/neko/_std/Math.hx

@@ -21,52 +21,26 @@
  */
  */
 import neko.Lib;
 import neko.Lib;
 
 
-@:coreApi @:final class Math {
-
-	public static var PI(default,null) : Float;
-	public static var NaN(default,null) : Float;
-	public static var POSITIVE_INFINITY(default,null) : Float;
-	public static var NEGATIVE_INFINITY(default,null) : Float;
-
-	public static function min(a:Float,b:Float) : Float { return if( a < b ) a else if( untyped $isnan(a) ) a else b; }
-	public static function max(a:Float,b:Float) : Float { return if( a < b ) b else if( untyped $isnan(b) ) b else a; }
-
-	public static function abs( v : Float ) : Float return 0.;
-	public static function sin( v : Float ) : Float return 0.;
-	public static function cos( v : Float ) : Float return 0.;
-	public static function atan2( y : Float, x : Float ) : Float return 0.;
-	public static function tan( v : Float ) : Float return 0.;
-	public static function exp( v : Float ) : Float return 0.;
-	public static function log( v : Float ) : Float return 0.;
-	public static function sqrt( v : Float ) : Float return 0.;
-	public static function round( v : Float ) : Int return 0;
-	public static function floor( v : Float ) : Int return 0;
-	public static function ceil( v : Float ) : Int return 0;
-	public static function atan( v : Float ) : Float return 0.;
-	public static function asin( v : Float ) : Float return 0.;
-	public static function acos( v : Float ) : Float return 0.;
-	public static function pow( v : Float, exp : Float ) : Float return 0.;
-
-	public static function fround( v : Float ) : Float return 0.;
-	public static function ffloor( v : Float ) : Float return 0.;
-	public static function fceil( v : Float ) : Float return 0.;
-
+@:native("Math")
+@:keep
+private class MathImpl {
 	static var __rnd;
 	static var __rnd;
 	static var _rand_float = Lib.load("std","random_float",1);
 	static var _rand_float = Lib.load("std","random_float",1);
 	static var _rand_int = Lib.load("std","random_int",2);
 	static var _rand_int = Lib.load("std","random_int",2);
 
 
+	public static function min(a:Float,b:Float) : Float { return if( a < b ) a else if( untyped $isnan(a) ) a else b; }
+	public static function max(a:Float,b:Float) : Float { return if( a < b ) b else if( untyped $isnan(b) ) b else a; }
 	public static function random() : Float { return _rand_float(__rnd); }
 	public static function random() : Float { return _rand_float(__rnd); }
-
 	public static function isNaN(f:Float) : Bool { return untyped __dollar__isnan(f); }
 	public static function isNaN(f:Float) : Bool { return untyped __dollar__isnan(f); }
 	public static function isFinite(f:Float) : Bool { return !untyped (__dollar__isinfinite(f) || __dollar__isnan(f)); }
 	public static function isFinite(f:Float) : Bool { return !untyped (__dollar__isinfinite(f) || __dollar__isnan(f)); }
 
 
 	static function __init__() : Void {
 	static function __init__() : Void {
+		var M : Dynamic = MathImpl;
 	 	__rnd = Lib.load("std","random_new",0)();
 	 	__rnd = Lib.load("std","random_new",0)();
-	 	PI = Lib.load("std","math_pi",0)();
-	 	NaN = 0.0 / 0.0;
-	 	POSITIVE_INFINITY = 1.0 / 0.0;
-	 	NEGATIVE_INFINITY = -POSITIVE_INFINITY;
-		var M : Dynamic = Math;
+	 	M.PI = Lib.load("std","math_pi",0)();
+	 	M.NaN = 0.0 / 0.0;
+	 	M.POSITIVE_INFINITY = 1.0 / 0.0;
+	 	M.NEGATIVE_INFINITY = -M.POSITIVE_INFINITY;
 		M.abs = Lib.load("std","math_abs",1);
 		M.abs = Lib.load("std","math_abs",1);
 		M.sin = Lib.load("std","math_sin",1);
 		M.sin = Lib.load("std","math_sin",1);
 		M.cos = Lib.load("std","math_cos",1);
 		M.cos = Lib.load("std","math_cos",1);
@@ -86,7 +60,38 @@ import neko.Lib;
 		M.ffloor = try Lib.load("std", "math_ffloor", 1) catch( e : Dynamic ) M.floor;
 		M.ffloor = try Lib.load("std", "math_ffloor", 1) catch( e : Dynamic ) M.floor;
 		M.fround = try Lib.load("std", "math_fround", 1) catch( e : Dynamic ) M.round;
 		M.fround = try Lib.load("std", "math_fround", 1) catch( e : Dynamic ) M.round;
 	}
 	}
-
 }
 }
 
 
+@:coreApi
+@:final
+extern class Math {
+
+	public static var PI(default,null) : Float;
+	public static var NaN(default,null) : Float;
+	public static var POSITIVE_INFINITY(default,null) : Float;
+	public static var NEGATIVE_INFINITY(default,null) : Float;
 
 
+	public static function min(a:Float,b:Float) : Float;
+	public static function max(a:Float,b:Float) : Float;
+	public static function abs( v : Float ) : Float;
+	public static function sin( v : Float ) : Float;
+	public static function cos( v : Float ) : Float;
+	public static function atan2( y : Float, x : Float ) : Float;
+	public static function tan( v : Float ) : Float;
+	public static function exp( v : Float ) : Float;
+	public static function log( v : Float ) : Float;
+	public static function sqrt( v : Float ) : Float;
+	public static function round( v : Float ) : Int;
+	public static function floor( v : Float ) : Int;
+	public static function ceil( v : Float ) : Int;
+	public static function atan( v : Float ) : Float;
+	public static function asin( v : Float ) : Float;
+	public static function acos( v : Float ) : Float;
+	public static function pow( v : Float, exp : Float ) : Float;
+	public static function fround( v : Float ) : Float;
+	public static function ffloor( v : Float ) : Float;
+	public static function fceil( v : Float ) : Float;
+	public static function random() : Float;
+	public static function isNaN(f:Float) : Bool;
+	public static function isFinite(f:Float) : Bool;
+}