From f0dadb70843e10c0837dc16842682c52fc880a8d Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 23 Nov 2004 00:21:51 +0000 Subject: [PATCH] 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). --- src/sbbs3/js_global.c | 2 +- src/sbbs3/js_msg_area.c | 6 +++--- src/sbbs3/main.cpp | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 1bf44214c2..0fdadc31ee 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -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 */ diff --git a/src/sbbs3/js_msg_area.c b/src/sbbs3/js_msg_area.c index 75f6483c18..1c21e1c788 100644 --- a/src/sbbs3/js_msg_area.c +++ b/src/sbbs3/js_msg_area.c @@ -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} }; diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index faef5ab006..c70aab0eae 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -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); -- GitLab