unsigned JSArray::length() { JSValueRef val = JSObjectGetProperty(ctx_, instance_, JSString("length"), nullptr); if (JSValueIsNumber(ctx_, val)) return static_cast<unsigned>(JSValueToNumber(ctx_, val, nullptr)); return 0; }
void JSArray::push(const JSValue& val) { JSValueRef prop = JSObjectGetProperty(ctx_, instance_, JSString("push"), nullptr); if (JSValueIsObject(ctx_, prop)) { JSObjectRef func = JSValueToObject(ctx_, prop, nullptr); if (JSObjectIsFunction(ctx_, func)) { JSValueRef arg = val; JSObjectCallAsFunction(ctx_, func, instance_, 1, &arg, nullptr); } } }
int JSArray::indexOf(const JSValue& val, int start) const { JSValueRef prop = JSObjectGetProperty(ctx_, instance_, JSString("indexOf"), nullptr); if (JSValueIsObject(ctx_, prop)) { JSObjectRef func = JSValueToObject(ctx_, prop, nullptr); if (JSObjectIsFunction(ctx_, func)) { JSValueRef args[2] = { val, JSValueMakeNumber(ctx_, start) }; JSValueRef result = JSObjectCallAsFunction(ctx_, func, instance_, 2, args, nullptr); if (JSValueIsNumber(ctx_, result)) { return static_cast<int>(JSValueToNumber(ctx_, result, nullptr)); } } } return -1; }
JSValue::operator std::string() const { return operator JSString(); }
JSValue::JSValue(const ultralight::String& val) : ctx_(GetJSContext()) { instance_ = JSValueMakeString(ctx_, JSString(val)); JSValueProtect(ctx_, instance_); }
JSValue::JSValue(const char* val) : ctx_(GetJSContext()) { instance_ = JSValueMakeString(ctx_, JSString(val)); JSValueProtect(ctx_, instance_); }