Skip to content
Snippets Groups Projects
Commit f0dadb70 authored by rswindell's avatar rswindell
Browse files

According to Brendan Eich ("Mr. SpiderMonkey" himself), using the undocumented

JSPROP_SHARED attribute for properties with getter/setter methods will save us
4-bytes per property in the JS heap (not bad).
parent 0d064894
No related branches found
No related tags found
No related merge requests found
......@@ -73,7 +73,7 @@ static JSBool js_system_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
return(JS_TRUE);
}
#define GLOBOBJ_FLAGS JSPROP_ENUMERATE|JSPROP_READONLY
#define GLOBOBJ_FLAGS JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_SHARED
static struct JSPropertySpec js_global_properties[] = {
/* name, tinyid, flags */
......
......@@ -293,9 +293,9 @@ static JSBool js_sub_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
static struct JSPropertySpec js_sub_properties[] = {
/* name ,tinyid ,flags */
{ "scan_ptr" ,SUB_PROP_SCAN_PTR ,JSPROP_ENUMERATE },
{ "scan_cfg" ,SUB_PROP_SCAN_CFG ,JSPROP_ENUMERATE },
{ "lead_read" ,SUB_PROP_LAST_READ ,JSPROP_ENUMERATE },
{ "scan_ptr" ,SUB_PROP_SCAN_PTR ,JSPROP_ENUMERATE|JSPROP_SHARED },
{ "scan_cfg" ,SUB_PROP_SCAN_CFG ,JSPROP_ENUMERATE|JSPROP_SHARED },
{ "lead_read" ,SUB_PROP_LAST_READ ,JSPROP_ENUMERATE|JSPROP_SHARED },
{0}
};
......
......@@ -374,8 +374,8 @@ DLLCALL js_DefineSyncProperties(JSContext *cx, JSObject *obj, jsSyncPropertySpec
return(JS_FALSE);
for(i=0;props[i].name;i++) {
if(!JS_DefinePropertyWithTinyId(cx, obj,
props[i].name,props[i].tinyid, JSVAL_VOID, NULL, NULL, props[i].flags))
if(!JS_DefinePropertyWithTinyId(cx, obj, /* Never reserve any "slots" for properties */
props[i].name,props[i].tinyid, JSVAL_VOID, NULL, NULL, props[i].flags|JSPROP_SHARED))
return(JS_FALSE);
if(props[i].flags&JSPROP_ENUMERATE) { /* No need to version invisible props */
val = INT_TO_JSVAL(props[i].ver);
......@@ -477,7 +477,7 @@ DLLCALL js_DefineSyncProperties(JSContext *cx, JSObject *obj, jsSyncPropertySpec
for(i=0;props[i].name;i++)
if(!JS_DefinePropertyWithTinyId(cx, obj,
props[i].name,props[i].tinyid, JSVAL_VOID, NULL, NULL, props[i].flags))
props[i].name,props[i].tinyid, JSVAL_VOID, NULL, NULL, props[i].flags|JSPROP_SHARED))
return(JS_FALSE);
return(JS_TRUE);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment