Bug 581744 - Deprecate JSFUN_GETTER and JSFUN_SETTER; they never did much, and they're very nearly dead code already. r=brendan

This commit is contained in:
Jeff Walden 2010-07-26 16:11:37 -07:00
parent d23600e449
commit 27898e866f
5 changed files with 14 additions and 79 deletions

View File

@ -472,21 +472,14 @@ extern JS_PUBLIC_DATA(jsid) JSID_VOID;
/* Function flags, set in JSFunctionSpec and passed to JS_NewFunction etc. */
#define JSFUN_LAMBDA 0x08 /* expressed, not declared, function */
#define JSFUN_GETTER JSPROP_GETTER
#define JSFUN_SETTER JSPROP_SETTER
#define JSFUN_BOUND_METHOD 0x40 /* bind this to fun->object's parent */
#define JSFUN_HEAVYWEIGHT 0x80 /* activation requires a Call object */
#define JSFUN_DISJOINT_FLAGS(f) ((f) & 0x0f)
#define JSFUN_GSFLAGS(f) ((f) & (JSFUN_GETTER | JSFUN_SETTER))
#define JSFUN_GETTER_TEST(f) ((f) & JSFUN_GETTER)
#define JSFUN_SETTER_TEST(f) ((f) & JSFUN_SETTER)
#define JSFUN_BOUND_METHOD_TEST(f) ((f) & JSFUN_BOUND_METHOD)
#define JSFUN_HEAVYWEIGHT_TEST(f) ((f) & JSFUN_HEAVYWEIGHT)
#define JSFUN_GSFLAG2ATTR(f) JSFUN_GSFLAGS(f)
#define JSFUN_THISP_FLAGS(f) (f)
#define JSFUN_THISP_TEST(f,t) ((f) & t)

View File

@ -5421,12 +5421,6 @@ END_CASE(JSOP_DEFVAR)
BEGIN_CASE(JSOP_DEFFUN)
{
PropertyOp getter, setter;
bool doSet;
JSObject *pobj;
JSProperty *prop;
uint32 old;
/*
* A top-level function defined in Global or Eval code (see ECMA-262
* Ed. 3), or else a SpiderMonkey extension: a named function statement in
@ -5494,24 +5488,6 @@ BEGIN_CASE(JSOP_DEFFUN)
? JSPROP_ENUMERATE
: JSPROP_ENUMERATE | JSPROP_PERMANENT;
/*
* Load function flags that are also property attributes. Getters and
* setters do not need a slot, their value is stored elsewhere in the
* property itself, not in obj slots.
*/
getter = setter = PropertyStub;
uintN flags = JSFUN_GSFLAG2ATTR(fun->flags);
if (flags) {
/* Function cannot be both getter a setter. */
JS_ASSERT(flags == JSPROP_GETTER || flags == JSPROP_SETTER);
attrs |= flags | JSPROP_SHARED;
rval.setUndefined();
if (flags == JSPROP_GETTER)
getter = CastAsPropertyOp(obj);
else
setter = CastAsPropertyOp(obj);
}
/*
* We define the function as a property of the variable object and not the
* current scope chain even for the case of function expression statements
@ -5520,13 +5496,17 @@ BEGIN_CASE(JSOP_DEFFUN)
JSObject *parent = fp->varobj(cx);
JS_ASSERT(parent);
uint32 old;
bool doSet;
/*
* Check for a const property of the same name -- or any kind of property
* if executing with the strict option. We check here at runtime as well
* as at compile-time, to handle eval as well as multiple HTML script tags.
*/
jsid id = ATOM_TO_JSID(fun->atom);
prop = NULL;
JSProperty *prop = NULL;
JSObject *pobj;
JSBool ok = CheckRedeclaration(cx, parent, id, attrs, &pobj, &prop);
if (!ok)
goto restore_scope;
@ -5556,13 +5536,13 @@ BEGIN_CASE(JSOP_DEFFUN)
*/
JS_ASSERT(!(attrs & ~(JSPROP_ENUMERATE|JSPROP_PERMANENT)));
JS_ASSERT(!(old & JSPROP_READONLY));
doSet = JS_TRUE;
doSet = true;
}
pobj->dropProperty(cx, prop);
}
ok = doSet
? parent->setProperty(cx, id, &rval)
: parent->defineProperty(cx, id, rval, getter, setter, attrs);
: parent->defineProperty(cx, id, rval, PropertyStub, PropertyStub, attrs);
restore_scope:
/* Restore fp->scopeChain now that obj is defined in fp->callobj. */
@ -5590,37 +5570,18 @@ BEGIN_CASE(JSOP_DEFFUN_DBGFC)
? JSPROP_ENUMERATE
: JSPROP_ENUMERATE | JSPROP_PERMANENT;
uintN flags = JSFUN_GSFLAG2ATTR(fun->flags);
if (flags) {
attrs |= flags | JSPROP_SHARED;
rval.setUndefined();
}
JSObject *parent = fp->varobj(cx);
JS_ASSERT(parent);
jsid id = ATOM_TO_JSID(fun->atom);
JSBool ok = CheckRedeclaration(cx, parent, id, attrs, NULL, NULL);
if (ok) {
if (attrs == JSPROP_ENUMERATE) {
JS_ASSERT(fp->flags & JSFRAME_EVAL);
ok = parent->setProperty(cx, id, &rval);
} else {
JS_ASSERT(attrs & JSPROP_PERMANENT);
ok = parent->defineProperty(cx, id, rval,
(flags & JSPROP_GETTER)
? CastAsPropertyOp(obj)
: PropertyStub,
(flags & JSPROP_SETTER)
? CastAsPropertyOp(obj)
: PropertyStub,
attrs);
}
}
if (!ok)
if (!CheckRedeclaration(cx, parent, id, attrs, NULL, NULL))
goto error;
if ((attrs == JSPROP_ENUMERATE)
? !parent->setProperty(cx, id, &rval)
: !parent->defineProperty(cx, id, rval, PropertyStub, PropertyStub, attrs)) {
goto error;
}
}
END_CASE(JSOP_DEFFUN_FC)

View File

@ -668,7 +668,6 @@ obj_toSource(JSContext *cx, uintN argc, Value *vp)
* end so that we can put "get" in front of the function definition.
*/
if (gsop[j] && IsFunctionObject(val[j])) {
JSFunction *fun = js_ValueToFunction(cx, &val[j], JSV2F_SEARCH_STACK);
const jschar *start = vchars;
const jschar *end = vchars + vlength;
@ -678,18 +677,6 @@ obj_toSource(JSContext *cx, uintN argc, Value *vp)
parenChomp = 1;
}
/*
* Try to jump "getter" or "setter" keywords, if we suspect
* they might appear here. This code can be confused by people
* defining Function.prototype.toString, so let's be cautious.
*/
if (JSFUN_GETTER_TEST(fun->flags) || JSFUN_SETTER_TEST(fun->flags)) {
/* skip "getter/setter" */
const jschar *tmp = js_strchr_limit(vchars, ' ', end);
if (tmp)
vchars = tmp + 1;
}
/* Try to jump "function" keyword. */
if (vchars)
vchars = js_strchr_limit(vchars, ' ', end);

View File

@ -4977,10 +4977,6 @@ js_DecompileFunction(JSPrinter *jp)
if (!jp->grouped && (fun->flags & JSFUN_LAMBDA))
js_puts(jp, "(");
}
if (JSFUN_GETTER_TEST(fun->flags))
js_printf(jp, "%s ", js_getter_str);
else if (JSFUN_SETTER_TEST(fun->flags))
js_printf(jp, "%s ", js_setter_str);
js_printf(jp, "%s ", js_function_str);
if (fun->atom && !QuoteString(&jp->sprinter, ATOM_TO_STRING(fun->atom), 0))

View File

@ -1746,8 +1746,6 @@ DisassembleValue(JSContext *cx, jsval v, bool lines, bool recursive)
#define SHOW_FLAG(flag) if (flags & JSFUN_##flag) fputs(" " #flag, stdout);
SHOW_FLAG(LAMBDA);
SHOW_FLAG(SETTER);
SHOW_FLAG(GETTER);
SHOW_FLAG(BOUND_METHOD);
SHOW_FLAG(HEAVYWEIGHT);
SHOW_FLAG(THISP_STRING);