X Tutup
Skip to content

Cppia host classes can't reach overridden script functions without Reflect #423

@justin-espedal

Description

@justin-espedal

This has been a problem for a long time, but I failed to create a test case the first time I tried.

For the purpose of this test case, everything here is located in "D:/haxe" on my computer.

@:build(cpp.cppia.HostClasses.include())
class Test
{
    public static function main()
    {
        var source = sys.io.File.getContent("D:\\haxe\\MyScript.cppia");
        untyped __global__.__scriptable_load_cppia(source);
    }

    public static function callScript()
    {
        var myScriptClass = Type.resolveClass("MyScript");

        var s:Script = cast Type.createInstance(myScriptClass, []);

        //calls base function (Script)
        s.init();

        //calls implementation (MyScript)
        Reflect.callMethod(s, Reflect.field(s, "init"), []);
    }
}
class Script
{
    public function init()
    {
        trace("init called in Script.");
    }
}
#if cppia
class MyScript extends Script
{
    public static function main()
    {
        Test.callScript();
    }

    override public function init()
    {
        trace("init called in MyScript.");
    }
}
#end

Compile host
haxe -main Test.hx -cpp host -D scriptable -D dce=no -D dll_export=D:/haxe/export/export_classes.info

Compile script
haxe -main MyScript.hx --macro cpp.cppia.HostClasses.exclude() -D dce=no -D cppia -cpp MyScript.cppia -cp export

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      X Tutup