mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1165486 - Rebase yield offsets when cloning scripts. (r=jandem)
This commit is contained in:
parent
906c046a08
commit
f178f5f002
@ -3104,6 +3104,7 @@ js::detail::CopyScript(JSContext* cx, HandleObject scriptStaticScope, HandleScri
|
||||
uint32_t nregexps = src->hasRegexps() ? src->regexps()->length : 0;
|
||||
uint32_t ntrynotes = src->hasTrynotes() ? src->trynotes()->length : 0;
|
||||
uint32_t nblockscopes = src->hasBlockScopes() ? src->blockScopes()->length : 0;
|
||||
uint32_t nyieldoffsets = src->hasYieldOffsets() ? src->yieldOffsets().length() : 0;
|
||||
|
||||
/* Script data */
|
||||
|
||||
@ -3248,6 +3249,8 @@ js::detail::CopyScript(JSContext* cx, HandleObject scriptStaticScope, HandleScri
|
||||
dst->trynotes()->vector = Rebase<JSTryNote>(dst, src, src->trynotes()->vector);
|
||||
if (nblockscopes != 0)
|
||||
dst->blockScopes()->vector = Rebase<BlockScopeNote>(dst, src, src->blockScopes()->vector);
|
||||
if (nyieldoffsets != 0)
|
||||
dst->yieldOffsets().vector_ = Rebase<uint32_t>(dst, src, src->yieldOffsets().vector_);
|
||||
|
||||
/*
|
||||
* Function delazification assumes that their script does not have a
|
||||
|
@ -55,6 +55,15 @@ namespace frontend {
|
||||
class UpvarCookie;
|
||||
}
|
||||
|
||||
namespace detail {
|
||||
|
||||
// Do not call this directly! It is exposed for the friend declarations in
|
||||
// this file.
|
||||
bool
|
||||
CopyScript(JSContext* cx, HandleObject scriptStaticScope, HandleScript src, HandleScript dst);
|
||||
|
||||
} // namespace detail
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@ -130,6 +139,10 @@ struct BlockScopeArray {
|
||||
};
|
||||
|
||||
class YieldOffsetArray {
|
||||
friend bool
|
||||
detail::CopyScript(JSContext* cx, HandleObject scriptStaticScope, HandleScript src,
|
||||
HandleScript dst);
|
||||
|
||||
uint32_t* vector_; // Array of bytecode offsets.
|
||||
uint32_t length_; // Count of bytecode offsets.
|
||||
|
||||
@ -767,16 +780,6 @@ template<XDRMode mode>
|
||||
bool
|
||||
XDRScriptConst(XDRState<mode>* xdr, MutableHandleValue vp);
|
||||
|
||||
|
||||
namespace detail {
|
||||
|
||||
// Do not call this directly! It is exposed for the friend declaration in
|
||||
// JSScript.
|
||||
bool
|
||||
CopyScript(JSContext* cx, HandleObject scriptStaticScope, HandleScript src, HandleScript dst);
|
||||
|
||||
} // namespace detail
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
class JSScript : public js::gc::TenuredCell
|
||||
|
Loading…
Reference in New Issue
Block a user