mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 766448 - Refactor JSPropertySpec and JS_DefineProperties to accept JSJitInfos. (r=Waldo)
This commit is contained in:
parent
aa790aa109
commit
70d87f9165
@ -341,24 +341,25 @@ DECL_EVENT_CLASS(Event::sMainRuntimeClass, "WorkerEvent")
|
||||
#undef DECL_EVENT_CLASS
|
||||
|
||||
JSPropertySpec Event::sProperties[] = {
|
||||
{ "type", SLOT_type, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "target", SLOT_target, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "currentTarget", SLOT_currentTarget, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "eventPhase", SLOT_eventPhase, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "bubbles", SLOT_bubbles, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "cancelable", SLOT_cancelable, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "timeStamp", SLOT_timeStamp, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "defaultPrevented", SLOT_defaultPrevented, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "isTrusted", SLOT_isTrusted, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "type", SLOT_type, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "target", SLOT_target, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "currentTarget", SLOT_currentTarget, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "eventPhase", SLOT_eventPhase, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "bubbles", SLOT_bubbles, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "cancelable", SLOT_cancelable, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "timeStamp", SLOT_timeStamp, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "defaultPrevented", SLOT_defaultPrevented, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "isTrusted", SLOT_isTrusted, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec Event::sFunctions[] = {
|
||||
@ -370,10 +371,12 @@ JSFunctionSpec Event::sFunctions[] = {
|
||||
};
|
||||
|
||||
JSPropertySpec Event::sStaticProperties[] = {
|
||||
{ "CAPTURING_PHASE", CAPTURING_PHASE, CONSTANT_FLAGS, GetConstant, NULL },
|
||||
{ "AT_TARGET", AT_TARGET, CONSTANT_FLAGS, GetConstant, NULL },
|
||||
{ "BUBBLING_PHASE", BUBBLING_PHASE, CONSTANT_FLAGS, GetConstant, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "CAPTURING_PHASE", CAPTURING_PHASE, CONSTANT_FLAGS,
|
||||
JSOP_WRAPPER(GetConstant), JSOP_NULLWRAPPER },
|
||||
{ "AT_TARGET", AT_TARGET, CONSTANT_FLAGS, JSOP_WRAPPER(GetConstant), JSOP_NULLWRAPPER },
|
||||
{ "BUBBLING_PHASE", BUBBLING_PHASE, CONSTANT_FLAGS,
|
||||
JSOP_WRAPPER(GetConstant), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
class MessageEvent : public Event
|
||||
@ -593,12 +596,13 @@ DECL_MESSAGEEVENT_CLASS(MessageEvent::sMainRuntimeClass, "WorkerMessageEvent")
|
||||
#undef DECL_MESSAGEEVENT_CLASS
|
||||
|
||||
JSPropertySpec MessageEvent::sProperties[] = {
|
||||
{ "data", SLOT_data, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "origin", SLOT_origin, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "source", SLOT_source, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "data", SLOT_data, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "origin", SLOT_origin, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "source", SLOT_source, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec MessageEvent::sFunctions[] = {
|
||||
@ -778,13 +782,13 @@ DECL_ERROREVENT_CLASS(ErrorEvent::sMainRuntimeClass, "WorkerErrorEvent")
|
||||
#undef DECL_ERROREVENT_CLASS
|
||||
|
||||
JSPropertySpec ErrorEvent::sProperties[] = {
|
||||
{ "message", SLOT_message, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "filename", SLOT_filename, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "lineno", SLOT_lineno, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "message", SLOT_message, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "filename", SLOT_filename, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "lineno", SLOT_lineno, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec ErrorEvent::sFunctions[] = {
|
||||
@ -952,13 +956,13 @@ JSClass ProgressEvent::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec ProgressEvent::sProperties[] = {
|
||||
{ "lengthComputable", SLOT_lengthComputable, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "loaded", SLOT_loaded, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "total", SLOT_total, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "lengthComputable", SLOT_lengthComputable, PROPERTY_FLAGS,
|
||||
JSOP_WRAPPER(GetProperty), JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "loaded", SLOT_loaded, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "total", SLOT_total, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec ProgressEvent::sFunctions[] = {
|
||||
|
@ -162,10 +162,13 @@ JSClass DOMException::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec DOMException::sProperties[] = {
|
||||
{ "code", SLOT_code, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "name", SLOT_name, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "message", SLOT_message, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "code", SLOT_code, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "name", SLOT_name, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "message", SLOT_message, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec DOMException::sFunctions[] = {
|
||||
@ -176,7 +179,7 @@ JSFunctionSpec DOMException::sFunctions[] = {
|
||||
JSPropertySpec DOMException::sStaticProperties[] = {
|
||||
|
||||
#define EXCEPTION_ENTRY(_name) \
|
||||
{ #_name, _name, CONSTANT_FLAGS, GetConstant, NULL },
|
||||
{ #_name, _name, CONSTANT_FLAGS, JSOP_WRAPPER(GetConstant), JSOP_NULLWRAPPER },
|
||||
|
||||
EXCEPTION_ENTRY(INDEX_SIZE_ERR)
|
||||
EXCEPTION_ENTRY(DOMSTRING_SIZE_ERR)
|
||||
@ -206,7 +209,7 @@ JSPropertySpec DOMException::sStaticProperties[] = {
|
||||
|
||||
#undef EXCEPTION_ENTRY
|
||||
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
// static
|
||||
|
@ -210,9 +210,9 @@ JSClass Blob::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec Blob::sProperties[] = {
|
||||
{ "size", 0, PROPERTY_FLAGS, GetSize, js_GetterOnlyPropertyStub },
|
||||
{ "type", 0, PROPERTY_FLAGS, GetType, js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "size", 0, PROPERTY_FLAGS, JSOP_WRAPPER(GetSize), JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "type", 0, PROPERTY_FLAGS, JSOP_WRAPPER(GetType), JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec Blob::sFunctions[] = {
|
||||
@ -360,10 +360,11 @@ JSClass File::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec File::sProperties[] = {
|
||||
{ "name", 0, PROPERTY_FLAGS, GetName, js_GetterOnlyPropertyStub },
|
||||
{ "mozFullPath", 0, PROPERTY_FLAGS, GetMozFullPath,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "name", 0, PROPERTY_FLAGS, JSOP_WRAPPER(GetName),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "mozFullPath", 0, PROPERTY_FLAGS, JSOP_WRAPPER(GetMozFullPath),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
nsIDOMBlob*
|
||||
|
@ -148,10 +148,10 @@ JSPropertySpec ImageData::sProperties[] = {
|
||||
// something about it in the mean time. So we use NULL, which defaults to the
|
||||
// class setter (JS_StrictPropertyStub), which is always a silent no-op,
|
||||
// regardless of strict mode. Not ideal, but good enough for now.
|
||||
{ "width", SLOT_width, PROPERTY_FLAGS, GetProperty, NULL },
|
||||
{ "height", SLOT_height, PROPERTY_FLAGS, GetProperty, NULL },
|
||||
{ "data", SLOT_data, PROPERTY_FLAGS, GetProperty, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "width", SLOT_width, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty), JSOP_NULLWRAPPER },
|
||||
{ "height", SLOT_height, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty), JSOP_NULLWRAPPER },
|
||||
{ "data", SLOT_data, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -154,19 +154,23 @@ JSClass Location::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec Location::sProperties[] = {
|
||||
{ "href", SLOT_href, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "protocol", SLOT_protocol, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "host", SLOT_host, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "hostname", SLOT_hostname, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "port", SLOT_port, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ "pathname", SLOT_pathname, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "search", SLOT_search, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "hash", SLOT_hash, PROPERTY_FLAGS, GetProperty, js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "href", SLOT_href, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "protocol", SLOT_protocol, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "host", SLOT_host, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "hostname", SLOT_hostname, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "port", SLOT_port, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "pathname", SLOT_pathname, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "search", SLOT_search, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "hash", SLOT_hash, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec Location::sFunctions[] = {
|
||||
|
@ -143,15 +143,15 @@ JSClass Navigator::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec Navigator::sProperties[] = {
|
||||
{ "appName", SLOT_appName, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "appVersion", SLOT_appVersion, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "platform", SLOT_platform, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "userAgent", SLOT_userAgent, PROPERTY_FLAGS, GetProperty,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "appName", SLOT_appName, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "appVersion", SLOT_appVersion, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "platform", SLOT_platform, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "userAgent", SLOT_userAgent, PROPERTY_FLAGS, JSOP_WRAPPER(GetProperty),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -292,10 +292,10 @@ DOMJSClass Worker::sClass = {
|
||||
|
||||
JSPropertySpec Worker::sProperties[] = {
|
||||
{ sEventStrings[STRING_onerror], STRING_onerror, PROPERTY_FLAGS,
|
||||
GetEventListener, SetEventListener },
|
||||
JSOP_WRAPPER(GetEventListener), JSOP_WRAPPER(SetEventListener) },
|
||||
{ sEventStrings[STRING_onmessage], STRING_onmessage, PROPERTY_FLAGS,
|
||||
GetEventListener, SetEventListener },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(GetEventListener), JSOP_WRAPPER(SetEventListener) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec Worker::sFunctions[] = {
|
||||
|
@ -612,16 +612,16 @@ JSClass WorkerGlobalScope::sClass = {
|
||||
};
|
||||
|
||||
JSPropertySpec WorkerGlobalScope::sProperties[] = {
|
||||
{ "location", SLOT_location, PROPERTY_FLAGS, GetLocation,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "location", SLOT_location, PROPERTY_FLAGS, JSOP_WRAPPER(GetLocation),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ sEventStrings[STRING_onerror], STRING_onerror, PROPERTY_FLAGS,
|
||||
GetOnErrorListener, SetOnErrorListener },
|
||||
JSOP_WRAPPER(GetOnErrorListener), JSOP_WRAPPER(SetOnErrorListener) },
|
||||
{ sEventStrings[STRING_onclose], STRING_onclose, PROPERTY_FLAGS,
|
||||
GetEventListener, SetEventListener },
|
||||
{ "navigator", SLOT_navigator, PROPERTY_FLAGS, GetNavigator,
|
||||
js_GetterOnlyPropertyStub },
|
||||
{ "self", 0, PROPERTY_FLAGS, GetSelf, js_GetterOnlyPropertyStub },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(GetEventListener), JSOP_WRAPPER(SetEventListener) },
|
||||
{ "navigator", SLOT_navigator, PROPERTY_FLAGS, JSOP_WRAPPER(GetNavigator),
|
||||
JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ "self", 0, PROPERTY_FLAGS, JSOP_WRAPPER(GetSelf), JSOP_WRAPPER(js_GetterOnlyPropertyStub) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec WorkerGlobalScope::sFunctions[] = {
|
||||
@ -864,8 +864,8 @@ DOMJSClass DedicatedWorkerGlobalScope::sClass = {
|
||||
|
||||
JSPropertySpec DedicatedWorkerGlobalScope::sProperties[] = {
|
||||
{ sEventStrings[STRING_onmessage], STRING_onmessage, PROPERTY_FLAGS,
|
||||
GetEventListener, SetEventListener },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(GetEventListener), JSOP_WRAPPER(SetEventListener) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
JSFunctionSpec DedicatedWorkerGlobalScope::sFunctions[] = {
|
||||
|
@ -436,30 +436,49 @@ const uint8_t HIDDEN_PROP_ATTRS = JSPROP_PERMANENT | JSPROP_SHARED;
|
||||
const uint8_t RO_HIDDEN_PROP_ATTRS = HIDDEN_PROP_ATTRS | JSPROP_READONLY;
|
||||
|
||||
static JSPropertySpec regexp_static_props[] = {
|
||||
{"input", 0, REGEXP_STATIC_PROP_ATTRS, static_input_getter, static_input_setter},
|
||||
{"multiline", 0, REGEXP_STATIC_PROP_ATTRS, static_multiline_getter,
|
||||
static_multiline_setter},
|
||||
{"lastMatch", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_lastMatch_getter, NULL},
|
||||
{"lastParen", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_lastParen_getter, NULL},
|
||||
{"leftContext", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_leftContext_getter, NULL},
|
||||
{"rightContext", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_rightContext_getter, NULL},
|
||||
{"$1", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren1_getter, NULL},
|
||||
{"$2", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren2_getter, NULL},
|
||||
{"$3", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren3_getter, NULL},
|
||||
{"$4", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren4_getter, NULL},
|
||||
{"$5", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren5_getter, NULL},
|
||||
{"$6", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren6_getter, NULL},
|
||||
{"$7", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren7_getter, NULL},
|
||||
{"$8", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren8_getter, NULL},
|
||||
{"$9", 0, RO_REGEXP_STATIC_PROP_ATTRS, static_paren9_getter, NULL},
|
||||
|
||||
{"$_", 0, HIDDEN_PROP_ATTRS, static_input_getter, static_input_setter},
|
||||
{"$*", 0, HIDDEN_PROP_ATTRS, static_multiline_getter, static_multiline_setter},
|
||||
{"$&", 0, RO_HIDDEN_PROP_ATTRS, static_lastMatch_getter, NULL},
|
||||
{"$+", 0, RO_HIDDEN_PROP_ATTRS, static_lastParen_getter, NULL},
|
||||
{"$`", 0, RO_HIDDEN_PROP_ATTRS, static_leftContext_getter, NULL},
|
||||
{"$'", 0, RO_HIDDEN_PROP_ATTRS, static_rightContext_getter, NULL},
|
||||
{0,0,0,0,0}
|
||||
{"input", 0, REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_input_getter),
|
||||
JSOP_WRAPPER(static_input_setter)},
|
||||
{"multiline", 0, REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_multiline_getter),
|
||||
JSOP_WRAPPER(static_multiline_setter)},
|
||||
{"lastMatch", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_lastMatch_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"lastParen", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_lastParen_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"leftContext", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_leftContext_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"rightContext", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_rightContext_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$1", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren1_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$2", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren2_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$3", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren3_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$4", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren4_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$5", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren5_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$6", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren6_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$7", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren7_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$8", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren8_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$9", 0, RO_REGEXP_STATIC_PROP_ATTRS, JSOP_WRAPPER(static_paren9_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$_", 0, HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_input_getter),
|
||||
JSOP_WRAPPER(static_input_setter)},
|
||||
{"$*", 0, HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_multiline_getter),
|
||||
JSOP_WRAPPER(static_multiline_setter)},
|
||||
{"$&", 0, RO_HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_lastMatch_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$+", 0, RO_HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_lastParen_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$`", 0, RO_HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_leftContext_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{"$'", 0, RO_HIDDEN_PROP_ATTRS, JSOP_WRAPPER(static_rightContext_getter),
|
||||
JSOP_NULLWRAPPER},
|
||||
{0,0,0,JSOP_NULLWRAPPER,JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
JSObject *
|
||||
|
@ -435,11 +435,11 @@ static JSClass sCDataFinalizerClass = {
|
||||
(JSPROP_READONLY | JSPROP_PERMANENT)
|
||||
|
||||
static JSPropertySpec sCTypeProps[] = {
|
||||
{ "name", 0, CTYPESPROP_FLAGS, CType::NameGetter, NULL },
|
||||
{ "size", 0, CTYPESPROP_FLAGS, CType::SizeGetter, NULL },
|
||||
{ "ptr", 0, CTYPESPROP_FLAGS, CType::PtrGetter, NULL },
|
||||
{ "prototype", 0, CTYPESPROP_FLAGS, CType::PrototypeGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "name", 0, CTYPESPROP_FLAGS, JSOP_WRAPPER(CType::NameGetter), JSOP_NULLWRAPPER },
|
||||
{ "size", 0, CTYPESPROP_FLAGS, JSOP_WRAPPER(CType::SizeGetter), JSOP_NULLWRAPPER },
|
||||
{ "ptr", 0, CTYPESPROP_FLAGS, JSOP_WRAPPER(CType::PtrGetter), JSOP_NULLWRAPPER },
|
||||
{ "prototype", 0, CTYPESPROP_FLAGS, JSOP_WRAPPER(CType::PrototypeGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sCTypeFunctions[] = {
|
||||
@ -457,8 +457,8 @@ static JSFunctionSpec sCABIFunctions[] = {
|
||||
|
||||
static JSPropertySpec sCDataProps[] = {
|
||||
{ "value", 0, JSPROP_SHARED | JSPROP_PERMANENT,
|
||||
CData::ValueGetter, CData::ValueSetter },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(CData::ValueGetter), JSOP_WRAPPER(CData::ValueSetter) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sCDataFunctions[] = {
|
||||
@ -470,7 +470,7 @@ static JSFunctionSpec sCDataFunctions[] = {
|
||||
};
|
||||
|
||||
static JSPropertySpec sCDataFinalizerProps[] = {
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sCDataFinalizerFunctions[] = {
|
||||
@ -486,8 +486,9 @@ static JSFunctionSpec sPointerFunction =
|
||||
JS_FN("PointerType", PointerType::Create, 1, CTYPESCTOR_FLAGS);
|
||||
|
||||
static JSPropertySpec sPointerProps[] = {
|
||||
{ "targetType", 0, CTYPESPROP_FLAGS, PointerType::TargetTypeGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "targetType", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(PointerType::TargetTypeGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sPointerInstanceFunctions[] = {
|
||||
@ -496,20 +497,23 @@ static JSFunctionSpec sPointerInstanceFunctions[] = {
|
||||
JS_FN("decrement", PointerType::Decrement, 0, CTYPESFN_FLAGS),
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
|
||||
static JSPropertySpec sPointerInstanceProps[] = {
|
||||
{ "contents", 0, JSPROP_SHARED | JSPROP_PERMANENT,
|
||||
PointerType::ContentsGetter, PointerType::ContentsSetter },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(PointerType::ContentsGetter),
|
||||
JSOP_WRAPPER(PointerType::ContentsSetter) },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sArrayFunction =
|
||||
JS_FN("ArrayType", ArrayType::Create, 1, CTYPESCTOR_FLAGS);
|
||||
|
||||
static JSPropertySpec sArrayProps[] = {
|
||||
{ "elementType", 0, CTYPESPROP_FLAGS, ArrayType::ElementTypeGetter, NULL },
|
||||
{ "length", 0, CTYPESPROP_FLAGS, ArrayType::LengthGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "elementType", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(ArrayType::ElementTypeGetter), JSOP_NULLWRAPPER },
|
||||
{ "length", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(ArrayType::LengthGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sArrayInstanceFunctions[] = {
|
||||
@ -519,16 +523,17 @@ static JSFunctionSpec sArrayInstanceFunctions[] = {
|
||||
|
||||
static JSPropertySpec sArrayInstanceProps[] = {
|
||||
{ "length", 0, JSPROP_SHARED | JSPROP_READONLY | JSPROP_PERMANENT,
|
||||
ArrayType::LengthGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
JSOP_WRAPPER(ArrayType::LengthGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sStructFunction =
|
||||
JS_FN("StructType", StructType::Create, 2, CTYPESCTOR_FLAGS);
|
||||
|
||||
static JSPropertySpec sStructProps[] = {
|
||||
{ "fields", 0, CTYPESPROP_FLAGS, StructType::FieldsArrayGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "fields", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(StructType::FieldsArrayGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sStructFunctions[] = {
|
||||
@ -545,11 +550,15 @@ static JSFunctionSpec sFunctionFunction =
|
||||
JS_FN("FunctionType", FunctionType::Create, 2, CTYPESCTOR_FLAGS);
|
||||
|
||||
static JSPropertySpec sFunctionProps[] = {
|
||||
{ "argTypes", 0, CTYPESPROP_FLAGS, FunctionType::ArgTypesGetter, NULL },
|
||||
{ "returnType", 0, CTYPESPROP_FLAGS, FunctionType::ReturnTypeGetter, NULL },
|
||||
{ "abi", 0, CTYPESPROP_FLAGS, FunctionType::ABIGetter, NULL },
|
||||
{ "isVariadic", 0, CTYPESPROP_FLAGS, FunctionType::IsVariadicGetter, NULL },
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ "argTypes", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(FunctionType::ArgTypesGetter), JSOP_NULLWRAPPER },
|
||||
{ "returnType", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(FunctionType::ReturnTypeGetter), JSOP_NULLWRAPPER },
|
||||
{ "abi", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(FunctionType::ABIGetter), JSOP_NULLWRAPPER },
|
||||
{ "isVariadic", 0, CTYPESPROP_FLAGS,
|
||||
JSOP_WRAPPER(FunctionType::IsVariadicGetter), JSOP_NULLWRAPPER },
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sFunctionInstanceFunctions[] = {
|
||||
@ -616,12 +625,12 @@ static JSFunctionSpec sUInt64Functions[] = {
|
||||
|
||||
static JSPropertySpec sModuleProps[] = {
|
||||
{ "errno", 0, JSPROP_SHARED | JSPROP_PERMANENT,
|
||||
CData::ErrnoGetter, NULL },
|
||||
JSOP_WRAPPER(CData::ErrnoGetter), JSOP_NULLWRAPPER },
|
||||
#if defined(XP_WIN)
|
||||
{ "winLastError", 0, JSPROP_SHARED | JSPROP_PERMANENT,
|
||||
CData::LastErrorGetter, NULL },
|
||||
JSOP_WRAPPER(CData::LastErrorGetter), JSOP_NULLWRAPPER },
|
||||
#endif // defined(XP_WIN)
|
||||
{ 0, 0, 0, NULL, NULL }
|
||||
{ 0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER }
|
||||
};
|
||||
|
||||
static JSFunctionSpec sModuleFunctions[] = {
|
||||
|
@ -3781,11 +3781,34 @@ JS_AlreadyHasOwnUCProperty(JSContext *cx, JSObject *objArg, const jschar *name,
|
||||
return atom && JS_AlreadyHasOwnPropertyById(cx, obj, AtomToId(atom), foundp);
|
||||
}
|
||||
|
||||
/* Wrapper functions to create wrappers with no corresponding JSJitInfo from API
|
||||
* function arguments.
|
||||
*/
|
||||
static JSPropertyOpWrapper
|
||||
GetterWrapper(JSPropertyOp getter)
|
||||
{
|
||||
JSPropertyOpWrapper ret;
|
||||
ret.op = getter;
|
||||
ret.info = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static JSStrictPropertyOpWrapper
|
||||
SetterWrapper(JSStrictPropertyOp setter)
|
||||
{
|
||||
JSStrictPropertyOpWrapper ret;
|
||||
ret.op = setter;
|
||||
ret.info = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static JSBool
|
||||
DefinePropertyById(JSContext *cx, HandleObject obj, HandleId id, HandleValue value,
|
||||
PropertyOp getter, StrictPropertyOp setter, unsigned attrs,
|
||||
unsigned flags, int tinyid)
|
||||
const JSPropertyOpWrapper &get, const JSStrictPropertyOpWrapper &set,
|
||||
unsigned attrs, unsigned flags, int tinyid)
|
||||
{
|
||||
PropertyOp getter = get.op;
|
||||
StrictPropertyOp setter = set.op;
|
||||
/*
|
||||
* JSPROP_READONLY has no meaning when accessors are involved. Ideally we'd
|
||||
* throw if this happens, but we've accepted it for long enough that it's
|
||||
@ -3806,9 +3829,13 @@ DefinePropertyById(JSContext *cx, HandleObject obj, HandleId id, HandleValue val
|
||||
attrs &= ~JSPROP_NATIVE_ACCESSORS;
|
||||
if (getter) {
|
||||
RootedObject global(cx, (JSObject*) &obj->global());
|
||||
JSObject *getobj = JS_NewFunction(cx, (Native) getter, 0, 0, global, NULL);
|
||||
JSFunction *getobj = JS_NewFunction(cx, (Native) getter, 0, 0, global, NULL);
|
||||
if (!getobj)
|
||||
return false;
|
||||
|
||||
if (get.info)
|
||||
getobj->setJitInfo(get.info);
|
||||
|
||||
getter = JS_DATA_TO_FUNC_PTR(PropertyOp, getobj);
|
||||
attrs |= JSPROP_GETTER;
|
||||
}
|
||||
@ -3816,9 +3843,13 @@ DefinePropertyById(JSContext *cx, HandleObject obj, HandleId id, HandleValue val
|
||||
// Root just the getter, since the setter is not yet a JSObject.
|
||||
AutoRooterGetterSetter getRoot(cx, JSPROP_GETTER, &getter, NULL);
|
||||
RootedObject global(cx, (JSObject*) &obj->global());
|
||||
JSObject *setobj = JS_NewFunction(cx, (Native) setter, 1, 0, global, NULL);
|
||||
JSFunction *setobj = JS_NewFunction(cx, (Native) setter, 1, 0, global, NULL);
|
||||
if (!setobj)
|
||||
return false;
|
||||
|
||||
if (set.info)
|
||||
setobj->setJitInfo(set.info);
|
||||
|
||||
setter = JS_DATA_TO_FUNC_PTR(StrictPropertyOp, setobj);
|
||||
attrs |= JSPROP_SETTER;
|
||||
}
|
||||
@ -3850,7 +3881,8 @@ JS_DefinePropertyById(JSContext *cx, JSObject *objArg, jsid idArg, jsval value_,
|
||||
RootedObject obj(cx, objArg);
|
||||
RootedId id(cx, idArg);
|
||||
RootedValue value(cx, value_);
|
||||
return DefinePropertyById(cx, obj, id, value, getter, setter, attrs, 0, 0);
|
||||
return DefinePropertyById(cx, obj, id, value, GetterWrapper(getter),
|
||||
SetterWrapper(setter), attrs, 0, 0);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
@ -3865,16 +3897,18 @@ JS_DefineElement(JSContext *cx, JSObject *objArg, uint32_t index, jsval valueArg
|
||||
RootedId id(cx);
|
||||
if (!IndexToId(cx, index, id.address()))
|
||||
return false;
|
||||
return DefinePropertyById(cx, obj, id, value, getter, setter, attrs, 0, 0);
|
||||
return DefinePropertyById(cx, obj, id, value, GetterWrapper(getter),
|
||||
SetterWrapper(setter), attrs, 0, 0);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
DefineProperty(JSContext *cx, JSHandleObject obj, const char *name, const Value &value_,
|
||||
PropertyOp getter, StrictPropertyOp setter, unsigned attrs,
|
||||
unsigned flags, int tinyid)
|
||||
const JSPropertyOpWrapper &getter, const JSStrictPropertyOpWrapper &setter,
|
||||
unsigned attrs, unsigned flags, int tinyid)
|
||||
{
|
||||
RootedValue value(cx, value_);
|
||||
AutoRooterGetterSetter gsRoot(cx, attrs, &getter, &setter);
|
||||
AutoRooterGetterSetter gsRoot(cx, attrs, const_cast<JSPropertyOp *>(&getter.op),
|
||||
const_cast<JSStrictPropertyOp *>(&setter.op));
|
||||
RootedId id(cx);
|
||||
|
||||
if (attrs & JSPROP_INDEX) {
|
||||
@ -3895,7 +3929,8 @@ JS_DefineProperty(JSContext *cx, JSObject *objArg, const char *name, jsval value
|
||||
PropertyOp getter, JSStrictPropertyOp setter, unsigned attrs)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
return DefineProperty(cx, obj, name, value, getter, setter, attrs, 0, 0);
|
||||
return DefineProperty(cx, obj, name, value, GetterWrapper(getter),
|
||||
SetterWrapper(setter), attrs, 0, 0);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
@ -3903,7 +3938,8 @@ JS_DefinePropertyWithTinyId(JSContext *cx, JSObject *objArg, const char *name, i
|
||||
jsval value, PropertyOp getter, JSStrictPropertyOp setter, unsigned attrs)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
return DefineProperty(cx, obj, name, value, getter, setter, attrs, Shape::HAS_SHORTID, tinyid);
|
||||
return DefineProperty(cx, obj, name, value, GetterWrapper(getter),
|
||||
SetterWrapper(setter), attrs, Shape::HAS_SHORTID, tinyid);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
@ -3917,7 +3953,8 @@ DefineUCProperty(JSContext *cx, JSHandleObject obj, const jschar *name, size_t n
|
||||
if (!atom)
|
||||
return false;
|
||||
RootedId id(cx, AtomToId(atom));
|
||||
return DefinePropertyById(cx, obj, id, value, getter, setter, attrs, flags, tinyid);
|
||||
return DefinePropertyById(cx, obj, id, value, GetterWrapper(getter),
|
||||
SetterWrapper(setter), attrs, flags, tinyid);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
@ -3968,8 +4005,11 @@ JS_DefineObject(JSContext *cx, JSObject *objArg, const char *name, JSClass *jscl
|
||||
if (!nobj)
|
||||
return NULL;
|
||||
|
||||
if (!DefineProperty(cx, obj, name, ObjectValue(*nobj), NULL, NULL, attrs, 0, 0))
|
||||
if (!DefineProperty(cx, obj, name, ObjectValue(*nobj), GetterWrapper(NULL),
|
||||
SetterWrapper(NULL), attrs, 0, 0))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return nobj;
|
||||
}
|
||||
@ -3983,12 +4023,14 @@ JS_DefineConstDoubles(JSContext *cx, JSObject *objArg, JSConstDoubleSpec *cds)
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
JSPropertyOpWrapper noget = GetterWrapper(NULL);
|
||||
JSStrictPropertyOpWrapper noset = SetterWrapper(NULL);
|
||||
for (ok = JS_TRUE; cds->name; cds++) {
|
||||
Value value = DoubleValue(cds->dval);
|
||||
attrs = cds->flags;
|
||||
if (!attrs)
|
||||
attrs = JSPROP_READONLY | JSPROP_PERMANENT;
|
||||
ok = DefineProperty(cx, obj, cds->name, value, NULL, NULL, attrs, 0, 0);
|
||||
ok = DefineProperty(cx, obj, cds->name, value, noget, noset, attrs, 0, 0);
|
||||
if (!ok)
|
||||
break;
|
||||
}
|
||||
|
@ -4335,17 +4335,42 @@ struct JSConstDoubleSpec {
|
||||
uint8_t spare[3];
|
||||
};
|
||||
|
||||
typedef struct JSJitInfo JSJitInfo;
|
||||
|
||||
/*
|
||||
* Wrappers to replace {Strict,}PropertyOp for JSPropertySpecs. This will allow
|
||||
* us to pass one JSJitInfo per function with the property spec, without
|
||||
* additional field overhead.
|
||||
*/
|
||||
typedef struct JSStrictPropertyOpWrapper {
|
||||
JSStrictPropertyOp op;
|
||||
const JSJitInfo *info;
|
||||
} JSStrictPropertyOpWrapper;
|
||||
|
||||
typedef struct JSPropertyOpWrapper {
|
||||
JSPropertyOp op;
|
||||
const JSJitInfo *info;
|
||||
} JSPropertyOpWrapper;
|
||||
|
||||
/*
|
||||
* Macro static initializers which correspond to the old |op| and |NULL|
|
||||
* respectively, and make it easy to pass no JSJitInfo as part of a
|
||||
* JSPropertySpec.
|
||||
*/
|
||||
#define JSOP_WRAPPER(op) {op, NULL}
|
||||
#define JSOP_NULLWRAPPER JSOP_WRAPPER(NULL)
|
||||
|
||||
/*
|
||||
* To define an array element rather than a named property member, cast the
|
||||
* element's index to (const char *) and initialize name with it, and set the
|
||||
* JSPROP_INDEX bit in flags.
|
||||
*/
|
||||
struct JSPropertySpec {
|
||||
const char *name;
|
||||
int8_t tinyid;
|
||||
uint8_t flags;
|
||||
JSPropertyOp getter;
|
||||
JSStrictPropertyOp setter;
|
||||
const char *name;
|
||||
int8_t tinyid;
|
||||
uint8_t flags;
|
||||
JSPropertyOpWrapper getter;
|
||||
JSStrictPropertyOpWrapper setter;
|
||||
};
|
||||
|
||||
struct JSFunctionSpec {
|
||||
|
@ -1292,4 +1292,11 @@ JS_GetDataViewByteLength(JSObject *obj, JSContext *cx);
|
||||
JS_FRIEND_API(void *)
|
||||
JS_GetDataViewData(JSObject *obj, JSContext *cx);
|
||||
|
||||
/*
|
||||
* This struct contains metadata passed from the DOM to the JS Engine for JIT
|
||||
* optimizations on DOM property accessors. Eventually, this should be made
|
||||
* available to general JSAPI users, but we are not currently ready to do so.
|
||||
*/
|
||||
struct JSJitInfo;
|
||||
|
||||
#endif /* jsfriendapi_h___ */
|
||||
|
@ -1385,8 +1385,8 @@ js_NewFunction(JSContext *cx, JSObject *funobj, Native native, unsigned nargs,
|
||||
fun->mutableScript().init(NULL);
|
||||
fun->initEnvironment(parent);
|
||||
} else {
|
||||
fun->u.native = native;
|
||||
JS_ASSERT(fun->u.native);
|
||||
JS_ASSERT(native);
|
||||
fun->initNative(native, NULL);
|
||||
}
|
||||
if (kind == JSFunction::ExtendedFinalizeKind) {
|
||||
fun->flags |= JSFUN_EXTENDED;
|
||||
@ -1419,7 +1419,7 @@ js_CloneFunctionObject(JSContext *cx, HandleFunction fun, HandleObject parent,
|
||||
clone->initScript(fun->script());
|
||||
clone->initEnvironment(parent);
|
||||
} else {
|
||||
clone->u.native = fun->native();
|
||||
clone->initNative(fun->native(), fun->jitInfo());
|
||||
}
|
||||
clone->atom.init(fun->atom);
|
||||
|
||||
|
@ -49,7 +49,13 @@ struct JSFunction : public JSObject
|
||||
reflected as f.length/f.arity */
|
||||
uint16_t flags; /* flags, see JSFUN_* below and in jsapi.h */
|
||||
union U {
|
||||
js::Native native; /* native method pointer or null */
|
||||
class Native {
|
||||
friend struct JSFunction;
|
||||
js::Native native; /* native method pointer or null */
|
||||
const JSJitInfo *jitinfo; /* Information about this function to be
|
||||
used by the JIT;
|
||||
use the accessor! */
|
||||
} n;
|
||||
struct Scripted {
|
||||
JSScript *script_; /* interpreted bytecode descriptor or null;
|
||||
use the accessor! */
|
||||
@ -120,16 +126,20 @@ struct JSFunction : public JSObject
|
||||
|
||||
JSNative native() const {
|
||||
JS_ASSERT(isNative());
|
||||
return u.native;
|
||||
return u.n.native;
|
||||
}
|
||||
|
||||
JSNative maybeNative() const {
|
||||
return isInterpreted() ? NULL : native();
|
||||
}
|
||||
|
||||
inline void initNative(js::Native native, const JSJitInfo *jitinfo);
|
||||
inline const JSJitInfo *jitInfo() const;
|
||||
inline void setJitInfo(const JSJitInfo *data);
|
||||
|
||||
static unsigned offsetOfNativeOrScript() {
|
||||
JS_STATIC_ASSERT(offsetof(U, native) == offsetof(U, i.script_));
|
||||
JS_STATIC_ASSERT(offsetof(U, native) == offsetof(U, nativeOrScript));
|
||||
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, i.script_));
|
||||
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, nativeOrScript));
|
||||
return offsetof(JSFunction, u.nativeOrScript);
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,28 @@ JSFunction::initEnvironment(JSObject *obj)
|
||||
((js::HeapPtrObject *)&u.i.env_)->init(obj);
|
||||
}
|
||||
|
||||
inline void
|
||||
JSFunction::initNative(js::Native native, const JSJitInfo *data)
|
||||
{
|
||||
JS_ASSERT(native);
|
||||
u.n.native = native;
|
||||
u.n.jitinfo = data;
|
||||
}
|
||||
|
||||
inline const JSJitInfo *
|
||||
JSFunction::jitInfo() const
|
||||
{
|
||||
JS_ASSERT(isNative());
|
||||
return u.n.jitinfo;
|
||||
}
|
||||
|
||||
inline void
|
||||
JSFunction::setJitInfo(const JSJitInfo *data)
|
||||
{
|
||||
JS_ASSERT(isNative());
|
||||
u.n.jitinfo = data;
|
||||
}
|
||||
|
||||
inline void
|
||||
JSFunction::initializeExtended()
|
||||
{
|
||||
|
@ -72,13 +72,13 @@ CastAsObjectJsval(StrictPropertyOp op)
|
||||
* JSNatives. To avoid widespread casting, have JS_PSG and JS_PSGS perform
|
||||
* type-safe casts.
|
||||
*/
|
||||
#define JS_PSG(name,getter,flags) \
|
||||
{name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, \
|
||||
(JSPropertyOp)getter, NULL}
|
||||
#define JS_PSGS(name,getter,setter,flags) \
|
||||
{name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, \
|
||||
(JSPropertyOp)getter, (JSStrictPropertyOp)setter}
|
||||
#define JS_PS_END {0, 0, 0, 0, 0}
|
||||
#define JS_PSG(name,getter,flags) \
|
||||
{name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, \
|
||||
JSOP_WRAPPER((JSPropertyOp)getter), JSOP_NULLWRAPPER}
|
||||
#define JS_PSGS(name,getter,setter,flags) \
|
||||
{name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, \
|
||||
JSOP_WRAPPER((JSPropertyOp)getter), JSOP_WRAPPER((JSStrictPropertyOp)setter)}
|
||||
#define JS_PS_END {0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -197,9 +197,9 @@ JS_FRIEND_DATA(Class) js::NamespaceClass = {
|
||||
(JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED)
|
||||
|
||||
static JSPropertySpec namespace_props[] = {
|
||||
{js_prefix_str, 0, NAMESPACE_ATTRS, NamePrefix_getter, 0},
|
||||
{js_uri_str, 0, NAMESPACE_ATTRS, NameURI_getter, 0},
|
||||
{0,0,0,0,0}
|
||||
{js_prefix_str, 0, NAMESPACE_ATTRS, JSOP_WRAPPER(NamePrefix_getter), JSOP_NULLWRAPPER},
|
||||
{js_uri_str, 0, NAMESPACE_ATTRS, JSOP_WRAPPER(NameURI_getter), JSOP_NULLWRAPPER},
|
||||
{0,0,0,JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
static JSBool
|
||||
@ -341,9 +341,9 @@ JS_FRIEND_DATA(Class) js::AnyNameClass = {
|
||||
#define QNAME_ATTRS (JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED)
|
||||
|
||||
static JSPropertySpec qname_props[] = {
|
||||
{js_uri_str, 0, QNAME_ATTRS, QNameNameURI_getter, 0},
|
||||
{js_localName_str, 0, QNAME_ATTRS, QNameLocalName_getter, 0},
|
||||
{0,0,0,0,0}
|
||||
{js_uri_str, 0, QNAME_ATTRS, JSOP_WRAPPER(QNameNameURI_getter), JSOP_NULLWRAPPER},
|
||||
{js_localName_str, 0, QNAME_ATTRS, JSOP_WRAPPER(QNameLocalName_getter), JSOP_NULLWRAPPER},
|
||||
{0,0,0,JSOP_NULLWRAPPER,JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
static JSString *
|
||||
@ -1114,12 +1114,12 @@ static const char js_prettyIndent_str[] = "prettyIndent";
|
||||
#define XSF_PRETTY_PRINTING JS_BIT(3)
|
||||
|
||||
static JSPropertySpec xml_static_props[] = {
|
||||
{js_ignoreComments_str, 0, JSPROP_PERMANENT, NULL, NULL},
|
||||
{js_ignoreProcessingInstructions_str, 0, JSPROP_PERMANENT, NULL, NULL},
|
||||
{js_ignoreWhitespace_str, 0, JSPROP_PERMANENT, NULL, NULL},
|
||||
{js_prettyPrinting_str, 0, JSPROP_PERMANENT, NULL, NULL},
|
||||
{js_prettyIndent_str, 0, JSPROP_PERMANENT, NULL, NULL},
|
||||
{0,0,0,0,0}
|
||||
{js_ignoreComments_str, 0, JSPROP_PERMANENT, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{js_ignoreProcessingInstructions_str, 0, JSPROP_PERMANENT, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{js_ignoreWhitespace_str, 0, JSPROP_PERMANENT, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{js_prettyPrinting_str, 0, JSPROP_PERMANENT, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{js_prettyIndent_str, 0, JSPROP_PERMANENT, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{0,0,0,JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
/* Macros for special-casing xml:, xmlns= and xmlns:foo= in ParseNodeToQName. */
|
||||
|
@ -103,7 +103,7 @@ const uint8_t PM_PATTRS =
|
||||
JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED;
|
||||
|
||||
#define GETTER(name) \
|
||||
{ #name, 0, PM_PATTRS, pm_get_##name, 0 }
|
||||
{ #name, 0, PM_PATTRS, JSOP_WRAPPER(pm_get_##name), JSOP_NULLWRAPPER }
|
||||
|
||||
static JSPropertySpec pm_props[] = {
|
||||
GETTER(cpu_cycles),
|
||||
@ -118,7 +118,7 @@ static JSPropertySpec pm_props[] = {
|
||||
GETTER(context_switches),
|
||||
GETTER(cpu_migrations),
|
||||
GETTER(eventsMeasured),
|
||||
{0,0,0,0,0}
|
||||
{0,0,0,JSOP_NULLWRAPPER,JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
#undef GETTER
|
||||
|
@ -3928,21 +3928,21 @@ static JSBool
|
||||
its_set_customNative(JSContext *cx, unsigned argc, jsval *vp);
|
||||
|
||||
static JSPropertySpec its_props[] = {
|
||||
{"color", ITS_COLOR, JSPROP_ENUMERATE, NULL, NULL},
|
||||
{"height", ITS_HEIGHT, JSPROP_ENUMERATE, NULL, NULL},
|
||||
{"width", ITS_WIDTH, JSPROP_ENUMERATE, NULL, NULL},
|
||||
{"funny", ITS_FUNNY, JSPROP_ENUMERATE, NULL, NULL},
|
||||
{"array", ITS_ARRAY, JSPROP_ENUMERATE, NULL, NULL},
|
||||
{"rdonly", ITS_RDONLY, JSPROP_READONLY, NULL, NULL},
|
||||
{"color", ITS_COLOR, JSPROP_ENUMERATE, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"height", ITS_HEIGHT, JSPROP_ENUMERATE, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"width", ITS_WIDTH, JSPROP_ENUMERATE, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"funny", ITS_FUNNY, JSPROP_ENUMERATE, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"array", ITS_ARRAY, JSPROP_ENUMERATE, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"rdonly", ITS_RDONLY, JSPROP_READONLY, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER},
|
||||
{"custom", ITS_CUSTOM, JSPROP_ENUMERATE,
|
||||
its_getter, its_setter},
|
||||
JSOP_WRAPPER(its_getter), JSOP_WRAPPER(its_setter)},
|
||||
{"customRdOnly", ITS_CUSTOMRDONLY, JSPROP_ENUMERATE | JSPROP_READONLY,
|
||||
its_getter, its_setter},
|
||||
JSOP_WRAPPER(its_getter), JSOP_WRAPPER(its_setter)},
|
||||
{"customNative", ITS_CUSTOMNATIVE,
|
||||
JSPROP_ENUMERATE | JSPROP_NATIVE_ACCESSORS,
|
||||
(JSPropertyOp)its_get_customNative,
|
||||
(JSStrictPropertyOp)its_set_customNative },
|
||||
{NULL,0,0,NULL,NULL}
|
||||
JSOP_WRAPPER((JSPropertyOp)its_get_customNative),
|
||||
JSOP_WRAPPER((JSStrictPropertyOp)its_set_customNative)},
|
||||
{NULL,0,0,JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}
|
||||
};
|
||||
|
||||
static JSBool its_noisy; /* whether to be noisy when finalizing it */
|
||||
|
Loading…
Reference in New Issue
Block a user