Bug 791122 - IonMonkey, fix bogus DOM exit frame assertion. r=efaust

This commit is contained in:
Nicolas B. Pierron 2012-09-17 10:21:22 -07:00
parent f0e38d4eef
commit 3d1b625fd2
3 changed files with 35 additions and 10 deletions

View File

@ -122,10 +122,7 @@ IonFrameIterator::isDOMExit() const
{
if (type_ != IonFrame_Exit)
return false;
IonCode *code = exitFrame()->footer()->ionCode();
return code == ION_FRAME_DOMGETTER ||
code == ION_FRAME_DOMSETTER ||
code == ION_FRAME_DOMMETHOD;
return exitFrame()->isDomExit();
}
bool

View File

@ -185,14 +185,28 @@ class IonExitFrameLayout : public IonCommonFrameLayout
JS_ASSERT(footer()->ionCode() != NULL);
return top();
}
inline bool isWrapperExit() {
return footer()->function() != NULL;
}
inline bool isNativeExit() {
return footer()->ionCode() == NULL;
}
inline bool isDomExit() {
IonCode *code = footer()->ionCode();
return
code == ION_FRAME_DOMGETTER ||
code == ION_FRAME_DOMSETTER ||
code == ION_FRAME_DOMMETHOD;
}
inline IonNativeExitFrameLayout *nativeExit() {
// see CodeGenerator::visitCallNative
JS_ASSERT(footer()->ionCode() == NULL);
JS_ASSERT(isNativeExit());
return reinterpret_cast<IonNativeExitFrameLayout *>(footer());
}
inline IonDOMExitFrameLayout *DOMExit() {
JS_ASSERT(footer()->ionCode() == ION_FRAME_DOMGETTER ||
footer()->ionCode() == ION_FRAME_DOMSETTER);
JS_ASSERT(isDomExit());
return reinterpret_cast<IonDOMExitFrameLayout *>(footer());
}
};

View File

@ -169,14 +169,28 @@ class IonExitFrameLayout : public IonCommonFrameLayout
JS_ASSERT(footer()->ionCode() != NULL);
return top();
}
inline bool isWrapperExit() {
return footer()->function() != NULL;
}
inline bool isNativeExit() {
return footer()->ionCode() == NULL;
}
inline bool isDomExit() {
IonCode *code = footer()->ionCode();
return
code == ION_FRAME_DOMGETTER ||
code == ION_FRAME_DOMSETTER ||
code == ION_FRAME_DOMMETHOD;
}
inline IonNativeExitFrameLayout *nativeExit() {
// see CodeGenerator::visitCallNative
JS_ASSERT(footer()->ionCode() == NULL);
JS_ASSERT(isNativeExit());
return reinterpret_cast<IonNativeExitFrameLayout *>(footer());
}
inline IonDOMExitFrameLayout *DOMExit() {
JS_ASSERT(footer()->ionCode() == ION_FRAME_DOMGETTER ||
footer()->ionCode() == ION_FRAME_DOMSETTER);
JS_ASSERT(isDomExit());
return reinterpret_cast<IonDOMExitFrameLayout *>(footer());
}
};