mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge.
This commit is contained in:
commit
34e554c496
@ -622,15 +622,17 @@ js_GetCallObject(JSContext *cx, JSStackFrame *fp)
|
|||||||
* expression Call's parent points to an environment object holding
|
* expression Call's parent points to an environment object holding
|
||||||
* function's name.
|
* function's name.
|
||||||
*/
|
*/
|
||||||
JSObject *parent = fp->scopeChain;
|
|
||||||
JSAtom *lambdaName = (fp->fun->flags & JSFUN_LAMBDA) ? fp->fun->atom : NULL;
|
JSAtom *lambdaName = (fp->fun->flags & JSFUN_LAMBDA) ? fp->fun->atom : NULL;
|
||||||
if (lambdaName) {
|
if (lambdaName) {
|
||||||
parent = js_NewObjectWithGivenProto(cx, &js_DeclEnvClass, NULL,
|
JSObject *env = js_NewObjectWithGivenProto(cx, &js_DeclEnvClass, NULL,
|
||||||
parent, 0);
|
fp->scopeChain, 0);
|
||||||
if (!parent)
|
if (!env)
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
|
||||||
|
/* Root env. */
|
||||||
|
fp->scopeChain = env;
|
||||||
}
|
}
|
||||||
callobj = js_NewObject(cx, &js_CallClass, NULL, parent, 0);
|
callobj = js_NewObject(cx, &js_CallClass, NULL, fp->scopeChain, 0);
|
||||||
if (!callobj)
|
if (!callobj)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -638,7 +640,7 @@ js_GetCallObject(JSContext *cx, JSStackFrame *fp)
|
|||||||
JS_ASSERT(fp->fun == GET_FUNCTION_PRIVATE(cx, fp->callee));
|
JS_ASSERT(fp->fun == GET_FUNCTION_PRIVATE(cx, fp->callee));
|
||||||
STOBJ_SET_SLOT(callobj, JSSLOT_CALLEE, OBJECT_TO_JSVAL(fp->callee));
|
STOBJ_SET_SLOT(callobj, JSSLOT_CALLEE, OBJECT_TO_JSVAL(fp->callee));
|
||||||
if (lambdaName &&
|
if (lambdaName &&
|
||||||
!js_DefineNativeProperty(cx, parent, ATOM_TO_JSID(lambdaName),
|
!js_DefineNativeProperty(cx, fp->scopeChain, ATOM_TO_JSID(lambdaName),
|
||||||
OBJECT_TO_JSVAL(fp->callee), NULL, NULL,
|
OBJECT_TO_JSVAL(fp->callee), NULL, NULL,
|
||||||
JSPROP_PERMANENT | JSPROP_READONLY,
|
JSPROP_PERMANENT | JSPROP_READONLY,
|
||||||
0, 0, NULL)) {
|
0, 0, NULL)) {
|
||||||
|
@ -316,6 +316,17 @@ js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
js_AtomicSetMask(jsword *w, jsword mask)
|
||||||
|
{
|
||||||
|
jsword ov, nv;
|
||||||
|
|
||||||
|
do {
|
||||||
|
ov = *w;
|
||||||
|
nv = ov | mask;
|
||||||
|
} while (!js_CompareAndSwap(w, ov, nv));
|
||||||
|
}
|
||||||
|
|
||||||
JS_END_EXTERN_C
|
JS_END_EXTERN_C
|
||||||
|
|
||||||
#endif /* jslock_h___ */
|
#endif /* jslock_h___ */
|
||||||
|
@ -2935,7 +2935,7 @@ js_FinalizeStringRT(JSRuntime *rt, JSString *str, intN type, JSContext *cx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (valid)
|
if (valid && JSSTRING_IS_DEFLATED(str))
|
||||||
js_PurgeDeflatedStringCache(rt, str);
|
js_PurgeDeflatedStringCache(rt, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3454,6 +3454,7 @@ js_SetStringBytes(JSContext *cx, JSString *str, char *bytes, size_t length)
|
|||||||
if (ok)
|
if (ok)
|
||||||
rt->deflatedStringCacheBytes += length;
|
rt->deflatedStringCacheBytes += length;
|
||||||
#endif
|
#endif
|
||||||
|
JSSTRING_SET_DEFLATED(str);
|
||||||
|
|
||||||
JS_RELEASE_LOCK(rt->deflatedStringCacheLock);
|
JS_RELEASE_LOCK(rt->deflatedStringCacheLock);
|
||||||
return ok;
|
return ok;
|
||||||
@ -3508,6 +3509,7 @@ js_GetStringBytes(JSContext *cx, JSString *str)
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
rt->deflatedStringCacheBytes += JSSTRING_LENGTH(str);
|
rt->deflatedStringCacheBytes += JSSTRING_LENGTH(str);
|
||||||
#endif
|
#endif
|
||||||
|
JSSTRING_SET_DEFLATED(str);
|
||||||
} else {
|
} else {
|
||||||
if (cx)
|
if (cx)
|
||||||
JS_free(cx, bytes);
|
JS_free(cx, bytes);
|
||||||
|
@ -108,8 +108,9 @@ struct JSString {
|
|||||||
#define JSSTRFLAG_PREFIX JSSTRING_BIT(JS_BITS_PER_WORD - 2)
|
#define JSSTRFLAG_PREFIX JSSTRING_BIT(JS_BITS_PER_WORD - 2)
|
||||||
#define JSSTRFLAG_MUTABLE JSSTRFLAG_PREFIX
|
#define JSSTRFLAG_MUTABLE JSSTRFLAG_PREFIX
|
||||||
#define JSSTRFLAG_ATOMIZED JSSTRING_BIT(JS_BITS_PER_WORD - 3)
|
#define JSSTRFLAG_ATOMIZED JSSTRING_BIT(JS_BITS_PER_WORD - 3)
|
||||||
|
#define JSSTRFLAG_DEFLATED JSSTRING_BIT(JS_BITS_PER_WORD - 4)
|
||||||
|
|
||||||
#define JSSTRING_LENGTH_BITS (JS_BITS_PER_WORD - 3)
|
#define JSSTRING_LENGTH_BITS (JS_BITS_PER_WORD - 4)
|
||||||
#define JSSTRING_LENGTH_MASK JSSTRING_BITMASK(JSSTRING_LENGTH_BITS)
|
#define JSSTRING_LENGTH_MASK JSSTRING_BITMASK(JSSTRING_LENGTH_BITS)
|
||||||
|
|
||||||
/* Universal JSString type inquiry and accessor macros. */
|
/* Universal JSString type inquiry and accessor macros. */
|
||||||
@ -132,6 +133,13 @@ struct JSString {
|
|||||||
? JSSTRDEP_LENGTH(str) \
|
? JSSTRDEP_LENGTH(str) \
|
||||||
: JSFLATSTR_LENGTH(str))
|
: JSFLATSTR_LENGTH(str))
|
||||||
|
|
||||||
|
JS_STATIC_ASSERT(sizeof(size_t) == sizeof(jsword));
|
||||||
|
|
||||||
|
#define JSSTRING_IS_DEFLATED(str) ((str)->length & JSSTRFLAG_DEFLATED)
|
||||||
|
|
||||||
|
#define JSSTRING_SET_DEFLATED(str) js_AtomicSetMask((jsword*)&(str)->length, \
|
||||||
|
JSSTRFLAG_DEFLATED);
|
||||||
|
|
||||||
#define JSSTRING_CHARS_AND_LENGTH(str, chars_, length_) \
|
#define JSSTRING_CHARS_AND_LENGTH(str, chars_, length_) \
|
||||||
((void)(JSSTRING_IS_DEPENDENT(str) \
|
((void)(JSSTRING_IS_DEPENDENT(str) \
|
||||||
? ((length_) = JSSTRDEP_LENGTH(str), \
|
? ((length_) = JSSTRDEP_LENGTH(str), \
|
||||||
@ -182,8 +190,10 @@ struct JSString {
|
|||||||
* with the atomized bit set.
|
* with the atomized bit set.
|
||||||
*/
|
*/
|
||||||
#define JSFLATSTR_SET_ATOMIZED(str) \
|
#define JSFLATSTR_SET_ATOMIZED(str) \
|
||||||
((void)(JS_ASSERT(JSSTRING_IS_FLAT(str) && !JSSTRING_IS_MUTABLE(str)), \
|
JS_BEGIN_MACRO \
|
||||||
(str)->length |= JSSTRFLAG_ATOMIZED))
|
JS_ASSERT(JSSTRING_IS_FLAT(str) && !JSSTRING_IS_MUTABLE(str)); \
|
||||||
|
js_AtomicSetMask((jsword*) &(str)->length, JSSTRFLAG_ATOMIZED); \
|
||||||
|
JS_END_MACRO
|
||||||
|
|
||||||
#define JSFLATSTR_SET_MUTABLE(str) \
|
#define JSFLATSTR_SET_MUTABLE(str) \
|
||||||
((void)(JS_ASSERT(JSSTRING_IS_FLAT(str) && !JSSTRING_IS_ATOMIZED(str)), \
|
((void)(JS_ASSERT(JSSTRING_IS_FLAT(str) && !JSSTRING_IS_ATOMIZED(str)), \
|
||||||
|
Loading…
Reference in New Issue
Block a user