HaxeFoundation/hscript

Math.cos example fails when targeting HashLink

Arazati opened this issue · 3 comments

While trying to follow the example code

var script = "
	var sum = 0;
	for( a in angles )
		sum += Math.cos(a);
	sum; 
";
var parser = new hscript.Parser();
var program = parser.parseString(script);
var interp = new hscript.Interp();
interp.variables.set("Math",Math); // share the Math class
interp.variables.set("angles",[0,1,2,3]); // set the angles list
trace( interp.execute(program) );

with latest haxe 4.1.2 and hashlink 1.11.0, I get the error "Invalid function null" when it tries to find the cos function in Math. This -appears- to be a hashlink bug? But I'm not entirely sure if maybe there's a way around it that should be done in hscript instead.

The code executes as expected with both js and interp.

Reflect.getProperty(Math, "cos"); //null for HashLink target

Try with -dce no maybe ?

-dce no exposes random, min, and max, but not cos and others (specifically, none of the @:hlNative functions get reflection)

Was investigating this bug and found a 4 year unresolved issue, sad.

I discovered that interestingly you can get around this by creating a class that wraps the inaccessible functions and use it instead of std.Math, like so:

class Mathf
{
  public static function abs(a:Float):Float
  {
    return Math.abs(a);
  }
}