Ejemplo n.º 1
0
void EventListener::ProcessEvent(Rocket::Core::Event& event)
{
    HSQUIRRELVM vm = Module::instance().getScriptInterface().getSquirrelVM();

    if (!mScript.IsCompiled())
    {

    }

    mScript.Compile(vm, false);

    GlobalUtility gutil(vm, m_pElement->GetOwnerDocument(), m_pElement, &event);

    SQInteger i = sq_gettop(vm);

    SQRESULT sqr;

    gutil.Set();

    Module::instance().getScriptInterface().PushDocumentTable(vm, m_pElement->GetOwnerDocument());
    sqr = sq_bindenv(vm, i);

    ROCKETSQUIRREL_ASSERT(SQ_SUCCEEDED(sqr));

    sq_pushroottable(vm);
    mScript.Run(vm);
    gutil.Restore();

    sq_pop(vm, i);

    return;
}
Ejemplo n.º 2
0
/**
 * TJSオブジェクトのオーバライド処理
 * 引数1 オブジェクト
 * 引数2 名前
 * 引数3 値。省略時は squirrel インスタンスから名前で参照
 */
SQRESULT
TJSObject::tjsOverride(HSQUIRRELVM v)
{
    SQRESULT result;
    tTJSVariant instance;
    if (getVariant(v,1,&instance) && instance.Type() == tvtObject) {
        tTJSVariant value;
        const SQChar *methodName = sqobject::getString(v,2);
        int n = sq_gettop(v);
        if (n >= 3) {
            // 引数で明示指定されている
            if (SQ_FAILED(result = sq_getvariant(v, 3, &value))) {
                return result;
            }
        } else {
            // 自己オブジェクトから名前で検索して登録
            sq_push(v, 1);
            sq_pushstring(v, methodName, -1);
            if (SQ_FAILED(result = sq_get(v, -2))) {
                sq_pop(v, 1); //self
                return result;
            } else {
                SQObjectType type = sq_gettype(v, -1);
                if (type == OT_CLOSURE || type == OT_NATIVECLOSURE) {
                    // クロージャの場合は bindenv しておく
                    sq_push(v, 1);
                    if (SQ_FAILED(result = sq_bindenv(v, -2))) {
                        sq_pop(v, 2); // func, self
                        return result;
                    } else {
                        sq_remove(v, -2); // original func
                    }
                }
                if (SQ_FAILED(result = sq_getvariant(v, -1, &value))) { // value
                    sq_pop(v, 1); //self
                    return result;
                }
                sq_pop(v, 1); // self
            }
        }
        tjs_error error;
        if (TJS_SUCCEEDED(error = instance.AsObjectClosureNoAddRef().PropSet(TJS_MEMBERENSURE, methodName, NULL, &value, NULL))) {
            return SQ_OK;
        } else {
            return  ERROR_KRKR(v, error);
        }
    }
    return ERROR_BADINSTANCE(v);
}
Ejemplo n.º 3
0
static SQInteger closure_bindenv(HSQUIRRELVM v)
{
	if(SQ_FAILED(sq_bindenv(v,1)))
		return SQ_ERROR;
	return 1;
}