Пример #1
0
    public static int log(IntPtr v)
    {
        var argc = SQ.sq_gettop(v);
        var sb   = new StringBuilder();

        for (var i = 2; i <= argc; ++i)
        {
            if (SQ.SQ_SUCCEEDED(SQ.sq_tostring(v, i)))
            {
                string str;
                if (SQ.SQ_SUCCEEDED(SQ.sq_getstring(v, -1, out str)))
                {
                    sb.Append(str);
                    sb.Append(' ');
                }
                SQ.sq_poptop(v);
            }
        }
        Debug.Log(sb.ToString());
        return(0);
    }
Пример #2
0
    // Use this for initialization
    void Start()
    {
        var vm = SQ.sq_open(1024);

        SQ.sq_pushroottable(vm);
        SQ.sq_pushstring(vm, "log");
        SQ.sq_newclosure(vm, log, 0);
        SQ.sq_newslot(vm, -3, SQ.SQTrue);
        SQ.sq_poptop(vm);

        var script = @"
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
class BaseVector {
    constructor(...)
    {
        if(vargv.len() >= 3) {
            x = vargv[0];
            y = vargv[1];
            z = vargv[2];
        }
    }


    x = 0;
    y = 0;
    z = 0;
}

class Vector3 extends BaseVector {
    function _add(other)
    {
        if(other instanceof this.getclass())
            return ::Vector3(x+other.x,y+other.y,z+other.z);
        else
            throw ""wrong parameter"";
    }
    function Print()
    {
        ::log(x,y,z);
    }
}

local v0 = Vector3(1,2,3)
local v1 = Vector3(11,12,13)
local v2 = v0 + v1;
v2.Print();

FakeNamespace <- {
    Utils = {}
}

class FakeNamespace.Utils.SuperClass {
    constructor()
    {
        ::log(""FakeNamespace.Utils.SuperClass"")
    }
}

local testy = FakeNamespace.Utils.SuperClass();

for (local i = 0; i < 3; ++i) {
    ::log(i, ""测试123哈哈"")
}
";

        if (SQ.SQ_SUCCEEDED(SQ.sq_compilebuffer(vm, script, "(buffer)", SQ.SQFalse)))
        {
            SQ.sq_pushroottable(vm);
            if (SQ.SQ_SUCCEEDED(SQ.sq_call(vm, 1, SQ.SQFalse, SQ.SQFalse)))
            {
                Debug.Log("pass");
            }
            else
            {
                Debug.LogError("call error");
            }
            SQ.sq_poptop(vm);
        }
        else
        {
            Debug.LogError("compile error");
        }

        SQ.sq_close(vm);
    }