From 8df896f62259b5ac881354fb60a65c5626bb840c Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 26 Jun 2008 10:41:04 +1200 Subject: [PATCH 01/98] Bug 344258. Make honour changes to the ID-to-element map. r=longsonr,sr=mats --- content/svg/content/src/nsSVGUseElement.cpp | 43 +++++----- content/svg/content/src/nsSVGUseElement.h | 21 ++++- layout/base/nsIPresShell.h | 9 +- layout/base/nsPresShell.cpp | 7 ++ layout/reftests/svg/dynamic-use-01.svg | 91 +++++++++++++++++++++ layout/reftests/svg/reftest.list | 1 + 6 files changed, 141 insertions(+), 31 deletions(-) create mode 100644 layout/reftests/svg/dynamic-use-01.svg diff --git a/content/svg/content/src/nsSVGUseElement.cpp b/content/svg/content/src/nsSVGUseElement.cpp index fd1fd459177b..b55a56e9bcf4 100644 --- a/content/svg/content/src/nsSVGUseElement.cpp +++ b/content/svg/content/src/nsSVGUseElement.cpp @@ -70,13 +70,13 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsSVGUseElement, nsAutoScriptBlocker scriptBlocker; NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOriginal) tmp->DestroyAnonymousContent(); - tmp->RemoveListener(); + tmp->UnlinkSource(); NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsSVGUseElement, nsSVGUseElementBase) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mOriginal) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mClone) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSourceContent) + tmp->mSource.Traverse(&cb); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_ADDREF_INHERITED(nsSVGUseElement,nsSVGUseElementBase) @@ -99,13 +99,13 @@ NS_INTERFACE_MAP_END_INHERITING(nsSVGUseElementBase) // Implementation nsSVGUseElement::nsSVGUseElement(nsINodeInfo *aNodeInfo) - : nsSVGUseElementBase(aNodeInfo) + : nsSVGUseElementBase(aNodeInfo), mSource(this) { } nsSVGUseElement::~nsSVGUseElement() { - RemoveListener(); + UnlinkSource(); } //---------------------------------------------------------------------- @@ -232,7 +232,7 @@ nsSVGUseElement::ContentRemoved(nsIDocument *aDocument, void nsSVGUseElement::NodeWillBeDestroyed(const nsINode *aNode) { - RemoveListener(); + UnlinkSource(); } //---------------------------------------------------------------------- @@ -247,17 +247,15 @@ nsSVGUseElement::CreateAnonymousContent() mClone = nsnull; - nsCOMPtr targetContent = LookupHref(); + if (mSource.get()) { + mSource.get()->RemoveMutationObserver(this); + } + LookupHref(); + nsIContent* targetContent = mSource.get(); if (!targetContent) return nsnull; - PRBool needAddObserver = PR_FALSE; - if (mSourceContent != targetContent) { - RemoveListener(); - needAddObserver = PR_TRUE; - } - // make sure target is valid type for // QIable nsSVGGraphicsElement would eliminate enumerating all elements nsIAtom *tag = targetContent->Tag(); @@ -377,10 +375,7 @@ nsSVGUseElement::CreateAnonymousContent() } } - if (needAddObserver) { - targetContent->AddMutationObserver(this); - } - mSourceContent = targetContent; + targetContent->AddMutationObserver(this); mClone = newcontent; return mClone; } @@ -415,18 +410,18 @@ nsSVGUseElement::SyncWidthHeight(PRUint8 aAttrEnum) } } -nsIContent * +void nsSVGUseElement::LookupHref() { const nsString &href = mStringAttributes[HREF].GetAnimValue(); if (href.IsEmpty()) - return nsnull; + return; nsCOMPtr targetURI, baseURI = GetBaseURI(); nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(targetURI), href, GetCurrentDoc(), baseURI); - return nsContentUtils::GetReferencedElement(targetURI, this); + mSource.Reset(this, targetURI); } void @@ -436,16 +431,16 @@ nsSVGUseElement::TriggerReclone() if (!doc) return; nsIPresShell *presShell = doc->GetPrimaryShell(); if (!presShell) return; - presShell->RecreateFramesFor(this); + presShell->PostRecreateFramesFor(this); } void -nsSVGUseElement::RemoveListener() +nsSVGUseElement::UnlinkSource() { - if (mSourceContent) { - mSourceContent->RemoveMutationObserver(this); - mSourceContent = nsnull; + if (mSource.get()) { + mSource.get()->RemoveMutationObserver(this); } + mSource.Unlink(); } //---------------------------------------------------------------------- diff --git a/content/svg/content/src/nsSVGUseElement.h b/content/svg/content/src/nsSVGUseElement.h index f7f9060d6d2b..12d1128780ad 100644 --- a/content/svg/content/src/nsSVGUseElement.h +++ b/content/svg/content/src/nsSVGUseElement.h @@ -45,12 +45,14 @@ #include "nsSVGLength2.h" #include "nsSVGString.h" #include "nsTArray.h" +#include "nsReferencedElement.h" class nsIContent; class nsINodeInfo; #define NS_SVG_USE_ELEMENT_IMPL_CID \ -{ 0xa95c13d3, 0xc193, 0x465f, {0x81, 0xf0, 0x02, 0x6d, 0x67, 0x05, 0x54, 0x58 } } +{ 0x55fb86fe, 0xd81f, 0x4ae4, \ + { 0x80, 0x3f, 0xeb, 0x90, 0xfe, 0xe0, 0x7a, 0xe9 } } nsresult NS_NewSVGSVGElement(nsIContent **aResult, nsINodeInfo *aNodeInfo); @@ -104,14 +106,25 @@ public: NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const; protected: + class SourceReference : public nsReferencedElement { + public: + SourceReference(nsSVGUseElement* aContainer) : mContainer(aContainer) {} + protected: + virtual void ContentChanged(nsIContent* aFrom, nsIContent* aTo) { + nsReferencedElement::ContentChanged(aFrom, aTo); + mContainer->TriggerReclone(); + } + private: + nsSVGUseElement* mContainer; + }; virtual LengthAttributesInfo GetLengthInfo(); virtual StringAttributesInfo GetStringInfo(); void SyncWidthHeight(PRUint8 aAttrEnum); - nsIContent *LookupHref(); + void LookupHref(); void TriggerReclone(); - void RemoveListener(); + void UnlinkSource(); enum { X, Y, WIDTH, HEIGHT }; nsSVGLength2 mLengthAttributes[4]; @@ -123,7 +136,7 @@ protected: nsCOMPtr mOriginal; // if we've been cloned, our "real" copy nsCOMPtr mClone; // cloned tree - nsCOMPtr mSourceContent; // observed element + SourceReference mSource; // observed element }; NS_DEFINE_STATIC_IID_ACCESSOR(nsSVGUseElement, NS_SVG_USE_ELEMENT_IMPL_CID) diff --git a/layout/base/nsIPresShell.h b/layout/base/nsIPresShell.h index abfab2fadac6..f56c25ce5acb 100644 --- a/layout/base/nsIPresShell.h +++ b/layout/base/nsIPresShell.h @@ -102,10 +102,11 @@ class gfxContext; typedef short SelectionType; typedef PRUint32 nsFrameState; -// 228a7d67-811b-4d75-85c0-1ee22c0d2af0 + +// 23e048f6-49bb-4ac4-b900-c63865363ad3 #define NS_IPRESSHELL_IID \ -{ 0x228a7d67, 0x811b, 0x4d75, \ - { 0x85, 0xc0, 0x1e, 0xe2, 0x2c, 0x0d, 0x2a, 0xf0 } } +{ 0x23e048f6, 0x49bb, 0x4ac4, \ + { 0xb9, 0x00, 0xc6, 0x38, 0x65, 0x36, 0x3a, 0xd3 } } // Constants for ScrollContentIntoView() function #define NS_PRESSHELL_SCROLL_TOP 0 @@ -385,6 +386,8 @@ public: */ NS_IMETHOD RecreateFramesFor(nsIContent* aContent) = 0; + void PostRecreateFramesFor(nsIContent* aContent); + /** * Determine if it is safe to flush all pending notifications * @param aIsSafeToFlush PR_TRUE if it is safe, PR_FALSE otherwise. diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index a1de0416a793..d60a71de45ee 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -3417,6 +3417,13 @@ PresShell::RecreateFramesFor(nsIContent* aContent) return rv; } +void +nsIPresShell::PostRecreateFramesFor(nsIContent* aContent) +{ + FrameConstructor()->PostRestyleEvent(aContent, eReStyle_Self, + nsChangeHint_ReconstructFrame); +} + NS_IMETHODIMP PresShell::ClearFrameRefs(nsIFrame* aFrame) { diff --git a/layout/reftests/svg/dynamic-use-01.svg b/layout/reftests/svg/dynamic-use-01.svg new file mode 100644 index 000000000000..ba922857a640 --- /dev/null +++ b/layout/reftests/svg/dynamic-use-01.svg @@ -0,0 +1,91 @@ + + + Testing that dynamic changes to the element for a given ID are reflected in 'use' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list index bf355fa0a8fa..8a46eaa27e73 100755 --- a/layout/reftests/svg/reftest.list +++ b/layout/reftests/svg/reftest.list @@ -24,6 +24,7 @@ include moz-only/reftest.list == dynamic-text-01.svg dynamic-text-01-ref.svg == dynamic-text-02.svg dynamic-text-02-ref.svg == dynamic-text-03.svg dynamic-text-03-ref.svg +== dynamic-use-01.svg pass.svg == fallback-color-01a.svg pass.svg == fallback-color-01b.svg pass.svg == fallback-color-02a.svg fallback-color-02-ref.svg From f9bac91ffb0544c0530b036f2fc33f5a97990119 Mon Sep 17 00:00:00 2001 From: Johnny Stenback Date: Wed, 25 Jun 2008 17:00:59 -0700 Subject: [PATCH 02/98] Fixing bug 441923. Stop our SDK sample plugins from crashing on destruction. r+sr=jonas@sicking.cc --- .../plugin/tools/sdk/samples/scriptable/mac/plugin.cpp | 6 ++++-- .../plugin/tools/sdk/samples/scriptable/unix/plugin.cpp | 8 +++++--- modules/plugin/tools/sdk/samples/scriptable/unix/plugin.h | 2 +- .../tools/sdk/samples/scriptable/windows/plugin.cpp | 8 +++++--- .../plugin/tools/sdk/samples/scriptable/windows/plugin.h | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/modules/plugin/tools/sdk/samples/scriptable/mac/plugin.cpp b/modules/plugin/tools/sdk/samples/scriptable/mac/plugin.cpp index 2a418c4d91c9..3796abc6423c 100644 --- a/modules/plugin/tools/sdk/samples/scriptable/mac/plugin.cpp +++ b/modules/plugin/tools/sdk/samples/scriptable/mac/plugin.cpp @@ -95,8 +95,10 @@ nsPluginInstance::~nsPluginInstance() // so releasing it here does not guarantee that it is over // we should take precaution in case it will be called later // and zero its mPlugin member - mScriptablePeer->SetInstance(NULL); - NS_IF_RELEASE(mScriptablePeer); + if (mScriptablePeer) { + mScriptablePeer->SetInstance(NULL); + NS_RELEASE(mScriptablePeer); + } } NPBool nsPluginInstance::init(NPWindow* aWindow) diff --git a/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.cpp b/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.cpp index 055254c6b1ba..1365806c54f3 100644 --- a/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.cpp +++ b/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * @@ -126,8 +126,10 @@ nsPluginInstance::~nsPluginInstance() // so releasing it here does not guarantee that it is over // we should take precaution in case it will be called later // and zero its mPlugin member - mScriptablePeer->SetInstance(NULL); - NS_IF_RELEASE(mScriptablePeer); + if (mScriptablePeer) { + mScriptablePeer->SetInstance(NULL); + NS_RELEASE(mScriptablePeer); + } } static void diff --git a/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.h b/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.h index 6f3e4162022c..a7cbc0d977b1 100644 --- a/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.h +++ b/modules/plugin/tools/sdk/samples/scriptable/unix/plugin.h @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * diff --git a/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp b/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp index 23d06902ccc0..261e2b4a30be 100644 --- a/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp +++ b/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * @@ -93,8 +93,10 @@ nsPluginInstance::~nsPluginInstance() // so releasing it here does not guarantee that it is over // we should take precaution in case it will be called later // and zero its mPlugin member - mScriptablePeer->SetInstance(NULL); - NS_IF_RELEASE(mScriptablePeer); + if (mScriptablePeer) { + mScriptablePeer->SetInstance(NULL); + NS_RELEASE(mScriptablePeer); + } } static LRESULT CALLBACK PluginWinProc(HWND, UINT, WPARAM, LPARAM); diff --git a/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.h b/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.h index c42815ddf88d..52fbdf663c0e 100644 --- a/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.h +++ b/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.h @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * From 1ad1a59c268132b041d911cadd07c525d0e74a59 Mon Sep 17 00:00:00 2001 From: Johnny Stenback Date: Wed, 25 Jun 2008 17:04:06 -0700 Subject: [PATCH 03/98] Fixing bug 441377. Don't GC when replacing safe contexts. r+sr=brendan@mozilla.org --- js/src/xpconnect/src/xpcthreadcontext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/src/xpconnect/src/xpcthreadcontext.cpp b/js/src/xpconnect/src/xpcthreadcontext.cpp index ff7b03538673..9d4498d731e1 100644 --- a/js/src/xpconnect/src/xpcthreadcontext.cpp +++ b/js/src/xpconnect/src/xpcthreadcontext.cpp @@ -272,7 +272,7 @@ XPCJSContextStack::SetSafeJSContext(JSContext * aSafeJSContext) mOwnSafeJSContext == mSafeJSContext && mOwnSafeJSContext != aSafeJSContext) { - JS_DestroyContext(mOwnSafeJSContext); + JS_DestroyContextNoGC(mOwnSafeJSContext); mOwnSafeJSContext = nsnull; SyncJSContexts(); } From e432e55df3dfbc06ffa8ac1d7c47f4a26daa80e9 Mon Sep 17 00:00:00 2001 From: Johnny Stenback Date: Wed, 25 Jun 2008 17:06:38 -0700 Subject: [PATCH 04/98] Fixing bug 440572. Make child frames whose names conflict with properties defined in IDL be accessable through XOWs again. r+sr=mrbkap@gmail.com --- dom/src/base/nsDOMClassInfo.cpp | 8 ++++++-- dom/tests/mochitest/bugs/Makefile.in | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dom/src/base/nsDOMClassInfo.cpp b/dom/src/base/nsDOMClassInfo.cpp index 77f2c2204c5b..3eacc55cfb85 100644 --- a/dom/src/base/nsDOMClassInfo.cpp +++ b/dom/src/base/nsDOMClassInfo.cpp @@ -4510,10 +4510,14 @@ nsWindowSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx, const char *name = JS_GET_CLASS(cx, JSVAL_TO_OBJECT(*vp))->name; // The list of Window class names here need to be kept in sync - // with the actual class names! + // with the actual class names! The class name + // XPCCrossOriginWrapper needs to be handled here too as XOWs + // define child frame names with a XOW as the value, and thus + // we'll need to get through here with XOWs class name too. if ((*name == 'W' && strcmp(name, "Window") == 0) || (*name == 'C' && strcmp(name, "ChromeWindow") == 0) || - (*name == 'M' && strcmp(name, "ModalContentWindow") == 0)) { + (*name == 'M' && strcmp(name, "ModalContentWindow") == 0) || + (*name == 'X' && strcmp(name, "XPCCrossOriginWrapper") == 0)) { nsCOMPtr vpwrapper; sXPConnect->GetWrappedNativeOfJSObject(cx, JSVAL_TO_OBJECT(*vp), getter_AddRefs(vpwrapper)); diff --git a/dom/tests/mochitest/bugs/Makefile.in b/dom/tests/mochitest/bugs/Makefile.in index 7fa42a52737f..6be268e47f5e 100644 --- a/dom/tests/mochitest/bugs/Makefile.in +++ b/dom/tests/mochitest/bugs/Makefile.in @@ -77,6 +77,8 @@ _TEST_FILES = \ test_bug430276.html \ iframe_bug430276.html \ iframe_bug430276-2.html \ + test_bug440572.html \ + iframe_bug440572.html \ $(NULL) libs:: $(_TEST_FILES) From f54ec1f786a84dd79f42843be7c3909a75442a17 Mon Sep 17 00:00:00 2001 From: Johnny Stenback Date: Wed, 25 Jun 2008 17:07:22 -0700 Subject: [PATCH 05/98] Fixing bug 440572. Make child frames whose names conflict with properties defined in IDL be accessable through XOWs again. r+sr=mrbkap@gmail.com --- .../mochitest/bugs/iframe_bug440572.html | 17 +++++++ dom/tests/mochitest/bugs/test_bug440572.html | 48 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 dom/tests/mochitest/bugs/iframe_bug440572.html create mode 100644 dom/tests/mochitest/bugs/test_bug440572.html diff --git a/dom/tests/mochitest/bugs/iframe_bug440572.html b/dom/tests/mochitest/bugs/iframe_bug440572.html new file mode 100644 index 000000000000..db8880045a7d --- /dev/null +++ b/dom/tests/mochitest/bugs/iframe_bug440572.html @@ -0,0 +1,17 @@ + + + +

Move on, nothing to see here...

+ + diff --git a/dom/tests/mochitest/bugs/test_bug440572.html b/dom/tests/mochitest/bugs/test_bug440572.html new file mode 100644 index 000000000000..8645d427face --- /dev/null +++ b/dom/tests/mochitest/bugs/test_bug440572.html @@ -0,0 +1,48 @@ + + + + + Test for Bug 440572 + + + + + +Mozilla Bug 440572 + + +
+ +
+ +
+ + + + From b1f4b2ca8a830d9e551e3b721058afc35fde9754 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Wed, 25 Jun 2008 21:12:25 -0400 Subject: [PATCH 06/98] Bug 440932 - toolkit dlmgr should be buildable by suite; r=ted, sr=NeilAway --- toolkit/components/Makefile.in | 5 ++--- toolkit/components/build/Makefile.in | 3 +-- toolkit/components/build/nsToolkitCompsModule.cpp | 15 ++++++--------- toolkit/mozapps/downloads/Makefile.in | 3 +-- xpfe/components/Makefile.in | 4 +++- xpfe/components/build/Makefile.in | 7 +++++-- xpfe/components/build/nsModule.cpp | 6 ++++++ 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/toolkit/components/Makefile.in b/toolkit/components/Makefile.in index 75fcb0fe09e3..8a4721daec43 100644 --- a/toolkit/components/Makefile.in +++ b/toolkit/components/Makefile.in @@ -115,12 +115,11 @@ endif # MOZ_PLACES endif # MOZ_SUITE endif # MOZ_THUNDERBIRD -ifndef MOZ_SUITE -# XXX Suite doesn't want these just yet +ifndef SUITE_USING_XPFE_DM ifdef MOZ_RDF DIRS += downloads endif -endif # MOZ_SUITE +endif # SUITE_USING_XPFE_DM ifdef MOZ_URL_CLASSIFIER DIRS += url-classifier diff --git a/toolkit/components/build/Makefile.in b/toolkit/components/build/Makefile.in index a8e5406712be..86748c5ed2d5 100644 --- a/toolkit/components/build/Makefile.in +++ b/toolkit/components/build/Makefile.in @@ -121,8 +121,7 @@ REQUIRES += parentalcontrols endif endif -ifndef MOZ_SUITE -# XXX Suite isn't ready to build this just yet +ifndef SUITE_USING_XPFE_DM ifdef MOZ_RDF SHARED_LIBRARY_LIBS += ../downloads/src/$(LIB_PREFIX)download_s.$(LIB_SUFFIX) endif diff --git a/toolkit/components/build/nsToolkitCompsModule.cpp b/toolkit/components/build/nsToolkitCompsModule.cpp index 92b592eb4c35..81c98037d6c2 100644 --- a/toolkit/components/build/nsToolkitCompsModule.cpp +++ b/toolkit/components/build/nsToolkitCompsModule.cpp @@ -49,13 +49,12 @@ #include "nsAlertsService.h" #endif -#ifndef MOZ_SUITE -// XXX Suite isn't ready to include this just yet +#ifndef SUITE_USING_XPFE_DM #ifdef MOZ_RDF #include "nsDownloadManager.h" #include "nsDownloadProxy.h" #endif -#endif // MOZ_SUITE +#endif #include "nsTypeAheadFind.h" @@ -84,14 +83,13 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsParentalControlsServiceWin) NS_GENERIC_FACTORY_CONSTRUCTOR(nsAlertsService) #endif -#ifndef MOZ_SUITE -// XXX Suite isn't ready to include this just yet +#ifndef SUITE_USING_XPFE_DM #ifdef MOZ_RDF NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsDownloadManager, nsDownloadManager::GetSingleton) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDownloadProxy) #endif -#endif // MOZ_SUITE +#endif NS_GENERIC_FACTORY_CONSTRUCTOR(nsTypeAheadFind) @@ -149,8 +147,7 @@ static const nsModuleComponentInfo components[] = NS_PARENTALCONTROLSSERVICE_CONTRACTID, nsParentalControlsServiceWinConstructor }, #endif -#ifndef MOZ_SUITE -// XXX Suite isn't ready to include this just yet +#ifndef SUITE_USING_XPFE_DM #ifdef MOZ_RDF { "Download Manager", NS_DOWNLOADMANAGER_CID, @@ -161,7 +158,7 @@ static const nsModuleComponentInfo components[] = NS_TRANSFER_CONTRACTID, nsDownloadProxyConstructor }, #endif -#endif // MOZ_SUITE +#endif { "TypeAheadFind Component", NS_TYPEAHEADFIND_CID, NS_TYPEAHEADFIND_CONTRACTID, diff --git a/toolkit/mozapps/downloads/Makefile.in b/toolkit/mozapps/downloads/Makefile.in index a8dce719c468..5e2bb2943f60 100755 --- a/toolkit/mozapps/downloads/Makefile.in +++ b/toolkit/mozapps/downloads/Makefile.in @@ -42,8 +42,7 @@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk -ifndef MOZ_SUITE -# XXX Suite doesn't want these just yet +ifndef SUITE_USING_XPFE_DM DIRS = src tests endif diff --git a/xpfe/components/Makefile.in b/xpfe/components/Makefile.in index 765ea8cdb7ac..82a44b5f1c3e 100644 --- a/xpfe/components/Makefile.in +++ b/xpfe/components/Makefile.in @@ -88,9 +88,11 @@ DIRS += \ related \ autocomplete \ $(NULL) -ifneq ($(MOZ_BUILD_APP),camino) + +ifdef SUITE_USING_XPFE_DM DIRS += download-manager endif + ifndef MOZ_XUL_APP DIRS += startup endif diff --git a/xpfe/components/build/Makefile.in b/xpfe/components/build/Makefile.in index af0cb3f3609c..aeb789504bc0 100644 --- a/xpfe/components/build/Makefile.in +++ b/xpfe/components/build/Makefile.in @@ -90,14 +90,17 @@ REQUIRES += \ $(NULL) SHARED_LIBRARY_LIBS += \ - ../download-manager/src/$(LIB_PREFIX)downloadmanager_s.$(LIB_SUFFIX) \ ../related/src/$(LIB_PREFIX)related_s.$(LIB_SUFFIX) \ $(NULL) LOCAL_INCLUDES += \ - -I$(srcdir)/../download-manager/src \ -I$(srcdir)/../related/src \ $(NULL) +ifdef SUITE_USING_XPFE_DM +SHARED_LIBRARY_LIBS += ../download-manager/src/$(LIB_PREFIX)downloadmanager_s.$(LIB_SUFFIX) +LOCAL_INCLUDES += -I$(srcdir)/../download-manager/src +endif + ifndef MOZ_PLACES REQUIRES += history SHARED_LIBRARY_LIBS += \ diff --git a/xpfe/components/build/nsModule.cpp b/xpfe/components/build/nsModule.cpp index 5e5c987142f9..e5605c1a78b1 100644 --- a/xpfe/components/build/nsModule.cpp +++ b/xpfe/components/build/nsModule.cpp @@ -48,8 +48,10 @@ #ifdef MOZ_SUITE #include "nsRelatedLinksHandlerImpl.h" #include "nsDocShellCID.h" +#ifdef SUITE_USING_XPFE_DM #include "nsDownloadManager.h" #include "nsDownloadProxy.h" +#endif #if !defined(MOZ_PLACES) #include "nsGlobalHistory.h" @@ -90,8 +92,10 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsBrowserInstance) #ifdef MOZ_SUITE NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(RelatedLinksHandlerImpl, Init) +#ifdef SUITE_USING_XPFE_DM NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDownloadManager, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDownloadProxy) +#endif #if !defined(MOZ_PLACES) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGlobalHistory, Init) @@ -154,10 +158,12 @@ static const nsModuleComponentInfo components[] = { #endif #ifdef MOZ_SUITE +#ifdef SUITE_USING_XPFE_DM { "Download Manager", NS_DOWNLOADMANAGER_CID, NS_DOWNLOADMANAGER_CONTRACTID, nsDownloadManagerConstructor }, { "Download", NS_DOWNLOAD_CID, NS_TRANSFER_CONTRACTID, nsDownloadProxyConstructor }, +#endif { "Related Links Handler", NS_RELATEDLINKSHANDLER_CID, NS_RELATEDLINKSHANDLER_CONTRACTID, RelatedLinksHandlerImplConstructor}, From 582bbfbc22f3c1bf473020df691ebe74f2891991 Mon Sep 17 00:00:00 2001 From: Clint Talbert Date: Wed, 25 Jun 2008 18:47:23 -0700 Subject: [PATCH 07/98] bug 427457 r=mkaply --- toolkit/components/microformats/tests/Makefile.in | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/toolkit/components/microformats/tests/Makefile.in b/toolkit/components/microformats/tests/Makefile.in index fcbc190518e6..9e1732237f87 100644 --- a/toolkit/components/microformats/tests/Makefile.in +++ b/toolkit/components/microformats/tests/Makefile.in @@ -49,7 +49,13 @@ _TEST_FILES = \ test_Microformats_geo.html \ test_Microformats_hCalendar.html \ test_Microformats_adr.html \ + test_Microformats_count.html \ + test_Microformats_getters.html \ + test_Microformats_negative.html \ + test_Microformats_add.html \ + test_framerecursion.html \ + geo.html \ $(NULL) libs:: $(_TEST_FILES) - $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/tests/browser/microformats/test + $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/tests/toolkit/components/microformats/tests From 0bdef9323252f38d2588bd85619f9697d151c217 Mon Sep 17 00:00:00 2001 From: Clint Talbert Date: Wed, 25 Jun 2008 18:59:30 -0700 Subject: [PATCH 08/98] bug 427457 - More tests for microformat API, forgot to add the test files r=mkaply --- .../components/microformats/tests/geo.html | 8 + .../tests/test_Microformats_add.html | 237 ++++++++++++++++++ .../tests/test_Microformats_count.html | 155 ++++++++++++ .../tests/test_Microformats_getters.html | 158 ++++++++++++ .../tests/test_Microformats_negative.html | 114 +++++++++ .../tests/test_framerecursion.html | 66 +++++ 6 files changed, 738 insertions(+) create mode 100644 toolkit/components/microformats/tests/geo.html create mode 100644 toolkit/components/microformats/tests/test_Microformats_add.html create mode 100644 toolkit/components/microformats/tests/test_Microformats_count.html create mode 100644 toolkit/components/microformats/tests/test_Microformats_getters.html create mode 100644 toolkit/components/microformats/tests/test_Microformats_negative.html create mode 100644 toolkit/components/microformats/tests/test_framerecursion.html diff --git a/toolkit/components/microformats/tests/geo.html b/toolkit/components/microformats/tests/geo.html new file mode 100644 index 000000000000..561fc49936fd --- /dev/null +++ b/toolkit/components/microformats/tests/geo.html @@ -0,0 +1,8 @@ + + + + Northern + California + + + diff --git a/toolkit/components/microformats/tests/test_Microformats_add.html b/toolkit/components/microformats/tests/test_Microformats_add.html new file mode 100644 index 000000000000..01a47a3ee4dc --- /dev/null +++ b/toolkit/components/microformats/tests/test_Microformats_add.html @@ -0,0 +1,237 @@ + + + Testing Mixed Up Microformat APIs + + + + + + + + +
+

+ Can Really be Anything, even HTML + foo + what about just text? + 011-23-45-7867-897890 + http://www.mozilla.org + + + 0.0 + 0.0 + + 20080401T235900 +

+
+ + +
+ + + + + + 0.0 + 0.0" + + + + +
+ + +
+
+ more values + http://foo.com +
+
+ + +
+ + + + An HTML document! + + more values + + + + + 659 + -362.5 + + + +
+ + +
+ + thehtmlvaltodoescapeme + invalid date + +
+ + +
+  
+
+
diff --git a/toolkit/components/microformats/tests/test_Microformats_count.html b/toolkit/components/microformats/tests/test_Microformats_count.html
new file mode 100644
index 000000000000..bfa93347ebdc
--- /dev/null
+++ b/toolkit/components/microformats/tests/test_Microformats_count.html
@@ -0,0 +1,155 @@
+
+
+  Testing Mixed Up Microformat APIs
+  
+  
+  
+  
+
+
+  
+  

+ + foo + + Mr. + John + J + Doe + M.D + + jj + April 4, 2006 + + B. 1234 + Ste. 100 + 123 Fake St. + San Fran + CA + 12345 + USA + workplace + + 1234 + workplace + + Pacific Time + + Northern + California + + pres. and + cat wrangler + + + foo + bar + + + this is not a note + + + alpha + pub + +

+ + + + +
+ + class="foo">I am not a microformat + class="title">Foolish title, not a format + +
+ + + + Far Northern + Canada + + + + + + + + + + +
+ Park Bench +
+ +
+  
+
+
diff --git a/toolkit/components/microformats/tests/test_Microformats_getters.html b/toolkit/components/microformats/tests/test_Microformats_getters.html
new file mode 100644
index 000000000000..ef6fab9b4491
--- /dev/null
+++ b/toolkit/components/microformats/tests/test_Microformats_getters.html
@@ -0,0 +1,158 @@
+
+
+  Testing Mixed Up Microformat APIs
+  
+  
+  
+  
+
+
+  
+ +

+ + foo + + Mr. + John + J + Doe + M.D + + jj + April 4, 2006 + + B. 1234 + Ste. 100 + 123 Fake St. + San Fran + CA + 12345 + USA + workplace + + 1234 + workplace + + Pacific Time + + Northern + California + + pres. and + cat wrangler + + + foo + bar + + + this is not a note + + + alpha + pub + +

+ + + + +
+ + class="foo">I am not a microformat + class="title">Foolish title, not a format + +
+ + + + Far Northern + Canada + + + + + + +
+ some interesting content + + + + + +
+ Park Bench +
+ + +
+
+ +
+  
+
+
diff --git a/toolkit/components/microformats/tests/test_Microformats_negative.html b/toolkit/components/microformats/tests/test_Microformats_negative.html
new file mode 100644
index 000000000000..5b7bea806b7c
--- /dev/null
+++ b/toolkit/components/microformats/tests/test_Microformats_negative.html
@@ -0,0 +1,114 @@
+
+
+  Testing Mixed Up Microformat APIs
+  
+  
+  
+  
+
+
+  
+ + + +
+ + class="foo">I am not a microformat + class="title">Foolish title, not a format + +
+ + + + + +
+ +
+ +

+

+ foo + + jj + April 4, 2006 + + B. 1234 + Ste. 100 + + San Fran + CA + 12345 + USA + workplace + + + foo + bar + + this is not a note + + + alpha + pub + + + + +
+  
+
+
diff --git a/toolkit/components/microformats/tests/test_framerecursion.html b/toolkit/components/microformats/tests/test_framerecursion.html
new file mode 100644
index 000000000000..bbbcf58a456e
--- /dev/null
+++ b/toolkit/components/microformats/tests/test_framerecursion.html
@@ -0,0 +1,66 @@
+
+
+
+  Testing Mixed Up Microformat APIs
+  
+  
+  
+  
+
+
+
+  
+    
+      
+ + I am not a microformat + Foolish title, not a format + +
+ + + + Far Northern + Canada + + + +
+ Testing is Fun! +
+ + + + + + + +
+  
+
+

From 9a7bd7aff054a94e56bfe17f7ef131f8f1ea8d8f Mon Sep 17 00:00:00 2001
From: Dave Camp 
Date: Wed, 25 Jun 2008 19:24:00 -0700
Subject: [PATCH 09/98] Bug 434624: Handle "websafe" base64 characters in
 client keys.  r=tony

---
 .../url-classifier/content/url-crypto-key-manager.js       | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/toolkit/components/url-classifier/content/url-crypto-key-manager.js b/toolkit/components/url-classifier/content/url-crypto-key-manager.js
index 635c5ce3acbc..90db48623503 100644
--- a/toolkit/components/url-classifier/content/url-crypto-key-manager.js
+++ b/toolkit/components/url-classifier/content/url-crypto-key-manager.js
@@ -258,6 +258,11 @@ PROT_UrlCryptoKeyManager.prototype.hasKey = function() {
   return this.clientKey_ != null && this.wrappedKey_ != null;
 }
 
+PROT_UrlCryptoKeyManager.prototype.unUrlSafe = function(key)
+{
+    return key.replace("-", "+").replace("_", "/");
+}
+
 /**
  * Set a new key and serialize it to disk.
  *
@@ -273,7 +278,7 @@ PROT_UrlCryptoKeyManager.prototype.replaceKey_ = function(clientKey,
     G_Debug(this, "Replacing " + this.clientKey_ + " with " + clientKey);
 
   this.clientKey_ = clientKey;
-  this.clientKeyArray_ = Array.map(atob(clientKey),
+  this.clientKeyArray_ = Array.map(atob(this.unUrlSafe(clientKey)),
                                    function(c) { return c.charCodeAt(0); });
   this.wrappedKey_ = wrappedKey;
 

From 735c08486e4cf1e72e575e8b47aa41c8ad73f53f Mon Sep 17 00:00:00 2001
From: Dave Camp 
Date: Wed, 25 Jun 2008 20:23:57 -0700
Subject: [PATCH 10/98] Bug 434805: work harder to recover from url-classifier
 db corruption.  r=tony

---
 .../components/url-classifier/src/Makefile.in |  1 +
 .../src/nsUrlClassifierDBService.cpp          | 24 ++++++++++++-------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/toolkit/components/url-classifier/src/Makefile.in b/toolkit/components/url-classifier/src/Makefile.in
index 1887795cd5b9..8513f8fa7608 100644
--- a/toolkit/components/url-classifier/src/Makefile.in
+++ b/toolkit/components/url-classifier/src/Makefile.in
@@ -31,6 +31,7 @@ CPPSRCS = \
 
 LOCAL_INCLUDES = \
                  -I$(srcdir)/../../build \
+                 $(SQLITE_CFLAGS) \
                  $(NULL)
 
 
diff --git a/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp b/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
index f4541455cae4..6ae7b105afe3 100644
--- a/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
+++ b/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
@@ -77,6 +77,9 @@
 #include "prnetdb.h"
 #include "zlib.h"
 
+// Needed to interpert mozIStorageConnection::GetLastError
+#include 
+
 /**
  * The DBServices stores a set of Fragments.  A fragment is one URL
  * fragment containing two or more domain components and some number
@@ -3056,6 +3059,11 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
   NS_ENSURE_STATE(!mInStream);
   NS_ENSURE_STATE(mUpdateObserver);
 
+  // We need to get the error code before ApplyUpdate, because it might
+  // close/open the connection.
+  PRInt32 errcode = SQLITE_OK;
+  mConnection->GetLastError(&errcode);
+
   ApplyUpdate();
 
   if (NS_SUCCEEDED(mUpdateStatus)) {
@@ -3064,7 +3072,13 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
     mUpdateObserver->UpdateError(mUpdateStatus);
   }
 
-  if (!mResetRequested) {
+  // It's important that we only reset the database on an update
+  // command if the update was successful, otherwise unauthenticated
+  // updates could cause a database reset.
+  PRBool resetDB = (NS_SUCCEEDED(mUpdateStatus) && mResetRequested) ||
+                    errcode == SQLITE_CORRUPT;
+
+  if (!resetDB) {
     if (NS_SUCCEEDED(mUpdateStatus)) {
       PRInt64 now = (PR_Now() / PR_USEC_PER_SEC);
       for (PRUint32 i = 0; i < mUpdateTables.Length(); i++) {
@@ -3079,15 +3093,9 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
     }
   }
 
-  // ResetUpdate() clears mResetRequested...
-  PRBool resetRequested = mResetRequested;
-
   ResetUpdate();
 
-  // It's important that we only reset the database if the update was
-  // successful, otherwise unauthenticated updates could cause a
-  // database reset.
-  if (NS_SUCCEEDED(mUpdateStatus) && resetRequested) {
+  if (resetDB) {
     ResetDatabase();
   }
 

From c067dbb8a531783199ffc11414f26186bef89fce Mon Sep 17 00:00:00 2001
From: Dave Camp 
Date: Wed, 25 Jun 2008 21:17:48 -0700
Subject: [PATCH 11/98] Backed out changeset caeba7562e49

---
 .../components/url-classifier/src/Makefile.in |  1 -
 .../src/nsUrlClassifierDBService.cpp          | 24 +++++++------------
 2 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/toolkit/components/url-classifier/src/Makefile.in b/toolkit/components/url-classifier/src/Makefile.in
index 8513f8fa7608..1887795cd5b9 100644
--- a/toolkit/components/url-classifier/src/Makefile.in
+++ b/toolkit/components/url-classifier/src/Makefile.in
@@ -31,7 +31,6 @@ CPPSRCS = \
 
 LOCAL_INCLUDES = \
                  -I$(srcdir)/../../build \
-                 $(SQLITE_CFLAGS) \
                  $(NULL)
 
 
diff --git a/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp b/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
index 6ae7b105afe3..f4541455cae4 100644
--- a/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
+++ b/toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp
@@ -77,9 +77,6 @@
 #include "prnetdb.h"
 #include "zlib.h"
 
-// Needed to interpert mozIStorageConnection::GetLastError
-#include 
-
 /**
  * The DBServices stores a set of Fragments.  A fragment is one URL
  * fragment containing two or more domain components and some number
@@ -3059,11 +3056,6 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
   NS_ENSURE_STATE(!mInStream);
   NS_ENSURE_STATE(mUpdateObserver);
 
-  // We need to get the error code before ApplyUpdate, because it might
-  // close/open the connection.
-  PRInt32 errcode = SQLITE_OK;
-  mConnection->GetLastError(&errcode);
-
   ApplyUpdate();
 
   if (NS_SUCCEEDED(mUpdateStatus)) {
@@ -3072,13 +3064,7 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
     mUpdateObserver->UpdateError(mUpdateStatus);
   }
 
-  // It's important that we only reset the database on an update
-  // command if the update was successful, otherwise unauthenticated
-  // updates could cause a database reset.
-  PRBool resetDB = (NS_SUCCEEDED(mUpdateStatus) && mResetRequested) ||
-                    errcode == SQLITE_CORRUPT;
-
-  if (!resetDB) {
+  if (!mResetRequested) {
     if (NS_SUCCEEDED(mUpdateStatus)) {
       PRInt64 now = (PR_Now() / PR_USEC_PER_SEC);
       for (PRUint32 i = 0; i < mUpdateTables.Length(); i++) {
@@ -3093,9 +3079,15 @@ nsUrlClassifierDBServiceWorker::FinishUpdate()
     }
   }
 
+  // ResetUpdate() clears mResetRequested...
+  PRBool resetRequested = mResetRequested;
+
   ResetUpdate();
 
-  if (resetDB) {
+  // It's important that we only reset the database if the update was
+  // successful, otherwise unauthenticated updates could cause a
+  // database reset.
+  if (NS_SUCCEEDED(mUpdateStatus) && resetRequested) {
     ResetDatabase();
   }
 

From b18ca6bc39f9cffda1555edb64d948848ed2b6e8 Mon Sep 17 00:00:00 2001
From: Peter Weilbacher 
Date: Thu, 26 Jun 2008 11:02:41 +0200
Subject: [PATCH 12/98] bustage fix for other platforms for bug 427841,
 r=surkov

---
 accessible/src/other/nsAccessibleWrap.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/accessible/src/other/nsAccessibleWrap.h b/accessible/src/other/nsAccessibleWrap.h
index 53719c72ee0d..b535c34123f5 100755
--- a/accessible/src/other/nsAccessibleWrap.h
+++ b/accessible/src/other/nsAccessibleWrap.h
@@ -51,6 +51,11 @@ class nsAccessibleWrap : public nsAccessible
   public: // construction, destruction
     nsAccessibleWrap(nsIDOMNode*, nsIWeakReference *aShell);
     virtual ~nsAccessibleWrap();
+
+  protected:
+    virtual nsresult FirePlatformEvent(nsIAccessibleEvent *aEvent) {
+      return NS_OK;
+    }
 };
 
 #endif

From c1b5e824d75c43eb47719bc72eee09c7f72b2e24 Mon Sep 17 00:00:00 2001
From: Marco Zehe 
Date: Thu, 26 Jun 2008 14:17:35 +0200
Subject: [PATCH 13/98] bug 441737 - nsIAccessibleDocument chrome tests,
 r=surkov

---
 accessible/tests/mochitest/Makefile.in        |   1 +
 .../mochitest/test_nsIAccessibleDocument.html | 111 ++++++++++++++++++
 2 files changed, 112 insertions(+)
 create mode 100644 accessible/tests/mochitest/test_nsIAccessibleDocument.html

diff --git a/accessible/tests/mochitest/Makefile.in b/accessible/tests/mochitest/Makefile.in
index 11be37b42d80..0c5ad665241e 100644
--- a/accessible/tests/mochitest/Makefile.in
+++ b/accessible/tests/mochitest/Makefile.in
@@ -58,6 +58,7 @@ _TEST_FILES =\
 		test_nsIAccessibleTable_3.html \
 		test_nsIAccessibleTable_4.html \
 		test_nsIAccessibleTable_listboxes.xul \
+		test_nsIAccessibleDocument.html \
 		test_nsIAccessibleHyperLink.html \
 		test_nsIAccessibleHyperLink.xul \
 		test_nsIAccessibleHyperText.html \
diff --git a/accessible/tests/mochitest/test_nsIAccessibleDocument.html b/accessible/tests/mochitest/test_nsIAccessibleDocument.html
new file mode 100644
index 000000000000..88b919855fb8
--- /dev/null
+++ b/accessible/tests/mochitest/test_nsIAccessibleDocument.html
@@ -0,0 +1,111 @@
+
+
+
+  nsIAccessibleDocument chrome tests
+  
+
+  
+  
+
+  
+
+
+
+  
+    Mozilla Bug 441737
+  
+  

+ +
+  
+ + From 8cec8def228043bd66739056444c315b1dccdcce Mon Sep 17 00:00:00 2001 From: Blake Kaplan Date: Thu, 26 Jun 2008 16:42:41 +0200 Subject: [PATCH 14/98] Turn off these noisy and now mostly useless printfs for me. No bug, NPOTB --- js/src/xpconnect/src/XPCCrossOriginWrapper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/src/xpconnect/src/XPCCrossOriginWrapper.cpp b/js/src/xpconnect/src/XPCCrossOriginWrapper.cpp index 47b8e3259736..2ae235c5769c 100644 --- a/js/src/xpconnect/src/XPCCrossOriginWrapper.cpp +++ b/js/src/xpconnect/src/XPCCrossOriginWrapper.cpp @@ -491,7 +491,7 @@ XPC_XOW_WrapObject(JSContext *cx, JSObject *parent, jsval *vp) XPCWrappedNativeScope *parentScope = XPCWrappedNativeScope::FindInJSObjectScope(ccx, parent); -#ifdef DEBUG_mrbkap +#ifdef DEBUG_mrbkap_off printf("Wrapping object at %p (%s) [%p]\n", (void *)wrappedObj, STOBJ_GET_CLASS(wrappedObj)->name, (void *)parentScope); @@ -508,7 +508,7 @@ XPC_XOW_WrapObject(JSContext *cx, JSObject *parent, jsval *vp) if (outerObj) { NS_ASSERTION(STOBJ_GET_CLASS(outerObj) == &sXPC_XOW_JSClass.base, "What crazy object are we getting here?"); -#ifdef DEBUG_mrbkap +#ifdef DEBUG_mrbkap_off printf("But found a wrapper in the map %p!\n", (void *)outerObj); #endif *vp = OBJECT_TO_JSVAL(outerObj); From e9cad8d128c8974d654cca61c6b7e585753b5321 Mon Sep 17 00:00:00 2001 From: Shawn Wilsher Date: Thu, 26 Jun 2008 11:51:38 -0400 Subject: [PATCH 15/98] Bug 439495 - remove references of "browser.download.manager.useWindow" This removes the use of the preference browser.download.manager.useWindow, which was redundant because we do not have any download manager UI that isn't in a window, and the preference browser.download.manager.showWhenStarting controls the appearance of the downloads window. Additionally, this removes the preference browser.download.manager.openDelay which was made obsolete long ago but not removed from firefox.js. r=gavin --- browser/app/profile/firefox.js | 2 -- toolkit/components/downloads/src/nsDownloadProxy.h | 7 +------ 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index ca428b67e843..dc53df96e7a7 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -239,9 +239,7 @@ pref("browser.download.manager.showAlertOnComplete", true); pref("browser.download.manager.showAlertInterval", 2000); pref("browser.download.manager.retention", 2); pref("browser.download.manager.showWhenStarting", true); -pref("browser.download.manager.useWindow", true); pref("browser.download.manager.closeWhenDone", false); -pref("browser.download.manager.openDelay", 0); pref("browser.download.manager.focusWhenStarting", false); pref("browser.download.manager.flashCount", 2); pref("browser.download.manager.addToRecentDocs", true); diff --git a/toolkit/components/downloads/src/nsDownloadProxy.h b/toolkit/components/downloads/src/nsDownloadProxy.h index 270f1b99ca42..c6310e5df000 100644 --- a/toolkit/components/downloads/src/nsDownloadProxy.h +++ b/toolkit/components/downloads/src/nsDownloadProxy.h @@ -47,7 +47,6 @@ #include "nsIDownloadManagerUI.h" #define PREF_BDM_SHOWWHENSTARTING "browser.download.manager.showWhenStarting" -#define PREF_BDM_USEWINDOW "browser.download.manager.useWindow" #define PREF_BDM_FOCUSWHENSTARTING "browser.download.manager.focusWhenStarting" class nsDownloadProxy : public nsITransfer @@ -83,11 +82,7 @@ public: if (branch) branch->GetBoolPref(PREF_BDM_SHOWWHENSTARTING, &showDM); - PRBool useWindow = PR_TRUE; - if (branch) - branch->GetBoolPref(PREF_BDM_USEWINDOW, &useWindow); - - if (showDM && useWindow) { + if (showDM) { PRUint32 id; mInner->GetId(&id); From fee386e2e0b039d1bc49c26b07856207ee8b807e Mon Sep 17 00:00:00 2001 From: Ben Turner Date: Thu, 26 Jun 2008 10:12:42 -0700 Subject: [PATCH 16/98] Bug 435122 - "Use TraceMalloc to get stack traces of potential deadlocks". r=bsmedberg+dbaron. --- browser/app/Makefile.in | 11 +---------- layout/build/Makefile.in | 4 ---- toolkit/library/Makefile.in | 7 ------- toolkit/library/libxul-config.mk | 4 ---- toolkit/toolkit-tiers.mk | 4 ---- tools/trace-malloc/Makefile.in | 2 -- tools/trace-malloc/lib/Makefile.in | 3 +++ xpcom/build.mk | 6 +++++- xpcom/build/Makefile.in | 10 ++++++++++ xpcom/glue/Makefile.in | 4 ++++ xpcom/glue/nsAutoLock.cpp | 18 ++++++++++-------- xulrunner/app/Makefile.in | 4 ---- 12 files changed, 33 insertions(+), 44 deletions(-) diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 33ba1ac9b799..34c7fb76bf3d 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -160,16 +160,7 @@ ifdef _MSC_VER WIN32_EXE_LDFLAGS += -ENTRY:wmainCRTStartup endif -ifndef BUILD_STATIC_LIBS - -ifdef NS_TRACE_MALLOC -# when libxul is enabled, trace-malloc is part of it -ifndef MOZ_ENABLE_LIBXUL -EXTRA_DSO_LIBS += tracemalloc -endif -endif - -else +ifdef BUILD_STATIC_LIBS include $(topsrcdir)/config/static-config.mk EXTRA_DEPS += \ diff --git a/layout/build/Makefile.in b/layout/build/Makefile.in index 6422abd8b1c5..727cf6de44d9 100644 --- a/layout/build/Makefile.in +++ b/layout/build/Makefile.in @@ -216,10 +216,6 @@ EXTRA_DSO_LDOPTS = \ $(MOZ_JS_LIBS) \ $(NULL) -ifdef NS_TRACE_MALLOC -EXTRA_DSO_LIBS += tracemalloc -endif - ifdef MOZ_ENABLE_GTK2 EXTRA_DSO_LDOPTS += $(MOZ_GTK2_LIBS) \ -lXrender \ diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in index 036c1e1b0bdf..719983b0a080 100644 --- a/toolkit/library/Makefile.in +++ b/toolkit/library/Makefile.in @@ -168,13 +168,6 @@ GARBAGE += \ $(RDF_UTIL_SRC_LCPPSRCS) \ $(NULL) endif -else -ifdef NS_TRACE_MALLOC -# In libxul builds, tracemalloc is part of libxul instead. -ifndef MOZ_ENABLE_LIBXUL -EXTRA_DSO_LIBS += tracemalloc -endif -endif endif ifneq (,$(filter OS2 WINCE WINNT,$(OS_ARCH))) diff --git a/toolkit/library/libxul-config.mk b/toolkit/library/libxul-config.mk index e55f7c6888f0..d330513bbf33 100644 --- a/toolkit/library/libxul-config.mk +++ b/toolkit/library/libxul-config.mk @@ -347,7 +347,3 @@ endif ifdef GC_LEAK_DETECTOR EXTRA_DSO_LIBS += boehm endif - -ifdef NS_TRACE_MALLOC -STATIC_LIBS += tracemalloc -endif diff --git a/toolkit/toolkit-tiers.mk b/toolkit/toolkit-tiers.mk index 48832585d235..294c1d6ee8c6 100644 --- a/toolkit/toolkit-tiers.mk +++ b/toolkit/toolkit-tiers.mk @@ -78,10 +78,6 @@ endif # tier "gecko" - core components # -ifdef NS_TRACE_MALLOC -tier_gecko_dirs += tools/trace-malloc/lib -endif - tier_gecko_dirs += \ js/src/xpconnect \ intl/chardet \ diff --git a/tools/trace-malloc/Makefile.in b/tools/trace-malloc/Makefile.in index 5c9b081fa1c3..792ea88f7d4a 100644 --- a/tools/trace-malloc/Makefile.in +++ b/tools/trace-malloc/Makefile.in @@ -84,8 +84,6 @@ ifdef MOZ_ENABLE_LIBXUL ifeq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) EXTRA_DSO_LIBS = xul endif -else -EXTRA_DSO_LIBS = tracemalloc endif LIBS += \ diff --git a/tools/trace-malloc/lib/Makefile.in b/tools/trace-malloc/lib/Makefile.in index cdff081dc5b0..5c4b024c43cc 100644 --- a/tools/trace-malloc/lib/Makefile.in +++ b/tools/trace-malloc/lib/Makefile.in @@ -46,6 +46,9 @@ MODULE = tracemalloc LIBRARY_NAME = tracemalloc EXPORT_LIBRARY = 1 DEFFILE = $(win_srcdir)/tm.def + +FORCE_STATIC_LIB = 1 + LIBXUL_LIBRARY = 1 REQUIRES = xpcom diff --git a/xpcom/build.mk b/xpcom/build.mk index 6b3a31d3540b..afe5a15656d7 100644 --- a/xpcom/build.mk +++ b/xpcom/build.mk @@ -37,4 +37,8 @@ TIERS += xpcom -tier_xpcom_dirs = xpcom +ifdef NS_TRACE_MALLOC +tier_xpcom_dirs = tools/trace-malloc/lib +endif + +tier_xpcom_dirs += xpcom diff --git a/xpcom/build/Makefile.in b/xpcom/build/Makefile.in index 1827a2687af3..a7844c98b7d5 100644 --- a/xpcom/build/Makefile.in +++ b/xpcom/build/Makefile.in @@ -78,6 +78,10 @@ ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) REQUIRES += macmorefiles endif +ifdef NS_TRACE_MALLOC +REQUIRES += tracemalloc +endif + CSRCS = \ $(XPCOM_GLUE_SRC_LCSRCS) \ $(NULL) @@ -119,6 +123,12 @@ SHARED_LIBRARY_LIBS = \ ../string/src/$(LIB_PREFIX)string_s.$(LIB_SUFFIX) \ $(NULL) +ifdef NS_TRACE_MALLOC +SHARED_LIBRARY_LIBS += \ + $(DEPTH)/tools/trace-malloc/lib/$(LIB_PREFIX)tracemalloc.$(LIB_SUFFIX) \ + $(NULL) +endif + LOCAL_INCLUDES = \ -I$(srcdir) \ -I.. \ diff --git a/xpcom/glue/Makefile.in b/xpcom/glue/Makefile.in index ea3c6486ac05..1e22d0e0a5a3 100644 --- a/xpcom/glue/Makefile.in +++ b/xpcom/glue/Makefile.in @@ -55,6 +55,10 @@ REQUIRES = \ string \ $(NULL) +ifdef NS_TRACE_MALLOC +REQUIRES += tracemalloc +endif + LOCAL_INCLUDES = \ -I$(srcdir)/../build \ $(NULL) diff --git a/xpcom/glue/nsAutoLock.cpp b/xpcom/glue/nsAutoLock.cpp index 7496b151798a..77d18e28139d 100644 --- a/xpcom/glue/nsAutoLock.cpp +++ b/xpcom/glue/nsAutoLock.cpp @@ -46,7 +46,7 @@ #include "nsDebug.h" #include "nsVoidArray.h" -#ifdef NS_TRACE_MALLOC_XXX +#ifdef NS_TRACE_MALLOC # include # include "nsTraceMalloc.h" #endif @@ -60,7 +60,7 @@ static const char* const LockTypeNames[] = {"Lock", "Monitor", "CMonitor"}; struct nsNamedVector : public nsVoidArray { const char* mName; -#ifdef NS_TRACE_MALLOC_XXX +#ifdef NS_TRACE_MALLOC // Callsites for the inner locks/monitors stored in our base nsVoidArray. // This array parallels our base nsVoidArray. nsVoidArray mInnerSites; @@ -257,7 +257,7 @@ static PRBool WellOrdered(const void* addr1, const void* addr2, // Assert (addr1 < addr2) into the order table. // XXX fix plvector/nsVector to use const void* vec1->AppendElement((void*) addr2); -#ifdef NS_TRACE_MALLOC_XXX +#ifdef NS_TRACE_MALLOC vec1->mInnerSites.AppendElement((void*) callsite2); #endif } @@ -285,8 +285,8 @@ nsAutoLockBase::nsAutoLockBase(void* addr, nsAutoLockType type) // lock at all, and NSPR will assert if you enter it. } else { const void* node = -#ifdef NS_TRACE_MALLOC_XXX - NS_GetStackTrace(1) +#ifdef NS_TRACE_MALLOC + (const void*)NS_TraceMallocGetStackTrace(); #else nsnull #endif @@ -305,12 +305,14 @@ nsAutoLockBase::nsAutoLockBase(void* addr, nsAutoLockType type) vec2->mName ? vec2->mName : "", LockTypeNames[type], addr); -#ifdef NS_TRACE_MALLOC_XXX +#ifdef NS_TRACE_MALLOC fprintf(stderr, "\n*** %s\n\nCurrent stack:\n", buf); - NS_DumpStackTrace(node, stderr); + NS_TraceMallocPrintStackTrace(stderr, + NS_TraceMallocGetStackTrace()); fputs("\nPrevious stack:\n", stderr); - NS_DumpStackTrace(vec2->mInnerSites.ElementAt(i2), stderr); + NS_TraceMallocPrintStackTrace(stderr, + (nsTMStackTraceIDStruct *)vec2->mInnerSites.ElementAt(i2)); putc('\n', stderr); #endif NS_ERROR(buf); diff --git a/xulrunner/app/Makefile.in b/xulrunner/app/Makefile.in index aabebad3b735..83a5d236af61 100644 --- a/xulrunner/app/Makefile.in +++ b/xulrunner/app/Makefile.in @@ -148,10 +148,6 @@ ifdef _MSC_VER WIN32_EXE_LDFLAGS += -ENTRY:wmainCRTStartup endif -ifdef NS_TRACE_MALLOC -EXTRA_DSO_LIBS += tracemalloc -endif - ifeq ($(OS_ARCH),WINNT) OS_LIBS += $(call EXPAND_LIBNAME,comctl32 comdlg32 uuid shell32 ole32 oleaut32 version winspool) RCINCLUDE = splash.rc From aa7966939c20a57db21ff481cad7329eae258473 Mon Sep 17 00:00:00 2001 From: Brad Lassey Date: Thu, 26 Jun 2008 17:34:05 -0400 Subject: [PATCH 17/98] Added tag FENNEC_M4 for changeset caeba7562e49 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 8636b8e7dafb..aed63f5e97c3 100644 --- a/.hgtags +++ b/.hgtags @@ -1,3 +1,4 @@ df7a3c8ffeeaba229067efee5a20e21dae0dd877 MOZILLA_1_9_a4_BASE 4209e16b58411750ac73f761023e46b76b793e2c MOZILLA_1_9_a6_BASE 66a5c7bce7ee86a820d3c0d54fa07cb719be751c MOZILLA_1_9_a7_BASE +caeba7562e495a9f604984df0b48b6f99bec3e2e FENNEC_M4 From e4754c93bf00da90ed92d43504c5db7515c44aca Mon Sep 17 00:00:00 2001 From: Ted Mielczarek Date: Thu, 26 Jun 2008 18:07:50 -0400 Subject: [PATCH 18/98] bug 417943 - remove runtests.pl. r=sayrer --- testing/mochitest/Makefile.in | 7 +- testing/mochitest/runtests.pl.in | 703 ------------------------------- 2 files changed, 1 insertion(+), 709 deletions(-) delete mode 100644 testing/mochitest/runtests.pl.in diff --git a/testing/mochitest/Makefile.in b/testing/mochitest/Makefile.in index 43395bec3637..f6e1d41c91e2 100644 --- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -54,7 +54,6 @@ include $(topsrcdir)/config/rules.mk # files that get copied into $objdir/_tests/ _SERV_FILES = \ - runtests.pl \ runtests.py \ automation.py \ gen_template.pl \ @@ -117,10 +116,6 @@ ifeq ($(host_os), cygwin) TEST_DRIVER_PPARGS += -DIS_CYGWIN=1 endif -runtests.pl: runtests.pl.in - $(PYTHON) $(topsrcdir)/config/Preprocessor.py \ - $(TEST_DRIVER_PPARGS) $(DEFINES) $(ACDEFINES) $^ > $@ - runtests.py: runtests.py.in $(PYTHON) $(topsrcdir)/config/Preprocessor.py \ $(TEST_DRIVER_PPARGS) $(DEFINES) $(ACDEFINES) $^ > $@ @@ -129,7 +124,7 @@ automation.py: $(topsrcdir)/build/pgo/automation.py.in $(PYTHON) $(topsrcdir)/config/Preprocessor.py \ $(TEST_DRIVER_PPARGS) $(DEFINES) $(ACDEFINES) $^ > $@ -GARBAGE += runtests.pl runtests.py automation.py +GARBAGE += runtests.py automation.py libs:: $(_SERV_FILES) $(INSTALL) $^ $(_DEST_DIR) diff --git a/testing/mochitest/runtests.pl.in b/testing/mochitest/runtests.pl.in deleted file mode 100644 index 85d18f9acafe..000000000000 --- a/testing/mochitest/runtests.pl.in +++ /dev/null @@ -1,703 +0,0 @@ -# -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Mozilla Foundation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Robert Sayre -# Jeff Walden -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -# Win32 path munging for msys courtesy the Curl project under an -# MIT/X license http://curl.haxx.se/ -# -# Copyright (c) 1996 - 2007, Daniel Stenberg, . -# All rights reserved. -# -# Permission to use, copy, modify, and distribute this software for -# any purpose with or without fee is hereby granted, provided that the -# above copyright notice and this permission notice appear in all -# copies. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS -# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -# OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder -# shall not be used in advertising or otherwise to promote the sale, -# use or other dealings in this Software without prior written -# authorization of the copyright holder. - - # Perl script to start server and browser - # For usage instructions, run: - # perl runtests.pl --help - -use FindBin; -use File::Path; -use File::Spec; -use File::Basename; -use Getopt::Long; -use Cwd 'abs_path'; -use POSIX qw(sys_wait_h strftime); - -use strict; - - # URL parameters to test URL: - # - # autorun -- kick off tests automatically - # closeWhenDone -- runs quit.js after tests - # logFile -- logs test run to an absolute path - # - - # consoleLevel, fileLevel: set the logging level of the console and - # file logs, if activated. - # - - # Path to the test script on the server -use constant TEST_SERVER_HOST => "localhost:8888"; -use constant TEST_PATH => "/tests/"; -use constant CHROME_PATH => "/redirect.html"; -use constant A11Y_PATH => "/redirect-a11y.html"; -use constant TESTS_URL => "http://" . TEST_SERVER_HOST . TEST_PATH; -use constant CHROMETESTS_URL => "http://" . TEST_SERVER_HOST . CHROME_PATH; -use constant A11YTESTS_URL => "http://" . TEST_SERVER_HOST . A11Y_PATH; - # main browser chrome URL, same as browser.chromeURL pref -#ifdef MOZ_SUITE -use constant BROWSER_CHROME_URL => "chrome://navigator/content/navigator.xul"; -#else -use constant BROWSER_CHROME_URL => "chrome://browser/content/browser.xul"; -#endif - - # Max time in seconds to wait for server startup before tests will fail -- if - # this seems big, it's mostly for debug machines where cold startup - # (particularly after a build) takes forever. -use constant SERVER_STARTUP_TIMEOUT => 45; - - - # Since some tests require cross-domain support in Mochitest, across ports, - # domains, subdomains, etc. we use a proxy autoconfig hack to map a bunch of - # servers onto localhost:8888. We have to grant them the same privileges as - # localhost:8888 here, since the browser only knows them as the URLs they're - # pretending to be. -my @servers = ( - "localhost:8888", # MUST be first -- see PAC pref-setting code - "example.org:80", - "test1.example.org:80", - "test2.example.org:80", - "sub1.test1.example.org:80", - "sub1.test2.example.org:80", - "sub2.test1.example.org:80", - "sub2.test2.example.org:80", - "example.org:8000", - "test1.example.org:8000", - "test2.example.org:8000", - "sub1.test1.example.org:8000", - "sub1.test2.example.org:8000", - "sub2.test1.example.org:8000", - "sub2.test2.example.org:8000", - "example.com:80", - "test1.example.com:80", - "test2.example.com:80", - "sub1.test1.example.com:80", - "sub1.test2.example.com:80", - "sub2.test1.example.com:80", - "sub2.test2.example.com:80", - "sectest1.example.org:80", - "sub.sectest2.example.org:80", - "sub1.xn--lt-uia.example.org:8000", # U+00E4 U+006C U+0074 - "sub2.xn--lt-uia.example.org:80", # U+00E4 U+006C U+0074 - "xn--exmple-cua.test:80", - "sub1.xn--exmple-cua.test:80", - "xn--hxajbheg2az3al.xn--jxalpdlp:80", # Greek IDN for example.test - "sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80", - ); - - -my $profile = "mochitesttestingprofile"; -my $profile_dir = "$FindBin::Bin/$profile"; - - # These are generated in mozilla/testing/mochitest/Makefile.in -#expand my $app = "$FindBin::Bin/" . __BROWSER_PATH__; -#expand my $dist_bin = "$FindBin::Bin/" . __XPC_BIN_PATH__; -#ifdef WIN32 -#expand my $is_win32 = __WIN32__; -#else -my $is_win32 = 0; -#endif -my $is_mac = ($^O =~ m/darwin/); -my $unixish = (!($is_win32) && !($is_mac)); - - # Do everything. - main(); - - - ################# - # MAIN FUNCTION # - ################# - -sub main { - my ($close_when_done, $appoverride, $log_path, $autorun, - $console_level, $file_level, $help, $do_chrome, $test_path, - $do_browser_chrome, $do_a11y, %browser_env, %browser_args); - GetOptions("close-when-done!"=> \$close_when_done, - "appname:s"=> \$appoverride, - "log-file:s" => \$log_path, - "autorun!" => \$autorun, - "console-level:s" => \$console_level, - "file-level:s" => \$file_level, - "chrome!" => \$do_chrome, - "test-path:s" => \$test_path, - "browser-chrome!" => \$do_browser_chrome, - "a11y!" => \$do_a11y, - "setenv=s%" => \%browser_env, - "browser-arg=s%" => \%browser_args, - "help!" => \$help); - - # if the switches include --help, exit and print directions - if ($help) { - usage_and_exit(); - } - - # we were passed an explicit path to the app - if ($appoverride) { - $app = $appoverride; - } - - # make sure the application we're going to use exists - unless (-e $app) { - my $error_message = "\nError: Path \"$app\" doesn't exist.\n"; - $error_message .= "Are you executing "; - $error_message .= "\$objdir/_tests/testing/mochitest/runtests.pl?\n\n"; - die $error_message; - } - - my $manifest = initializeProfile($app, $do_browser_chrome); - my $serverPid = startServer($close_when_done); - - # If we're lucky, the server has fully started by now, and all paths are - # ready, etc. However, xpcshell cold start times suck, at least for debug - # builds. We'll try to connect to the server for 30 seconds or until we - # succeed, whichever is first. If we succeed, then we continue with - # execution. If we fail, we try to kill the server and exit with an error. - wait_for_server_startup($serverPid, SERVER_STARTUP_TIMEOUT); - - my $url; - if ($do_chrome) { - $url = CHROMETESTS_URL . "?" . ($test_path ? "testPath=" . $test_path : ""); - } elsif ($do_browser_chrome) { - # Tests will run from an overlay, no need to load any URL. We'll include - # the test path in the config file so the browser chrome harness can use it. - $url = "about:blank"; - } elsif ($do_a11y) { - $url = A11YTESTS_URL . "?" . ($test_path ? "testPath=" . $test_path : ""); - } else { - $url = TESTS_URL . ($test_path ? $test_path : "") . "?"; - } - - if ($do_browser_chrome) { - generate_test_config($autorun, $close_when_done, $log_path, $test_path); - } else { - if ($autorun) { - $url .= "&autorun=1"; - } - if ($close_when_done) { - $url .= "&closeWhenDone=1"; - } - if ($log_path) { - $url .= "&logFile=$log_path"; - } - if ($file_level) { - $url .= "&fileLevel=$file_level"; - } - if ($console_level) { - $url .= "&consoleLevel=$console_level"; - } - } - - my $test_start = runTests($url, \%browser_env, \%browser_args); - - shutdownServer($serverPid); - - # print test run times - my $test_finish = localtime(); - print " started: $test_start\n"; - print "finished: $test_finish\n"; - - # delete the profile and manifest - # rmtree($profile_dir, 0, 0); - unlink($manifest); -} - - ####################### - # COMMANDLINE USAGE # - ####################### - -sub usage_and_exit { - print "\n"; - print "Usage instructons for runtests.pl.\n"; - print "If --log-file is specified, --file-level must be specified as well.\n"; - print "If --chrome is specified, chrome tests will be run instead of web content tests.\n"; - print "If --browser-chrome is specified, browser-chrome tests will be run instead of web content tests.\n"; - print "If --a11y is specified, a11y tests will be run instead of web content tests."; - print "\n\n"; - print "Syntax:\n"; - print " runtests.pl \\\n"; - print " [--autorun] \\\n"; - print " [--chrome] \\\n"; - print " [--browser-chrome] \\\n"; - print " [--a11y] \\\n"; - print " [--close-when-done] \\\n"; - print " [--appname=/path/to/app] \\\n"; - print " [--log-file=/path/to/logfile] \\\n"; - print " [--test-path=relative/path/to/tests] \\\n"; - print " [--setenv=VAR=value] \\\n"; - print " [--browser-arg=VAR=value] \\\n"; - print " [--file-level=DEBUG|INFO|ERROR|FATAL|WARNING] \\\n"; - print " [--console-level=DEBUG|INFO|ERROR|FATAL|WARNING] \n\n"; - exit(1); -} - - ####################### - # MAKE A WINDOWS PATH # - ####################### - -#ifdef IS_CYGWIN - -sub winPathFromDir { - my ($path) = abs_path(@_); - - # Use external cygpath command to get the windows-like path - $path = `cygpath -w $path`; - - # Just remove the traling CR char - chop($path); - return $path; -} - -#else -# Non-cygwin version - -sub winPathFromDir { - my ($path) = abs_path(@_); - - # This is a windows mingw32 build, we need to translate the - # given path to the "actual" windows path. - - my @m = `mount`; - my $matchlen; - my $bestmatch; - my $mount; - - #example mount output: - # C:\DOCUME~1\Temp on /tmp type user (binmode,noumount) - # c:\ActiveState\perl on /perl type user (binmode) - # C:\msys\1.0\bin on /usr/bin type user (binmode,cygexec,noumount) - # C:\msys\1.0\bin on /bin type user (binmode,cygexec,noumount) - foreach $mount (@m) { - if ( $mount =~ /(.*) on ([^ ]*) type /) { - my ($mingw, $real)=($2, $1); - if ($path =~ /^$mingw/i) { - # the path starts with the path we - # found on this line in the mount output - my $len = length($mingw); - if ($len > $matchlen) { - # we remember the match that is the longest - $matchlen = $len; - $bestmatch = $real; - } - } - } - } - if (!$matchlen) { - die "Serious error, can't find our \"real\" path!\n"; - } - - my ($volume,$directories,$file) = - File::Spec->splitpath(substr($path, $matchlen), 1); - my @dirs = File::Spec->splitdir( $directories ); - return $bestmatch . "\\" . join "\\", @dirs; -} - -# End of non-cygwin version -#endif - - ################## - # SERVER STARTUP # - ################## - - # Start up the server, and let the server script handle shutdown if - # we're closing when done. (We'll kill it later if it goes zombie - # somehow, but that shouldn't be the way it happens except if - # something really breaks.) - -sub startServer { - my ($close_when_done) = @_; - my $pid = fork(); - if ($pid == 0) { - # Run the server - my $status = 0; - - if ($close_when_done) { - $ENV{'CLOSE_WHEN_DONE'} = '1'; - } - - if ($unixish) { - $ENV{'LD_LIBRARY_PATH'} = $dist_bin; - $ENV{'MOZILLA_FIVE_HOME'} = $dist_bin; - } - - my @runargs = ("$dist_bin/xpcshell", "-v", "170"); - - # this path is passed as a string, so we need to convert it on win32 - if ($is_win32) { - push(@runargs, "-f", winPathFromDir($FindBin::Bin) . "\\httpd.js"); - push(@runargs, "-f", winPathFromDir($FindBin::Bin) . "\\server.js"); - } else { - push(@runargs, "-f", $FindBin::Bin . "/httpd.js"); - push(@runargs, "-f", $FindBin::Bin . "/server.js"); - } - print "@runargs\n"; - exec @runargs or die("Error running server: $!\n"); - } - - return ($pid); -} - - - ############## - # TEST SETUP # - ############## - -sub generate_test_config { - my ($autorun, $close_when_done, $log_path, $test_path) = @_; - $autorun = $autorun || 0; - $close_when_done = $close_when_done || 0; - $log_path = $log_path || ""; - $log_path =~ s/\\/\\\\/g; - $test_path = $test_path || ""; - $test_path =~ s/\\/\\\\/g; - - my $config_content = <$profile_dir/testConfig.js") || - die("Could not open testConfig.js file $!"); - print CONFIGOUTFILE ($config_content); - close(CONFIGOUTFILE); -} - -sub initializeProfile { - my ($app_path, $do_browser_tests) = @_; - my $pref_content = <>$profile_dir/user.js") || - die("Could not open user.js file $!\n"); - print PREFOUTFILE ($pref_content); - close(PREFOUTFILE) or die("Couldn't close user.js file: $!\n"); - - # add userChrome.css - open(CHROMEOUTFILE, ">>$chrome_dir/userChrome.css") || - die("Could not open userChrome.css file $!"); - print CHROMEOUTFILE ($chrome_content); - close(CHROMEOUTFILE); - - # register our chrome dir - my $chrometest_dir = "$FindBin::Bin/"; - if ($is_win32) { - # we don't have LWP, so we can't use its file url stuff - $chrometest_dir = winPathFromDir($chrometest_dir) . "\\"; - $chrometest_dir =~ s/\\/\//g; - $chrometest_dir = "file:///$chrometest_dir"; - } - - my($filename, $directories, $suffix) = fileparse($app_path); - my $manifest = $directories . "chrome/mochikit.manifest"; - open(MANIFEST, ">$manifest") || - die("Could not open manifest file $!"); - print MANIFEST ("content mochikit $chrometest_dir contentaccessible=yes\n"); - if ($do_browser_tests) { - print MANIFEST ("overlay " . BROWSER_CHROME_URL . " chrome://mochikit/content/browser-test-overlay.xul\n"); - } - close(MANIFEST); - - return $manifest; -} - - ################### - # WAIT FOR SERVER # - ################### - -sub wait_for_server_startup { - my ($pid, $timeout) = @_; - - die ("Invalid timeout value passed to wait_for_server_startup()\n") - if ($timeout <= 0); - - eval { - my $loop_count = 0; - while ($loop_count++ < $timeout) { - last if (-e "$profile_dir/server_alive.txt"); - sleep 1; - } - - die "timeout" if ($loop_count >= $timeout); - return "done"; - }; - - my $time_out_message; - if ($@) { - if ($@ =~ /timeout/) { - $time_out_message = "\nError: "; - $time_out_message = "Timed out while waiting for server startup.\n"; - } else { - # Died for some other reason. - $time_out_message = "An unknown error occurred "; - $time_out_message .= "while waiting for server startup.\n"; - } - } - - if ($time_out_message) { - kill_process($pid); - print $time_out_message; - exit(1); - } -} - -sub kill_process { - my ($target_pid) = @_; - my $start_time = time(); - - # Try to kill and wait 10 seconds, then try a kill -9 - my $sig; - for $sig ('TERM', 'KILL') { - print "kill $sig $target_pid\n"; - kill $sig => $target_pid; - my $interval_start = time; - while (time - $interval_start < 10) { - # the following will work with 'cygwin' perl on win32, but not - # with 'MSWin32' (ActiveState) perl - my $pid = waitpid($target_pid, POSIX::WNOHANG()); - if (($pid == $target_pid and POSIX::WIFEXITED($?)) or $pid == -1) { - my $secs = time - $start_time; - $secs = $secs == 1 ? '1 second' : "$secs seconds"; - print "Process killed. Took $secs to die.\n"; - return; - } - sleep 1; - } - } - die "Unable to kill process: $target_pid"; -} - - ################## - # TEST EXECUTION # - ################## - -sub runTests { - my ($test_url, $browser_env, $browser_args) = @_; - - # mark the start - my $test_start = localtime(); - - # set env vars so Firefox doesn't quit weirdly and break the script - $ENV{'NO_EM_RESTART'} = '1'; - $ENV{'XPCOM_DEBUG_BREAK'} = 'warn'; - - if ($unixish) { - $ENV{'LD_LIBRARY_PATH'} = $dist_bin; - $ENV{'MOZILLA_FIVE_HOME'} = $dist_bin; - } - - for my $key (keys(%{$browser_env})) { - $ENV{$key} = $browser_env->{$key}; - } - - my $profile_arg = "$profile_dir"; - if ($is_win32) { - $profile_arg = winPathFromDir($profile_dir); - } - - # now run with the profile we created - - # On Windows and Linux, the application is focused for us. On OS X, we - # need to use applescript to focus the app and then set the url. - my $rc = -1; - if (!$is_mac) { - my @runargs = ($app, '-no-remote', '-profile', $profile_arg); - if ($browser_args) { - foreach my $key (keys %$browser_args) { - push(@runargs, ($key, - $browser_args->{$key}) - ); - } - } - push(@runargs, $test_url); - $rc = 0xffff & system @runargs; - } else { - $rc = executeMac($profile_arg, $test_url, $browser_args); - } - - if ($rc != 0) { - print "FAIL Exited with code $rc during test run\n"; - } - - return $test_start; -} - -sub executeMac { - my ($profile_arg, $test_url, $browser_args) = @_; - my $pid = fork(); - if (not defined $pid) { - die "cannot fork: $!"; - } elsif ($pid == 0) { - # run only the executable so we get a pid we can focus - if ($app !~ /-bin$/) { - $app .= "-bin"; - } - my @runargs = ($app, '-foreground', '-no-remote', '-profile', $profile_arg); - if ($browser_args) { - foreach my $key (keys %$browser_args) { - push(@runargs, ($key, - $browser_args->{$key}) - ); - } - } - push(@runargs, $test_url); - - # redirect stderr to stdout for easier buildbot / tinderbox logging - #$ENV{'XPCOM_DEBUG_BREAK'} = 'stack'; - open (STDERR, '>&', \*STDOUT) || die $!; - exec @runargs or die("Error starting application: $!\n"); - } else { - waitpid($pid,0); - } - - # return the exit code we received from waitpid - return $?; -} - - ################## - # SHUT DOWN # - ################## - -sub shutdownServer { - my ($pid) = @_; - kill_process($pid); -} From ce4913a634a8ac494a1526b4e213cb263d142e39 Mon Sep 17 00:00:00 2001 From: Brendan Eich Date: Thu, 26 Jun 2008 17:49:01 -0700 Subject: [PATCH 19/98] Fix for(;;) loops to use one branch per iter (after initial iter; 441477, r=jorendorff). --- js/src/jsemit.cpp | 108 +++++++++++++++++++++++++++----------------- js/src/jsopcode.cpp | 58 +++++++++++++++--------- js/src/jsopcode.tbl | 4 +- 3 files changed, 105 insertions(+), 65 deletions(-) diff --git a/js/src/jsemit.cpp b/js/src/jsemit.cpp index 638ade9eef55..200784e1cf42 100644 --- a/js/src/jsemit.cpp +++ b/js/src/jsemit.cpp @@ -4251,6 +4251,7 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) case TOK_FOR: beq = 0; /* suppress gcc warnings */ + jmp = -1; pn2 = pn->pn_left; js_PushStatement(&cg->treeContext, &stmtInfo, STMT_FOR_LOOP, top); @@ -4498,7 +4499,24 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) if (beq < 0) return JS_FALSE; } + + /* Emit code for the loop body. */ + if (!js_EmitTree(cx, cg, pn->pn_right)) + return JS_FALSE; + + /* Emit the loop-closing jump and fixup all jump offsets. */ + jmp = EmitJump(cx, cg, JSOP_GOTO, top - CG_OFFSET(cg)); + if (jmp < 0) + return JS_FALSE; + if (beq > 0) + CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq); + + /* Set the SRC_WHILE note offset so we can find the closing jump. */ + JS_ASSERT(noteIndex != -1); + if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 0, jmp - beq)) + return JS_FALSE; } else { + /* C-style for (init; cond; update) ... loop. */ op = JSOP_POP; pn3 = pn2->pn_kid1; if (!pn3) { @@ -4535,33 +4553,19 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) return JS_FALSE; } - top = CG_OFFSET(cg); - SET_STATEMENT_TOP(&stmtInfo, top); - if (!pn2->pn_kid2) { - /* No loop condition: flag this fact in the source notes. */ - if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 0, 0)) - return JS_FALSE; - } else { - if (!js_EmitTree(cx, cg, pn2->pn_kid2)) - return JS_FALSE; - if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 0, - CG_OFFSET(cg) - top)) { - return JS_FALSE; - } - beq = EmitJump(cx, cg, JSOP_IFEQ, 0); - if (beq < 0) + if (pn2->pn_kid2) { + /* Goto the loop condition, which branches back to iterate. */ + jmp = EmitJump(cx, cg, JSOP_GOTO, 0); + if (jmp < 0) return JS_FALSE; } + top = CG_OFFSET(cg); + SET_STATEMENT_TOP(&stmtInfo, top); - /* Set pn3 (used below) here to avoid spurious gcc warnings. */ - pn3 = pn2->pn_kid3; - } + /* Emit code for the loop body. */ + if (!js_EmitTree(cx, cg, pn->pn_right)) + return JS_FALSE; - /* Emit code for the loop body. */ - if (!js_EmitTree(cx, cg, pn->pn_right)) - return JS_FALSE; - - if (pn2->pn_type != TOK_IN) { /* Set the second note offset so we can find the update part. */ JS_ASSERT(noteIndex != -1); if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 1, @@ -4569,14 +4573,15 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) return JS_FALSE; } - if (pn3) { - /* Set loop and enclosing "update" offsets, for continue. */ - stmt = &stmtInfo; - do { - stmt->update = CG_OFFSET(cg); - } while ((stmt = stmt->down) != NULL && - stmt->type == STMT_LABEL); + /* Set loop and enclosing "update" offsets, for continue. */ + stmt = &stmtInfo; + do { + stmt->update = CG_OFFSET(cg); + } while ((stmt = stmt->down) != NULL && stmt->type == STMT_LABEL); + /* Check for update code to do before the condition (if any). */ + pn3 = pn2->pn_kid3; + if (pn3) { op = JSOP_POP; #if JS_HAS_DESTRUCTURING if (pn3->pn_type == TOK_ASSIGN && @@ -4600,24 +4605,43 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) } } + /* Set the first note offset so we can find the loop condition. */ + if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 0, + CG_OFFSET(cg) - top)) { + return JS_FALSE; + } + + if (pn2->pn_kid2) { + /* Fix up the goto from top to target the loop condition. */ + JS_ASSERT(jmp >= 0); + CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, jmp); + + if (!js_EmitTree(cx, cg, pn2->pn_kid2)) + return JS_FALSE; + } + /* The third note offset helps us find the loop-closing jump. */ if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 2, CG_OFFSET(cg) - top)) { return JS_FALSE; } - } - /* Emit the loop-closing jump and fixup all jump offsets. */ - jmp = EmitJump(cx, cg, JSOP_GOTO, top - CG_OFFSET(cg)); - if (jmp < 0) - return JS_FALSE; - if (beq > 0) - CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq); - if (pn2->pn_type == TOK_IN) { - /* Set the SRC_WHILE note offset so we can find the closing jump. */ - JS_ASSERT(noteIndex != -1); - if (!js_SetSrcNoteOffset(cx, cg, (uintN)noteIndex, 0, jmp - beq)) - return JS_FALSE; + if (pn2->pn_kid2) { + if (pn2->pn_kid2->pn_type == TOK_LP && + pn2->pn_kid2->pn_head->pn_type == TOK_FUNCTION && + (pn2->pn_kid2->pn_head->pn_flags & TCF_GENEXP_LAMBDA) && + js_NewSrcNote(cx, cg, SRC_GENEXP) < 0) { + return JS_FALSE; + } + beq = EmitJump(cx, cg, JSOP_IFNE, top - CG_OFFSET(cg)); + if (beq < 0) + return JS_FALSE; + } else { + /* No loop condition -- emit the loop-closing jump. */ + jmp = EmitJump(cx, cg, JSOP_GOTO, top - CG_OFFSET(cg)); + if (jmp < 0) + return JS_FALSE; + } } /* Now fixup all breaks and continues (before for/in's JSOP_ENDITER). */ diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp index 91e0f9e0fa7f..f4eeb229c5f9 100644 --- a/js/src/jsopcode.cpp +++ b/js/src/jsopcode.cpp @@ -1985,31 +1985,42 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop) cond = js_GetSrcNoteOffset(sn, 0); next = js_GetSrcNoteOffset(sn, 1); tail = js_GetSrcNoteOffset(sn, 2); - LOCAL_ASSERT(tail + GetJumpOffset(pc+tail, pc+tail) == 0); + + /* + * If this loop has a condition, then pc points at a goto + * targeting the condition. + */ + if (cond != tail) { + LOCAL_ASSERT(*pc == JSOP_GOTO || *pc == JSOP_GOTOX); + pc += (*pc == JSOP_GOTO) + ? JSOP_GOTO_LENGTH + : JSOP_GOTOX_LENGTH; + } + LOCAL_ASSERT(tail == -GetJumpOffset(pc+tail, pc+tail)); /* Print the keyword and the possibly empty init-part. */ js_printf(jp, "\tfor (%s;", rval); - if (pc[cond] == JSOP_IFEQ || pc[cond] == JSOP_IFEQX) { + if (cond != tail) { /* Decompile the loop condition. */ - DECOMPILE_CODE(pc, cond); + DECOMPILE_CODE(pc + cond, tail - cond); js_printf(jp, " %s", POP_STR()); } /* Need a semicolon whether or not there was a cond. */ js_puts(jp, ";"); - if (pc[next] != JSOP_GOTO && pc[next] != JSOP_GOTOX) { + if (next != cond) { /* Decompile the loop updater. */ - DECOMPILE_CODE(pc + next, tail - next - 1); + DECOMPILE_CODE(pc + next, + cond - next - JSOP_POP_LENGTH); js_printf(jp, " %s", POP_STR()); } /* Do the loop body. */ js_printf(jp, ") {\n"); jp->indent += 4; - oplen = (cond) ? js_CodeSpec[pc[cond]].length : 0; - DECOMPILE_CODE(pc + cond + oplen, next - cond - oplen); + DECOMPILE_CODE(pc, next); jp->indent -= 4; js_printf(jp, "\t}\n"); @@ -3834,32 +3845,37 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop) * 1. It is the complete expression consumed by a control * flow bytecode such as JSOP_TABLESWITCH whose syntax * always parenthesizes the controlling expression. - * 2. It is the sole argument to a function call. - * 3. It is the condition of an if statement and not of a + * 2. It is the condition of a loop other than a for (;;). + * 3. It is the sole argument to a function call. + * 4. It is the condition of an if statement and not of a * ?: expression. * * But (first, before anything else) always parenthesize * if this genexp runs up against endpc and the next op is - * not a while or do-while loop JSOP_IFNE* opcode. In such - * cases, this Decompile activation has been recursively - * called by a comma operator, &&, or || bytecode. + * not a loop condition (JSOP_IFNE*) opcode. In such cases, + * this Decompile activation has been recursively called by + * a comma operator, &&, or || bytecode. */ - LOCAL_ASSERT(pc + len < endpc || + pc2 = pc + len; + LOCAL_ASSERT(pc2 < endpc || endpc < outer->code + outer->length); LOCAL_ASSERT(ss2.top == 1); ss2.opcodes[0] = JSOP_POP; - if (pc + len == endpc && - ((JSOp) *endpc != JSOP_IFNE && - (JSOp) *endpc != JSOP_IFNEX)) { + if (pc2 == endpc && + (JSOp) *endpc != JSOP_IFNE && + (JSOp) *endpc != JSOP_IFNEX) { op = JSOP_SETNAME; } else { - op = (JSOp) pc[len]; + op = (JSOp) *pc2; op = ((js_CodeSpec[op].format & JOF_PARENHEAD) || + ((op == JSOP_IFNE || op == JSOP_IFNEX) && + (!(sn2 = js_GetSrcNote(outer, pc2)) || + SN_TYPE(sn2) != SRC_GENEXP)) || ((js_CodeSpec[op].format & JOF_INVOKE) && - GET_ARGC(pc + len) == 1) || - (((op == JSOP_IFEQ || op == JSOP_IFEQX) && - (sn2 = js_GetSrcNote(outer, pc + len)) && - SN_TYPE(sn2) != SRC_COND))) + GET_ARGC(pc2) == 1) || + ((op == JSOP_IFEQ || op == JSOP_IFEQX) && + (sn2 = js_GetSrcNote(outer, pc2)) && + SN_TYPE(sn2) != SRC_COND)) ? JSOP_POP : JSOP_SETNAME; diff --git a/js/src/jsopcode.tbl b/js/src/jsopcode.tbl index f9ea46a03a5d..00f6f0495896 100644 --- a/js/src/jsopcode.tbl +++ b/js/src/jsopcode.tbl @@ -105,7 +105,7 @@ OPDEF(JSOP_LEAVEWITH, 4, "leavewith", NULL, 1, 1, 0, 0, JOF_BYTE) OPDEF(JSOP_RETURN, 5, "return", NULL, 1, 1, 0, 2, JOF_BYTE) OPDEF(JSOP_GOTO, 6, "goto", NULL, 3, 0, 0, 0, JOF_JUMP) OPDEF(JSOP_IFEQ, 7, "ifeq", NULL, 3, 1, 0, 4, JOF_JUMP|JOF_DETECTING) -OPDEF(JSOP_IFNE, 8, "ifne", NULL, 3, 1, 0, 0, JOF_JUMP|JOF_PARENHEAD) +OPDEF(JSOP_IFNE, 8, "ifne", NULL, 3, 1, 0, 0, JOF_JUMP) /* Get the arguments object for the current, lightweight function activation. */ OPDEF(JSOP_ARGUMENTS, 9, js_arguments_str, js_arguments_str, 1, 0, 1, 18, JOF_BYTE) @@ -353,7 +353,7 @@ OPDEF(JSOP_DEFLOCALFUN, 138,"deflocalfun",NULL, 5, 0, 0, 0, JOF_SLOTOB /* Extended jumps. */ OPDEF(JSOP_GOTOX, 139,"gotox", NULL, 5, 0, 0, 0, JOF_JUMPX) OPDEF(JSOP_IFEQX, 140,"ifeqx", NULL, 5, 1, 0, 4, JOF_JUMPX|JOF_DETECTING) -OPDEF(JSOP_IFNEX, 141,"ifnex", NULL, 5, 1, 0, 0, JOF_JUMPX|JOF_PARENHEAD) +OPDEF(JSOP_IFNEX, 141,"ifnex", NULL, 5, 1, 0, 0, JOF_JUMPX) OPDEF(JSOP_ORX, 142,"orx", NULL, 5, 1, 0, 5, JOF_JUMPX|JOF_DETECTING) OPDEF(JSOP_ANDX, 143,"andx", NULL, 5, 1, 0, 6, JOF_JUMPX|JOF_DETECTING) OPDEF(JSOP_GOSUBX, 144,"gosubx", NULL, 5, 0, 0, 0, JOF_JUMPX) From 1a1ab238f99065f098e4685ed846c306f38d12d7 Mon Sep 17 00:00:00 2001 From: Paul O'Shannessy Date: Thu, 26 Jun 2008 18:04:49 -0700 Subject: [PATCH 20/98] =?UTF-8?q?Bug=20439365=20=E2=80=93=20need=20a=20not?= =?UTF-8?q?ification=20to=20fire=20when=20a=20form=20is=20available=20to?= =?UTF-8?q?=20be=20filled=20in.=20r=3Ddolske?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passwordmgr/public/nsILoginManager.idl | 5 +- .../passwordmgr/src/nsLoginManager.js | 128 +++++++++++------- .../components/passwordmgr/test/Makefile.in | 2 + .../passwordmgr/test/test_basic_form_2.html | 5 +- ...test_basic_form_observer_autocomplete.html | 107 +++++++++++++++ ...est_basic_form_observer_autofillForms.html | 92 +++++++++++++ 6 files changed, 285 insertions(+), 54 deletions(-) create mode 100644 toolkit/components/passwordmgr/test/test_basic_form_observer_autocomplete.html create mode 100644 toolkit/components/passwordmgr/test/test_basic_form_observer_autofillForms.html diff --git a/toolkit/components/passwordmgr/public/nsILoginManager.idl b/toolkit/components/passwordmgr/public/nsILoginManager.idl index 00feadd42483..b1424b4472cf 100644 --- a/toolkit/components/passwordmgr/public/nsILoginManager.idl +++ b/toolkit/components/passwordmgr/public/nsILoginManager.idl @@ -43,7 +43,7 @@ interface nsIAutoCompleteResult; interface nsIDOMHTMLInputElement; interface nsIDOMHTMLFormElement; -[scriptable, uuid(5247f630-38a5-11dd-ae16-0800200c9a66)] +[scriptable, uuid(04dbfa30-4238-11dd-ae16-0800200c9a66)] interface nsILoginManager : nsISupports { @@ -219,8 +219,9 @@ interface nsILoginManager : nsISupports { * * @param aForm * The form to fill + * @return Success of attempt fill form */ - void fillForm(in nsIDOMHTMLFormElement aForm); + boolean fillForm(in nsIDOMHTMLFormElement aForm); }; %{C++ diff --git a/toolkit/components/passwordmgr/src/nsLoginManager.js b/toolkit/components/passwordmgr/src/nsLoginManager.js index 6b38d257b326..fb5cc1bc3122 100644 --- a/toolkit/components/passwordmgr/src/nsLoginManager.js +++ b/toolkit/components/passwordmgr/src/nsLoginManager.js @@ -84,6 +84,15 @@ LoginManager.prototype = { }, + __observerService : null, // Observer Service, for notifications + get _observerService() { + if (!this.__observerService) + this.__observerService = Cc["@mozilla.org/observer-service;1"]. + getService(Ci.nsIObserverService); + return this.__observerService; + }, + + __storage : null, // Storage component which contains the saved logins get _storage() { if (!this.__storage) { @@ -155,10 +164,8 @@ LoginManager.prototype = { // Form submit observer checks forms for new logins and pw changes. - var observerService = Cc["@mozilla.org/observer-service;1"]. - getService(Ci.nsIObserverService); - observerService.addObserver(this._observer, "earlyformsubmit", false); - observerService.addObserver(this._observer, "xpcom-shutdown", false); + this._observerService.addObserver(this._observer, "earlyformsubmit", false); + this._observerService.addObserver(this._observer, "xpcom-shutdown", false); // WebProgressListener for getting notification of new doc loads. var progress = Cc["@mozilla.org/docloaderservice;1"]. @@ -966,7 +973,7 @@ LoginManager.prototype = { previousActionOrigin = actionOrigin; } this.log("_fillDocument processing form[" + i + "]"); - foundLogins = this._fillForm(form, autofillForm, foundLogins); + foundLogins = this._fillForm(form, autofillForm, false, foundLogins)[1]; } // foreach form }, @@ -976,10 +983,14 @@ LoginManager.prototype = { * * Fill the form with login information if we can find it. This will find * an array of logins if not given any, otherwise it will use the logins - * passed in. The logins are returned so they can be reused for - * optimization. + * passed in. The logins are returned so they can be reused for + * optimization. Success of action is also returned in format + * [success, foundLogins]. autofillForm denotes if we should fill the form + * in automatically, ignoreAutocomplete denotes if we should ignore + * autocomplete=off attributes, and foundLogins is an array of nsILoginInfo + * for optimization */ - _fillForm : function (form, autofillForm, foundLogins) { + _fillForm : function (form, autofillForm, ignoreAutocomplete, foundLogins) { // Heuristically determine what the user/pass fields are // We do this before checking to see if logins are stored, // so that the user isn't prompted for a master password @@ -989,7 +1000,7 @@ LoginManager.prototype = { // Need a valid password field to do anything. if (passwordField == null) - return foundLogins; + return [false, foundLogins]; // Need to get a list of logins if we weren't given them if (foundLogins == null) { @@ -1027,7 +1038,7 @@ LoginManager.prototype = { // Nothing to do if we have no matching logins available. if (logins.length == 0) - return foundLogins; + return [false, foundLogins]; // Attach autocomplete stuff to the username field, if we have @@ -1041,55 +1052,72 @@ LoginManager.prototype = { // the autocomplete stuff to the username field, so the user can // still manually select a login to be filled in. var isFormDisabled = false; - if (this._isAutocompleteDisabled(form) || - this._isAutocompleteDisabled(usernameField) || - this._isAutocompleteDisabled(passwordField)) { + if (!ignoreAutocomplete && + (this._isAutocompleteDisabled(form) || + this._isAutocompleteDisabled(usernameField) || + this._isAutocompleteDisabled(passwordField))) { isFormDisabled = true; this.log("form not filled, has autocomplete=off"); } - if (autofillForm && !isFormDisabled) { + // Variable such that we reduce code duplication and can be sure we + // should be firing notifications if and only if we can fill the form. + var selectedLogin = null; - if (usernameField && usernameField.value) { - // If username was specified in the form, only fill in the - // password if we find a matching login. + if (usernameField && usernameField.value) { + // If username was specified in the form, only fill in the + // password if we find a matching login. - var username = usernameField.value; + var username = usernameField.value; - var matchingLogin; - var found = logins.some(function(l) { - matchingLogin = l; - return (l.username == username); - }); - if (found) - passwordField.value = matchingLogin.password; - else - this.log("Password not filled. None of the stored " + - "logins match the username already present."); + var matchingLogin; + var found = logins.some(function(l) { + matchingLogin = l; + return (l.username == username); + }); + if (found) + selectedLogin = matchingLogin; + else + this.log("Password not filled. None of the stored " + + "logins match the username already present."); - } else if (usernameField && logins.length == 2) { - // Special case, for sites which have a normal user+pass - // login *and* a password-only login (eg, a PIN)... - // When we have a username field and 1 of 2 available - // logins is password-only, go ahead and prefill the - // one with a username. - if (!logins[0].username && logins[1].username) { - usernameField.value = logins[1].username; - passwordField.value = logins[1].password; - } else if (!logins[1].username && logins[0].username) { - usernameField.value = logins[0].username; - passwordField.value = logins[0].password; - } - } else if (logins.length == 1) { - if (usernameField) - usernameField.value = logins[0].username; - passwordField.value = logins[0].password; - } else { - this.log("Multiple logins for form, so not filling any."); - } + } else if (usernameField && logins.length == 2) { + // Special case, for sites which have a normal user+pass + // login *and* a password-only login (eg, a PIN)... + // When we have a username field and 1 of 2 available + // logins is password-only, go ahead and prefill the + // one with a username. + if (!logins[0].username && logins[1].username) + selectedLogin = logins[1]; + else if (!logins[1].username && logins[0].username) + selectedLogin = logins[0]; + } else if (logins.length == 1) { + selectedLogin = logins[0]; + } else { + this.log("Multiple logins for form, so not filling any."); } - return foundLogins; + + var didFillForm = false; + if (selectedLogin && autofillForm && !isFormDisabled) { + // Fill the form + if (usernameField) + usernameField.value = selectedLogin.username; + passwordField.value = selectedLogin.password; + didFillForm = true; + } else if (selectedLogin && !autofillForm) { + // For when autofillForm is false, but we still have the information + // to fill a form, we notify observers. + this._observerService.notifyObservers(form, "passwordmgr-found-form", "noAutofillForms"); + this.log("autofillForms=false but form can be filled; notified observers"); + } else if (selectedLogin && isFormDisabled) { + // For when autocomplete is off, but we still have the information + // to fill a form, we notify observers. + this._observerService.notifyObservers(form, "passwordmgr-found-form", "autocompleteOff"); + this.log("autocomplete=off but form can be filled; notified observers"); + } + + return [didFillForm, foundLogins]; }, @@ -1100,7 +1128,7 @@ LoginManager.prototype = { */ fillForm : function (form) { this.log("fillForm processing form[id=" + form.id + "]"); - this._fillForm(form, true, null) + return this._fillForm(form, true, true, null)[0]; }, diff --git a/toolkit/components/passwordmgr/test/Makefile.in b/toolkit/components/passwordmgr/test/Makefile.in index 9ebf1ef18c31..8b32e1f88c76 100644 --- a/toolkit/components/passwordmgr/test/Makefile.in +++ b/toolkit/components/passwordmgr/test/Makefile.in @@ -57,6 +57,8 @@ MOCHI_TESTS = \ test_basic_form_2pw_2.html \ test_basic_form_3pw_1.html \ test_basic_form_autocomplete.html \ + test_basic_form_observer_autofillForms.html \ + test_basic_form_observer_autocomplete.html \ test_basic_form_pwonly.html \ test_bug_227640.html \ test_bug_242956.html \ diff --git a/toolkit/components/passwordmgr/test/test_basic_form_2.html b/toolkit/components/passwordmgr/test/test_basic_form_2.html index 6df55f75c803..9d0445311cd5 100644 --- a/toolkit/components/passwordmgr/test/test_basic_form_2.html +++ b/toolkit/components/passwordmgr/test/test_basic_form_2.html @@ -45,8 +45,9 @@ function startTest(){ is($_(1, "uname").value, "", "Checking for blank username"); is($_(1, "pword").value, "", "Checking for blank password"); - // Call the public method - pwmgr.fillForm(document.getElementById("form1")); + // Call the public method, check return value + is(pwmgr.fillForm(document.getElementById("form1")), true, + "Checking return value of fillForm"); // Check that the form was filled is($_(1, "uname").value, "testuser", "Checking for filled username"); diff --git a/toolkit/components/passwordmgr/test/test_basic_form_observer_autocomplete.html b/toolkit/components/passwordmgr/test/test_basic_form_observer_autocomplete.html new file mode 100644 index 000000000000..2324b54e3d58 --- /dev/null +++ b/toolkit/components/passwordmgr/test/test_basic_form_observer_autocomplete.html @@ -0,0 +1,107 @@ + + + + Test for Login Manager + + + + + + +Login Manager test: simple form with autocomplete off and notifying observers & normal form +

+ +
+ +
+

This is form 1.

+ + + + + +
+ +
+

This is form 2.

+ + + + + +
+ +
+ +
+
+
+ + diff --git a/toolkit/components/passwordmgr/test/test_basic_form_observer_autofillForms.html b/toolkit/components/passwordmgr/test/test_basic_form_observer_autofillForms.html new file mode 100644 index 000000000000..ee0eaa494962 --- /dev/null +++ b/toolkit/components/passwordmgr/test/test_basic_form_observer_autofillForms.html @@ -0,0 +1,92 @@ + + + + Test for Login Manager + + + + + + +Login Manager test: simple form with autofillForms disabled and notifying observers +

+ +
+ +
+

This is form 1.

+ + + + + +
+ +
+ +
+
+
+ + From 0d352b419714c363067c13f36541d824ad985571 Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Fri, 27 Jun 2008 00:14:45 -0400 Subject: [PATCH 21/98] Decomtaminate native menu system. Add new native menu API. Lots of cleanup for the native menu system code. Memory usage and speed improvements. b=433952 r=bent r=kreeger sr=roc --- dom/public/idl/base/nsIDOMWindowUtils.idl | 11 +- dom/src/base/nsDOMWindowUtils.cpp | 16 + toolkit/content/tests/chrome/Makefile.in | 2 +- widget/public/Makefile.in | 2 +- widget/public/nsIMenuBar.h | 141 ----- widget/public/nsINativeMenuService.h | 60 ++ widget/public/nsIWidget.h | 23 +- widget/public/nsWidgetsCID.h | 18 +- widget/src/beos/nsWindow.h | 4 +- widget/src/cocoa/Makefile.in | 5 +- widget/src/cocoa/nsChildView.h | 5 +- widget/src/cocoa/nsChildView.mm | 47 +- widget/src/cocoa/nsCocoaUtils.mm | 7 +- widget/src/cocoa/nsCocoaWindow.h | 8 +- widget/src/cocoa/nsCocoaWindow.mm | 20 +- widget/src/cocoa/nsIMenu.h | 240 -------- widget/src/cocoa/nsIMenuItem.h | 156 ----- widget/src/cocoa/nsMenuBarX.h | 142 ++--- widget/src/cocoa/nsMenuBarX.mm | 675 ++++++++-------------- widget/src/cocoa/nsMenuBaseX.h | 67 +++ widget/src/cocoa/nsMenuItemIconX.h | 14 +- widget/src/cocoa/nsMenuItemIconX.mm | 40 +- widget/src/cocoa/nsMenuItemX.h | 77 ++- widget/src/cocoa/nsMenuItemX.mm | 193 ++----- widget/src/cocoa/nsMenuUtilsX.h | 63 ++ widget/src/cocoa/nsMenuUtilsX.mm | 197 +++++++ widget/src/cocoa/nsMenuX.h | 154 ++--- widget/src/cocoa/nsMenuX.mm | 651 +++++++-------------- widget/src/cocoa/nsPIWidgetCocoa.idl | 5 +- widget/src/cocoa/nsWidgetFactory.mm | 26 +- widget/src/gtk2/nsWindow.cpp | 2 +- widget/src/gtk2/nsWindow.h | 2 +- widget/src/os2/nsWindow.h | 4 +- widget/src/photon/nsWindow.cpp | 1 - widget/src/windows/nsWindow.h | 3 +- widget/src/xpwidgets/nsBaseWidget.h | 1 + widget/tests/Makefile.in | 5 + widget/tests/native_menus_window.xul | 115 ++++ widget/tests/test_native_menus.xul | 34 ++ xpfe/appshell/src/Makefile.in | 1 + xpfe/appshell/src/nsWebShellWindow.cpp | 23 +- 41 files changed, 1358 insertions(+), 1902 deletions(-) delete mode 100644 widget/public/nsIMenuBar.h create mode 100644 widget/public/nsINativeMenuService.h delete mode 100644 widget/src/cocoa/nsIMenu.h delete mode 100644 widget/src/cocoa/nsIMenuItem.h create mode 100644 widget/src/cocoa/nsMenuBaseX.h create mode 100644 widget/src/cocoa/nsMenuUtilsX.h create mode 100644 widget/src/cocoa/nsMenuUtilsX.mm create mode 100644 widget/tests/native_menus_window.xul create mode 100644 widget/tests/test_native_menus.xul diff --git a/dom/public/idl/base/nsIDOMWindowUtils.idl b/dom/public/idl/base/nsIDOMWindowUtils.idl index 067b282be8c0..b457a8f10edd 100644 --- a/dom/public/idl/base/nsIDOMWindowUtils.idl +++ b/dom/public/idl/base/nsIDOMWindowUtils.idl @@ -47,7 +47,7 @@ interface nsIDOMElement; -[scriptable, uuid(993da427-2ac3-4766-8485-21a236d258e4)] +[scriptable, uuid(ef136142-9925-45f4-a3e4-6f0d275c6aa8)] interface nsIDOMWindowUtils : nsISupports { /** @@ -160,6 +160,15 @@ interface nsIDOMWindowUtils : nsISupports { in AString aCharacters, in AString aUnmodifiedCharacters); + /** + * See nsIWidget::ActivateNativeMenuItemAt + * + * Cannot be accessed from unprivileged context (not content-accessible) + * Will throw a DOM security error if called without UniversalXPConnect + * privileges. + */ + void activateNativeMenuItemAt(in AString indexString); + /** * Focus the element aElement. The element should be in the same document * that the window is displaying. Pass null to blur the element, if any, diff --git a/dom/src/base/nsDOMWindowUtils.cpp b/dom/src/base/nsDOMWindowUtils.cpp index 1eaecee5739c..f73b1c047cfe 100644 --- a/dom/src/base/nsDOMWindowUtils.cpp +++ b/dom/src/base/nsDOMWindowUtils.cpp @@ -308,6 +308,22 @@ nsDOMWindowUtils::SendNativeKeyEvent(PRInt32 aNativeKeyboardLayout, aModifiers, aCharacters, aUnmodifiedCharacters); } +NS_IMETHODIMP +nsDOMWindowUtils::ActivateNativeMenuItemAt(const nsAString& indexString) +{ + PRBool hasCap = PR_FALSE; + if (NS_FAILED(nsContentUtils::GetSecurityManager()->IsCapabilityEnabled("UniversalXPConnect", &hasCap)) + || !hasCap) + return NS_ERROR_DOM_SECURITY_ERR; + + // get the widget to send the event to + nsCOMPtr widget = GetWidget(); + if (!widget) + return NS_ERROR_FAILURE; + + return widget->ActivateNativeMenuItemAt(indexString); +} + nsIWidget* nsDOMWindowUtils::GetWidget() { diff --git a/toolkit/content/tests/chrome/Makefile.in b/toolkit/content/tests/chrome/Makefile.in index c3df3388a48d..157349e8216d 100644 --- a/toolkit/content/tests/chrome/Makefile.in +++ b/toolkit/content/tests/chrome/Makefile.in @@ -66,7 +66,7 @@ _TEST_FILES = bug288254_window.xul \ window_preferences.xul \ $(NULL) -ifeq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) +ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) _TEST_FILES += test_panel_focus.xul \ window_panel_focus.xul else diff --git a/widget/public/Makefile.in b/widget/public/Makefile.in index 89be38f0219f..775cf0ca3c48 100644 --- a/widget/public/Makefile.in +++ b/widget/public/Makefile.in @@ -64,7 +64,7 @@ EXPORTS = \ $(NULL) ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) -EXPORTS += nsIMenuBar.h +EXPORTS += nsINativeMenuService.h endif ifeq ($(MOZ_WIDGET_TOOLKIT),os2) diff --git a/widget/public/nsIMenuBar.h b/widget/public/nsIMenuBar.h deleted file mode 100644 index 8bbcb1e6fc1a..000000000000 --- a/widget/public/nsIMenuBar.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenuBar_h__ -#define nsIMenuBar_h__ - -#include "nsISupports.h" -#include "nsString.h" -#include "nsIMenu.h" - -class nsIWidget; - -// F81C6D64-B260-44ED-9289-2E410A130E35 -#define NS_IMENUBAR_IID \ -{ 0xF81C6D64, 0xB260, 0x44ED, \ - { 0x92, 0x89, 0x2E, 0x41, 0x0A, 0x13, 0x0E, 0x35 } } - -/** - * MenuBar widget - */ -class nsIMenuBar : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUBAR_IID) - - /** - * Creates the MenuBar - * - */ - NS_IMETHOD Create(nsIWidget * aParent) = 0; - - /** - * Get the MenuBar's Parent. This addrefs. - * - */ - NS_IMETHOD GetParent(nsIWidget *&aParent) = 0; - - /** - * Set the MenuBar's Parent - * - */ - NS_IMETHOD SetParent(nsIWidget *aParent) = 0; - - /** - * Adds the Menu - * - */ - NS_IMETHOD AddMenu(nsIMenu * aMenu) = 0; - - /** - * Returns the number of menus - * - */ - NS_IMETHOD GetMenuCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu Item at a specified Index - * - */ - NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; - - /** - * Inserts a Menu at a specified Index - * - */ - NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; - - /** - * Removes an Menu from a specified Index - * - */ - NS_IMETHOD RemoveMenu(const PRUint32 aCount) = 0; - - /** - * Removes all the Menus - * - */ - NS_IMETHOD RemoveAll() = 0; - - /** - * Gets Native MenuHandle - * - */ - NS_IMETHOD GetNativeData(void*& aData) = 0; - - /** - * Sets Native MenuHandle. Temporary hack for mac until - * nsMenuBar does it's own construction - */ - NS_IMETHOD SetNativeData(void* aData) = 0; - - /** - * Draw the menubar - * - */ - NS_IMETHOD Paint() = 0; - - /** - * Construct the menubar - * - */ - NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuBar, NS_IMENUBAR_IID) - -#endif diff --git a/widget/public/nsINativeMenuService.h b/widget/public/nsINativeMenuService.h new file mode 100644 index 000000000000..9e5f4bc0bb4b --- /dev/null +++ b/widget/public/nsINativeMenuService.h @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsINativeMenuService_h_ +#define nsINativeMenuService_h_ + +#include "nsISupports.h" + +class nsIWidget; +class nsIContent; + +// {90DF88F9-F084-4EF3-829A-49496E636DED} +#define NS_INATIVEMENUSERVICE_IID \ +{ 0x90DF88F9, 0xF084, 0x4EF3, \ +{ 0x82, 0x9A, 0x49, 0x49, 0x6E, 0x63, 0x6D, 0xED} } + +class nsINativeMenuService : public nsISupports { +public: + // Given a top-level window widget and a menu bar DOM node, sets up native + // menus. Once created, native menus are controlled via the DOM, including + // destruction. + NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode)=0; +}; + +#endif // nsINativeMenuService_h_ diff --git a/widget/public/nsIWidget.h b/widget/public/nsIWidget.h index 28848152064a..48d0460b16dd 100644 --- a/widget/public/nsIWidget.h +++ b/widget/public/nsIWidget.h @@ -55,7 +55,6 @@ class nsIDeviceContext; class nsIRegion; struct nsRect; struct nsFont; -class nsIMenuBar; class nsIEventListener; class nsIRollupListener; class nsGUIEvent; @@ -95,10 +94,10 @@ typedef nsEventStatus (*PR_CALLBACK EVENT_CALLBACK)(nsGUIEvent *event); #define NS_NATIVE_PLUGIN_PORT_CG 101 #endif -// 517a0eef-cd1c-48b3-96f0-e341a50f120d +// 00e25b3d-c872-4985-a15e-8e650b7b8ff6 #define NS_IWIDGET_IID \ -{ 0x517a0eef, 0xcd1c, 0x48b3, \ - { 0x96, 0xf0, 0xe3, 0x41, 0xa5, 0x0f, 0x12, 0x0d } } +{ 0x00e25b3d, 0xc872, 0x4985, \ + { 0xa1, 0x5e, 0x8e, 0x65, 0x0b, 0x7b, 0x8f, 0xf6 } } // Hide the native window systems real window type so as to avoid // including native window system types and APIs. This is necessary @@ -879,7 +878,7 @@ class nsIWidget : public nsISupports { * @param aMenuBar the menubar */ - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) = 0; + NS_IMETHOD SetMenuBar(void* aMenuBar) = 0; /** * Set the widget's MenuBar's visibility @@ -1105,6 +1104,20 @@ class nsIWidget : public nsISupports { const nsAString& aCharacters, const nsAString& aUnmodifiedCharacters) = 0; + /** + * Activates a native menu item at the position specified by the index + * string. The index string is a string of positive integers separated + * by the "|" (pipe) character. The last integer in the string represents + * the item index in a submenu located using the integers prior to it. + * + * Example: 1|0|4 + * In this string, the first integer represents the top-level submenu + * in the native menu bar. Since the integer is 1, it is the second submeu + * in the native menu bar. Within that, the first item (index 0) is a + * submenu, and we want to activate the 5th item within that submenu. + */ + virtual nsresult ActivateNativeMenuItemAt(const nsAString& aString) = 0; + protected: // keep the list of children. We also keep track of our siblings. // The ownership model is as follows: parent holds a strong ref to diff --git a/widget/public/nsWidgetsCID.h b/widget/public/nsWidgetsCID.h index c9157d165cad..1f4e62ba2b5d 100644 --- a/widget/public/nsWidgetsCID.h +++ b/widget/public/nsWidgetsCID.h @@ -79,20 +79,10 @@ // Menus //----------------------------------------------------------- -// {BC658C81-4BEB-11d2-8DBB-00609703C14E} -#define NS_MENUBAR_CID \ -{ 0xbc658c81, 0x4beb, 0x11d2, \ - { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } - -// {35A3DEC1-4992-11d2-8DBA-00609703C14E} -#define NS_MENU_CID \ -{ 0x35a3dec1, 0x4992, 0x11d2, \ - { 0x8d, 0xba, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } - -// {7F045771-4BEB-11d2-8DBB-00609703C14E} -#define NS_MENUITEM_CID \ -{ 0x7f045771, 0x4beb, 0x11d2, \ - { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } +// {0B3FE5AA-BC72-4303-85AE-76365DF1251D} +#define NS_NATIVEMENUSERVICE_CID \ +{ 0x0B3FE5AA, 0xBC72, 0x4303, \ + { 0x85, 0xAE, 0x76, 0x36, 0x5D, 0xF1, 0x25, 0x1D} } // {F6CD4F21-53AF-11d2-8DC4-00609703C14E} #define NS_POPUPMENU_CID \ diff --git a/widget/src/beos/nsWindow.h b/widget/src/beos/nsWindow.h index cc74a387cc7d..af54d55c3487 100644 --- a/widget/src/beos/nsWindow.h +++ b/widget/src/beos/nsWindow.h @@ -48,8 +48,6 @@ #include "nsIWidget.h" -#include "nsIMenuBar.h" - #include "nsIMouseListener.h" #include "nsIEventListener.h" #include "nsString.h" @@ -164,7 +162,7 @@ public: NS_IMETHOD SetColorMap(nsColorMap *aColorMap); NS_IMETHOD Scroll(PRInt32 aDx, PRInt32 aDy, nsRect *aClipRect); NS_IMETHOD SetTitle(const nsAString& aTitle); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/cocoa/Makefile.in b/widget/src/cocoa/Makefile.in index 61a93e319905..112a4f153940 100644 --- a/widget/src/cocoa/Makefile.in +++ b/widget/src/cocoa/Makefile.in @@ -66,7 +66,7 @@ REQUIRES = xpcom \ intl \ exthandler \ appshell \ - lcms \ + lcms \ thebes \ js \ xpconnect \ @@ -84,8 +84,6 @@ endif EXPORTS = \ mozView.h \ nsChangeObserver.h \ - nsIMenu.h \ - nsIMenuItem.h \ $(NULL) CMMSRCS = \ @@ -95,6 +93,7 @@ CMMSRCS = \ nsMenuBarX.mm \ nsMenuItemX.mm \ nsMenuItemIconX.mm \ + nsMenuUtilsX.mm \ nsFilePicker.mm \ nsDragService.mm \ nsToolkit.mm \ diff --git a/widget/src/cocoa/nsChildView.h b/widget/src/cocoa/nsChildView.h index fe69c3692020..3ea7e64e1a34 100644 --- a/widget/src/cocoa/nsChildView.h +++ b/widget/src/cocoa/nsChildView.h @@ -61,7 +61,6 @@ #include "nsIEventListener.h" #include "nsString.h" #include "nsIDragService.h" -#include "nsIMenuBar.h" #include "nsplugindefs.h" @@ -291,7 +290,7 @@ public: void LocalToWindowCoordinate(nscoord& aX, nscoord& aY) { ConvertToDeviceCoordinates(aX, aY); } void LocalToWindowCoordinate(nsRect& aRect) { ConvertToDeviceCoordinates(aRect.x, aRect.y); } - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); + NS_IMETHOD SetMenuBar(void* aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD GetPreferredSize(PRInt32& aWidth, PRInt32& aHeight); @@ -305,6 +304,8 @@ public: NS_IMETHOD GetAttention(PRInt32 aCycleCount); + NS_IMETHOD ActivateNativeMenuItemAt(const nsAString& indexString); + // nsIPluginWidget NS_IMETHOD GetPluginClipRect(nsRect& outClipRect, nsPoint& outOrigin, PRBool& outWidgetVisible); NS_IMETHOD StartDrawPlugin(); diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm index 2cc6e1109a49..6382817e0049 100644 --- a/widget/src/cocoa/nsChildView.mm +++ b/widget/src/cocoa/nsChildView.mm @@ -960,7 +960,7 @@ NS_IMETHODIMP nsChildView::SetColorMap(nsColorMap *aColorMap) } -NS_IMETHODIMP nsChildView::SetMenuBar(nsIMenuBar * aMenuBar) +NS_IMETHODIMP nsChildView::SetMenuBar(void* aMenuBar) { return NS_ERROR_FAILURE; // subviews don't have menu bars } @@ -1362,6 +1362,51 @@ nsresult nsChildView::SynthesizeNativeKeyEvent(PRInt32 aNativeKeyboardLayout, NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +// Used for testing native menu system structure and event handling. +NS_IMETHODIMP nsChildView::ActivateNativeMenuItemAt(const nsAString& indexString) +{ + NSString* title = [NSString stringWithCharacters:indexString.BeginReading() length:indexString.Length()]; + NSArray* indexes = [title componentsSeparatedByString:@"|"]; + unsigned int indexCount = [indexes count]; + if (indexCount == 0) + return NS_OK; + + NSMenu* currentSubmenu = [NSApp mainMenu]; + for (unsigned int i = 0; i < (indexCount - 1); i++) { + NSMenu* newSubmenu = nil; + int targetIndex; + // We remove the application menu from consideration for the top-level menu + if (i == 0) + targetIndex = [[indexes objectAtIndex:i] intValue] + 1; + else + targetIndex = [[indexes objectAtIndex:i] intValue]; + int itemCount = [currentSubmenu numberOfItems]; + if (targetIndex < itemCount) { + NSMenuItem* menuItem = [currentSubmenu itemAtIndex:targetIndex]; + if ([menuItem hasSubmenu]) + newSubmenu = [menuItem submenu]; + } + + if (newSubmenu) + currentSubmenu = newSubmenu; + else + return NS_ERROR_FAILURE; + } + + int itemCount = [currentSubmenu numberOfItems]; + int targetIndex = [[indexes objectAtIndex:(indexCount - 1)] intValue]; + if (targetIndex < itemCount) { + // NSLog(@"Performing action for native menu item titled: %@\n", + // [[currentSubmenu itemAtIndex:targetIndex] title]); + [currentSubmenu performActionForItemAtIndex:targetIndex]; + } + else { + return NS_ERROR_FAILURE; + } + + return NS_OK; +} + #pragma mark - diff --git a/widget/src/cocoa/nsCocoaUtils.mm b/widget/src/cocoa/nsCocoaUtils.mm index 750f1a6680e9..ea4c404d7262 100644 --- a/widget/src/cocoa/nsCocoaUtils.mm +++ b/widget/src/cocoa/nsCocoaUtils.mm @@ -47,6 +47,7 @@ #include "nsIXULWindow.h" #include "nsIBaseWindow.h" #include "nsIServiceManager.h" +#include "nsMenuUtilsX.h" float nsCocoaUtils::MenuBarScreenHeight() { @@ -191,7 +192,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; @@ -212,7 +213,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() [firstMenuItem release]; // Add standard edit menu - [newMenuBar addItem:MenuHelpersX::GetStandardEditMenuItem()]; + [newMenuBar addItem:nsMenuUtilsX::GetStandardEditMenuItem()]; // Show the new menu bar [NSApp setMainMenu:newMenuBar]; @@ -228,7 +229,7 @@ void nsCocoaUtils::CleanUpAfterNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; diff --git a/widget/src/cocoa/nsCocoaWindow.h b/widget/src/cocoa/nsCocoaWindow.h index d2b5fdea8f90..f0d44165300b 100644 --- a/widget/src/cocoa/nsCocoaWindow.h +++ b/widget/src/cocoa/nsCocoaWindow.h @@ -46,9 +46,11 @@ #include "nsBaseWidget.h" #include "nsPIWidgetCocoa.h" +#include "nsAutoPtr.h" class nsCocoaWindow; class nsChildView; +class nsMenuBarX; typedef struct _nsCocoaWindowList { _nsCocoaWindowList() : prev(NULL), window(NULL) {} @@ -210,8 +212,8 @@ public: NS_IMETHOD SetModal(PRBool aState); NS_IMETHOD IsVisible(PRBool & aState); NS_IMETHOD SetFocus(PRBool aState=PR_FALSE); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); - virtual nsIMenuBar* GetMenuBar(); + NS_IMETHOD SetMenuBar(void* aMenuBar); + virtual nsMenuBarX* GetMenuBar(); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); @@ -275,7 +277,7 @@ protected: nsIWidget* mParent; // if we're a popup, this is our parent [WEAK] NSWindow* mWindow; // our cocoa window [STRONG] WindowDelegate* mDelegate; // our delegate for processing window msgs [STRONG] - nsCOMPtr mMenuBar; + nsRefPtr mMenuBar; NSWindow* mSheetWindowParent; // if this is a sheet, this is the NSWindow it's attached to nsChildView* mPopupContentView; // if this is a popup, this is its content widget diff --git a/widget/src/cocoa/nsCocoaWindow.mm b/widget/src/cocoa/nsCocoaWindow.mm index 704d23b63453..c0d19fac4f1a 100644 --- a/widget/src/cocoa/nsCocoaWindow.mm +++ b/widget/src/cocoa/nsCocoaWindow.mm @@ -64,6 +64,7 @@ #include "nsPIDOMWindow.h" #include "nsIDOMElement.h" #include "nsMenuBarX.h" +#include "nsMenuUtilsX.h" #include "gfxPlatform.h" #include "lcms.h" @@ -1117,13 +1118,6 @@ NS_IMETHODIMP nsCocoaWindow::GetChildSheet(PRBool aShown, nsCocoaWindow** _retva } -NS_IMETHODIMP nsCocoaWindow::GetMenuBar(nsIMenuBar** menuBar) -{ - *menuBar = mMenuBar; - return NS_OK; -} - - NS_IMETHODIMP nsCocoaWindow::GetRealParent(nsIWidget** parent) { *parent = mParent; @@ -1200,15 +1194,15 @@ nsCocoaWindow::ReportSizeEvent(NSRect *r) } -NS_IMETHODIMP nsCocoaWindow::SetMenuBar(nsIMenuBar *aMenuBar) +NS_IMETHODIMP nsCocoaWindow::SetMenuBar(void *aMenuBar) { if (mMenuBar) mMenuBar->SetParent(nsnull); - mMenuBar = aMenuBar; + mMenuBar = static_cast(aMenuBar); // We paint the hidden window menu bar if no other menu bar has been painted // yet so that some reasonable menu bar is displayed when the app starts up. - if (!gSomeMenuBarPainted && mMenuBar && (MenuHelpersX::GetHiddenWindowMenuBar() == mMenuBar)) + if (!gSomeMenuBarPainted && mMenuBar && (nsMenuUtilsX::GetHiddenWindowMenuBar() == mMenuBar)) mMenuBar->Paint(); return NS_OK; @@ -1264,7 +1258,7 @@ NS_IMETHODIMP nsCocoaWindow::ScreenToWidget(const nsRect& aOldRect, nsRect& aNew } -nsIMenuBar* nsCocoaWindow::GetMenuBar() +nsMenuBarX* nsCocoaWindow::GetMenuBar() { return mMenuBar; } @@ -1410,7 +1404,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() nsCocoaWindow* geckoWidget = [windowDelegate geckoWidget]; NS_ASSERTION(geckoWidget, "Window delegate not returning a gecko widget!"); - nsIMenuBar* geckoMenuBar = geckoWidget->GetMenuBar(); + nsMenuBarX* geckoMenuBar = geckoWidget->GetMenuBar(); if (geckoMenuBar) { geckoMenuBar->Paint(); } @@ -1498,7 +1492,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() // app modally. If one of those is up then we want it to retain its menu bar. if ([NSApp _isRunningAppModal]) return; - nsCOMPtr hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsRefPtr hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (hiddenWindowMenuBar) { // printf("painting hidden window menu bar due to window losing main status\n"); hiddenWindowMenuBar->Paint(); diff --git a/widget/src/cocoa/nsIMenu.h b/widget/src/cocoa/nsIMenu.h deleted file mode 100644 index 55fb8528004d..000000000000 --- a/widget/src/cocoa/nsIMenu.h +++ /dev/null @@ -1,240 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenu_h__ -#define nsIMenu_h__ - -#include "nsISupports.h" -#include "nsStringFwd.h" -#include "nsEvent.h" - -class nsIMenuBar; -class nsIMenu; -class nsIMenuItem; -class nsIContent; -class nsIWidget; -class nsMenuBarX; - - -// 9225136B-3F56-4CA3-92E0-623D5FB8356B -#define NS_IMENU_IID \ -{ 0x9225136B, 0x3F56, 0x4CA3, \ - { 0x92, 0xE0, 0x62, 0x3D, 0x5F, 0xB8, 0x35, 0x6B } } - -/** - * Menu widget - */ -class nsIMenu : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENU_IID) - - /** - * Creates the Menu - * - */ - NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; - - /** - * Get the Menu's Parent. This addrefs. - * - */ - NS_IMETHOD GetParent(nsISupports *&aParent) = 0; - - /** - * Get the Menu label - * - */ - NS_IMETHOD GetLabel(nsString &aText) = 0; - - /** - * Set the Menu label - * - */ - NS_IMETHOD SetLabel(const nsAString &aText) = 0; - - /** - * Get the Menu Access Key - * - */ - NS_IMETHOD GetAccessKey(nsString &aText) = 0; - - /** - * Set the Menu Access Key - * - */ - NS_IMETHOD SetAccessKey(const nsAString &aText) = 0; - - /** - * Set the Menu enabled state - * - */ - NS_IMETHOD SetEnabled(PRBool aIsEnabled) = 0; - - /** - * Get the Menu enabled state - * - */ - NS_IMETHOD GetEnabled(PRBool* aIsEnabled) = 0; - - /** - * Adds a Menu Item. Do not use outside of widget menu implementations. - * Add and modify menu items via DOM content. - * - */ - NS_IMETHOD AddItem(nsISupports* aItem) = 0; - - /** - * Returns the number of visible menu items - * This includes separators. It does not include hidden items. - * - */ - NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu or Menu Item at a specified Index. - * This includes separators. It does not include hidden items. - * - */ - NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; - - /** - * Returns the number of menu items - * This includes separators. It -does- include hidden items. - * - */ - NS_IMETHOD GetItemCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu or Menu Item at a specified Index. - * This includes separators. It -does- include hidden items. - * - */ - NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; - - /** - * Inserts a Menu Item at a specified Index - * - */ - NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) = 0; - - /** - * Removes an Menu Item from a specified Index - * - */ - NS_IMETHOD RemoveItem(const PRUint32 aPos) = 0; - - /** - * Removes all the Menu Items - * - */ - NS_IMETHOD RemoveAll() = 0; - - /** - * Gets Native MenuHandle - * - */ - NS_IMETHOD GetNativeData(void** aData) = 0; - - /** - * Sets Native MenuHandle - * - */ - NS_IMETHOD SetNativeData(void* aData) = 0; - - /** - * Get menu content - * - */ - NS_IMETHOD GetMenuContent(nsIContent ** aMenuContent) = 0; - - /** - * Enable/disable native widget for a particular nsIMenuItem - * - */ - NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, - PRBool aEnabled) = 0; - - /** - * Retrieve the native menu and the index of the item within that menu. - * - */ - NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex) = 0; - - /** - * Sets an appropriate icon for the menu. - * - */ - NS_IMETHOD SetupIcon() = 0; - - /** - * Menu has been selected - * - */ - virtual nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Menu has been deselected - * - */ - virtual void MenuDeselected(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Construct menu - * - */ - virtual void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; - - /** - * Destruct menu - * - */ - virtual void MenuDestruct(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Set rebuild - * - */ - virtual void SetRebuild(PRBool aMenuEvent) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenu, NS_IMENU_IID) - -#endif diff --git a/widget/src/cocoa/nsIMenuItem.h b/widget/src/cocoa/nsIMenuItem.h deleted file mode 100644 index 7d648527f516..000000000000 --- a/widget/src/cocoa/nsIMenuItem.h +++ /dev/null @@ -1,156 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenuItem_h__ -#define nsIMenuItem_h__ - -#include "prtypes.h" -#include "nsISupports.h" -#include "nsString.h" - -#include "nsIDOMElement.h" - -// 33FA04E3-EAFE-4DD1-AFB3-B3BC8C712716 -#define NS_IMENUITEM_IID \ -{ 0x33FA04E3, 0xEAFE, 0x4DD1, \ - { 0xAF, 0xB3, 0xB3, 0xBC, 0x8C, 0x71, 0x27, 0x16 } } - -class nsIMenu; -class nsIWidget; -class nsIContent; -class nsMenuBarX; - -enum { - knsMenuItemNoModifier = 0, - knsMenuItemShiftModifier = (1 << 0), - knsMenuItemAltModifier = (1 << 1), - knsMenuItemControlModifier = (1 << 2), - knsMenuItemCommandModifier = (1 << 3) -}; - -/** - * MenuItem widget - */ -class nsIMenuItem : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUITEM_IID) - - enum EMenuItemType { eRegular = 0, eCheckbox, eRadio, eSeparator} ; - - /** - * Creates the MenuItem - * - */ - NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; - - /** - * Get the MenuItem label - * - */ - NS_IMETHOD GetLabel(nsString &aText) = 0; - - /** - * Get the Menu shortcut char - * - */ - NS_IMETHOD GetShortcutChar(nsString &aText) = 0; - - /** - * Gets whether the item is enabled or disabled - * - */ - NS_IMETHOD GetEnabled(PRBool *aIsEnabled) = 0; - - /** - * Sets whether the item is checked or not - * - */ - NS_IMETHOD SetChecked(PRBool aIsEnabled) = 0; - - /** - * Gets whether the item is checked or not - * - */ - NS_IMETHOD GetChecked(PRBool *aIsEnabled) = 0; - - /** - * Gets whether the item is a checkbox or radio - * - */ - NS_IMETHOD GetMenuItemType(EMenuItemType *aType) = 0; - - /** - * Gets Native Menu Handle - * - */ - NS_IMETHOD GetNativeData(void*& aData) = 0; - - /** - * Indicates whether it is a separator - * - */ - NS_IMETHOD IsSeparator(PRBool & aIsSep) = 0; - - /** - * Executes the "cached" JavaScript Command - * @return NS_OK if the command was executed properly, otherwise an error code - */ - NS_IMETHOD DoCommand() = 0; - - /** - * Sends a DOM event to the menu item's content node - * @return NS_OK if the event was sent properly, otherwise an error code - */ - NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) = 0; - - /** - * Sets an appropriate icon for the menu item. - */ - NS_IMETHOD SetupIcon() = 0; - - /** - * Get GetMenuItemContent - * - */ - NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuItem, NS_IMENUITEM_IID) - -#endif diff --git a/widget/src/cocoa/nsMenuBarX.h b/widget/src/cocoa/nsMenuBarX.h index c2cffe0fff53..bc456e169d5d 100644 --- a/widget/src/cocoa/nsMenuBarX.h +++ b/widget/src/cocoa/nsMenuBarX.h @@ -39,35 +39,29 @@ #ifndef nsMenuBarX_h_ #define nsMenuBarX_h_ -#include "nsIMenuBar.h" -#include "nsObjCExceptions.h" +#import + +#include "nsMenuBaseX.h" #include "nsIMutationObserver.h" -#include "nsCOMArray.h" #include "nsHashtable.h" -#include "nsWeakReference.h" -#include "nsIContent.h" +#include "nsINativeMenuService.h" +#include "nsAutoPtr.h" -#import -#import - -class nsIWidget; -class nsIDocument; -class nsIDOMNode; +class nsMenuX; +class nsMenuItemX; class nsChangeObserver; +class nsIWidget; +class nsIContent; +class nsIDocument; -extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); -PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); - -namespace MenuHelpersX +// The native menu service for creating native menu bars. +class nsNativeMenuServiceX : public nsINativeMenuService { - nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); - NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); - PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); - unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); - nsIMenuBar* GetHiddenWindowMenuBar(); - NSMenuItem* GetStandardEditMenuItem(); -} +public: + NS_DECL_ISUPPORTS + NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode); +}; // Objective-C class used to allow us to have keyboard commands @@ -76,8 +70,8 @@ namespace MenuHelpersX @interface GeckoNSMenu : NSMenu { } -- (BOOL)performKeyEquivalent:(NSEvent *)theEvent; -- (void)actOnKeyEquivalent:(NSEvent *)theEvent; +- (BOOL)performKeyEquivalent:(NSEvent*)theEvent; +- (void)actOnKeyEquivalent:(NSEvent*)theEvent; - (void)performMenuUserInterfaceEffectsForEvent:(NSEvent*)theEvent; @end @@ -90,73 +84,59 @@ namespace MenuHelpersX @end -// -// Native menu bar wrapper -// - -class nsMenuBarX : public nsIMenuBar, - public nsIMutationObserver, - public nsSupportsWeakReference +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuBarX : public nsMenuObjectX, + public nsIMutationObserver { public: - nsMenuBarX(); - virtual ~nsMenuBarX(); + nsMenuBarX(); + virtual ~nsMenuBarX(); - // |NSMenuItem|s target Objective-C objects - static NativeMenuItemTarget* sNativeEventTarget; - - static nsMenuBarX* sLastGeckoMenuBarPainted; - - NS_DECL_ISUPPORTS + static NativeMenuItemTarget* sNativeEventTarget; + static nsMenuBarX* sLastGeckoMenuBarPainted; - // nsIMutationObserver - NS_DECL_NSIMUTATIONOBSERVER + // The following content nodes have been removed from the menu system. + // We save them here for use in command handling. + nsCOMPtr mAboutItemContent; + nsCOMPtr mPrefItemContent; + nsCOMPtr mQuitItemContent; - // nsIMenuBar Methods - NS_IMETHOD Create(nsIWidget * aParent); - NS_IMETHOD GetParent(nsIWidget *&aParent); - NS_IMETHOD SetParent(nsIWidget * aParent); - NS_IMETHOD AddMenu(nsIMenu * aMenu); - NS_IMETHOD GetMenuCount(PRUint32 &aCount); - NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); - NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); - NS_IMETHOD RemoveMenu(const PRUint32 aCount); - NS_IMETHOD RemoveAll(); - NS_IMETHOD GetNativeData(void*& aData); - NS_IMETHOD Paint(); - NS_IMETHOD SetNativeData(void* aData); - NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); + NS_DECL_ISUPPORTS + NS_DECL_NSIMUTATIONOBSERVER - PRUint32 RegisterForCommand(nsIMenuItem* aItem); - void UnregisterCommand(PRUint32 aCommandID); - nsIMenuItem* GetMenuItemForCommandID(PRUint32 inCommandID); + // nsMenuObjectX + void* NativeData() {return (void*)mRootMenu;} + nsMenuObjectTypeX MenuObjectType() {return eMenuBarObjectType;} - void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); - void UnregisterForContentChanges(nsIContent* aContent); - nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); + // nsMenuBarX + nsresult Create(nsIWidget* aParent, nsIContent* aContent); + void SetParent(nsIWidget* aParent); + void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); + void UnregisterForContentChanges(nsIContent* aContent); + PRUint32 RegisterForCommand(nsMenuItemX* aItem); + void UnregisterCommand(PRUint32 aCommandID); + PRUint32 GetMenuCount(); + nsMenuX* GetMenuAt(PRUint32 aIndex); + nsMenuItemX* GetMenuItemForCommandID(PRUint32 inCommandID); + nsresult Paint(); - nsCOMPtr mAboutItemContent; // holds the content node for the about item that has - // been removed from the menubar - nsCOMPtr mPrefItemContent; // as above, but for prefs - nsCOMPtr mQuitItemContent; // as above, but for quit protected: - // Make our menubar conform to Aqua UI guidelines - void AquifyMenuBar(); - void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); + nsresult AddMenu(nsMenuX* aMenu); + void RemoveMenu(PRUint32 aIndex); + nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); + void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); + void AquifyMenuBar(); + NSMenuItem* CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, + int tag, NativeMenuItemTarget* target); + nsresult CreateApplicationMenu(nsMenuX* inMenu); - // build the Application menu shared by all menu bars. - NSMenuItem* CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, - int tag, NativeMenuItemTarget* target); - nsresult CreateApplicationMenu(nsIMenu* inMenu); - - nsCOMArray mMenusArray; // holds refs - nsCOMPtr mMenuBarContent; // menubar content node, strong ref - nsIWidget* mParent; // weak ref - PRBool mIsMenuBarAdded; - PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks - nsIDocument* mDocument; // pointer to document - GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar - nsHashtable mObserverTable; // stores observers for content change notification + nsTArray< nsAutoPtr > mMenuArray; + nsIWidget* mParent; // [weak] + PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks + nsIDocument* mDocument; // pointer to document + GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar + nsHashtable mObserverTable; // stores observers for content change notification }; #endif // nsMenuBarX_h_ diff --git a/widget/src/cocoa/nsMenuBarX.mm b/widget/src/cocoa/nsMenuBarX.mm index fb46cddb4693..dc1764d3cbc0 100644 --- a/widget/src/cocoa/nsMenuBarX.mm +++ b/widget/src/cocoa/nsMenuBarX.mm @@ -36,37 +36,28 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsCOMPtr.h" -#include "nsIServiceManager.h" -#include "nsIComponentManager.h" -#include "nsINameSpaceManager.h" -#include "nsIMenu.h" -#include "nsIMenuItem.h" -#include "nsIContent.h" - #include "nsMenuBarX.h" #include "nsMenuX.h" -#include "nsChildView.h" +#include "nsMenuItemX.h" +#include "nsMenuUtilsX.h" #include "nsCocoaUtils.h" #include "nsCocoaWindow.h" -#include "nsISupports.h" -#include "nsIWidget.h" +#include "nsCOMPtr.h" #include "nsString.h" -#include "nsIStringBundle.h" -#include "nsIDocument.h" -#include "nsIMutationObserver.h" - -#include "nsIDOMDocument.h" #include "nsWidgetAtoms.h" - #include "nsGUIEvent.h" +#include "nsObjCExceptions.h" +#include "nsHashtable.h" +#include "nsThreadUtils.h" -// CIDs -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); +#include "nsIContent.h" +#include "nsIWidget.h" +#include "nsIDocument.h" +#include "nsIDOMDocument.h" +#include "nsIDOMElement.h" -NS_IMPL_ISUPPORTS3(nsMenuBarX, nsIMenuBar, nsIMutationObserver, nsISupportsWeakReference) +NS_IMPL_ISUPPORTS1(nsMenuBarX, nsIMutationObserver) NativeMenuItemTarget* nsMenuBarX::sNativeEventTarget = nil; nsMenuBarX* nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; @@ -92,18 +83,22 @@ enum { }; -PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent) +NS_IMPL_ISUPPORTS1(nsNativeMenuServiceX, nsINativeMenuService) + +NS_IMETHODIMP nsNativeMenuServiceX::CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode) { - return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)); + NS_ASSERTION(NS_IsMainThread(), "Attempting to create native menu bar on wrong thread!"); + + nsRefPtr mb = new nsMenuBarX(); + if (!mb) + return NS_ERROR_OUT_OF_MEMORY; + + return mb->Create(aParent, aMenuBarNode); } nsMenuBarX::nsMenuBarX() : mParent(nsnull), - mIsMenuBarAdded(PR_FALSE), mCurrentCommandID(eCommand_ID_Last), mDocument(nsnull) { @@ -122,8 +117,6 @@ nsMenuBarX::~nsMenuBarX() if (nsMenuBarX::sLastGeckoMenuBarPainted == this) nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; - mMenusArray.Clear(); // release all menus - // the quit/pref items of a random window might have been used if there was no // hidden window, thus we need to invalidate the weak references. if (sAboutItemContent == mAboutItemContent) @@ -136,18 +129,174 @@ nsMenuBarX::~nsMenuBarX() // make sure we unregister ourselves as a document observer if (mDocument) mDocument->RemoveMutationObserver(this); - + + // We have to manually clear the array here because clearing causes menu items + // to call back into the menu bar to unregister themselves. We don't want to + // depend on member variable ordering to ensure that the array gets cleared + // before the registration hash table is destroyed. + mMenuArray.Clear(); + [mRootMenu release]; NS_OBJC_END_TRY_ABORT_BLOCK; } -// Do what's necessary to conform to the Aqua guidelines for menus. -void -nsMenuBarX::AquifyMenuBar() +nsresult nsMenuBarX::Create(nsIWidget* aParent, nsIContent* aContent) { - nsCOMPtr domDoc(do_QueryInterface(mMenuBarContent->GetDocument())); + if (!aParent || !aContent) + return NS_ERROR_INVALID_ARG; + + mParent = aParent; + mContent = aContent; + + AquifyMenuBar(); + + nsIDocument* doc = aContent->GetOwnerDoc(); + if (!doc) + return NS_ERROR_FAILURE; + doc->AddMutationObserver(this); + mDocument = doc; + + PRUint32 count = mContent->GetChildCount(); + for (PRUint32 i = 0; i < count; i++) { + nsIContent *menuContent = mContent->GetChildAt(i); + if (menuContent) { + if (menuContent->Tag() == nsWidgetAtoms::menu && + menuContent->IsNodeOfType(nsINode::eXUL)) { + nsAutoString menuName; + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); + nsMenuX* newMenu = new nsMenuX(); + if (newMenu) { + nsresult rv = newMenu->Create(this, menuName, this, menuContent); + if (NS_SUCCEEDED(rv)) + AddMenu(newMenu); + else + delete newMenu; + } + } + } + } + + // Give this to the parent window. The parent takes ownership. + return mParent->SetMenuBar(this); +} + + +PRUint32 nsMenuBarX::GetMenuCount() +{ + return mMenuArray.Length(); +} + + +nsresult nsMenuBarX::AddMenu(nsMenuX* aMenu) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + // If we haven't created a global Application menu yet, do it. + if (!sApplicationMenu) { + nsresult rv = NS_OK; // avoid warning about rv being unused + rv = CreateApplicationMenu(aMenu); + NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); + + // Hook the new Application menu up to the menu bar. + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; + } + + // keep track of all added menus + mMenuArray.AppendElement(aMenu); // owner + + NSMenu* nativeMenu = (NSMenu*)aMenu->NativeData(); + nsIContent* menuContent = aMenu->Content(); + if (menuContent->GetChildCount() > 0 && + !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { + NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; + [mRootMenu addItem:newMenuItem]; + [newMenuItem setSubmenu:nativeMenu]; + } + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +void nsMenuBarX::RemoveMenu(PRUint32 aIndex) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + NS_ASSERTION(aIndex < mMenuArray.Length(), "Attempting submenu removal with bad index!"); + + // Our native menu and our internal menu object array might be out of sync. + // This happens, for example, when a submenu is hidden. Because of this we + // should not assume that a native submenu is hooked up. + [mRootMenu removeItem:(mMenuArray[aIndex]->NativeMenuItem())]; + mMenuArray.RemoveElementAt(aIndex); + + NS_OBJC_END_TRY_ABORT_BLOCK; +} + + +nsMenuX* nsMenuBarX::GetMenuAt(PRUint32 aIndex) +{ + if (mMenuArray.Length() <= aIndex) { + NS_ERROR("Requesting menu at invalid index!"); + return NULL; + } + return mMenuArray[aIndex]; +} + + +nsresult nsMenuBarX::Paint() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + + // Swap out first item into incoming menu bar. We have to keep the same menu item for the + // Application menu and its submenu is global so we keep passing it along. + NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; + [mainMenu removeItemAtIndex:0]; + [mRootMenu insertItem:firstMenuItem atIndex:0]; + [firstMenuItem release]; + + // Set menu bar and event target. + [NSApp setMainMenu:mRootMenu]; + nsMenuBarX::sLastGeckoMenuBarPainted = this; + + gSomeMenuBarPainted = YES; + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so +// the caller can hang onto it if they so choose. It is acceptable to pass nsull +// for |outHiddenNode| if the caller doesn't care about the hidden node. +void nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) +{ + nsCOMPtr menuItem; + inDoc->GetElementById(inID, getter_AddRefs(menuItem)); + nsCOMPtr menuContent(do_QueryInterface(menuItem)); + if (menuContent) { + menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); + if (outHiddenNode) { + *outHiddenNode = menuContent.get(); + NS_IF_ADDREF(*outHiddenNode); + } + } +} + + +// Do what is necessary to conform to the Aqua guidelines for menus. +void nsMenuBarX::AquifyMenuBar() +{ + nsCOMPtr domDoc(do_QueryInterface(mContent->GetDocument())); if (domDoc) { // remove the "About..." item and its separator HideItem(domDoc, NS_LITERAL_STRING("aboutSeparator"), nsnull); @@ -177,145 +326,13 @@ nsMenuBarX::AquifyMenuBar() } -// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so -// the caller can hang onto it if they so choose. It is acceptable to pass nsull -// for |outHiddenNode| if the caller doesn't care about the hidden node. -void -nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) -{ - nsCOMPtr menuItem; - inDoc->GetElementById(inID, getter_AddRefs(menuItem)); - nsCOMPtr menuContent(do_QueryInterface(menuItem)); - if (menuContent) { - menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); - if (outHiddenNode) { - *outHiddenNode = menuContent.get(); - NS_IF_ADDREF(*outHiddenNode); - } - } -} - - -NS_IMETHODIMP -nsMenuBarX::MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget* aParentWindow, void * aMenubarNode) -{ - nsIDOMNode* domNode = static_cast(aMenubarNode); - mMenuBarContent = do_QueryInterface(domNode); // strong ref - NS_ASSERTION(mMenuBarContent, "No content specified for this menubar"); - if (!mMenuBarContent) - return NS_ERROR_FAILURE; - - SetParent(aParentWindow); - - AquifyMenuBar(); - - nsCOMPtr domDoc; - domNode->GetOwnerDocument(getter_AddRefs(domDoc)); - nsCOMPtr doc(do_QueryInterface(domDoc)); - if (!doc) - return NS_ERROR_FAILURE; - doc->AddMutationObserver(this); - mDocument = doc; - - PRUint32 count = mMenuBarContent->GetChildCount(); - for (PRUint32 i = 0; i < count; i++) { - nsIContent *menu = mMenuBarContent->GetChildAt(i); - if (menu) { - if (menu->Tag() == nsWidgetAtoms::menu && - menu->IsNodeOfType(nsINode::eXUL)) { - nsAutoString menuName; - nsAutoString menuAccessKey(NS_LITERAL_STRING(" ")); - menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); - menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::accesskey, menuAccessKey); - - // Create nsMenu, the menubar will own it - nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); - if (pnsMenu) { - pnsMenu->Create(static_cast(this), menuName, menuAccessKey, this, menu); - AddMenu(pnsMenu); - } - } - } - } - - // Give the aParentWindow this nsMenuBarX to hold onto. - // The parent takes ownership. - aParentWindow->SetMenuBar(this); - - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::Create(nsIWidget *aParent) -{ - SetParent(aParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::GetParent(nsIWidget *&aParent) -{ - NS_IF_ADDREF(aParent = mParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::SetParent(nsIWidget *aParent) -{ - mParent = aParent; // weak ref - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::AddMenu(nsIMenu * aMenu) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - // If we haven't created a global Application menu yet, do it. - if (!sApplicationMenu) { - nsresult rv = NS_OK; // avoid warning about rv being unused - rv = CreateApplicationMenu(aMenu); - NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); - - // Hook the new Application menu up to the menu bar. - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; - } - - // keep track of all added menus - mMenusArray.AppendObject(aMenu); // owner - - NSMenu* nativeMenu = NULL; - aMenu->GetNativeData((void**)&nativeMenu); - - nsCOMPtr menu; - aMenu->GetMenuContent(getter_AddRefs(menu)); - if (menu->GetChildCount() > 0 && - !NodeIsHiddenOrCollapsed(menu)) { - NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; - [mRootMenu addItem:newMenuItem]; - [newMenuItem setSubmenu:nativeMenu]; - } - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - // for creating menu items destined for the Application menu -NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, +NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, int tag, NativeMenuItemTarget* target) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - nsCOMPtr menu; - inMenu->GetMenuContent(getter_AddRefs(menu)); - if (!menu) - return nil; - - nsCOMPtr doc = menu->GetDocument(); + nsCOMPtr doc = inMenu->Content()->GetDocument(); if (!doc) return nil; @@ -356,8 +373,8 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString // now grab the key equivalent modifiers nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 geckoModifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); - macKeyModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(geckoModifiers); + PRUint8 geckoModifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); + macKeyModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(geckoModifiers); } } // get the label into NSString-form @@ -382,8 +399,7 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString // build the Application menu shared by all menu bars -nsresult -nsMenuBarX::CreateApplicationMenu(nsIMenu* inMenu) +nsresult nsMenuBarX::CreateApplicationMenu(nsMenuX* inMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -536,111 +552,33 @@ nsMenuBarX::CreateApplicationMenu(nsIMenu* inMenu) } -NS_IMETHODIMP nsMenuBarX::GetMenuCount(PRUint32 &aCount) +void nsMenuBarX::SetParent(nsIWidget* aParent) { - aCount = mMenusArray.Count(); - return NS_OK; + mParent = aParent; } - -NS_IMETHODIMP nsMenuBarX::GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) -{ - aMenu = NULL; - nsCOMPtr menu = mMenusArray.ObjectAt(aCount); - if (!menu) - return NS_OK; - - return CallQueryInterface(menu, &aMenu); // addref -} - - -NS_IMETHODIMP nsMenuBarX::InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::RemoveMenu(const PRUint32 aCount) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - mMenusArray.RemoveObjectAt(aCount); - [mRootMenu removeItemAtIndex:aCount]; - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -NS_IMETHODIMP nsMenuBarX::RemoveAll() -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::GetNativeData(void *& aData) -{ - aData = (void*)mRootMenu; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::SetNativeData(void* aData) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::Paint() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - - // Swap out first item into incoming menu bar. We have to keep the same menu item for the - // Application menu and its submenu is global so we keep passing it along. - NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; - [mainMenu removeItemAtIndex:0]; - [mRootMenu insertItem:firstMenuItem atIndex:0]; - [firstMenuItem release]; - - // Set menu bar and event target. - [NSApp setMainMenu:mRootMenu]; - nsMenuBarX::sLastGeckoMenuBarPainted = this; - - gSomeMenuBarPainted = YES; - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - // // nsIMutationObserver // -void -nsMenuBarX::CharacterDataWillChange(nsIDocument * aDocument, - nsIContent * aContent, - CharacterDataChangeInfo * aInfo) -{ -} - -void -nsMenuBarX::CharacterDataChanged(nsIDocument * aDocument, - nsIContent * aContent, - CharacterDataChangeInfo * aInfo) +void nsMenuBarX::CharacterDataWillChange(nsIDocument* aDocument, + nsIContent* aContent, + CharacterDataChangeInfo* aInfo) { } -void -nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, - PRInt32 aNewIndexInContainer) +void nsMenuBarX::CharacterDataChanged(nsIDocument* aDocument, + nsIContent* aContent, + CharacterDataChangeInfo* aInfo) { - if (aContainer != mMenuBarContent) { +} + + +void nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, + PRInt32 aNewIndexInContainer) +{ + if (aContainer != mContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aContainer, aNewIndexInContainer); @@ -656,17 +594,15 @@ nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, } -void -nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) +void nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) { mDocument = nsnull; } -void -nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, - PRInt32 aNameSpaceID, nsIAtom * aAttribute, - PRInt32 aModType, PRUint32 aStateMask) +void nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, + PRInt32 aNameSpaceID, nsIAtom * aAttribute, + PRInt32 aModType, PRUint32 aStateMask) { // lookup and dispatch to registered thang nsChangeObserver* obs = LookupContentChangeObserver(aContent); @@ -675,11 +611,10 @@ nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, } -void -nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer == mMenuBarContent) { + if (aContainer == mContent) { UnregisterForContentChanges(aChild); RemoveMenu(aIndexInContainer); } @@ -700,11 +635,10 @@ nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, } -void -nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer != mMenuBarContent) { + if (aContainer != mContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aChild, aIndexInContainer); @@ -720,8 +654,7 @@ nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, } -void -nsMenuBarX::ParentChainChanged(nsIContent *aContent) +void nsMenuBarX::ParentChainChanged(nsIContent *aContent) { } @@ -730,24 +663,21 @@ nsMenuBarX::ParentChainChanged(nsIContent *aContent) // lifetime of all these items is bounded by the lifetime of the menubar. No need to add // any more strong refs to the picture because the containment hierarchy already uses // strong refs. -void -nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) +void nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) { nsVoidKey key(aContent); mObserverTable.Put(&key, aMenuObject); } -void -nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) +void nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) { nsVoidKey key(aContent); mObserverTable.Remove(&key); } -nsChangeObserver* -nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) +nsChangeObserver* nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) { nsVoidKey key(aContent); return reinterpret_cast(mObserverTable.Get(&key)); @@ -756,8 +686,7 @@ nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) // Given a menu item, creates a unique 4-character command ID and // maps it to the item. Returns the id for use by the client. -PRUint32 -nsMenuBarX::RegisterForCommand(nsIMenuItem* inMenuItem) +PRUint32 nsMenuBarX::RegisterForCommand(nsMenuItemX* inMenuItem) { // no real need to check for uniqueness. We always start afresh with each // window at 1. Even if we did get close to the reserved Apple command id's, @@ -777,164 +706,17 @@ nsMenuBarX::RegisterForCommand(nsIMenuItem* inMenuItem) // Removes the mapping between the given 4-character command ID // and its associated menu item. -void -nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) +void nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); mObserverTable.Remove(&key); } -nsIMenuItem* -nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) +nsMenuItemX* nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); - return reinterpret_cast(mObserverTable.Get(&key)); -} - - -nsEventStatus -MenuHelpersX::DispatchCommandTo(nsIContent* aTargetContent) -{ - NS_PRECONDITION(aTargetContent, "null ptr"); - - nsEventStatus status = nsEventStatus_eConsumeNoDefault; - nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); - - // FIXME: Should probably figure out how to init this with the actual - // pressed keys, but this is a big old edge case anyway. -dwh - - aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); - return status; -} - - -NSString* MenuHelpersX::CreateTruncatedCocoaLabel(const nsString& itemLabel) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with - // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an - // easy way to compute what this should be given the system font, etc, so we're just going - // to hard code it to something reasonable and bigger fonts will just have to deal. - const short kMaxItemPixelWidth = 300; - NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; - ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); - return label; // caller releases - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; -} - - -PRUint8 MenuHelpersX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) -{ - PRUint8 modifiers = knsMenuItemNoModifier; - char* str = ToNewCString(modifiersAttribute); - char* newStr; - char* token = nsCRT::strtok(str, ", \t", &newStr); - while (token != NULL) { - if (PL_strcmp(token, "shift") == 0) - modifiers |= knsMenuItemShiftModifier; - else if (PL_strcmp(token, "alt") == 0) - modifiers |= knsMenuItemAltModifier; - else if (PL_strcmp(token, "control") == 0) - modifiers |= knsMenuItemControlModifier; - else if ((PL_strcmp(token, "accel") == 0) || - (PL_strcmp(token, "meta") == 0)) { - modifiers |= knsMenuItemCommandModifier; - } - token = nsCRT::strtok(newStr, ", \t", &newStr); - } - nsMemory::Free(str); - - return modifiers; -} - - -unsigned int MenuHelpersX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) -{ - unsigned int macModifiers = 0; - - if (geckoModifiers & knsMenuItemShiftModifier) - macModifiers |= NSShiftKeyMask; - if (geckoModifiers & knsMenuItemAltModifier) - macModifiers |= NSAlternateKeyMask; - if (geckoModifiers & knsMenuItemControlModifier) - macModifiers |= NSControlKeyMask; - if (geckoModifiers & knsMenuItemCommandModifier) - macModifiers |= NSCommandKeyMask; - - return macModifiers; -} - - -nsIMenuBar* MenuHelpersX::GetHiddenWindowMenuBar() -{ - nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); - if (hiddenWindowWidgetNoCOMPtr) - return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); - else - return nsnull; -} - - -// It would be nice if we could localize these edit menu names. -static NSMenuItem* standardEditMenuItem = nil; -NSMenuItem* MenuHelpersX::GetStandardEditMenuItem() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - if (standardEditMenuItem) - return standardEditMenuItem; - - NSMenuItem* standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; - NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; - [standardEditMenuItem setSubmenu:standardEditMenu]; - [standardEditMenu release]; - - // Add Undo - NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; - [standardEditMenu addItem:undoItem]; - [undoItem release]; - - // Add Redo - NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; - [standardEditMenu addItem:redoItem]; - [redoItem release]; - - // Add separator - [standardEditMenu addItem:[NSMenuItem separatorItem]]; - - // Add Cut - NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; - [standardEditMenu addItem:cutItem]; - [cutItem release]; - - // Add Copy - NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; - [standardEditMenu addItem:copyItem]; - [copyItem release]; - - // Add Paste - NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; - [standardEditMenu addItem:pasteItem]; - [pasteItem release]; - - // Add Delete - NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; - [standardEditMenu addItem:deleteItem]; - [deleteItem release]; - - // Add Select All - NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; - [standardEditMenu addItem:selectAllItem]; - [selectAllItem release]; - - standardEditMenuItem = standardEditMenuItem; - - return standardEditMenuItem; - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; + return reinterpret_cast(mObserverTable.Get(&key)); } @@ -1022,13 +804,13 @@ static BOOL gActOnSpecialCommands = YES; nsIContent* mostSpecificContent = sAboutItemContent; if (menuBar && menuBar->mAboutItemContent) mostSpecificContent = menuBar->mAboutItemContent; - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Prefs) { nsIContent* mostSpecificContent = sPrefItemContent; if (menuBar && menuBar->mPrefItemContent) mostSpecificContent = menuBar->mPrefItemContent; - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Quit) { nsIContent* mostSpecificContent = sQuitItemContent; @@ -1038,7 +820,7 @@ static BOOL gActOnSpecialCommands = YES; // message. If you want to stop a quit from happening, provide quit content and return // the event as unhandled. if (mostSpecificContent) { - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else { [NSApp terminate:nil]; @@ -1061,12 +843,11 @@ static BOOL gActOnSpecialCommands = YES; return; // given the commandID, look it up in our hashtable and dispatch to - // that content node. Recall that we store weak pointers to the content - // nodes in the hash table. + // that menu item. if (menuBar) { - nsIMenuItem* content = menuBar->GetMenuItemForCommandID(static_cast(tag)); - if (content) - content->DoCommand(); + nsMenuItemX* menuItem = menuBar->GetMenuItemForCommandID(static_cast(tag)); + if (menuItem) + menuItem->DoCommand(); } NS_OBJC_END_TRY_ABORT_BLOCK; diff --git a/widget/src/cocoa/nsMenuBaseX.h b/widget/src/cocoa/nsMenuBaseX.h new file mode 100644 index 000000000000..b90b77dd5fad --- /dev/null +++ b/widget/src/cocoa/nsMenuBaseX.h @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsMenuBaseX_h_ +#define nsMenuBaseX_h_ + +#include "nsCOMPtr.h" +#include "nsIContent.h" + +enum nsMenuObjectTypeX { + eMenuBarObjectType, + eSubmenuObjectType, + eMenuItemObjectType +}; + +// All menu objects subclass this. +// Menu bars are owned by their top-level nsIWidgets. +// All other objects are memory-managed based on the DOM. +// Content removal deletes them immediately and nothing else should. +// Do not attempt to hold strong references to them or delete them. +class nsMenuObjectX +{ +public: + virtual nsMenuObjectTypeX MenuObjectType()=0; + virtual void* NativeData()=0; + nsIContent* Content() { return mContent; } + +protected: + nsCOMPtr mContent; +}; + +#endif // nsMenuBaseX_h_ diff --git a/widget/src/cocoa/nsMenuItemIconX.h b/widget/src/cocoa/nsMenuItemIconX.h index e774ad4ffdd5..61810d90b22b 100644 --- a/widget/src/cocoa/nsMenuItemIconX.h +++ b/widget/src/cocoa/nsMenuItemIconX.h @@ -51,7 +51,7 @@ class nsIURI; class nsIContent; class imgIRequest; -class nsIMenu; +class nsMenuObjectX; #import #import @@ -60,10 +60,9 @@ class nsIMenu; class nsMenuItemIconX : public imgIDecoderObserver { public: - nsMenuItemIconX(nsISupports* aMenuItem, - nsIMenu* aMenu, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem); + nsMenuItemIconX(nsMenuObjectX* aMenuItem, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem); private: ~nsMenuItemIconX(); @@ -86,10 +85,7 @@ public: protected: nsCOMPtr mContent; nsCOMPtr mIconRequest; - nsISupports* mMenuItem; - nsIMenu* mMenu; - MenuRef mMenuRef; - PRUint16 mMenuItemIndex; + nsMenuObjectX* mMenuObject; PRPackedBool mLoadedIcon; PRPackedBool mSetIcon; NSMenuItem* mNativeMenuItem; diff --git a/widget/src/cocoa/nsMenuItemIconX.mm b/widget/src/cocoa/nsMenuItemIconX.mm index a756b4ecc812..c2c26cc059b3 100644 --- a/widget/src/cocoa/nsMenuItemIconX.mm +++ b/widget/src/cocoa/nsMenuItemIconX.mm @@ -45,8 +45,6 @@ #include "nsObjCExceptions.h" #include "prmem.h" -#include "nsIMenu.h" -#include "nsIMenuItem.h" #include "nsIContent.h" #include "nsIDocument.h" #include "nsINameSpaceManager.h" @@ -64,6 +62,7 @@ #include "imgIRequest.h" #include "gfxIImageFrame.h" #include "nsIImage.h" +#include "nsMenuItemX.h" static const PRUint32 kIconWidth = 16; static const PRUint32 kIconHeight = 16; @@ -83,15 +82,11 @@ PRAllocCGFree(void* aInfo, const void* aData, size_t aSize) { NS_IMPL_ISUPPORTS2(nsMenuItemIconX, imgIContainerObserver, imgIDecoderObserver) -nsMenuItemIconX::nsMenuItemIconX(nsISupports* aMenuItem, - nsIMenu* aMenu, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem) +nsMenuItemIconX::nsMenuItemIconX(nsMenuObjectX* aMenuItem, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem) : mContent(aContent) -, mMenuItem(aMenuItem) -, mMenu(aMenu) -, mMenuRef(NULL) -, mMenuItemIndex(0) +, mMenuObject(aMenuItem) , mLoadedIcon(PR_FALSE) , mSetIcon(PR_FALSE) , mNativeMenuItem(aNativeMenuItem) @@ -112,18 +107,6 @@ nsMenuItemIconX::SetupIcon() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - nsresult rv; - if (!mMenuRef || !mMenuItemIndex) { - // These values are initialized here instead of in the constructor - // because they depend on the parent menu, mMenu, having inserted - // this object into its array of children. That can only happen after - // the object is constructed. - rv = mMenu->GetMenuRefAndItemIndexForMenuItem(mMenuItem, - (void**)&mMenuRef, - &mMenuItemIndex); - if (NS_FAILED(rv)) return rv; - } - // Still don't have one, then something is wrong, get out of here. if (!mNativeMenuItem) { NS_ERROR("No native menu item\n"); @@ -131,7 +114,7 @@ nsMenuItemIconX::SetupIcon() } nsCOMPtr iconURI; - rv = GetIconURI(getter_AddRefs(iconURI)); + nsresult rv = GetIconURI(getter_AddRefs(iconURI)); if (NS_FAILED(rv)) { // There is no icon for this menu item. An icon might have been set // earlier. Clear it. @@ -155,15 +138,14 @@ nsMenuItemIconX::GetIconURI(nsIURI** aIconURI) // The downside is that it's possible to get a menu item marked with a // native checkmark and a checkmark for an icon. Head off that possibility // by pretending that no icon exists if this is a checkable menu item. - nsCOMPtr menuItem = do_QueryInterface(mMenuItem); - if (menuItem) { - nsIMenuItem::EMenuItemType menuItemType; - menuItem->GetMenuItemType(&menuItemType); - if (menuItemType != nsIMenuItem::eRegular) + if (mMenuObject->MenuObjectType() == eMenuItemObjectType) { + nsMenuItemX* menuItem = static_cast(mMenuObject); + if (menuItem->GetMenuItemType() != eRegularMenuItemType) return NS_ERROR_FAILURE; } - if (!mContent) return NS_ERROR_FAILURE; + if (!mContent) + return NS_ERROR_FAILURE; // First, look at the content node's "image" attribute. nsAutoString imageURIString; diff --git a/widget/src/cocoa/nsMenuItemX.h b/widget/src/cocoa/nsMenuItemX.h index eae19a90216b..3054e82988c1 100644 --- a/widget/src/cocoa/nsMenuItemX.h +++ b/widget/src/cocoa/nsMenuItemX.h @@ -39,69 +39,68 @@ #ifndef nsMenuItemX_h_ #define nsMenuItemX_h_ -#include "nsIMenuItem.h" -#include "nsString.h" +#include "nsMenuBaseX.h" #include "nsChangeObserver.h" #include "nsAutoPtr.h" #import -class nsIMenu; +class nsString; class nsMenuItemIconX; +class nsMenuX; +class nsMenuBarX; -/** - * Native menu item wrapper - */ +enum { + knsMenuItemNoModifier = 0, + knsMenuItemShiftModifier = (1 << 0), + knsMenuItemAltModifier = (1 << 1), + knsMenuItemControlModifier = (1 << 2), + knsMenuItemCommandModifier = (1 << 3) +}; -class nsMenuItemX : public nsIMenuItem, +enum EMenuItemType { + eRegularMenuItemType = 0, + eCheckboxMenuItemType, + eRadioMenuItemType, + eSeparatorMenuItemType +}; + + +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuItemX : public nsMenuObjectX, public nsChangeObserver { public: nsMenuItemX(); virtual ~nsMenuItemX(); - // nsISupports - NS_DECL_ISUPPORTS NS_DECL_CHANGEOBSERVER - // nsIMenuItem Methods - NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode); - NS_IMETHOD GetLabel(nsString &aText); - NS_IMETHOD GetShortcutChar(nsString &aText); - NS_IMETHOD GetEnabled(PRBool *aIsEnabled); - NS_IMETHOD SetChecked(PRBool aIsEnabled); - NS_IMETHOD GetChecked(PRBool *aIsEnabled); - NS_IMETHOD GetMenuItemType(EMenuItemType *aIsCheckbox); - NS_IMETHOD GetNativeData(void*& aData); - NS_IMETHOD IsSeparator(PRBool & aIsSep); + // nsMenuObjectX + void* NativeData() {return (void*)mNativeMenuItem;} + nsMenuObjectTypeX MenuObjectType() {return eMenuItemObjectType;} - NS_IMETHOD DoCommand(); - NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled); - NS_IMETHOD SetupIcon(); - NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent); + // nsMenuItemX + nsresult Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode); + nsresult SetChecked(PRBool aIsChecked); + EMenuItemType GetMenuItemType(); + void DoCommand(); + nsresult DispatchDOMEvent(const nsString &eventName, PRBool* preventDefaultCalled); + void SetupIcon(); protected: - void UncheckRadioSiblings(nsIContent* inCheckedElement); void SetKeyEquiv(PRUint8 aModifiers, const nsString &aText); - NSMenuItem* mNativeMenuItem; // strong ref, we own - - nsString mLabel; - nsString mKeyEquivalent; - - nsIMenu* mMenuParent; // weak, parent owns us - nsMenuBarX* mMenuBar; // weak - - nsCOMPtr mContent; + EMenuItemType mType; + NSMenuItem* mNativeMenuItem; // [strong] + nsMenuX* mMenuParent; // [weak] + nsMenuBarX* mMenuBar; // [weak] nsCOMPtr mCommandContent; nsRefPtr mIcon; - - PRUint8 mModifiers; - PRPackedBool mEnabled; - PRPackedBool mIsChecked; - EMenuItemType mType; // regular, checkbox, radio, or separator + PRBool mIsChecked; }; #endif // nsMenuItemX_h_ diff --git a/widget/src/cocoa/nsMenuItemX.mm b/widget/src/cocoa/nsMenuItemX.mm index 2cfd8b11823c..4b3e12177f56 100644 --- a/widget/src/cocoa/nsMenuItemX.mm +++ b/widget/src/cocoa/nsMenuItemX.mm @@ -36,39 +36,35 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsCOMPtr.h" -#include "nsIContent.h" -#include "nsObjCExceptions.h" -#include "nsMenuBarX.h" // for MenuHelpers namespace #include "nsMenuItemX.h" -#include "nsIMenu.h" -#include "nsIMenuBar.h" -#include "nsIWidget.h" -#include "nsINameSpaceManager.h" +#include "nsMenuBarX.h" +#include "nsMenuX.h" +#include "nsMenuItemIconX.h" +#include "nsMenuUtilsX.h" + +#include "nsObjCExceptions.h" + +#include "nsCOMPtr.h" #include "nsWidgetAtoms.h" -#include "nsIServiceManager.h" +#include "nsGUIEvent.h" + +#include "nsIContent.h" +#include "nsIWidget.h" #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIPrivateDOMEvent.h" #include "nsIDOMEventTarget.h" #include "nsIDOMDocumentEvent.h" - -#include "nsMenuItemIconX.h" -#include "nsGUIEvent.h" - - -NS_IMPL_ISUPPORTS1(nsMenuItemX, nsIMenuItem) +#include "nsIDOMElement.h" nsMenuItemX::nsMenuItemX() { - mNativeMenuItem = nil; - mMenuParent = nsnull; - mMenuBar = nsnull; - mKeyEquivalent.AssignLiteral(" "); - mEnabled = PR_TRUE; - mIsChecked = PR_FALSE; - mType = eRegular; + mType = eRegularMenuItemType; + mNativeMenuItem = nil; + mMenuParent = nsnull; + mMenuBar = nsnull; + mIsChecked = PR_FALSE; } @@ -86,19 +82,18 @@ nsMenuItemX::~nsMenuItemX() } -NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode) +nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - mContent = aNode; // addref - mMenuParent = aParent; // weak - mType = aItemType; + mMenuParent = aParent; + mContent = aNode; - // register for AttributeChanged messages mMenuBar = aMenuBar; - NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); + NS_ASSERTION(mMenuBar, "No menu bar given, must have one!"); + mMenuBar->RegisterForContentChanges(mContent, this); nsCOMPtr domDoc(do_QueryInterface(mContent->GetCurrentDoc())); @@ -120,26 +115,25 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt } } } - - // set up mEnabled based on command content if it exists, otherwise do it based + + // decide enabled state based on command content if it exists, otherwise do it based // on our own content + PRBool isEnabled; if (mCommandContent) - mEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + isEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); else - mEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); - - mLabel = aLabel; - + isEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + // set up the native menu item - if (mType == nsIMenuItem::eSeparator) { + if (mType == eSeparatorMenuItemType) { mNativeMenuItem = [[NSMenuItem separatorItem] retain]; } else { - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(aLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; - - [mNativeMenuItem setEnabled:(BOOL)mEnabled]; + + [mNativeMenuItem setEnabled:(BOOL)isEnabled]; SetChecked(mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)); @@ -148,11 +142,9 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt if (domDoc) { nsAutoString keyValue; mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::key, keyValue); - if (!keyValue.IsEmpty()) { nsCOMPtr keyElement; domDoc->GetElementById(keyValue, getter_AddRefs(keyElement)); - if (keyElement) { nsCOMPtr keyContent(do_QueryInterface(keyElement)); nsAutoString keyChar(NS_LITERAL_STRING(" ")); @@ -160,7 +152,7 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 modifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); + PRUint8 modifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); SetKeyEquiv(modifiers, keyChar); } @@ -168,31 +160,17 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt } } - mIcon = new nsMenuItemIconX(static_cast(this), mMenuParent, mContent, mNativeMenuItem); - + mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); + if (!mIcon) + return NS_ERROR_OUT_OF_MEMORY; + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -NS_METHOD -nsMenuItemX::GetLabel(nsString &aText) -{ - aText = mLabel; - return NS_OK; -} - - -NS_METHOD -nsMenuItemX::GetEnabled(PRBool *aIsEnabled) -{ - *aIsEnabled = mEnabled; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::SetChecked(PRBool aIsChecked) +nsresult nsMenuItemX::SetChecked(PRBool aIsChecked) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -215,41 +193,19 @@ NS_METHOD nsMenuItemX::SetChecked(PRBool aIsChecked) } -NS_METHOD nsMenuItemX::GetChecked(PRBool *aIsEnabled) +EMenuItemType nsMenuItemX::GetMenuItemType() { - *aIsEnabled = mIsChecked; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::GetMenuItemType(EMenuItemType *aType) -{ - *aType = mType; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::GetNativeData(void *& aData) -{ - aData = mNativeMenuItem; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::IsSeparator(PRBool & aIsSep) -{ - aIsSep = (mType == nsIMenuItem::eSeparator); - return NS_OK; + return mType; } // Executes the "cached" javaScript command. // Returns NS_OK if the command was executed properly, otherwise an error code. -NS_IMETHODIMP nsMenuItemX::DoCommand() +void nsMenuItemX::DoCommand() { // flip "checked" state if we're a checkbox menu, or an un-checked radio menu - if (mType == nsIMenuItem::eCheckbox || - (mType == nsIMenuItem::eRadio && !mIsChecked)) { + if (mType == eCheckboxMenuItemType || + (mType == eRadioMenuItemType && !mIsChecked)) { if (!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::autocheck, nsWidgetAtoms::_false, eCaseMatters)) SetChecked(!mIsChecked); @@ -260,29 +216,28 @@ NS_IMETHODIMP nsMenuItemX::DoCommand() nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); mContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); - return NS_OK; } -NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) +nsresult nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) { if (!mContent) return NS_ERROR_FAILURE; - + // get owner document for content nsCOMPtr parentDoc = mContent->GetOwnerDoc(); if (!parentDoc) { NS_WARNING("Failed to get owner nsIDocument for menu item content"); return NS_ERROR_FAILURE; } - + // get interface for creating DOM events from content owner document nsCOMPtr DOMEventFactory = do_QueryInterface(parentDoc); if (!DOMEventFactory) { NS_WARNING("Failed to QI parent nsIDocument to nsIDOMDocumentEvent"); return NS_ERROR_FAILURE; } - + // create DOM event nsCOMPtr event; nsresult rv = DOMEventFactory->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); @@ -291,11 +246,11 @@ NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *p return rv; } event->InitEvent(eventName, PR_TRUE, PR_TRUE); - + // mark DOM event as trusted nsCOMPtr privateEvent(do_QueryInterface(event)); privateEvent->SetTrusted(PR_TRUE); - + // send DOM event nsCOMPtr eventTarget = do_QueryInterface(mContent); rv = eventTarget->DispatchEvent(event, preventDefaultCalled); @@ -303,22 +258,14 @@ NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *p NS_WARNING("Failed to send DOM event via nsIDOMEventTarget"); return rv; } - + return NS_OK; } -NS_METHOD nsMenuItemX::GetShortcutChar(nsString &aText) -{ - aText = mKeyEquivalent; - return NS_OK; -} - - // Walk the sibling list looking for nodes with the same name and // uncheck them all. -void -nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) +void nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) { nsAutoString myGroupName; inCheckedContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::name, myGroupName); @@ -349,13 +296,11 @@ void nsMenuItemX::SetKeyEquiv(PRUint8 aModifiers, const nsString &aText) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - mModifiers = aModifiers; - unsigned int macModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(mModifiers); + unsigned int macModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(aModifiers); [mNativeMenuItem setKeyEquivalentModifierMask:macModifiers]; - mKeyEquivalent = aText; - NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)mKeyEquivalent.get() - length:mKeyEquivalent.Length()] lowercaseString]; + NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)aText.get() + length:aText.Length()] lowercaseString]; if ([keyEquivalent isEqualToString:@" "]) [mNativeMenuItem setKeyEquivalent:@""]; else @@ -382,7 +327,7 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten if (aAttribute == nsWidgetAtoms::checked) { // if we're a radio menu, uncheck our sibling radio items. No need to // do any of this if we're just a normal check menu. - if (mType == nsIMenuItem::eRadio) { + if (mType == eRadioMenuItemType) { if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)) UncheckRadioSiblings(mContent); @@ -432,8 +377,7 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten } -void -nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { if (aChild == mCommandContent) { mMenuBar->UnregisterForContentChanges(mCommandContent); @@ -444,27 +388,14 @@ nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, P } -void -nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { mMenuParent->SetRebuild(PR_TRUE); } -NS_IMETHODIMP -nsMenuItemX::SetupIcon() +void nsMenuItemX::SetupIcon() { - if (!mIcon) - return NS_ERROR_OUT_OF_MEMORY; - - return mIcon->SetupIcon(); -} - - -NS_IMETHODIMP -nsMenuItemX::GetMenuItemContent(nsIContent ** aMenuItemContent) -{ - NS_ENSURE_ARG_POINTER(aMenuItemContent); - NS_IF_ADDREF(*aMenuItemContent = mContent); - return NS_OK; + if (mIcon) + mIcon->SetupIcon(); } diff --git a/widget/src/cocoa/nsMenuUtilsX.h b/widget/src/cocoa/nsMenuUtilsX.h new file mode 100644 index 000000000000..ff3ffd91ef79 --- /dev/null +++ b/widget/src/cocoa/nsMenuUtilsX.h @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsMenuUtilsX_h_ +#define nsMenuUtilsX_h_ + +#include "nscore.h" +#include "nsGUIEvent.h" + +#import + +class nsIContent; +class nsString; +class nsMenuBarX; + +// Namespace containing utility functions used in our native menu implementation. +namespace nsMenuUtilsX +{ + nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); + NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); // returned object is not retained + PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); + unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); + nsMenuBarX* GetHiddenWindowMenuBar(); // returned object is not retained + NSMenuItem* GetStandardEditMenuItem(); // returned object is not retained + PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); +} + +#endif // nsMenuUtilsX_h_ diff --git a/widget/src/cocoa/nsMenuUtilsX.mm b/widget/src/cocoa/nsMenuUtilsX.mm new file mode 100644 index 000000000000..d1d645af049c --- /dev/null +++ b/widget/src/cocoa/nsMenuUtilsX.mm @@ -0,0 +1,197 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsMenuUtilsX.h" +#include "nsMenuBarX.h" +#include "nsMenuItemX.h" +#include "nsObjCExceptions.h" +#include "nsCocoaUtils.h" +#include "nsCocoaWindow.h" +#include "nsWidgetAtoms.h" + +#import + +nsEventStatus nsMenuUtilsX::DispatchCommandTo(nsIContent* aTargetContent) +{ + NS_PRECONDITION(aTargetContent, "null ptr"); + + nsEventStatus status = nsEventStatus_eConsumeNoDefault; + nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); + + // FIXME: Should probably figure out how to init this with the actual + // pressed keys, but this is a big old edge case anyway. -dwh + + aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); + return status; +} + + +NSString* nsMenuUtilsX::CreateTruncatedCocoaLabel(const nsString& itemLabel) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with + // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an + // easy way to compute what this should be given the system font, etc, so we're just going + // to hard code it to something reasonable and bigger fonts will just have to deal. + const short kMaxItemPixelWidth = 300; + NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; + ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); + return label; // caller releases + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; +} + + +PRUint8 nsMenuUtilsX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) +{ + PRUint8 modifiers = knsMenuItemNoModifier; + char* str = ToNewCString(modifiersAttribute); + char* newStr; + char* token = strtok_r(str, ", \t", &newStr); + while (token != NULL) { + if (strcmp(token, "shift") == 0) + modifiers |= knsMenuItemShiftModifier; + else if (strcmp(token, "alt") == 0) + modifiers |= knsMenuItemAltModifier; + else if (strcmp(token, "control") == 0) + modifiers |= knsMenuItemControlModifier; + else if ((strcmp(token, "accel") == 0) || + (strcmp(token, "meta") == 0)) { + modifiers |= knsMenuItemCommandModifier; + } + token = strtok_r(newStr, ", \t", &newStr); + } + free(str); + + return modifiers; +} + + +unsigned int nsMenuUtilsX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) +{ + unsigned int macModifiers = 0; + + if (geckoModifiers & knsMenuItemShiftModifier) + macModifiers |= NSShiftKeyMask; + if (geckoModifiers & knsMenuItemAltModifier) + macModifiers |= NSAlternateKeyMask; + if (geckoModifiers & knsMenuItemControlModifier) + macModifiers |= NSControlKeyMask; + if (geckoModifiers & knsMenuItemCommandModifier) + macModifiers |= NSCommandKeyMask; + + return macModifiers; +} + + +nsMenuBarX* nsMenuUtilsX::GetHiddenWindowMenuBar() +{ + nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); + if (hiddenWindowWidgetNoCOMPtr) + return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); + else + return nsnull; +} + + +// It would be nice if we could localize these edit menu names. +static NSMenuItem* standardEditMenuItem = nil; +NSMenuItem* nsMenuUtilsX::GetStandardEditMenuItem() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + if (standardEditMenuItem) + return standardEditMenuItem; + + standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; + NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; + [standardEditMenuItem setSubmenu:standardEditMenu]; + [standardEditMenu release]; + + // Add Undo + NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; + [standardEditMenu addItem:undoItem]; + [undoItem release]; + + // Add Redo + NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; + [standardEditMenu addItem:redoItem]; + [redoItem release]; + + // Add separator + [standardEditMenu addItem:[NSMenuItem separatorItem]]; + + // Add Cut + NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + [standardEditMenu addItem:cutItem]; + [cutItem release]; + + // Add Copy + NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + [standardEditMenu addItem:copyItem]; + [copyItem release]; + + // Add Paste + NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + [standardEditMenu addItem:pasteItem]; + [pasteItem release]; + + // Add Delete + NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; + [standardEditMenu addItem:deleteItem]; + [deleteItem release]; + + // Add Select All + NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + [standardEditMenu addItem:selectAllItem]; + [selectAllItem release]; + + return standardEditMenuItem; + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; +} + + +PRBool nsMenuUtilsX::NodeIsHiddenOrCollapsed(nsIContent* inContent) +{ + return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, + nsWidgetAtoms::_true, eCaseMatters) || + inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, + nsWidgetAtoms::_true, eCaseMatters)); +} diff --git a/widget/src/cocoa/nsMenuX.h b/widget/src/cocoa/nsMenuX.h index 5521016a7b9c..a73c4b6c8426 100644 --- a/widget/src/cocoa/nsMenuX.h +++ b/widget/src/cocoa/nsMenuX.h @@ -39,19 +39,19 @@ #ifndef nsMenuX_h_ #define nsMenuX_h_ -#include "nsCOMPtr.h" -#include "nsAutoPtr.h" -#include "nsIMenu.h" -#include "nsChangeObserver.h" -#include "nsMenuBarX.h" - -#import #import +#import +#include "nsMenuBaseX.h" +#include "nsMenuBarX.h" +#include "nsCOMPtr.h" +#include "nsChangeObserver.h" +#include "nsAutoPtr.h" -class nsIMenuBar; class nsMenuX; class nsMenuItemIconX; +class nsMenuItemX; +class nsIWidget; // MenuDelegate is used to receive Cocoa notifications for @@ -66,99 +66,71 @@ class nsMenuItemIconX; @end -class nsMenuX : public nsIMenu, +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuX : public nsMenuObjectX, public nsChangeObserver { public: - nsMenuX(); - virtual ~nsMenuX(); + nsMenuX(); + virtual ~nsMenuX(); - // If > 0, the OS is indexing all the app's menus (triggered by opening - // Help menu on Leopard and higher). There are some things that are - // unsafe to do while this is happening. - static PRInt32 sIndexingMenuLevel; + // If > 0, the OS is indexing all the app's menus (triggered by opening + // Help menu on Leopard and higher). There are some things that are + // unsafe to do while this is happening. + static PRInt32 sIndexingMenuLevel; - NS_DECL_ISUPPORTS - NS_DECL_CHANGEOBSERVER + NS_DECL_CHANGEOBSERVER - id GetNativeMenuItem(); + // nsMenuObjectX + void* NativeData() {return (void*)mMacMenu;} + nsMenuObjectTypeX MenuObjectType() {return eSubmenuObjectType;} - // nsIMenu Methods - NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode); - NS_IMETHOD GetParent(nsISupports *&aParent); - NS_IMETHOD GetLabel(nsString &aText); - NS_IMETHOD SetLabel(const nsAString &aText); - NS_IMETHOD GetAccessKey(nsString &aText); - NS_IMETHOD SetAccessKey(const nsAString &aText); - NS_IMETHOD AddItem(nsISupports* aText); - NS_IMETHOD GetItemCount(PRUint32 &aCount); - NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); - NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount); - NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); - NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem); - NS_IMETHOD RemoveItem(const PRUint32 aPos); - NS_IMETHOD RemoveAll(); - NS_IMETHOD GetNativeData(void** aData); - NS_IMETHOD SetNativeData(void* aData); - NS_IMETHOD GetMenuContent(nsIContent ** aMenuNode); - NS_IMETHOD SetEnabled(PRBool aIsEnabled); - NS_IMETHOD GetEnabled(PRBool* aIsEnabled); - - NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, PRBool aEnabled); - NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex); - NS_IMETHOD SetupIcon(); - nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent); - void MenuDeselected(const nsMenuEvent & aMenuEvent); - void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); - void MenuDestruct(const nsMenuEvent & aMenuEvent); - void SetRebuild(PRBool aMenuEvent); + // nsMenuX + nsresult Create(nsMenuObjectX* aParent, const nsAString &aLabel, + nsMenuBarX* aMenuBar, nsIContent* aNode); + PRUint32 GetItemCount(); + nsMenuObjectX* GetItemAt(PRUint32 aPos); + nsresult GetVisibleItemCount(PRUint32 &aCount); + nsMenuObjectX* GetVisibleItemAt(PRUint32 aPos); + nsEventStatus MenuOpened(const nsMenuEvent& aMenuEvent); + void MenuClosed(const nsMenuEvent& aMenuEvent); + void SetRebuild(PRBool aMenuEvent); + NSMenuItem* NativeMenuItem(); protected: - // Determines how many menus are visible among the siblings that are before me. - // It doesn't matter if I am visible. - nsresult CountVisibleBefore(PRUint32* outVisibleBefore); + void MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode); + nsresult RemoveAll(); + nsresult SetEnabled(PRBool aIsEnabled); + nsresult GetEnabled(PRBool* aIsEnabled); + nsresult SetupIcon(); + nsresult CountVisibleBefore(PRUint32* outVisibleBefore); + void GetMenuPopupContent(nsIContent** aResult); + PRBool OnOpen(); + PRBool OnOpened(); + PRBool OnClose(); + PRBool OnClosed(); + nsresult AddMenuItem(nsMenuItemX* aMenuItem); + nsresult AddMenu(nsMenuX* aMenu); + void LoadMenuItem(nsIContent* inMenuItemContent); + void LoadSubMenu(nsIContent* inMenuContent); + GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); - // fetch the content node associated with the menupopup item - void GetMenuPopupContent(nsIContent** aResult); - - // fire handlers for oncreate/ondestroy - PRBool OnDestroy(); - PRBool OnCreate(); - PRBool OnDestroyed(); - PRBool OnCreated(); - - nsresult AddMenuItem(nsIMenuItem * aMenuItem); - nsresult AddMenu(nsIMenu * aMenu); - - void LoadMenuItem(nsIContent* inMenuItemContent); - void LoadSubMenu(nsIContent* inMenuContent); - - GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); - -protected: - nsString mLabel; - nsCOMArray mMenuItemsArray; - PRUint32 mVisibleItemsCount; // caching number of visible items in mMenuItemsArray - - nsISupports* mParent; // weak, my parent owns me - nsMenuBarX* mMenuBar; // weak ref, it will outlive us - nsCOMPtr mMenuContent; // the |menu| tag, strong ref - nsRefPtr mIcon; - - // Mac specific - PRInt16 mMacMenuID; - GeckoNSMenu* mMacMenu; // strong ref, we own it - MenuDelegate* mMenuDelegate; // strong ref, we keep this around to get events for us - NSMenuItem* mNativeMenuItem; // strong ref, we own - PRPackedBool mIsEnabled; - PRPackedBool mDestroyHandlerCalled; - PRPackedBool mNeedsRebuild; - PRPackedBool mConstructed; - PRPackedBool mVisible; // are we visible to the user? - PRPackedBool mXBLAttached; + nsTArray< nsAutoPtr > mMenuObjectsArray; + nsString mLabel; + PRUint32 mVisibleItemsCount; // cache + nsMenuObjectX* mParent; // [weak] + nsMenuBarX* mMenuBar; // [weak] + nsRefPtr mIcon; + GeckoNSMenu* mMacMenu; // [strong] + MenuDelegate* mMenuDelegate; // [strong] + NSMenuItem* mNativeMenuItem; // [strong] + PRPackedBool mIsEnabled; + PRPackedBool mDestroyHandlerCalled; + PRPackedBool mNeedsRebuild; + PRPackedBool mConstructed; + PRPackedBool mVisible; + PRPackedBool mXBLAttached; }; #endif // nsMenuX_h_ diff --git a/widget/src/cocoa/nsMenuX.mm b/widget/src/cocoa/nsMenuX.mm index 079e2db68b8e..250f74987a0c 100644 --- a/widget/src/cocoa/nsMenuX.mm +++ b/widget/src/cocoa/nsMenuX.mm @@ -37,38 +37,34 @@ * ***** END LICENSE BLOCK ***** */ #include "nsMenuX.h" +#include "nsMenuItemX.h" +#include "nsMenuUtilsX.h" +#include "nsMenuItemIconX.h" -#include "nsCOMPtr.h" #include "nsObjCExceptions.h" + +#include "nsToolkit.h" +#include "nsCocoaUtils.h" +#include "nsCOMPtr.h" +#include "prinrval.h" +#include "nsString.h" +#include "nsReadableUtils.h" +#include "nsUnicharUtils.h" +#include "plstr.h" +#include "nsWidgetAtoms.h" +#include "nsGUIEvent.h" +#include "nsCRT.h" + #include "nsIDocument.h" #include "nsIContent.h" #include "nsIDOMDocument.h" #include "nsIDocumentObserver.h" #include "nsIComponentManager.h" -#include "prinrval.h" #include "nsIRollupListener.h" - -#include "nsMenuItemIconX.h" -#include "nsIMenu.h" -#include "nsIMenuBar.h" -#include "nsIMenuItem.h" -#include "nsToolkit.h" -#include "nsCocoaUtils.h" - -#include "nsString.h" -#include "nsReadableUtils.h" -#include "nsUnicharUtils.h" -#include "plstr.h" - -#include "nsINameSpaceManager.h" -#include "nsWidgetAtoms.h" +#include "nsIDOMElement.h" #include "nsIXBLService.h" #include "nsIServiceManager.h" -#include "nsGUIEvent.h" - -#include "nsCRT.h" - #include "jsapi.h" #include "nsIScriptGlobalObject.h" #include "nsIScriptContext.h" @@ -78,22 +74,16 @@ extern nsIRollupListener * gRollupListener; extern nsIWidget * gRollupWidget; +extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); + static PRBool gConstructingMenu = PR_FALSE; - static PRBool gMenuMethodsSwizzled = PR_FALSE; -// CIDs -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); -static NS_DEFINE_CID(kMenuItemCID, NS_MENUITEM_CID); - -NS_IMPL_ISUPPORTS1(nsMenuX, nsIMenu) - PRInt32 nsMenuX::sIndexingMenuLevel = 0; nsMenuX::nsMenuX() -: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), mMacMenuID(0), +: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), mMacMenu(nil), mNativeMenuItem(nil), mIsEnabled(PR_TRUE), mDestroyHandlerCalled(PR_FALSE), mNeedsRebuild(PR_TRUE), mConstructed(PR_FALSE), mVisible(PR_TRUE), mXBLAttached(PR_FALSE) @@ -132,46 +122,42 @@ nsMenuX::~nsMenuX() [mNativeMenuItem release]; // alert the change notifier we don't care no more - if (mMenuContent) - mMenuBar->UnregisterForContentChanges(mMenuContent); + if (mContent) + mMenuBar->UnregisterForContentChanges(mContent); NS_OBJC_END_TRY_ABORT_BLOCK; } -NS_IMETHODIMP -nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode) +nsresult nsMenuX::Create(nsMenuObjectX* aParent, const nsAString& aLabel, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - mMenuContent = aNode; - NS_ASSERTION(mMenuContent, "Menu not given a dom node at creation time"); + mContent = aNode; + mLabel = aLabel; + mMacMenu = CreateMenuWithGeckoString(mLabel); // register this menu to be notified when changes are made to our content object mMenuBar = aMenuBar; // weak ref NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); - mMenuBar->RegisterForContentChanges(mMenuContent, this); + mMenuBar->RegisterForContentChanges(mContent, this); mParent = aParent; // our parent could be either a menu bar (if we're toplevel) or a menu (if we're a submenu) - nsCOMPtr menubar = do_QueryInterface(aParent); - nsCOMPtr menu = do_QueryInterface(aParent); - NS_ASSERTION(menubar || menu, "Menu parent not a menu bar or menu!"); + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); + NS_ASSERTION((parentType == eMenuBarObjectType || parentType == eSubmenuObjectType), + "Menu parent not a menu bar or menu!"); - // SetLabel will create the native menu if it has not been created yet - SetLabel(aLabel); - - if (NodeIsHiddenOrCollapsed(mMenuContent)) + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent)) + mVisible = PR_FALSE; + if (mContent->GetChildCount() == 0) mVisible = PR_FALSE; - if (menubar && mMenuContent->GetChildCount() == 0) - mVisible = PR_FALSE; + SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); - SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); - - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; @@ -181,11 +167,9 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString // native menu items being created. If we only call MenuConstruct when a menu // is actually selected, then we can't access keyboard commands until the // menu gets selected, which is bad. - nsMenuEvent fake(PR_TRUE, 0, nsnull); - MenuConstruct(fake, nsnull, nsnull); - - if (menu) - mIcon = new nsMenuItemIconX(static_cast(this), menu, mMenuContent, mNativeMenuItem); + MenuConstruct(nsnull, nsnull); + + mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); return NS_OK; @@ -193,102 +177,37 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString } -NS_IMETHODIMP nsMenuX::GetParent(nsISupports*& aParent) -{ - aParent = mParent; - NS_IF_ADDREF(aParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::GetLabel(nsString &aText) -{ - aText = mLabel; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::SetLabel(const nsAString &aText) -{ - mLabel = aText; - // create an actual NSMenu if this is the first time - if (mMacMenu == nil) - mMacMenu = CreateMenuWithGeckoString(mLabel); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::GetAccessKey(nsString &aText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::SetAccessKey(const nsAString &aText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -// This should only be used internally by our menu implementation. In all other -// cases menus and their items should be added and modified via the DOM. -NS_IMETHODIMP nsMenuX::AddItem(nsISupports* aItem) -{ - nsresult rv = NS_ERROR_FAILURE; - - if (!aItem) - return NS_ERROR_INVALID_ARG; - - // Figure out what we're adding - nsCOMPtr menuItem(do_QueryInterface(aItem, &rv)); - if (NS_SUCCEEDED(rv)) { - rv = AddMenuItem(menuItem); - } - else { - nsCOMPtr menu(do_QueryInterface(aItem, &rv)); - if (NS_SUCCEEDED(rv)) - rv = AddMenu(menu); - } - - return rv; -} - - -nsresult nsMenuX::AddMenuItem(nsIMenuItem * aMenuItem) +nsresult nsMenuX::AddMenuItem(nsMenuItemX* aMenuItem) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; if (!aMenuItem) return NS_ERROR_INVALID_ARG; - nsCOMPtr menuItemContent; - aMenuItem->GetMenuItemContent(getter_AddRefs(menuItemContent)); - mMenuItemsArray.AppendObject(aMenuItem); // owning ref - if (menuItemContent && NodeIsHiddenOrCollapsed(menuItemContent)) + mMenuObjectsArray.AppendElement(aMenuItem); + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenuItem->Content())) return NS_OK; ++mVisibleItemsCount; - + + NSMenuItem* newNativeMenuItem = (NSMenuItem*)aMenuItem->NativeData(); + // add the menu item to this menu - NSMenuItem* newNativeMenuItem; - aMenuItem->GetNativeData((void*&)newNativeMenuItem); - if (!newNativeMenuItem) - return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; // set up target/action [newNativeMenuItem setTarget:nsMenuBarX::sNativeEventTarget]; [newNativeMenuItem setAction:@selector(menuItemHit:)]; - + // set its command. we get the unique command id from the menubar [newNativeMenuItem setTag:mMenuBar->RegisterForCommand(aMenuItem)]; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -nsresult nsMenuX::AddMenu(nsIMenu * aMenu) +nsresult nsMenuX::AddMenu(nsMenuX* aMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -296,22 +215,18 @@ nsresult nsMenuX::AddMenu(nsIMenu * aMenu) if (!aMenu) return NS_ERROR_NULL_POINTER; - nsCOMPtr menuContent; - aMenu->GetMenuContent(getter_AddRefs(menuContent)); - mMenuItemsArray.AppendObject(aMenu); // owning ref - if (menuContent && NodeIsHiddenOrCollapsed(menuContent)) + mMenuObjectsArray.AppendElement(aMenu); + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenu->Content())) return NS_OK; ++mVisibleItemsCount; // We have to add a menu item and then associate the menu with it - NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->GetNativeMenuItem(); + NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->NativeMenuItem(); if (!newNativeMenuItem) return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; - - NSMenu* childMenu; - if (aMenu->GetNativeData((void**)&childMenu) == NS_OK) - [newNativeMenuItem setSubmenu:childMenu]; + + [newNativeMenuItem setSubmenu:(NSMenu*)aMenu->NativeData()]; return NS_OK; @@ -320,48 +235,32 @@ nsresult nsMenuX::AddMenu(nsIMenu * aMenu) // Includes all items, including hidden/collapsed ones -NS_IMETHODIMP nsMenuX::GetItemCount(PRUint32 &aCount) +PRUint32 nsMenuX::GetItemCount() { - aCount = mMenuItemsArray.Count(); - return NS_OK; + return mMenuObjectsArray.Length(); } // Includes all items, including hidden/collapsed ones -NS_IMETHODIMP nsMenuX::GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) +nsMenuObjectX* nsMenuX::GetItemAt(PRUint32 aPos) { - if (aPos >= (PRUint32)mMenuItemsArray.Count()) - return NS_ERROR_INVALID_ARG; + if (aPos >= (PRUint32)mMenuObjectsArray.Length()) + return NULL; - aMenuItem = mMenuItemsArray.ObjectAt(aPos); - NS_IF_ADDREF(aMenuItem); - return NS_OK; + return mMenuObjectsArray[aPos]; } -// Checks both nsIMenus and nsIMenuItems. Not suitable for menus that are children -// of nsIMenuBar, which has slightly different rules for visiblity. -static PRBool MenuNodeIsVisible(nsISupports *item) +// Checks submenus and menu items. Not suitable for submenus that are children +// of a menu bar, which has slightly different rules for visiblity. +static PRBool MenuNodeIsVisible(nsMenuObjectX* item) { - // Find the content for this item in the menu, be it a MenuItem or a Menu - nsCOMPtr itemContent; - nsCOMPtr menuItem = do_QueryInterface(item); - if (menuItem) { - menuItem->GetMenuItemContent(getter_AddRefs(itemContent)); - } - else { - nsCOMPtr menu = do_QueryInterface(item); - if (menu) - menu->GetMenuContent(getter_AddRefs(itemContent)); - } - - // Check the visibility of the item's content - return (itemContent && !NodeIsHiddenOrCollapsed(itemContent)); + return (!nsMenuUtilsX::NodeIsHiddenOrCollapsed(item->Content())); } // Only includes visible items -NS_IMETHODIMP nsMenuX::GetVisibleItemCount(PRUint32 &aCount) +nsresult nsMenuX::GetVisibleItemCount(PRUint32 &aCount) { aCount = mVisibleItemsCount; return NS_OK; @@ -370,53 +269,36 @@ NS_IMETHODIMP nsMenuX::GetVisibleItemCount(PRUint32 &aCount) // Only includes visible items. Note that this is provides O(N) access // If you need to iterate or search, consider using GetItemAt and doing your own filtering -NS_IMETHODIMP nsMenuX::GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) +nsMenuObjectX* nsMenuX::GetVisibleItemAt(PRUint32 aPos) { - PRUint32 count = mMenuItemsArray.Count(); + + PRUint32 count = mMenuObjectsArray.Length(); if (aPos >= mVisibleItemsCount || aPos >= count) - return NS_ERROR_INVALID_ARG; + return NULL; // If there are no invisible items, can provide direct access - if (mVisibleItemsCount == count) { - nsCOMPtr item = mMenuItemsArray.ObjectAt(aPos); - aMenuItem = item; - NS_IF_ADDREF(aMenuItem); - return NS_OK; - } + if (mVisibleItemsCount == count) + return mMenuObjectsArray[aPos]; // Otherwise, traverse the array until we find the the item we're looking for. - nsCOMPtr item; + nsMenuObjectX* item; PRUint32 visibleNodeIndex = 0; for (PRUint32 i = 0; i < count; i++) { - item = mMenuItemsArray.ObjectAt(i); + item = mMenuObjectsArray[i]; if (MenuNodeIsVisible(item)) { if (aPos == visibleNodeIndex) { // we found the visible node we're looking for, return it - aMenuItem = item; - NS_IF_ADDREF(aMenuItem); - return NS_OK; + return item; } visibleNodeIndex++; } } - return NS_ERROR_FAILURE; + return NULL; } -NS_IMETHODIMP nsMenuX::InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::RemoveItem(const PRUint32 aPos) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::RemoveAll() +nsresult nsMenuX::RemoveAll() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -429,41 +311,20 @@ NS_IMETHODIMP nsMenuX::RemoveAll() for (int i = [mMacMenu numberOfItems] - 1; i >= 0; i--) [mMacMenu removeItemAtIndex:i]; } - // get rid of Gecko menu items - mMenuItemsArray.Clear(); + + mMenuObjectsArray.Clear(); mVisibleItemsCount = 0; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -NS_IMETHODIMP nsMenuX::GetNativeData(void ** aData) -{ - *aData = mMacMenu; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::SetNativeData(void * aData) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - [mMacMenu release]; - mMacMenu = [(NSMenu*)aData retain]; - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) +nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; - // printf("JOSH: MenuSelected called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); - // Determine if this is the correct menu to handle the event MenuRef selectedMenuHandle = (MenuRef)aMenuEvent.mCommand; @@ -471,10 +332,10 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) // must be a carbon MenuRef to be had if (_NSGetCarbonMenu(mMacMenu) == selectedMenuHandle) { // Open the node. - mMenuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); + mContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); - // Fire our oncreate handler. If we're told to stop, don't build the menu at all - PRBool keepProcessing = OnCreate(); + // Fire a handler. If we're told to stop, don't build the menu at all + PRBool keepProcessing = OnOpen(); if (!mNeedsRebuild || !keepProcessing) return nsEventStatus_eConsumeNoDefault; @@ -483,21 +344,21 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) if (mNeedsRebuild) RemoveAll(); - MenuConstruct(aMenuEvent, nsnull, nsnull); + MenuConstruct(nsnull, nsnull); mConstructed = true; } - OnCreated(); // Now that it's built, fire the popupShown event. + OnOpened(); return nsEventStatus_eConsumeNoDefault; } else { // Make sure none of our submenus are the ones that should be handling this - for (PRUint32 i = mMenuItemsArray.Count() - 1; i >= 0; i--) { - nsISupports* menuSupports = mMenuItemsArray.ObjectAt(i); - nsCOMPtr menu = do_QueryInterface(menuSupports); - if (menu) { - nsEventStatus status = menu->MenuSelected(aMenuEvent); + PRUint32 count = mMenuObjectsArray.Length(); + for (PRUint32 i = 0; i < count; i++) { + nsMenuObjectX* menuObject = mMenuObjectsArray[i]; + if (menuObject->MenuObjectType() == eSubmenuObjectType) { + nsEventStatus status = static_cast(menuObject)->MenuOpened(aMenuEvent); if (status != nsEventStatus_eIgnore) return status; } @@ -510,20 +371,26 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) } -void nsMenuX::MenuDeselected(const nsMenuEvent & aMenuEvent) +void nsMenuX::MenuClosed(const nsMenuEvent & aMenuEvent) { - // Destroy the menu if (mConstructed) { - MenuDestruct(aMenuEvent); + // Don't close if a handler tells us to stop. + if (!OnClose()) + return; + + if (mNeedsRebuild) + mConstructed = false; + + mContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); + + OnClosed(); + mConstructed = false; } } -void nsMenuX::MenuConstruct( - const nsMenuEvent & aMenuEvent, - nsIWidget * aParentWindow, - void * aMenuNode) +void nsMenuX::MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode) { mConstructed = false; gConstructingMenu = PR_TRUE; @@ -582,23 +449,7 @@ void nsMenuX::MenuConstruct( gConstructingMenu = PR_FALSE; mNeedsRebuild = PR_FALSE; - // printf("Done building, mMenuItemsArray.Count() = %d \n", mMenuItemsArray.Count()); -} - - -void nsMenuX::MenuDestruct(const nsMenuEvent & aMenuEvent) -{ - // printf("nsMenuX::MenuDestruct() called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); - - // Fire our ondestroy handler. If we're told to stop, don't destroy the menu. - if (!OnDestroy()) - return; - - if (mNeedsRebuild) - mConstructed = false; - // Close the node. - mMenuContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); - OnDestroyed(); + // printf("Done building, mMenuObjectsArray.Count() = %d \n", mMenuObjectsArray.Count()); } @@ -609,7 +460,7 @@ void nsMenuX::SetRebuild(PRBool aNeedsRebuild) } -NS_IMETHODIMP nsMenuX::SetEnabled(PRBool aIsEnabled) +nsresult nsMenuX::SetEnabled(PRBool aIsEnabled) { if (aIsEnabled != mIsEnabled) { // we always want to rebuild when this changes @@ -620,7 +471,7 @@ NS_IMETHODIMP nsMenuX::SetEnabled(PRBool aIsEnabled) } -NS_IMETHODIMP nsMenuX::GetEnabled(PRBool* aIsEnabled) +nsresult nsMenuX::GetEnabled(PRBool* aIsEnabled) { NS_ENSURE_ARG_POINTER(aIsEnabled); *aIsEnabled = mIsEnabled; @@ -628,14 +479,6 @@ NS_IMETHODIMP nsMenuX::GetEnabled(PRBool* aIsEnabled) } -NS_IMETHODIMP nsMenuX::GetMenuContent(nsIContent ** aMenuContent) -{ - NS_ENSURE_ARG_POINTER(aMenuContent); - NS_IF_ADDREF(*aMenuContent = mMenuContent); - return NS_OK; -} - - GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; @@ -643,16 +486,16 @@ GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) NSString* title = [NSString stringWithCharacters:(UniChar*)menuTitle.get() length:menuTitle.Length()]; GeckoNSMenu* myMenu = [[GeckoNSMenu alloc] initWithTitle:title]; [myMenu setDelegate:mMenuDelegate]; - + // We don't want this menu to auto-enable menu items because then Cocoa // overrides our decisions and things get incorrectly enabled/disabled. [myMenu setAutoenablesItems:NO]; - + // we used to install Carbon event handlers here, but since NSMenu* doesn't // create its underlying MenuRef until just before display, we delay until // that happens. Now we install the event handlers when Cocoa notifies // us that a menu is about to display - see the Cocoa MenuDelegate class. - + return myMenu; NS_OBJC_END_TRY_ABORT_BLOCK_NIL; @@ -664,38 +507,41 @@ void nsMenuX::LoadMenuItem(nsIContent* inMenuItemContent) if (!inMenuItemContent) return; - // create nsMenuItem - nsCOMPtr pnsMenuItem = do_CreateInstance(kMenuItemCID); - if (!pnsMenuItem) - return; - nsAutoString menuitemName; inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuitemName); // printf("menuitem %s \n", NS_LossyConvertUTF16toASCII(menuitemName).get()); - nsIMenuItem::EMenuItemType itemType = nsIMenuItem::eRegular; + EMenuItemType itemType = eRegularMenuItemType; if (inMenuItemContent->Tag() == nsWidgetAtoms::menuseparator) { - itemType = nsIMenuItem::eSeparator; + itemType = eSeparatorMenuItemType; } else { static nsIContent::AttrValuesArray strings[] = {&nsWidgetAtoms::checkbox, &nsWidgetAtoms::radio, nsnull}; switch (inMenuItemContent->FindAttrValueIn(kNameSpaceID_None, nsWidgetAtoms::type, strings, eCaseMatters)) { - case 0: itemType = nsIMenuItem::eCheckbox; break; - case 1: itemType = nsIMenuItem::eRadio; break; + case 0: itemType = eCheckboxMenuItemType; break; + case 1: itemType = eRadioMenuItemType; break; } } // Create the item. - pnsMenuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); + nsMenuItemX* menuItem = new nsMenuItemX(); + if (!menuItem) + return; - AddMenuItem(pnsMenuItem); + nsresult rv = menuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); + if (NS_FAILED(rv)) { + delete menuItem; + return; + } + + AddMenuItem(menuItem); // This needs to happen after the nsIMenuItem object is inserted into // our item array in AddMenuItem() - pnsMenuItem->SetupIcon(); + menuItem->SetupIcon(); } @@ -705,24 +551,27 @@ void nsMenuX::LoadSubMenu(nsIContent* inMenuContent) inMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); //printf("Creating Menu [%s] \n", NS_LossyConvertUTF16toASCII(menuName).get()); - // Create nsMenu - nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); - if (!pnsMenu) + nsAutoPtr menu(new nsMenuX()); + if (!menu) return; - pnsMenu->Create(reinterpret_cast(this), menuName, EmptyString(), mMenuBar, inMenuContent); + nsresult rv = menu->Create(this, menuName, mMenuBar, inMenuContent); + if (NS_FAILED(rv)) + return; - AddMenu(pnsMenu); + AddMenu(menu); // This needs to happen after the nsIMenu object is inserted into // our item array in AddMenu() - pnsMenu->SetupIcon(); + menu->SetupIcon(); + + menu.forget(); } -// Fire our oncreate handler. Returns TRUE if we should keep processing the event, -// FALSE if the handler wants to stop the creation of the menu -PRBool nsMenuX::OnCreate() +// This menu is about to open. Returns TRUE if we should keep processing the event, +// FALSE if the handler wants to stop the opening of the menu. +PRBool nsMenuX::OnOpen() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWING, nsnull, @@ -732,15 +581,14 @@ PRBool nsMenuX::OnCreate() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; - // the menu is going to show and the oncreate handler has executed. We - // now need to walk our menu items, checking to see if any of them have - // a command attribute. If so, several apptributes must potentially - // be updated. + // If the open is going to succeed we need to walk our menu items, checking to + // see if any of them have a command attribute. If so, several apptributes + // must potentially be updated. if (popupContent) { nsCOMPtr domDoc(do_QueryInterface(popupContent->GetDocument())); @@ -797,7 +645,7 @@ PRBool nsMenuX::OnCreate() } -PRBool nsMenuX::OnCreated() +PRBool nsMenuX::OnOpened() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWN, nsnull, nsMouseEvent::eReal); @@ -806,7 +654,7 @@ PRBool nsMenuX::OnCreated() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; @@ -815,9 +663,9 @@ PRBool nsMenuX::OnCreated() } -// Fire our ondestroy handler. Returns TRUE if we should keep processing the event, -// FALSE if the handler wants to stop the destruction of the menu -PRBool nsMenuX::OnDestroy() +// Returns TRUE if we should keep processing the event, FALSE if the handler +// wants to stop the closing of the menu. +PRBool nsMenuX::OnClose() { if (mDestroyHandlerCalled) return PR_TRUE; @@ -830,7 +678,7 @@ PRBool nsMenuX::OnDestroy() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -842,7 +690,7 @@ PRBool nsMenuX::OnDestroy() } -PRBool nsMenuX::OnDestroyed() +PRBool nsMenuX::OnClosed() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_HIDDEN, nsnull, @@ -852,7 +700,7 @@ PRBool nsMenuX::OnDestroyed() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -878,11 +726,11 @@ void nsMenuX::GetMenuPopupContent(nsIContent** aResult) if (!xblService) return; - PRUint32 count = mMenuContent->GetChildCount(); + PRUint32 count = mContent->GetChildCount(); for (PRUint32 i = 0; i < count; i++) { PRInt32 dummy; - nsIContent *child = mMenuContent->GetChildAt(i); + nsIContent *child = mContent->GetChildAt(i); nsCOMPtr tag; xblService->ResolveTag(child, &dummy, getter_AddRefs(tag)); if (tag == nsWidgetAtoms::menupopup) { @@ -902,102 +750,48 @@ nsresult nsMenuX::CountVisibleBefore(PRUint32* outVisibleBefore) { NS_ASSERTION(outVisibleBefore, "bad index param in nsMenuX::CountVisibleBefore"); - nsCOMPtr menubarParent = do_QueryInterface(mParent); - if (menubarParent) { - PRUint32 numMenus = 0; - menubarParent->GetMenuCount(numMenus); - + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); + if (parentType == eMenuBarObjectType) { + nsMenuBarX* menubarParent = static_cast(mParent); + PRUint32 numMenus = menubarParent->GetMenuCount(); + // Find this menu among the children of my parent menubar *outVisibleBefore = 1; // start at 1, the Application menu will always be there for (PRUint32 i = 0; i < numMenus; i++) { - nsCOMPtr currMenu; - menubarParent->GetMenuAt(i, *getter_AddRefs(currMenu)); - if (currMenu == static_cast(this)) { + nsMenuX* currMenu = menubarParent->GetMenuAt(i); + if (currMenu == this) { // we found ourselves, break out return NS_OK; } - + if (currMenu) { - nsCOMPtr menuContent; - currMenu->GetMenuContent(getter_AddRefs(menuContent)); - if (menuContent && - menuContent->GetChildCount() > 0 && - !NodeIsHiddenOrCollapsed(menuContent)) { + nsIContent* menuContent = currMenu->Content(); + if (menuContent->GetChildCount() > 0 && + !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { ++(*outVisibleBefore); } } } - } // if menubarParent - else { - nsCOMPtr menuParent = do_QueryInterface(mParent); - if (!menuParent) - return NS_ERROR_FAILURE; - - PRUint32 numItems; - menuParent->GetItemCount(numItems); - + } + else if (parentType == eSubmenuObjectType) { // Find this menu among the children of my parent menu + nsMenuX* menuParent = static_cast(mParent); + PRUint32 numItems = menuParent->GetItemCount(); for (PRUint32 i = 0; i < numItems; i++) { // Using GetItemAt instead of GetVisibleItemAt to avoid O(N^2) - nsCOMPtr currItem; - menuParent->GetItemAt(i, *getter_AddRefs(currItem)); - nsCOMPtr currMenu = do_QueryInterface(currItem); - if (currMenu == static_cast(this)) { - // we found ourselves, break out - return NS_OK; - } - + nsMenuObjectX* currItem = menuParent->GetItemAt(i); + if (currItem == this) + return NS_OK; // we found ourselves, break out // If the node is visible increment the outparam. if (MenuNodeIsVisible(currItem)) ++(*outVisibleBefore); - } } return NS_ERROR_FAILURE; } -NS_IMETHODIMP -nsMenuX::ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, - PRBool aEnabled) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsMenuX::GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex) -{ - if (!mMacMenu) - return NS_ERROR_FAILURE; - - // look for the menu item given, and skip invisible elements - PRUint32 menuItemCount; - GetItemCount(menuItemCount); - PRUint32 visibleNodeIndex = 0; - for (PRUint32 i = 0; i < menuItemCount; i++) { - nsCOMPtr currItem; - GetItemAt(i, *getter_AddRefs(currItem)); - // Only check visible nodes - if (MenuNodeIsVisible(currItem)) { - if (currItem == aMenuItem) { - *aMenuRef = _NSGetCarbonMenu(mMacMenu); - // add 1 because carbon menu items are 1-indexed. - *aMenuItemIndex = visibleNodeIndex + 1; - return NS_OK; - } - visibleNodeIndex++; - } - } - - return NS_ERROR_FAILURE; -} - - -id -nsMenuX::GetNativeMenuItem() +NSMenuItem* nsMenuX::NativeMenuItem() { return mNativeMenuItem; } @@ -1008,8 +802,8 @@ nsMenuX::GetNativeMenuItem() // -void -nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, nsIAtom *aAttribute) +void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, + nsIAtom *aAttribute) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; @@ -1017,51 +811,44 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n if (gConstructingMenu || (aAttribute == nsWidgetAtoms::open)) return; - nsCOMPtr menubarParent = do_QueryInterface(mParent); + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); if (aAttribute == nsWidgetAtoms::disabled) { SetRebuild(PR_TRUE); - SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); } else if (aAttribute == nsWidgetAtoms::label) { SetRebuild(PR_TRUE); - mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); // invalidate my parent. If we're a submenu parent, we have to rebuild // the parent menu in order for the changes to be picked up. If we're // a regular menu, just change the title and redraw the menubar. - if (menubarParent) { + if (parentType == eMenuBarObjectType) { // reuse the existing menu, to avoid rebuilding the root menu bar. NS_ASSERTION(mMacMenu, "nsMenuX::AttributeChanged: invalid menu handle."); - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); [mMacMenu setTitle:newCocoaLabelString]; [newCocoaLabelString release]; } else { - nsCOMPtr parentMenu(do_QueryInterface(mParent)); - parentMenu->SetRebuild(PR_TRUE); + static_cast(mParent)->SetRebuild(PR_TRUE); } } else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - PRBool contentIsHiddenOrCollapsed = NodeIsHiddenOrCollapsed(mMenuContent); + PRBool contentIsHiddenOrCollapsed = nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent); // don't do anything if the state is correct already if (contentIsHiddenOrCollapsed != mVisible) return; - nsCOMPtr menuParent = do_QueryInterface(mParent); if (contentIsHiddenOrCollapsed) { - void *clientData = nsnull; - if (menubarParent) - menubarParent->GetNativeData(clientData); - else if (menuParent) - menuParent->GetNativeData(&clientData); - if (clientData) { - NSMenu* parentMenu = reinterpret_cast(clientData); + if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { + NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); // An exception will get thrown if we try to remove an item that isn't // in the menu. if ([parentMenu indexOfItem:mNativeMenuItem] != -1) @@ -1072,13 +859,8 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n else { PRUint32 insertAfter = 0; if (NS_SUCCEEDED(CountVisibleBefore(&insertAfter))) { - void *clientData = nsnull; - if (menubarParent) - menubarParent->GetNativeData(clientData); - else if (menuParent) - menuParent->GetNativeData(&clientData); - if (clientData) { - NSMenu* parentMenu = reinterpret_cast(clientData); + if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { + NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); [parentMenu insertItem:mNativeMenuItem atIndex:insertAfter]; [mNativeMenuItem setSubmenu:mMacMenu]; mVisible = PR_TRUE; @@ -1094,24 +876,20 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n } -void -nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; SetRebuild(PR_TRUE); - - RemoveItem(aIndexInContainer); mMenuBar->UnregisterForContentChanges(aChild); } -void -nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; @@ -1119,12 +897,13 @@ nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, } -NS_IMETHODIMP -nsMenuX::SetupIcon() +nsresult nsMenuX::SetupIcon() { // In addition to out-of-memory, menus that are children of the menu bar // will not have mIcon set. - if (!mIcon) return NS_ERROR_OUT_OF_MEMORY; + if (!mIcon) + return NS_ERROR_OUT_OF_MEMORY; + return mIcon->SetupIcon(); } @@ -1148,6 +927,7 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe if (nsMenuX::sIndexingMenuLevel > 0) return noErr; + nsMenuX* targetMenu = static_cast(userData); UInt32 kind = ::GetEventKind(event); if (kind == kEventMenuTargetItem) { // get the position of the menu item we want @@ -1158,20 +938,16 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe // don't request a menu item that doesn't exist or we crash // this might happen just due to some random quirks in the event system PRUint32 itemCount; - nsIMenu* targetMenu = reinterpret_cast(userData); targetMenu->GetVisibleItemCount(itemCount); if (aPos >= itemCount) return eventNotHandledErr; - - nsCOMPtr aTargetMenuItem; - targetMenu->GetVisibleItemAt((PRUint32)aPos, *getter_AddRefs(aTargetMenuItem)); - - // Send DOM event - // If the QI fails, we're over a submenu and we shouldn't send the event - nsCOMPtr bTargetMenuItem(do_QueryInterface(aTargetMenuItem)); - if (bTargetMenuItem) { + + // Send DOM event if we're over a menu item + nsMenuObjectX* target = targetMenu->GetVisibleItemAt((PRUint32)aPos); + if (target->MenuObjectType() == eMenuItemObjectType) { + nsMenuItemX* targetMenuItem = static_cast(target); PRBool handlerCalledPreventDefault; // but we don't actually care - bTargetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); + targetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); return noErr; } } @@ -1180,23 +956,16 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe gRollupListener->Rollup(nsnull); return userCanceledErr; } - - nsISupports* supports = reinterpret_cast(userData); - nsCOMPtr menu(do_QueryInterface(supports)); - if (menu) { - MenuRef menuRef; - ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); - nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); - menuEvent.time = PR_IntervalNow(); - menuEvent.mCommand = (PRUint32)menuRef; - if (kind == kEventMenuOpening) { - menu->MenuSelected(menuEvent); - } - else { - menu->MenuDeselected(menuEvent); - } - return noErr; - } + MenuRef menuRef; + ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); + nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); + menuEvent.time = PR_IntervalNow(); + menuEvent.mCommand = (PRUint32)menuRef; + if (kind == kEventMenuOpening) + targetMenu->MenuOpened(menuEvent); + else + targetMenu->MenuClosed(menuEvent); + return noErr; } return eventNotHandledErr; diff --git a/widget/src/cocoa/nsPIWidgetCocoa.idl b/widget/src/cocoa/nsPIWidgetCocoa.idl index 6126da566118..2fa3407d8346 100644 --- a/widget/src/cocoa/nsPIWidgetCocoa.idl +++ b/widget/src/cocoa/nsPIWidgetCocoa.idl @@ -39,7 +39,7 @@ #include "nsISupports.idl" -interface nsIMenuBar; +interface nsMenuBarX; interface nsCocoaWindow; interface nsIWidget; @@ -56,9 +56,6 @@ interface nsPIWidgetCocoa : nsISupports { void SendSetZLevelEvent(); - // Obtain the menubar for a window - nsIMenuBar GetMenuBar(); - // Find the displayed child sheet (if aShown) or a child sheet that // wants to be displayed (if !aShown) nsCocoaWindow GetChildSheet(in boolean aShown); diff --git a/widget/src/cocoa/nsWidgetFactory.mm b/widget/src/cocoa/nsWidgetFactory.mm index 15cf7b904675..858332021a22 100644 --- a/widget/src/cocoa/nsWidgetFactory.mm +++ b/widget/src/cocoa/nsWidgetFactory.mm @@ -49,10 +49,6 @@ #include "nsAppShellSingleton.h" #include "nsFilePicker.h" -#include "nsMenuBarX.h" -#include "nsMenuX.h" -#include "nsMenuItemX.h" - #include "nsClipboard.h" #include "nsClipboardHelper.h" #include "nsTransferable.h" @@ -74,9 +70,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker) NS_GENERIC_FACTORY_CONSTRUCTOR(nsToolkit) NS_GENERIC_FACTORY_CONSTRUCTOR(nsLookAndFeel) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuBarX) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuX) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuItemX) NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable) NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter) @@ -89,6 +82,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSessionX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceX) +#include "nsMenuBarX.h" +NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeMenuServiceX) + #include "nsBidiKeyboard.h" NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard) @@ -125,18 +121,6 @@ static const nsModuleComponentInfo gComponents[] = NS_LOOKANDFEEL_CID, "@mozilla.org/widget/lookandfeel;1", nsLookAndFeelConstructor }, - { "Menubar", - NS_MENUBAR_CID, - "@mozilla.org/widget/menubar/mac;1", - nsMenuBarXConstructor }, - { "Menu", - NS_MENU_CID, - "@mozilla.org/widget/menu/mac;1", - nsMenuXConstructor }, - { "MenuItem", - NS_MENUITEM_CID, - "@mozilla.org/widget/menuitem/mac;1", - nsMenuItemXConstructor }, { "Sound", NS_SOUND_CID, "@mozilla.org/sound;1", @@ -189,6 +173,10 @@ static const nsModuleComponentInfo gComponents[] = NS_IDLE_SERVICE_CID, "@mozilla.org/widget/idleservice;1", nsIdleServiceXConstructor }, + { "Native Menu Service", + NS_NATIVEMENUSERVICE_CID, + "@mozilla.org/widget/nativemenuservice;1", + nsNativeMenuServiceXConstructor }, }; NS_IMPL_NSGETMODULE_WITH_CTOR_DTOR(nsWidgetMacModule, gComponents, diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 2b403789469f..02cc01086add 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -1373,7 +1373,7 @@ nsWindow::SetIcon(const nsAString& aIconSpec) } NS_IMETHODIMP -nsWindow::SetMenuBar(nsIMenuBar * aMenuBar) +nsWindow::SetMenuBar(void * aMenuBar) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h index 0631535408e8..2e8ea043f83f 100644 --- a/widget/src/gtk2/nsWindow.h +++ b/widget/src/gtk2/nsWindow.h @@ -141,7 +141,7 @@ public: NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); NS_IMETHOD SetWindowClass(const nsAString& xulWinType); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); + NS_IMETHOD SetMenuBar(void * aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/os2/nsWindow.h b/widget/src/os2/nsWindow.h index ebcd7ad4aac3..973d16223d28 100644 --- a/widget/src/os2/nsWindow.h +++ b/widget/src/os2/nsWindow.h @@ -61,7 +61,6 @@ #include "gfxOS2Surface.h" #include "gfxContext.h" -class nsIMenuBar; class imgIContainer; //#define DEBUG_FOCUS @@ -178,7 +177,7 @@ class nsWindow : public nsBaseWidget, NS_IMETHOD HideWindowChrome(PRBool aShouldHide); NS_IMETHOD SetTitle( const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD Invalidate( PRBool aIsSynchronous); NS_IMETHOD Invalidate( const nsRect & aRect, PRBool aIsSynchronous); @@ -281,7 +280,6 @@ protected: PRInt32 mPreferredHeight; PRInt32 mPreferredWidth; nsToolkit *mOS2Toolkit; - nsIMenuBar *mMenuBar; PRInt32 mWindowState; nsRefPtr mThebesSurface; diff --git a/widget/src/photon/nsWindow.cpp b/widget/src/photon/nsWindow.cpp index 5ea978f2990b..50aa486f9edd 100644 --- a/widget/src/photon/nsWindow.cpp +++ b/widget/src/photon/nsWindow.cpp @@ -53,7 +53,6 @@ #include "nsRect.h" #include "nsTransform2D.h" #include "nsGfxCIID.h" -#include "nsIMenuBar.h" #include "nsToolkit.h" #include "nsIPrefBranch.h" #include "nsIPrefService.h" diff --git a/widget/src/windows/nsWindow.h b/widget/src/windows/nsWindow.h index 170c46cc1bc9..0d12409793ec 100644 --- a/widget/src/windows/nsWindow.h +++ b/widget/src/windows/nsWindow.h @@ -61,7 +61,6 @@ class nsNativeDragTarget; class nsIRollupListener; -class nsIMenuBar; class nsIFile; class imgIContainer; @@ -190,7 +189,7 @@ public: NS_IMETHOD ScrollRect(nsRect &aRect, PRInt32 aDx, PRInt32 aDy); NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/xpwidgets/nsBaseWidget.h b/widget/src/xpwidgets/nsBaseWidget.h index 4829649c7d2c..88c8f5ed7939 100644 --- a/widget/src/xpwidgets/nsBaseWidget.h +++ b/widget/src/xpwidgets/nsBaseWidget.h @@ -136,6 +136,7 @@ public: virtual void ConvertToDeviceCoordinates(nscoord &aX,nscoord &aY) {} virtual void FreeNativeData(void * data, PRUint32 aDataType) {} NS_IMETHOD BeginResizeDrag(nsGUIEvent* aEvent, PRInt32 aHorizontal, PRInt32 aVertical); + NS_IMETHOD ActivateNativeMenuItemAt(const nsAString& indexString) { return NS_ERROR_NOT_IMPLEMENTED; } protected: diff --git a/widget/tests/Makefile.in b/widget/tests/Makefile.in index 8a5ec7f53ee0..4bddadfeb530 100644 --- a/widget/tests/Makefile.in +++ b/widget/tests/Makefile.in @@ -48,5 +48,10 @@ _TEST_FILES = test_bug343416.xul \ test_keycodes.xul \ $(NULL) +ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) +_TEST_FILES += native_menus_window.xul \ + test_native_menus.xul +endif + libs:: $(_TEST_FILES) $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir) diff --git a/widget/tests/native_menus_window.xul b/widget/tests/native_menus_window.xul new file mode 100644 index 000000000000..1b68e3c4f7a7 --- /dev/null +++ b/widget/tests/native_menus_window.xul @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/widget/tests/test_native_menus.xul b/widget/tests/test_native_menus.xul new file mode 100644 index 000000000000..ac6887170607 --- /dev/null +++ b/widget/tests/test_native_menus.xul @@ -0,0 +1,34 @@ + + + + + + Native menu system tests + + + + diff --git a/xpfe/appshell/src/Makefile.in b/xpfe/appshell/src/Makefile.in index 65b6f346e726..200b70bac45b 100644 --- a/xpfe/appshell/src/Makefile.in +++ b/xpfe/appshell/src/Makefile.in @@ -104,3 +104,4 @@ EXTRA_DSO_LDOPTS = \ include $(topsrcdir)/config/rules.mk +DEFINES += -D_IMPL_NS_COM diff --git a/xpfe/appshell/src/nsWebShellWindow.cpp b/xpfe/appshell/src/nsWebShellWindow.cpp index f83abc822596..9b7149bd487b 100644 --- a/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/xpfe/appshell/src/nsWebShellWindow.cpp @@ -109,8 +109,8 @@ #include "nsIMarkupDocumentViewer.h" #include "nsIFocusEventSuppressor.h" -#if defined(XP_MACOSX) -#include "nsIMenuBar.h" +#ifdef XP_MACOSX +#include "nsINativeMenuService.h" #define USE_NATIVE_MENUS #endif @@ -122,9 +122,6 @@ static PRUint32 gWebShellWindowCount = 0; /* Define Class IDs */ static NS_DEFINE_CID(kWindowCID, NS_WINDOW_CID); -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuBarCID, NS_MENUBAR_CID); - #define SIZE_PERSISTENCE_TIMEOUT 500 // msec nsWebShellWindow::nsWebShellWindow() : nsXULWindow() @@ -552,23 +549,17 @@ static void LoadNativeMenus(nsIDOMDocument *aDOMDoc, nsIWidget *aParentWindow) aDOMDoc->GetElementsByTagNameNS(NS_LITERAL_STRING("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"), NS_LITERAL_STRING("menubar"), getter_AddRefs(menubarElements)); - + nsCOMPtr menubarNode; if (menubarElements) menubarElements->Item(0, getter_AddRefs(menubarNode)); - if (!menubarNode) return; - nsCOMPtr pnsMenuBar = do_CreateInstance(kMenuBarCID); - if (!pnsMenuBar) - return; - - pnsMenuBar->Create(aParentWindow); - - // fake event - nsMenuEvent fake(PR_TRUE, 0, nsnull); - pnsMenuBar->MenuConstruct(fake, aParentWindow, menubarNode); + nsCOMPtr nms = do_GetService("@mozilla.org/widget/nativemenuservice;1"); + nsCOMPtr menubarContent(do_QueryInterface(menubarNode)); + if (nms && menubarContent) + nms->CreateNativeMenuBar(aParentWindow, menubarContent); } #endif From 5e50e676a1710b035a020885d6a776012f7ea8c1 Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Fri, 27 Jun 2008 01:22:22 -0400 Subject: [PATCH 22/98] bustage fix for bug 433952 landing --- widget/public/nsIWidget.h | 2 +- widget/src/xpwidgets/nsBaseWidget.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/widget/public/nsIWidget.h b/widget/public/nsIWidget.h index 48d0460b16dd..cd0ff746fb65 100644 --- a/widget/public/nsIWidget.h +++ b/widget/public/nsIWidget.h @@ -1116,7 +1116,7 @@ class nsIWidget : public nsISupports { * in the native menu bar. Within that, the first item (index 0) is a * submenu, and we want to activate the 5th item within that submenu. */ - virtual nsresult ActivateNativeMenuItemAt(const nsAString& aString) = 0; + virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) = 0; protected: // keep the list of children. We also keep track of our siblings. diff --git a/widget/src/xpwidgets/nsBaseWidget.h b/widget/src/xpwidgets/nsBaseWidget.h index 88c8f5ed7939..7467b0d0d7ec 100644 --- a/widget/src/xpwidgets/nsBaseWidget.h +++ b/widget/src/xpwidgets/nsBaseWidget.h @@ -136,7 +136,7 @@ public: virtual void ConvertToDeviceCoordinates(nscoord &aX,nscoord &aY) {} virtual void FreeNativeData(void * data, PRUint32 aDataType) {} NS_IMETHOD BeginResizeDrag(nsGUIEvent* aEvent, PRInt32 aHorizontal, PRInt32 aVertical); - NS_IMETHOD ActivateNativeMenuItemAt(const nsAString& indexString) { return NS_ERROR_NOT_IMPLEMENTED; } + virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) { return NS_ERROR_NOT_IMPLEMENTED; } protected: From 15ee1f7c2a30a106db18ee7abeece7335b873768 Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Fri, 27 Jun 2008 02:17:20 -0400 Subject: [PATCH 23/98] remove change I didn't mean to make in bug 433952 --- xpfe/appshell/src/Makefile.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/xpfe/appshell/src/Makefile.in b/xpfe/appshell/src/Makefile.in index 200b70bac45b..0e2eaf312fa5 100644 --- a/xpfe/appshell/src/Makefile.in +++ b/xpfe/appshell/src/Makefile.in @@ -103,5 +103,3 @@ EXTRA_DSO_LDOPTS = \ $(NULL) include $(topsrcdir)/config/rules.mk - -DEFINES += -D_IMPL_NS_COM From aa0023d237d98893cfce5f1c15d6ebbbef2a0ac3 Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Fri, 27 Jun 2008 02:52:18 -0400 Subject: [PATCH 24/98] back out 433952 --- dom/public/idl/base/nsIDOMWindowUtils.idl | 11 +- dom/src/base/nsDOMWindowUtils.cpp | 16 - toolkit/content/tests/chrome/Makefile.in | 2 +- widget/public/Makefile.in | 2 +- widget/public/nsIMenuBar.h | 141 +++++ widget/public/nsINativeMenuService.h | 60 -- widget/public/nsIWidget.h | 23 +- widget/public/nsWidgetsCID.h | 18 +- widget/src/beos/nsWindow.h | 4 +- widget/src/cocoa/Makefile.in | 5 +- widget/src/cocoa/nsChildView.h | 5 +- widget/src/cocoa/nsChildView.mm | 47 +- widget/src/cocoa/nsCocoaUtils.mm | 7 +- widget/src/cocoa/nsCocoaWindow.h | 8 +- widget/src/cocoa/nsCocoaWindow.mm | 20 +- widget/src/cocoa/nsIMenu.h | 240 ++++++++ widget/src/cocoa/nsIMenuItem.h | 156 +++++ widget/src/cocoa/nsMenuBarX.h | 140 +++-- widget/src/cocoa/nsMenuBarX.mm | 679 ++++++++++++++-------- widget/src/cocoa/nsMenuBaseX.h | 67 --- widget/src/cocoa/nsMenuItemIconX.h | 14 +- widget/src/cocoa/nsMenuItemIconX.mm | 40 +- widget/src/cocoa/nsMenuItemX.h | 77 +-- widget/src/cocoa/nsMenuItemX.mm | 191 ++++-- widget/src/cocoa/nsMenuUtilsX.h | 63 -- widget/src/cocoa/nsMenuUtilsX.mm | 197 ------- widget/src/cocoa/nsMenuX.h | 154 +++-- widget/src/cocoa/nsMenuX.mm | 651 ++++++++++++++------- widget/src/cocoa/nsPIWidgetCocoa.idl | 5 +- widget/src/cocoa/nsWidgetFactory.mm | 26 +- widget/src/gtk2/nsWindow.cpp | 2 +- widget/src/gtk2/nsWindow.h | 2 +- widget/src/os2/nsWindow.h | 4 +- widget/src/photon/nsWindow.cpp | 1 + widget/src/windows/nsWindow.h | 3 +- widget/src/xpwidgets/nsBaseWidget.h | 1 - widget/tests/Makefile.in | 5 - widget/tests/native_menus_window.xul | 115 ---- widget/tests/test_native_menus.xul | 34 -- xpfe/appshell/src/Makefile.in | 1 + xpfe/appshell/src/nsWebShellWindow.cpp | 23 +- 41 files changed, 1903 insertions(+), 1357 deletions(-) create mode 100644 widget/public/nsIMenuBar.h delete mode 100644 widget/public/nsINativeMenuService.h create mode 100644 widget/src/cocoa/nsIMenu.h create mode 100644 widget/src/cocoa/nsIMenuItem.h delete mode 100644 widget/src/cocoa/nsMenuBaseX.h delete mode 100644 widget/src/cocoa/nsMenuUtilsX.h delete mode 100644 widget/src/cocoa/nsMenuUtilsX.mm delete mode 100644 widget/tests/native_menus_window.xul delete mode 100644 widget/tests/test_native_menus.xul diff --git a/dom/public/idl/base/nsIDOMWindowUtils.idl b/dom/public/idl/base/nsIDOMWindowUtils.idl index b457a8f10edd..067b282be8c0 100644 --- a/dom/public/idl/base/nsIDOMWindowUtils.idl +++ b/dom/public/idl/base/nsIDOMWindowUtils.idl @@ -47,7 +47,7 @@ interface nsIDOMElement; -[scriptable, uuid(ef136142-9925-45f4-a3e4-6f0d275c6aa8)] +[scriptable, uuid(993da427-2ac3-4766-8485-21a236d258e4)] interface nsIDOMWindowUtils : nsISupports { /** @@ -160,15 +160,6 @@ interface nsIDOMWindowUtils : nsISupports { in AString aCharacters, in AString aUnmodifiedCharacters); - /** - * See nsIWidget::ActivateNativeMenuItemAt - * - * Cannot be accessed from unprivileged context (not content-accessible) - * Will throw a DOM security error if called without UniversalXPConnect - * privileges. - */ - void activateNativeMenuItemAt(in AString indexString); - /** * Focus the element aElement. The element should be in the same document * that the window is displaying. Pass null to blur the element, if any, diff --git a/dom/src/base/nsDOMWindowUtils.cpp b/dom/src/base/nsDOMWindowUtils.cpp index f73b1c047cfe..1eaecee5739c 100644 --- a/dom/src/base/nsDOMWindowUtils.cpp +++ b/dom/src/base/nsDOMWindowUtils.cpp @@ -308,22 +308,6 @@ nsDOMWindowUtils::SendNativeKeyEvent(PRInt32 aNativeKeyboardLayout, aModifiers, aCharacters, aUnmodifiedCharacters); } -NS_IMETHODIMP -nsDOMWindowUtils::ActivateNativeMenuItemAt(const nsAString& indexString) -{ - PRBool hasCap = PR_FALSE; - if (NS_FAILED(nsContentUtils::GetSecurityManager()->IsCapabilityEnabled("UniversalXPConnect", &hasCap)) - || !hasCap) - return NS_ERROR_DOM_SECURITY_ERR; - - // get the widget to send the event to - nsCOMPtr widget = GetWidget(); - if (!widget) - return NS_ERROR_FAILURE; - - return widget->ActivateNativeMenuItemAt(indexString); -} - nsIWidget* nsDOMWindowUtils::GetWidget() { diff --git a/toolkit/content/tests/chrome/Makefile.in b/toolkit/content/tests/chrome/Makefile.in index 157349e8216d..c3df3388a48d 100644 --- a/toolkit/content/tests/chrome/Makefile.in +++ b/toolkit/content/tests/chrome/Makefile.in @@ -66,7 +66,7 @@ _TEST_FILES = bug288254_window.xul \ window_preferences.xul \ $(NULL) -ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) +ifeq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) _TEST_FILES += test_panel_focus.xul \ window_panel_focus.xul else diff --git a/widget/public/Makefile.in b/widget/public/Makefile.in index 775cf0ca3c48..89be38f0219f 100644 --- a/widget/public/Makefile.in +++ b/widget/public/Makefile.in @@ -64,7 +64,7 @@ EXPORTS = \ $(NULL) ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) -EXPORTS += nsINativeMenuService.h +EXPORTS += nsIMenuBar.h endif ifeq ($(MOZ_WIDGET_TOOLKIT),os2) diff --git a/widget/public/nsIMenuBar.h b/widget/public/nsIMenuBar.h new file mode 100644 index 000000000000..8bbcb1e6fc1a --- /dev/null +++ b/widget/public/nsIMenuBar.h @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsIMenuBar_h__ +#define nsIMenuBar_h__ + +#include "nsISupports.h" +#include "nsString.h" +#include "nsIMenu.h" + +class nsIWidget; + +// F81C6D64-B260-44ED-9289-2E410A130E35 +#define NS_IMENUBAR_IID \ +{ 0xF81C6D64, 0xB260, 0x44ED, \ + { 0x92, 0x89, 0x2E, 0x41, 0x0A, 0x13, 0x0E, 0x35 } } + +/** + * MenuBar widget + */ +class nsIMenuBar : public nsISupports { + + public: + NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUBAR_IID) + + /** + * Creates the MenuBar + * + */ + NS_IMETHOD Create(nsIWidget * aParent) = 0; + + /** + * Get the MenuBar's Parent. This addrefs. + * + */ + NS_IMETHOD GetParent(nsIWidget *&aParent) = 0; + + /** + * Set the MenuBar's Parent + * + */ + NS_IMETHOD SetParent(nsIWidget *aParent) = 0; + + /** + * Adds the Menu + * + */ + NS_IMETHOD AddMenu(nsIMenu * aMenu) = 0; + + /** + * Returns the number of menus + * + */ + NS_IMETHOD GetMenuCount(PRUint32 &aCount) = 0; + + /** + * Returns a Menu Item at a specified Index + * + */ + NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; + + /** + * Inserts a Menu at a specified Index + * + */ + NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; + + /** + * Removes an Menu from a specified Index + * + */ + NS_IMETHOD RemoveMenu(const PRUint32 aCount) = 0; + + /** + * Removes all the Menus + * + */ + NS_IMETHOD RemoveAll() = 0; + + /** + * Gets Native MenuHandle + * + */ + NS_IMETHOD GetNativeData(void*& aData) = 0; + + /** + * Sets Native MenuHandle. Temporary hack for mac until + * nsMenuBar does it's own construction + */ + NS_IMETHOD SetNativeData(void* aData) = 0; + + /** + * Draw the menubar + * + */ + NS_IMETHOD Paint() = 0; + + /** + * Construct the menubar + * + */ + NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuBar, NS_IMENUBAR_IID) + +#endif diff --git a/widget/public/nsINativeMenuService.h b/widget/public/nsINativeMenuService.h deleted file mode 100644 index 9e5f4bc0bb4b..000000000000 --- a/widget/public/nsINativeMenuService.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Josh Aas - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsINativeMenuService_h_ -#define nsINativeMenuService_h_ - -#include "nsISupports.h" - -class nsIWidget; -class nsIContent; - -// {90DF88F9-F084-4EF3-829A-49496E636DED} -#define NS_INATIVEMENUSERVICE_IID \ -{ 0x90DF88F9, 0xF084, 0x4EF3, \ -{ 0x82, 0x9A, 0x49, 0x49, 0x6E, 0x63, 0x6D, 0xED} } - -class nsINativeMenuService : public nsISupports { -public: - // Given a top-level window widget and a menu bar DOM node, sets up native - // menus. Once created, native menus are controlled via the DOM, including - // destruction. - NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode)=0; -}; - -#endif // nsINativeMenuService_h_ diff --git a/widget/public/nsIWidget.h b/widget/public/nsIWidget.h index cd0ff746fb65..28848152064a 100644 --- a/widget/public/nsIWidget.h +++ b/widget/public/nsIWidget.h @@ -55,6 +55,7 @@ class nsIDeviceContext; class nsIRegion; struct nsRect; struct nsFont; +class nsIMenuBar; class nsIEventListener; class nsIRollupListener; class nsGUIEvent; @@ -94,10 +95,10 @@ typedef nsEventStatus (*PR_CALLBACK EVENT_CALLBACK)(nsGUIEvent *event); #define NS_NATIVE_PLUGIN_PORT_CG 101 #endif -// 00e25b3d-c872-4985-a15e-8e650b7b8ff6 +// 517a0eef-cd1c-48b3-96f0-e341a50f120d #define NS_IWIDGET_IID \ -{ 0x00e25b3d, 0xc872, 0x4985, \ - { 0xa1, 0x5e, 0x8e, 0x65, 0x0b, 0x7b, 0x8f, 0xf6 } } +{ 0x517a0eef, 0xcd1c, 0x48b3, \ + { 0x96, 0xf0, 0xe3, 0x41, 0xa5, 0x0f, 0x12, 0x0d } } // Hide the native window systems real window type so as to avoid // including native window system types and APIs. This is necessary @@ -878,7 +879,7 @@ class nsIWidget : public nsISupports { * @param aMenuBar the menubar */ - NS_IMETHOD SetMenuBar(void* aMenuBar) = 0; + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) = 0; /** * Set the widget's MenuBar's visibility @@ -1104,20 +1105,6 @@ class nsIWidget : public nsISupports { const nsAString& aCharacters, const nsAString& aUnmodifiedCharacters) = 0; - /** - * Activates a native menu item at the position specified by the index - * string. The index string is a string of positive integers separated - * by the "|" (pipe) character. The last integer in the string represents - * the item index in a submenu located using the integers prior to it. - * - * Example: 1|0|4 - * In this string, the first integer represents the top-level submenu - * in the native menu bar. Since the integer is 1, it is the second submeu - * in the native menu bar. Within that, the first item (index 0) is a - * submenu, and we want to activate the 5th item within that submenu. - */ - virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) = 0; - protected: // keep the list of children. We also keep track of our siblings. // The ownership model is as follows: parent holds a strong ref to diff --git a/widget/public/nsWidgetsCID.h b/widget/public/nsWidgetsCID.h index 1f4e62ba2b5d..c9157d165cad 100644 --- a/widget/public/nsWidgetsCID.h +++ b/widget/public/nsWidgetsCID.h @@ -79,10 +79,20 @@ // Menus //----------------------------------------------------------- -// {0B3FE5AA-BC72-4303-85AE-76365DF1251D} -#define NS_NATIVEMENUSERVICE_CID \ -{ 0x0B3FE5AA, 0xBC72, 0x4303, \ - { 0x85, 0xAE, 0x76, 0x36, 0x5D, 0xF1, 0x25, 0x1D} } +// {BC658C81-4BEB-11d2-8DBB-00609703C14E} +#define NS_MENUBAR_CID \ +{ 0xbc658c81, 0x4beb, 0x11d2, \ + { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } + +// {35A3DEC1-4992-11d2-8DBA-00609703C14E} +#define NS_MENU_CID \ +{ 0x35a3dec1, 0x4992, 0x11d2, \ + { 0x8d, 0xba, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } + +// {7F045771-4BEB-11d2-8DBB-00609703C14E} +#define NS_MENUITEM_CID \ +{ 0x7f045771, 0x4beb, 0x11d2, \ + { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } // {F6CD4F21-53AF-11d2-8DC4-00609703C14E} #define NS_POPUPMENU_CID \ diff --git a/widget/src/beos/nsWindow.h b/widget/src/beos/nsWindow.h index af54d55c3487..cc74a387cc7d 100644 --- a/widget/src/beos/nsWindow.h +++ b/widget/src/beos/nsWindow.h @@ -48,6 +48,8 @@ #include "nsIWidget.h" +#include "nsIMenuBar.h" + #include "nsIMouseListener.h" #include "nsIEventListener.h" #include "nsString.h" @@ -162,7 +164,7 @@ public: NS_IMETHOD SetColorMap(nsColorMap *aColorMap); NS_IMETHOD Scroll(PRInt32 aDx, PRInt32 aDy, nsRect *aClipRect); NS_IMETHOD SetTitle(const nsAString& aTitle); - NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/cocoa/Makefile.in b/widget/src/cocoa/Makefile.in index 112a4f153940..61a93e319905 100644 --- a/widget/src/cocoa/Makefile.in +++ b/widget/src/cocoa/Makefile.in @@ -66,7 +66,7 @@ REQUIRES = xpcom \ intl \ exthandler \ appshell \ - lcms \ + lcms \ thebes \ js \ xpconnect \ @@ -84,6 +84,8 @@ endif EXPORTS = \ mozView.h \ nsChangeObserver.h \ + nsIMenu.h \ + nsIMenuItem.h \ $(NULL) CMMSRCS = \ @@ -93,7 +95,6 @@ CMMSRCS = \ nsMenuBarX.mm \ nsMenuItemX.mm \ nsMenuItemIconX.mm \ - nsMenuUtilsX.mm \ nsFilePicker.mm \ nsDragService.mm \ nsToolkit.mm \ diff --git a/widget/src/cocoa/nsChildView.h b/widget/src/cocoa/nsChildView.h index 3ea7e64e1a34..fe69c3692020 100644 --- a/widget/src/cocoa/nsChildView.h +++ b/widget/src/cocoa/nsChildView.h @@ -61,6 +61,7 @@ #include "nsIEventListener.h" #include "nsString.h" #include "nsIDragService.h" +#include "nsIMenuBar.h" #include "nsplugindefs.h" @@ -290,7 +291,7 @@ public: void LocalToWindowCoordinate(nscoord& aX, nscoord& aY) { ConvertToDeviceCoordinates(aX, aY); } void LocalToWindowCoordinate(nsRect& aRect) { ConvertToDeviceCoordinates(aRect.x, aRect.y); } - NS_IMETHOD SetMenuBar(void* aMenuBar); + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD GetPreferredSize(PRInt32& aWidth, PRInt32& aHeight); @@ -304,8 +305,6 @@ public: NS_IMETHOD GetAttention(PRInt32 aCycleCount); - NS_IMETHOD ActivateNativeMenuItemAt(const nsAString& indexString); - // nsIPluginWidget NS_IMETHOD GetPluginClipRect(nsRect& outClipRect, nsPoint& outOrigin, PRBool& outWidgetVisible); NS_IMETHOD StartDrawPlugin(); diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm index 6382817e0049..2cc6e1109a49 100644 --- a/widget/src/cocoa/nsChildView.mm +++ b/widget/src/cocoa/nsChildView.mm @@ -960,7 +960,7 @@ NS_IMETHODIMP nsChildView::SetColorMap(nsColorMap *aColorMap) } -NS_IMETHODIMP nsChildView::SetMenuBar(void* aMenuBar) +NS_IMETHODIMP nsChildView::SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; // subviews don't have menu bars } @@ -1362,51 +1362,6 @@ nsresult nsChildView::SynthesizeNativeKeyEvent(PRInt32 aNativeKeyboardLayout, NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -// Used for testing native menu system structure and event handling. -NS_IMETHODIMP nsChildView::ActivateNativeMenuItemAt(const nsAString& indexString) -{ - NSString* title = [NSString stringWithCharacters:indexString.BeginReading() length:indexString.Length()]; - NSArray* indexes = [title componentsSeparatedByString:@"|"]; - unsigned int indexCount = [indexes count]; - if (indexCount == 0) - return NS_OK; - - NSMenu* currentSubmenu = [NSApp mainMenu]; - for (unsigned int i = 0; i < (indexCount - 1); i++) { - NSMenu* newSubmenu = nil; - int targetIndex; - // We remove the application menu from consideration for the top-level menu - if (i == 0) - targetIndex = [[indexes objectAtIndex:i] intValue] + 1; - else - targetIndex = [[indexes objectAtIndex:i] intValue]; - int itemCount = [currentSubmenu numberOfItems]; - if (targetIndex < itemCount) { - NSMenuItem* menuItem = [currentSubmenu itemAtIndex:targetIndex]; - if ([menuItem hasSubmenu]) - newSubmenu = [menuItem submenu]; - } - - if (newSubmenu) - currentSubmenu = newSubmenu; - else - return NS_ERROR_FAILURE; - } - - int itemCount = [currentSubmenu numberOfItems]; - int targetIndex = [[indexes objectAtIndex:(indexCount - 1)] intValue]; - if (targetIndex < itemCount) { - // NSLog(@"Performing action for native menu item titled: %@\n", - // [[currentSubmenu itemAtIndex:targetIndex] title]); - [currentSubmenu performActionForItemAtIndex:targetIndex]; - } - else { - return NS_ERROR_FAILURE; - } - - return NS_OK; -} - #pragma mark - diff --git a/widget/src/cocoa/nsCocoaUtils.mm b/widget/src/cocoa/nsCocoaUtils.mm index ea4c404d7262..750f1a6680e9 100644 --- a/widget/src/cocoa/nsCocoaUtils.mm +++ b/widget/src/cocoa/nsCocoaUtils.mm @@ -47,7 +47,6 @@ #include "nsIXULWindow.h" #include "nsIBaseWindow.h" #include "nsIServiceManager.h" -#include "nsMenuUtilsX.h" float nsCocoaUtils::MenuBarScreenHeight() { @@ -192,7 +191,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); + nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; @@ -213,7 +212,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() [firstMenuItem release]; // Add standard edit menu - [newMenuBar addItem:nsMenuUtilsX::GetStandardEditMenuItem()]; + [newMenuBar addItem:MenuHelpersX::GetStandardEditMenuItem()]; // Show the new menu bar [NSApp setMainMenu:newMenuBar]; @@ -229,7 +228,7 @@ void nsCocoaUtils::CleanUpAfterNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); + nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; diff --git a/widget/src/cocoa/nsCocoaWindow.h b/widget/src/cocoa/nsCocoaWindow.h index f0d44165300b..d2b5fdea8f90 100644 --- a/widget/src/cocoa/nsCocoaWindow.h +++ b/widget/src/cocoa/nsCocoaWindow.h @@ -46,11 +46,9 @@ #include "nsBaseWidget.h" #include "nsPIWidgetCocoa.h" -#include "nsAutoPtr.h" class nsCocoaWindow; class nsChildView; -class nsMenuBarX; typedef struct _nsCocoaWindowList { _nsCocoaWindowList() : prev(NULL), window(NULL) {} @@ -212,8 +210,8 @@ public: NS_IMETHOD SetModal(PRBool aState); NS_IMETHOD IsVisible(PRBool & aState); NS_IMETHOD SetFocus(PRBool aState=PR_FALSE); - NS_IMETHOD SetMenuBar(void* aMenuBar); - virtual nsMenuBarX* GetMenuBar(); + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); + virtual nsIMenuBar* GetMenuBar(); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); @@ -277,7 +275,7 @@ protected: nsIWidget* mParent; // if we're a popup, this is our parent [WEAK] NSWindow* mWindow; // our cocoa window [STRONG] WindowDelegate* mDelegate; // our delegate for processing window msgs [STRONG] - nsRefPtr mMenuBar; + nsCOMPtr mMenuBar; NSWindow* mSheetWindowParent; // if this is a sheet, this is the NSWindow it's attached to nsChildView* mPopupContentView; // if this is a popup, this is its content widget diff --git a/widget/src/cocoa/nsCocoaWindow.mm b/widget/src/cocoa/nsCocoaWindow.mm index c0d19fac4f1a..704d23b63453 100644 --- a/widget/src/cocoa/nsCocoaWindow.mm +++ b/widget/src/cocoa/nsCocoaWindow.mm @@ -64,7 +64,6 @@ #include "nsPIDOMWindow.h" #include "nsIDOMElement.h" #include "nsMenuBarX.h" -#include "nsMenuUtilsX.h" #include "gfxPlatform.h" #include "lcms.h" @@ -1118,6 +1117,13 @@ NS_IMETHODIMP nsCocoaWindow::GetChildSheet(PRBool aShown, nsCocoaWindow** _retva } +NS_IMETHODIMP nsCocoaWindow::GetMenuBar(nsIMenuBar** menuBar) +{ + *menuBar = mMenuBar; + return NS_OK; +} + + NS_IMETHODIMP nsCocoaWindow::GetRealParent(nsIWidget** parent) { *parent = mParent; @@ -1194,15 +1200,15 @@ nsCocoaWindow::ReportSizeEvent(NSRect *r) } -NS_IMETHODIMP nsCocoaWindow::SetMenuBar(void *aMenuBar) +NS_IMETHODIMP nsCocoaWindow::SetMenuBar(nsIMenuBar *aMenuBar) { if (mMenuBar) mMenuBar->SetParent(nsnull); - mMenuBar = static_cast(aMenuBar); + mMenuBar = aMenuBar; // We paint the hidden window menu bar if no other menu bar has been painted // yet so that some reasonable menu bar is displayed when the app starts up. - if (!gSomeMenuBarPainted && mMenuBar && (nsMenuUtilsX::GetHiddenWindowMenuBar() == mMenuBar)) + if (!gSomeMenuBarPainted && mMenuBar && (MenuHelpersX::GetHiddenWindowMenuBar() == mMenuBar)) mMenuBar->Paint(); return NS_OK; @@ -1258,7 +1264,7 @@ NS_IMETHODIMP nsCocoaWindow::ScreenToWidget(const nsRect& aOldRect, nsRect& aNew } -nsMenuBarX* nsCocoaWindow::GetMenuBar() +nsIMenuBar* nsCocoaWindow::GetMenuBar() { return mMenuBar; } @@ -1404,7 +1410,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() nsCocoaWindow* geckoWidget = [windowDelegate geckoWidget]; NS_ASSERTION(geckoWidget, "Window delegate not returning a gecko widget!"); - nsMenuBarX* geckoMenuBar = geckoWidget->GetMenuBar(); + nsIMenuBar* geckoMenuBar = geckoWidget->GetMenuBar(); if (geckoMenuBar) { geckoMenuBar->Paint(); } @@ -1492,7 +1498,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() // app modally. If one of those is up then we want it to retain its menu bar. if ([NSApp _isRunningAppModal]) return; - nsRefPtr hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); + nsCOMPtr hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); if (hiddenWindowMenuBar) { // printf("painting hidden window menu bar due to window losing main status\n"); hiddenWindowMenuBar->Paint(); diff --git a/widget/src/cocoa/nsIMenu.h b/widget/src/cocoa/nsIMenu.h new file mode 100644 index 000000000000..55fb8528004d --- /dev/null +++ b/widget/src/cocoa/nsIMenu.h @@ -0,0 +1,240 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsIMenu_h__ +#define nsIMenu_h__ + +#include "nsISupports.h" +#include "nsStringFwd.h" +#include "nsEvent.h" + +class nsIMenuBar; +class nsIMenu; +class nsIMenuItem; +class nsIContent; +class nsIWidget; +class nsMenuBarX; + + +// 9225136B-3F56-4CA3-92E0-623D5FB8356B +#define NS_IMENU_IID \ +{ 0x9225136B, 0x3F56, 0x4CA3, \ + { 0x92, 0xE0, 0x62, 0x3D, 0x5F, 0xB8, 0x35, 0x6B } } + +/** + * Menu widget + */ +class nsIMenu : public nsISupports { + + public: + NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENU_IID) + + /** + * Creates the Menu + * + */ + NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, + nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; + + /** + * Get the Menu's Parent. This addrefs. + * + */ + NS_IMETHOD GetParent(nsISupports *&aParent) = 0; + + /** + * Get the Menu label + * + */ + NS_IMETHOD GetLabel(nsString &aText) = 0; + + /** + * Set the Menu label + * + */ + NS_IMETHOD SetLabel(const nsAString &aText) = 0; + + /** + * Get the Menu Access Key + * + */ + NS_IMETHOD GetAccessKey(nsString &aText) = 0; + + /** + * Set the Menu Access Key + * + */ + NS_IMETHOD SetAccessKey(const nsAString &aText) = 0; + + /** + * Set the Menu enabled state + * + */ + NS_IMETHOD SetEnabled(PRBool aIsEnabled) = 0; + + /** + * Get the Menu enabled state + * + */ + NS_IMETHOD GetEnabled(PRBool* aIsEnabled) = 0; + + /** + * Adds a Menu Item. Do not use outside of widget menu implementations. + * Add and modify menu items via DOM content. + * + */ + NS_IMETHOD AddItem(nsISupports* aItem) = 0; + + /** + * Returns the number of visible menu items + * This includes separators. It does not include hidden items. + * + */ + NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount) = 0; + + /** + * Returns a Menu or Menu Item at a specified Index. + * This includes separators. It does not include hidden items. + * + */ + NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; + + /** + * Returns the number of menu items + * This includes separators. It -does- include hidden items. + * + */ + NS_IMETHOD GetItemCount(PRUint32 &aCount) = 0; + + /** + * Returns a Menu or Menu Item at a specified Index. + * This includes separators. It -does- include hidden items. + * + */ + NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; + + /** + * Inserts a Menu Item at a specified Index + * + */ + NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) = 0; + + /** + * Removes an Menu Item from a specified Index + * + */ + NS_IMETHOD RemoveItem(const PRUint32 aPos) = 0; + + /** + * Removes all the Menu Items + * + */ + NS_IMETHOD RemoveAll() = 0; + + /** + * Gets Native MenuHandle + * + */ + NS_IMETHOD GetNativeData(void** aData) = 0; + + /** + * Sets Native MenuHandle + * + */ + NS_IMETHOD SetNativeData(void* aData) = 0; + + /** + * Get menu content + * + */ + NS_IMETHOD GetMenuContent(nsIContent ** aMenuContent) = 0; + + /** + * Enable/disable native widget for a particular nsIMenuItem + * + */ + NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, + PRBool aEnabled) = 0; + + /** + * Retrieve the native menu and the index of the item within that menu. + * + */ + NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, + void** aMenuRef, + PRUint16* aMenuItemIndex) = 0; + + /** + * Sets an appropriate icon for the menu. + * + */ + NS_IMETHOD SetupIcon() = 0; + + /** + * Menu has been selected + * + */ + virtual nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent) = 0; + + /** + * Menu has been deselected + * + */ + virtual void MenuDeselected(const nsMenuEvent & aMenuEvent) = 0; + + /** + * Construct menu + * + */ + virtual void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; + + /** + * Destruct menu + * + */ + virtual void MenuDestruct(const nsMenuEvent & aMenuEvent) = 0; + + /** + * Set rebuild + * + */ + virtual void SetRebuild(PRBool aMenuEvent) = 0; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenu, NS_IMENU_IID) + +#endif diff --git a/widget/src/cocoa/nsIMenuItem.h b/widget/src/cocoa/nsIMenuItem.h new file mode 100644 index 000000000000..7d648527f516 --- /dev/null +++ b/widget/src/cocoa/nsIMenuItem.h @@ -0,0 +1,156 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsIMenuItem_h__ +#define nsIMenuItem_h__ + +#include "prtypes.h" +#include "nsISupports.h" +#include "nsString.h" + +#include "nsIDOMElement.h" + +// 33FA04E3-EAFE-4DD1-AFB3-B3BC8C712716 +#define NS_IMENUITEM_IID \ +{ 0x33FA04E3, 0xEAFE, 0x4DD1, \ + { 0xAF, 0xB3, 0xB3, 0xBC, 0x8C, 0x71, 0x27, 0x16 } } + +class nsIMenu; +class nsIWidget; +class nsIContent; +class nsMenuBarX; + +enum { + knsMenuItemNoModifier = 0, + knsMenuItemShiftModifier = (1 << 0), + knsMenuItemAltModifier = (1 << 1), + knsMenuItemControlModifier = (1 << 2), + knsMenuItemCommandModifier = (1 << 3) +}; + +/** + * MenuItem widget + */ +class nsIMenuItem : public nsISupports { + + public: + NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUITEM_IID) + + enum EMenuItemType { eRegular = 0, eCheckbox, eRadio, eSeparator} ; + + /** + * Creates the MenuItem + * + */ + NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; + + /** + * Get the MenuItem label + * + */ + NS_IMETHOD GetLabel(nsString &aText) = 0; + + /** + * Get the Menu shortcut char + * + */ + NS_IMETHOD GetShortcutChar(nsString &aText) = 0; + + /** + * Gets whether the item is enabled or disabled + * + */ + NS_IMETHOD GetEnabled(PRBool *aIsEnabled) = 0; + + /** + * Sets whether the item is checked or not + * + */ + NS_IMETHOD SetChecked(PRBool aIsEnabled) = 0; + + /** + * Gets whether the item is checked or not + * + */ + NS_IMETHOD GetChecked(PRBool *aIsEnabled) = 0; + + /** + * Gets whether the item is a checkbox or radio + * + */ + NS_IMETHOD GetMenuItemType(EMenuItemType *aType) = 0; + + /** + * Gets Native Menu Handle + * + */ + NS_IMETHOD GetNativeData(void*& aData) = 0; + + /** + * Indicates whether it is a separator + * + */ + NS_IMETHOD IsSeparator(PRBool & aIsSep) = 0; + + /** + * Executes the "cached" JavaScript Command + * @return NS_OK if the command was executed properly, otherwise an error code + */ + NS_IMETHOD DoCommand() = 0; + + /** + * Sends a DOM event to the menu item's content node + * @return NS_OK if the event was sent properly, otherwise an error code + */ + NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) = 0; + + /** + * Sets an appropriate icon for the menu item. + */ + NS_IMETHOD SetupIcon() = 0; + + /** + * Get GetMenuItemContent + * + */ + NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent) = 0; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuItem, NS_IMENUITEM_IID) + +#endif diff --git a/widget/src/cocoa/nsMenuBarX.h b/widget/src/cocoa/nsMenuBarX.h index bc456e169d5d..c2cffe0fff53 100644 --- a/widget/src/cocoa/nsMenuBarX.h +++ b/widget/src/cocoa/nsMenuBarX.h @@ -39,29 +39,35 @@ #ifndef nsMenuBarX_h_ #define nsMenuBarX_h_ -#import - -#include "nsMenuBaseX.h" +#include "nsIMenuBar.h" +#include "nsObjCExceptions.h" #include "nsIMutationObserver.h" +#include "nsCOMArray.h" #include "nsHashtable.h" -#include "nsINativeMenuService.h" -#include "nsAutoPtr.h" +#include "nsWeakReference.h" +#include "nsIContent.h" + +#import +#import -class nsMenuX; -class nsMenuItemX; -class nsChangeObserver; class nsIWidget; -class nsIContent; class nsIDocument; +class nsIDOMNode; +class nsChangeObserver; +extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); -// The native menu service for creating native menu bars. -class nsNativeMenuServiceX : public nsINativeMenuService +PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); + +namespace MenuHelpersX { -public: - NS_DECL_ISUPPORTS - NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode); -}; + nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); + NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); + PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); + unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); + nsIMenuBar* GetHiddenWindowMenuBar(); + NSMenuItem* GetStandardEditMenuItem(); +} // Objective-C class used to allow us to have keyboard commands @@ -70,8 +76,8 @@ public: @interface GeckoNSMenu : NSMenu { } -- (BOOL)performKeyEquivalent:(NSEvent*)theEvent; -- (void)actOnKeyEquivalent:(NSEvent*)theEvent; +- (BOOL)performKeyEquivalent:(NSEvent *)theEvent; +- (void)actOnKeyEquivalent:(NSEvent *)theEvent; - (void)performMenuUserInterfaceEffectsForEvent:(NSEvent*)theEvent; @end @@ -84,59 +90,73 @@ public: @end -// Once instantiated, this object lives until its DOM node or its parent window is destroyed. -// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. -class nsMenuBarX : public nsMenuObjectX, - public nsIMutationObserver +// +// Native menu bar wrapper +// + +class nsMenuBarX : public nsIMenuBar, + public nsIMutationObserver, + public nsSupportsWeakReference { public: - nsMenuBarX(); - virtual ~nsMenuBarX(); + nsMenuBarX(); + virtual ~nsMenuBarX(); - static NativeMenuItemTarget* sNativeEventTarget; - static nsMenuBarX* sLastGeckoMenuBarPainted; + // |NSMenuItem|s target Objective-C objects + static NativeMenuItemTarget* sNativeEventTarget; + + static nsMenuBarX* sLastGeckoMenuBarPainted; + + NS_DECL_ISUPPORTS - // The following content nodes have been removed from the menu system. - // We save them here for use in command handling. - nsCOMPtr mAboutItemContent; - nsCOMPtr mPrefItemContent; - nsCOMPtr mQuitItemContent; + // nsIMutationObserver + NS_DECL_NSIMUTATIONOBSERVER - NS_DECL_ISUPPORTS - NS_DECL_NSIMUTATIONOBSERVER + // nsIMenuBar Methods + NS_IMETHOD Create(nsIWidget * aParent); + NS_IMETHOD GetParent(nsIWidget *&aParent); + NS_IMETHOD SetParent(nsIWidget * aParent); + NS_IMETHOD AddMenu(nsIMenu * aMenu); + NS_IMETHOD GetMenuCount(PRUint32 &aCount); + NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); + NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); + NS_IMETHOD RemoveMenu(const PRUint32 aCount); + NS_IMETHOD RemoveAll(); + NS_IMETHOD GetNativeData(void*& aData); + NS_IMETHOD Paint(); + NS_IMETHOD SetNativeData(void* aData); + NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); - // nsMenuObjectX - void* NativeData() {return (void*)mRootMenu;} - nsMenuObjectTypeX MenuObjectType() {return eMenuBarObjectType;} + PRUint32 RegisterForCommand(nsIMenuItem* aItem); + void UnregisterCommand(PRUint32 aCommandID); + nsIMenuItem* GetMenuItemForCommandID(PRUint32 inCommandID); - // nsMenuBarX - nsresult Create(nsIWidget* aParent, nsIContent* aContent); - void SetParent(nsIWidget* aParent); - void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); - void UnregisterForContentChanges(nsIContent* aContent); - PRUint32 RegisterForCommand(nsMenuItemX* aItem); - void UnregisterCommand(PRUint32 aCommandID); - PRUint32 GetMenuCount(); - nsMenuX* GetMenuAt(PRUint32 aIndex); - nsMenuItemX* GetMenuItemForCommandID(PRUint32 inCommandID); - nsresult Paint(); + void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); + void UnregisterForContentChanges(nsIContent* aContent); + nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); + nsCOMPtr mAboutItemContent; // holds the content node for the about item that has + // been removed from the menubar + nsCOMPtr mPrefItemContent; // as above, but for prefs + nsCOMPtr mQuitItemContent; // as above, but for quit protected: - nsresult AddMenu(nsMenuX* aMenu); - void RemoveMenu(PRUint32 aIndex); - nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); - void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); - void AquifyMenuBar(); - NSMenuItem* CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, - int tag, NativeMenuItemTarget* target); - nsresult CreateApplicationMenu(nsMenuX* inMenu); + // Make our menubar conform to Aqua UI guidelines + void AquifyMenuBar(); + void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); - nsTArray< nsAutoPtr > mMenuArray; - nsIWidget* mParent; // [weak] - PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks - nsIDocument* mDocument; // pointer to document - GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar - nsHashtable mObserverTable; // stores observers for content change notification + // build the Application menu shared by all menu bars. + NSMenuItem* CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, + int tag, NativeMenuItemTarget* target); + nsresult CreateApplicationMenu(nsIMenu* inMenu); + + nsCOMArray mMenusArray; // holds refs + nsCOMPtr mMenuBarContent; // menubar content node, strong ref + nsIWidget* mParent; // weak ref + PRBool mIsMenuBarAdded; + PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks + nsIDocument* mDocument; // pointer to document + GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar + nsHashtable mObserverTable; // stores observers for content change notification }; #endif // nsMenuBarX_h_ diff --git a/widget/src/cocoa/nsMenuBarX.mm b/widget/src/cocoa/nsMenuBarX.mm index dc1764d3cbc0..fb46cddb4693 100644 --- a/widget/src/cocoa/nsMenuBarX.mm +++ b/widget/src/cocoa/nsMenuBarX.mm @@ -36,28 +36,37 @@ * * ***** END LICENSE BLOCK ***** */ +#include "nsCOMPtr.h" +#include "nsIServiceManager.h" +#include "nsIComponentManager.h" +#include "nsINameSpaceManager.h" +#include "nsIMenu.h" +#include "nsIMenuItem.h" +#include "nsIContent.h" + #include "nsMenuBarX.h" #include "nsMenuX.h" -#include "nsMenuItemX.h" -#include "nsMenuUtilsX.h" +#include "nsChildView.h" #include "nsCocoaUtils.h" #include "nsCocoaWindow.h" -#include "nsCOMPtr.h" -#include "nsString.h" -#include "nsWidgetAtoms.h" -#include "nsGUIEvent.h" -#include "nsObjCExceptions.h" -#include "nsHashtable.h" -#include "nsThreadUtils.h" - -#include "nsIContent.h" +#include "nsISupports.h" #include "nsIWidget.h" +#include "nsString.h" +#include "nsIStringBundle.h" #include "nsIDocument.h" -#include "nsIDOMDocument.h" -#include "nsIDOMElement.h" +#include "nsIMutationObserver.h" -NS_IMPL_ISUPPORTS1(nsMenuBarX, nsIMutationObserver) +#include "nsIDOMDocument.h" +#include "nsWidgetAtoms.h" + +#include "nsGUIEvent.h" + +// CIDs +#include "nsWidgetsCID.h" +static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); + +NS_IMPL_ISUPPORTS3(nsMenuBarX, nsIMenuBar, nsIMutationObserver, nsISupportsWeakReference) NativeMenuItemTarget* nsMenuBarX::sNativeEventTarget = nil; nsMenuBarX* nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; @@ -83,22 +92,18 @@ enum { }; -NS_IMPL_ISUPPORTS1(nsNativeMenuServiceX, nsINativeMenuService) - -NS_IMETHODIMP nsNativeMenuServiceX::CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode) +PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent) { - NS_ASSERTION(NS_IsMainThread(), "Attempting to create native menu bar on wrong thread!"); - - nsRefPtr mb = new nsMenuBarX(); - if (!mb) - return NS_ERROR_OUT_OF_MEMORY; - - return mb->Create(aParent, aMenuBarNode); + return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, + nsWidgetAtoms::_true, eCaseMatters) || + inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, + nsWidgetAtoms::_true, eCaseMatters)); } nsMenuBarX::nsMenuBarX() : mParent(nsnull), + mIsMenuBarAdded(PR_FALSE), mCurrentCommandID(eCommand_ID_Last), mDocument(nsnull) { @@ -117,6 +122,8 @@ nsMenuBarX::~nsMenuBarX() if (nsMenuBarX::sLastGeckoMenuBarPainted == this) nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; + mMenusArray.Clear(); // release all menus + // the quit/pref items of a random window might have been used if there was no // hidden window, thus we need to invalidate the weak references. if (sAboutItemContent == mAboutItemContent) @@ -129,174 +136,18 @@ nsMenuBarX::~nsMenuBarX() // make sure we unregister ourselves as a document observer if (mDocument) mDocument->RemoveMutationObserver(this); - - // We have to manually clear the array here because clearing causes menu items - // to call back into the menu bar to unregister themselves. We don't want to - // depend on member variable ordering to ensure that the array gets cleared - // before the registration hash table is destroyed. - mMenuArray.Clear(); - + [mRootMenu release]; NS_OBJC_END_TRY_ABORT_BLOCK; } -nsresult nsMenuBarX::Create(nsIWidget* aParent, nsIContent* aContent) +// Do what's necessary to conform to the Aqua guidelines for menus. +void +nsMenuBarX::AquifyMenuBar() { - if (!aParent || !aContent) - return NS_ERROR_INVALID_ARG; - - mParent = aParent; - mContent = aContent; - - AquifyMenuBar(); - - nsIDocument* doc = aContent->GetOwnerDoc(); - if (!doc) - return NS_ERROR_FAILURE; - doc->AddMutationObserver(this); - mDocument = doc; - - PRUint32 count = mContent->GetChildCount(); - for (PRUint32 i = 0; i < count; i++) { - nsIContent *menuContent = mContent->GetChildAt(i); - if (menuContent) { - if (menuContent->Tag() == nsWidgetAtoms::menu && - menuContent->IsNodeOfType(nsINode::eXUL)) { - nsAutoString menuName; - menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); - nsMenuX* newMenu = new nsMenuX(); - if (newMenu) { - nsresult rv = newMenu->Create(this, menuName, this, menuContent); - if (NS_SUCCEEDED(rv)) - AddMenu(newMenu); - else - delete newMenu; - } - } - } - } - - // Give this to the parent window. The parent takes ownership. - return mParent->SetMenuBar(this); -} - - -PRUint32 nsMenuBarX::GetMenuCount() -{ - return mMenuArray.Length(); -} - - -nsresult nsMenuBarX::AddMenu(nsMenuX* aMenu) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - // If we haven't created a global Application menu yet, do it. - if (!sApplicationMenu) { - nsresult rv = NS_OK; // avoid warning about rv being unused - rv = CreateApplicationMenu(aMenu); - NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); - - // Hook the new Application menu up to the menu bar. - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; - } - - // keep track of all added menus - mMenuArray.AppendElement(aMenu); // owner - - NSMenu* nativeMenu = (NSMenu*)aMenu->NativeData(); - nsIContent* menuContent = aMenu->Content(); - if (menuContent->GetChildCount() > 0 && - !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { - NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; - [mRootMenu addItem:newMenuItem]; - [newMenuItem setSubmenu:nativeMenu]; - } - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -void nsMenuBarX::RemoveMenu(PRUint32 aIndex) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - - NS_ASSERTION(aIndex < mMenuArray.Length(), "Attempting submenu removal with bad index!"); - - // Our native menu and our internal menu object array might be out of sync. - // This happens, for example, when a submenu is hidden. Because of this we - // should not assume that a native submenu is hooked up. - [mRootMenu removeItem:(mMenuArray[aIndex]->NativeMenuItem())]; - mMenuArray.RemoveElementAt(aIndex); - - NS_OBJC_END_TRY_ABORT_BLOCK; -} - - -nsMenuX* nsMenuBarX::GetMenuAt(PRUint32 aIndex) -{ - if (mMenuArray.Length() <= aIndex) { - NS_ERROR("Requesting menu at invalid index!"); - return NULL; - } - return mMenuArray[aIndex]; -} - - -nsresult nsMenuBarX::Paint() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - - // Swap out first item into incoming menu bar. We have to keep the same menu item for the - // Application menu and its submenu is global so we keep passing it along. - NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; - [mainMenu removeItemAtIndex:0]; - [mRootMenu insertItem:firstMenuItem atIndex:0]; - [firstMenuItem release]; - - // Set menu bar and event target. - [NSApp setMainMenu:mRootMenu]; - nsMenuBarX::sLastGeckoMenuBarPainted = this; - - gSomeMenuBarPainted = YES; - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so -// the caller can hang onto it if they so choose. It is acceptable to pass nsull -// for |outHiddenNode| if the caller doesn't care about the hidden node. -void nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) -{ - nsCOMPtr menuItem; - inDoc->GetElementById(inID, getter_AddRefs(menuItem)); - nsCOMPtr menuContent(do_QueryInterface(menuItem)); - if (menuContent) { - menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); - if (outHiddenNode) { - *outHiddenNode = menuContent.get(); - NS_IF_ADDREF(*outHiddenNode); - } - } -} - - -// Do what is necessary to conform to the Aqua guidelines for menus. -void nsMenuBarX::AquifyMenuBar() -{ - nsCOMPtr domDoc(do_QueryInterface(mContent->GetDocument())); + nsCOMPtr domDoc(do_QueryInterface(mMenuBarContent->GetDocument())); if (domDoc) { // remove the "About..." item and its separator HideItem(domDoc, NS_LITERAL_STRING("aboutSeparator"), nsnull); @@ -326,13 +177,145 @@ void nsMenuBarX::AquifyMenuBar() } +// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so +// the caller can hang onto it if they so choose. It is acceptable to pass nsull +// for |outHiddenNode| if the caller doesn't care about the hidden node. +void +nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) +{ + nsCOMPtr menuItem; + inDoc->GetElementById(inID, getter_AddRefs(menuItem)); + nsCOMPtr menuContent(do_QueryInterface(menuItem)); + if (menuContent) { + menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); + if (outHiddenNode) { + *outHiddenNode = menuContent.get(); + NS_IF_ADDREF(*outHiddenNode); + } + } +} + + +NS_IMETHODIMP +nsMenuBarX::MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget* aParentWindow, void * aMenubarNode) +{ + nsIDOMNode* domNode = static_cast(aMenubarNode); + mMenuBarContent = do_QueryInterface(domNode); // strong ref + NS_ASSERTION(mMenuBarContent, "No content specified for this menubar"); + if (!mMenuBarContent) + return NS_ERROR_FAILURE; + + SetParent(aParentWindow); + + AquifyMenuBar(); + + nsCOMPtr domDoc; + domNode->GetOwnerDocument(getter_AddRefs(domDoc)); + nsCOMPtr doc(do_QueryInterface(domDoc)); + if (!doc) + return NS_ERROR_FAILURE; + doc->AddMutationObserver(this); + mDocument = doc; + + PRUint32 count = mMenuBarContent->GetChildCount(); + for (PRUint32 i = 0; i < count; i++) { + nsIContent *menu = mMenuBarContent->GetChildAt(i); + if (menu) { + if (menu->Tag() == nsWidgetAtoms::menu && + menu->IsNodeOfType(nsINode::eXUL)) { + nsAutoString menuName; + nsAutoString menuAccessKey(NS_LITERAL_STRING(" ")); + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); + menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::accesskey, menuAccessKey); + + // Create nsMenu, the menubar will own it + nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); + if (pnsMenu) { + pnsMenu->Create(static_cast(this), menuName, menuAccessKey, this, menu); + AddMenu(pnsMenu); + } + } + } + } + + // Give the aParentWindow this nsMenuBarX to hold onto. + // The parent takes ownership. + aParentWindow->SetMenuBar(this); + + return NS_OK; +} + + +NS_IMETHODIMP nsMenuBarX::Create(nsIWidget *aParent) +{ + SetParent(aParent); + return NS_OK; +} + + +NS_IMETHODIMP nsMenuBarX::GetParent(nsIWidget *&aParent) +{ + NS_IF_ADDREF(aParent = mParent); + return NS_OK; +} + + +NS_IMETHODIMP nsMenuBarX::SetParent(nsIWidget *aParent) +{ + mParent = aParent; // weak ref + return NS_OK; +} + + +NS_IMETHODIMP nsMenuBarX::AddMenu(nsIMenu * aMenu) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + // If we haven't created a global Application menu yet, do it. + if (!sApplicationMenu) { + nsresult rv = NS_OK; // avoid warning about rv being unused + rv = CreateApplicationMenu(aMenu); + NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); + + // Hook the new Application menu up to the menu bar. + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; + } + + // keep track of all added menus + mMenusArray.AppendObject(aMenu); // owner + + NSMenu* nativeMenu = NULL; + aMenu->GetNativeData((void**)&nativeMenu); + + nsCOMPtr menu; + aMenu->GetMenuContent(getter_AddRefs(menu)); + if (menu->GetChildCount() > 0 && + !NodeIsHiddenOrCollapsed(menu)) { + NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; + [mRootMenu addItem:newMenuItem]; + [newMenuItem setSubmenu:nativeMenu]; + } + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + // for creating menu items destined for the Application menu -NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, +NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, int tag, NativeMenuItemTarget* target) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - nsCOMPtr doc = inMenu->Content()->GetDocument(); + nsCOMPtr menu; + inMenu->GetMenuContent(getter_AddRefs(menu)); + if (!menu) + return nil; + + nsCOMPtr doc = menu->GetDocument(); if (!doc) return nil; @@ -373,8 +356,8 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString // now grab the key equivalent modifiers nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 geckoModifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); - macKeyModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(geckoModifiers); + PRUint8 geckoModifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); + macKeyModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(geckoModifiers); } } // get the label into NSString-form @@ -399,7 +382,8 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString // build the Application menu shared by all menu bars -nsresult nsMenuBarX::CreateApplicationMenu(nsMenuX* inMenu) +nsresult +nsMenuBarX::CreateApplicationMenu(nsIMenu* inMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -552,33 +536,111 @@ nsresult nsMenuBarX::CreateApplicationMenu(nsMenuX* inMenu) } -void nsMenuBarX::SetParent(nsIWidget* aParent) +NS_IMETHODIMP nsMenuBarX::GetMenuCount(PRUint32 &aCount) { - mParent = aParent; + aCount = mMenusArray.Count(); + return NS_OK; } + +NS_IMETHODIMP nsMenuBarX::GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) +{ + aMenu = NULL; + nsCOMPtr menu = mMenusArray.ObjectAt(aCount); + if (!menu) + return NS_OK; + + return CallQueryInterface(menu, &aMenu); // addref +} + + +NS_IMETHODIMP nsMenuBarX::InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuBarX::RemoveMenu(const PRUint32 aCount) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + mMenusArray.RemoveObjectAt(aCount); + [mRootMenu removeItemAtIndex:aCount]; + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +NS_IMETHODIMP nsMenuBarX::RemoveAll() +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuBarX::GetNativeData(void *& aData) +{ + aData = (void*)mRootMenu; + return NS_OK; +} + + +NS_IMETHODIMP nsMenuBarX::SetNativeData(void* aData) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuBarX::Paint() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + + // Swap out first item into incoming menu bar. We have to keep the same menu item for the + // Application menu and its submenu is global so we keep passing it along. + NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; + [mainMenu removeItemAtIndex:0]; + [mRootMenu insertItem:firstMenuItem atIndex:0]; + [firstMenuItem release]; + + // Set menu bar and event target. + [NSApp setMainMenu:mRootMenu]; + nsMenuBarX::sLastGeckoMenuBarPainted = this; + + gSomeMenuBarPainted = YES; + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + // // nsIMutationObserver // -void nsMenuBarX::CharacterDataWillChange(nsIDocument* aDocument, - nsIContent* aContent, - CharacterDataChangeInfo* aInfo) +void +nsMenuBarX::CharacterDataWillChange(nsIDocument * aDocument, + nsIContent * aContent, + CharacterDataChangeInfo * aInfo) +{ +} + +void +nsMenuBarX::CharacterDataChanged(nsIDocument * aDocument, + nsIContent * aContent, + CharacterDataChangeInfo * aInfo) { } -void nsMenuBarX::CharacterDataChanged(nsIDocument* aDocument, - nsIContent* aContent, - CharacterDataChangeInfo* aInfo) +void +nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, + PRInt32 aNewIndexInContainer) { -} - - -void nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, - PRInt32 aNewIndexInContainer) -{ - if (aContainer != mContent) { + if (aContainer != mMenuBarContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aContainer, aNewIndexInContainer); @@ -594,15 +656,17 @@ void nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, } -void nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) +void +nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) { mDocument = nsnull; } -void nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, - PRInt32 aNameSpaceID, nsIAtom * aAttribute, - PRInt32 aModType, PRUint32 aStateMask) +void +nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, + PRInt32 aNameSpaceID, nsIAtom * aAttribute, + PRInt32 aModType, PRUint32 aStateMask) { // lookup and dispatch to registered thang nsChangeObserver* obs = LookupContentChangeObserver(aContent); @@ -611,10 +675,11 @@ void nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent } -void nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void +nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer == mContent) { + if (aContainer == mMenuBarContent) { UnregisterForContentChanges(aChild); RemoveMenu(aIndexInContainer); } @@ -635,10 +700,11 @@ void nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer } -void nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void +nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer != mContent) { + if (aContainer != mMenuBarContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aChild, aIndexInContainer); @@ -654,7 +720,8 @@ void nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContaine } -void nsMenuBarX::ParentChainChanged(nsIContent *aContent) +void +nsMenuBarX::ParentChainChanged(nsIContent *aContent) { } @@ -663,21 +730,24 @@ void nsMenuBarX::ParentChainChanged(nsIContent *aContent) // lifetime of all these items is bounded by the lifetime of the menubar. No need to add // any more strong refs to the picture because the containment hierarchy already uses // strong refs. -void nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) +void +nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) { nsVoidKey key(aContent); mObserverTable.Put(&key, aMenuObject); } -void nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) +void +nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) { nsVoidKey key(aContent); mObserverTable.Remove(&key); } -nsChangeObserver* nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) +nsChangeObserver* +nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) { nsVoidKey key(aContent); return reinterpret_cast(mObserverTable.Get(&key)); @@ -686,7 +756,8 @@ nsChangeObserver* nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) // Given a menu item, creates a unique 4-character command ID and // maps it to the item. Returns the id for use by the client. -PRUint32 nsMenuBarX::RegisterForCommand(nsMenuItemX* inMenuItem) +PRUint32 +nsMenuBarX::RegisterForCommand(nsIMenuItem* inMenuItem) { // no real need to check for uniqueness. We always start afresh with each // window at 1. Even if we did get close to the reserved Apple command id's, @@ -706,17 +777,164 @@ PRUint32 nsMenuBarX::RegisterForCommand(nsMenuItemX* inMenuItem) // Removes the mapping between the given 4-character command ID // and its associated menu item. -void nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) +void +nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); mObserverTable.Remove(&key); } -nsMenuItemX* nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) +nsIMenuItem* +nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); - return reinterpret_cast(mObserverTable.Get(&key)); + return reinterpret_cast(mObserverTable.Get(&key)); +} + + +nsEventStatus +MenuHelpersX::DispatchCommandTo(nsIContent* aTargetContent) +{ + NS_PRECONDITION(aTargetContent, "null ptr"); + + nsEventStatus status = nsEventStatus_eConsumeNoDefault; + nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); + + // FIXME: Should probably figure out how to init this with the actual + // pressed keys, but this is a big old edge case anyway. -dwh + + aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); + return status; +} + + +NSString* MenuHelpersX::CreateTruncatedCocoaLabel(const nsString& itemLabel) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with + // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an + // easy way to compute what this should be given the system font, etc, so we're just going + // to hard code it to something reasonable and bigger fonts will just have to deal. + const short kMaxItemPixelWidth = 300; + NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; + ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); + return label; // caller releases + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; +} + + +PRUint8 MenuHelpersX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) +{ + PRUint8 modifiers = knsMenuItemNoModifier; + char* str = ToNewCString(modifiersAttribute); + char* newStr; + char* token = nsCRT::strtok(str, ", \t", &newStr); + while (token != NULL) { + if (PL_strcmp(token, "shift") == 0) + modifiers |= knsMenuItemShiftModifier; + else if (PL_strcmp(token, "alt") == 0) + modifiers |= knsMenuItemAltModifier; + else if (PL_strcmp(token, "control") == 0) + modifiers |= knsMenuItemControlModifier; + else if ((PL_strcmp(token, "accel") == 0) || + (PL_strcmp(token, "meta") == 0)) { + modifiers |= knsMenuItemCommandModifier; + } + token = nsCRT::strtok(newStr, ", \t", &newStr); + } + nsMemory::Free(str); + + return modifiers; +} + + +unsigned int MenuHelpersX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) +{ + unsigned int macModifiers = 0; + + if (geckoModifiers & knsMenuItemShiftModifier) + macModifiers |= NSShiftKeyMask; + if (geckoModifiers & knsMenuItemAltModifier) + macModifiers |= NSAlternateKeyMask; + if (geckoModifiers & knsMenuItemControlModifier) + macModifiers |= NSControlKeyMask; + if (geckoModifiers & knsMenuItemCommandModifier) + macModifiers |= NSCommandKeyMask; + + return macModifiers; +} + + +nsIMenuBar* MenuHelpersX::GetHiddenWindowMenuBar() +{ + nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); + if (hiddenWindowWidgetNoCOMPtr) + return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); + else + return nsnull; +} + + +// It would be nice if we could localize these edit menu names. +static NSMenuItem* standardEditMenuItem = nil; +NSMenuItem* MenuHelpersX::GetStandardEditMenuItem() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + if (standardEditMenuItem) + return standardEditMenuItem; + + NSMenuItem* standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; + NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; + [standardEditMenuItem setSubmenu:standardEditMenu]; + [standardEditMenu release]; + + // Add Undo + NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; + [standardEditMenu addItem:undoItem]; + [undoItem release]; + + // Add Redo + NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; + [standardEditMenu addItem:redoItem]; + [redoItem release]; + + // Add separator + [standardEditMenu addItem:[NSMenuItem separatorItem]]; + + // Add Cut + NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + [standardEditMenu addItem:cutItem]; + [cutItem release]; + + // Add Copy + NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + [standardEditMenu addItem:copyItem]; + [copyItem release]; + + // Add Paste + NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + [standardEditMenu addItem:pasteItem]; + [pasteItem release]; + + // Add Delete + NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; + [standardEditMenu addItem:deleteItem]; + [deleteItem release]; + + // Add Select All + NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + [standardEditMenu addItem:selectAllItem]; + [selectAllItem release]; + + standardEditMenuItem = standardEditMenuItem; + + return standardEditMenuItem; + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; } @@ -804,13 +1022,13 @@ static BOOL gActOnSpecialCommands = YES; nsIContent* mostSpecificContent = sAboutItemContent; if (menuBar && menuBar->mAboutItemContent) mostSpecificContent = menuBar->mAboutItemContent; - nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); + MenuHelpersX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Prefs) { nsIContent* mostSpecificContent = sPrefItemContent; if (menuBar && menuBar->mPrefItemContent) mostSpecificContent = menuBar->mPrefItemContent; - nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); + MenuHelpersX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Quit) { nsIContent* mostSpecificContent = sQuitItemContent; @@ -820,7 +1038,7 @@ static BOOL gActOnSpecialCommands = YES; // message. If you want to stop a quit from happening, provide quit content and return // the event as unhandled. if (mostSpecificContent) { - nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); + MenuHelpersX::DispatchCommandTo(mostSpecificContent); } else { [NSApp terminate:nil]; @@ -843,11 +1061,12 @@ static BOOL gActOnSpecialCommands = YES; return; // given the commandID, look it up in our hashtable and dispatch to - // that menu item. + // that content node. Recall that we store weak pointers to the content + // nodes in the hash table. if (menuBar) { - nsMenuItemX* menuItem = menuBar->GetMenuItemForCommandID(static_cast(tag)); - if (menuItem) - menuItem->DoCommand(); + nsIMenuItem* content = menuBar->GetMenuItemForCommandID(static_cast(tag)); + if (content) + content->DoCommand(); } NS_OBJC_END_TRY_ABORT_BLOCK; diff --git a/widget/src/cocoa/nsMenuBaseX.h b/widget/src/cocoa/nsMenuBaseX.h deleted file mode 100644 index b90b77dd5fad..000000000000 --- a/widget/src/cocoa/nsMenuBaseX.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Josh Aas - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsMenuBaseX_h_ -#define nsMenuBaseX_h_ - -#include "nsCOMPtr.h" -#include "nsIContent.h" - -enum nsMenuObjectTypeX { - eMenuBarObjectType, - eSubmenuObjectType, - eMenuItemObjectType -}; - -// All menu objects subclass this. -// Menu bars are owned by their top-level nsIWidgets. -// All other objects are memory-managed based on the DOM. -// Content removal deletes them immediately and nothing else should. -// Do not attempt to hold strong references to them or delete them. -class nsMenuObjectX -{ -public: - virtual nsMenuObjectTypeX MenuObjectType()=0; - virtual void* NativeData()=0; - nsIContent* Content() { return mContent; } - -protected: - nsCOMPtr mContent; -}; - -#endif // nsMenuBaseX_h_ diff --git a/widget/src/cocoa/nsMenuItemIconX.h b/widget/src/cocoa/nsMenuItemIconX.h index 61810d90b22b..e774ad4ffdd5 100644 --- a/widget/src/cocoa/nsMenuItemIconX.h +++ b/widget/src/cocoa/nsMenuItemIconX.h @@ -51,7 +51,7 @@ class nsIURI; class nsIContent; class imgIRequest; -class nsMenuObjectX; +class nsIMenu; #import #import @@ -60,9 +60,10 @@ class nsMenuObjectX; class nsMenuItemIconX : public imgIDecoderObserver { public: - nsMenuItemIconX(nsMenuObjectX* aMenuItem, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem); + nsMenuItemIconX(nsISupports* aMenuItem, + nsIMenu* aMenu, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem); private: ~nsMenuItemIconX(); @@ -85,7 +86,10 @@ public: protected: nsCOMPtr mContent; nsCOMPtr mIconRequest; - nsMenuObjectX* mMenuObject; + nsISupports* mMenuItem; + nsIMenu* mMenu; + MenuRef mMenuRef; + PRUint16 mMenuItemIndex; PRPackedBool mLoadedIcon; PRPackedBool mSetIcon; NSMenuItem* mNativeMenuItem; diff --git a/widget/src/cocoa/nsMenuItemIconX.mm b/widget/src/cocoa/nsMenuItemIconX.mm index c2c26cc059b3..a756b4ecc812 100644 --- a/widget/src/cocoa/nsMenuItemIconX.mm +++ b/widget/src/cocoa/nsMenuItemIconX.mm @@ -45,6 +45,8 @@ #include "nsObjCExceptions.h" #include "prmem.h" +#include "nsIMenu.h" +#include "nsIMenuItem.h" #include "nsIContent.h" #include "nsIDocument.h" #include "nsINameSpaceManager.h" @@ -62,7 +64,6 @@ #include "imgIRequest.h" #include "gfxIImageFrame.h" #include "nsIImage.h" -#include "nsMenuItemX.h" static const PRUint32 kIconWidth = 16; static const PRUint32 kIconHeight = 16; @@ -82,11 +83,15 @@ PRAllocCGFree(void* aInfo, const void* aData, size_t aSize) { NS_IMPL_ISUPPORTS2(nsMenuItemIconX, imgIContainerObserver, imgIDecoderObserver) -nsMenuItemIconX::nsMenuItemIconX(nsMenuObjectX* aMenuItem, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem) +nsMenuItemIconX::nsMenuItemIconX(nsISupports* aMenuItem, + nsIMenu* aMenu, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem) : mContent(aContent) -, mMenuObject(aMenuItem) +, mMenuItem(aMenuItem) +, mMenu(aMenu) +, mMenuRef(NULL) +, mMenuItemIndex(0) , mLoadedIcon(PR_FALSE) , mSetIcon(PR_FALSE) , mNativeMenuItem(aNativeMenuItem) @@ -107,6 +112,18 @@ nsMenuItemIconX::SetupIcon() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + nsresult rv; + if (!mMenuRef || !mMenuItemIndex) { + // These values are initialized here instead of in the constructor + // because they depend on the parent menu, mMenu, having inserted + // this object into its array of children. That can only happen after + // the object is constructed. + rv = mMenu->GetMenuRefAndItemIndexForMenuItem(mMenuItem, + (void**)&mMenuRef, + &mMenuItemIndex); + if (NS_FAILED(rv)) return rv; + } + // Still don't have one, then something is wrong, get out of here. if (!mNativeMenuItem) { NS_ERROR("No native menu item\n"); @@ -114,7 +131,7 @@ nsMenuItemIconX::SetupIcon() } nsCOMPtr iconURI; - nsresult rv = GetIconURI(getter_AddRefs(iconURI)); + rv = GetIconURI(getter_AddRefs(iconURI)); if (NS_FAILED(rv)) { // There is no icon for this menu item. An icon might have been set // earlier. Clear it. @@ -138,14 +155,15 @@ nsMenuItemIconX::GetIconURI(nsIURI** aIconURI) // The downside is that it's possible to get a menu item marked with a // native checkmark and a checkmark for an icon. Head off that possibility // by pretending that no icon exists if this is a checkable menu item. - if (mMenuObject->MenuObjectType() == eMenuItemObjectType) { - nsMenuItemX* menuItem = static_cast(mMenuObject); - if (menuItem->GetMenuItemType() != eRegularMenuItemType) + nsCOMPtr menuItem = do_QueryInterface(mMenuItem); + if (menuItem) { + nsIMenuItem::EMenuItemType menuItemType; + menuItem->GetMenuItemType(&menuItemType); + if (menuItemType != nsIMenuItem::eRegular) return NS_ERROR_FAILURE; } - if (!mContent) - return NS_ERROR_FAILURE; + if (!mContent) return NS_ERROR_FAILURE; // First, look at the content node's "image" attribute. nsAutoString imageURIString; diff --git a/widget/src/cocoa/nsMenuItemX.h b/widget/src/cocoa/nsMenuItemX.h index 3054e82988c1..eae19a90216b 100644 --- a/widget/src/cocoa/nsMenuItemX.h +++ b/widget/src/cocoa/nsMenuItemX.h @@ -39,68 +39,69 @@ #ifndef nsMenuItemX_h_ #define nsMenuItemX_h_ -#include "nsMenuBaseX.h" +#include "nsIMenuItem.h" +#include "nsString.h" #include "nsChangeObserver.h" #include "nsAutoPtr.h" #import -class nsString; +class nsIMenu; class nsMenuItemIconX; -class nsMenuX; -class nsMenuBarX; -enum { - knsMenuItemNoModifier = 0, - knsMenuItemShiftModifier = (1 << 0), - knsMenuItemAltModifier = (1 << 1), - knsMenuItemControlModifier = (1 << 2), - knsMenuItemCommandModifier = (1 << 3) -}; +/** + * Native menu item wrapper + */ -enum EMenuItemType { - eRegularMenuItemType = 0, - eCheckboxMenuItemType, - eRadioMenuItemType, - eSeparatorMenuItemType -}; - - -// Once instantiated, this object lives until its DOM node or its parent window is destroyed. -// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. -class nsMenuItemX : public nsMenuObjectX, +class nsMenuItemX : public nsIMenuItem, public nsChangeObserver { public: nsMenuItemX(); virtual ~nsMenuItemX(); + // nsISupports + NS_DECL_ISUPPORTS NS_DECL_CHANGEOBSERVER - // nsMenuObjectX - void* NativeData() {return (void*)mNativeMenuItem;} - nsMenuObjectTypeX MenuObjectType() {return eMenuItemObjectType;} + // nsIMenuItem Methods + NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode); + NS_IMETHOD GetLabel(nsString &aText); + NS_IMETHOD GetShortcutChar(nsString &aText); + NS_IMETHOD GetEnabled(PRBool *aIsEnabled); + NS_IMETHOD SetChecked(PRBool aIsEnabled); + NS_IMETHOD GetChecked(PRBool *aIsEnabled); + NS_IMETHOD GetMenuItemType(EMenuItemType *aIsCheckbox); + NS_IMETHOD GetNativeData(void*& aData); + NS_IMETHOD IsSeparator(PRBool & aIsSep); - // nsMenuItemX - nsresult Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode); - nsresult SetChecked(PRBool aIsChecked); - EMenuItemType GetMenuItemType(); - void DoCommand(); - nsresult DispatchDOMEvent(const nsString &eventName, PRBool* preventDefaultCalled); - void SetupIcon(); + NS_IMETHOD DoCommand(); + NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled); + NS_IMETHOD SetupIcon(); + NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent); protected: + void UncheckRadioSiblings(nsIContent* inCheckedElement); void SetKeyEquiv(PRUint8 aModifiers, const nsString &aText); - EMenuItemType mType; - NSMenuItem* mNativeMenuItem; // [strong] - nsMenuX* mMenuParent; // [weak] - nsMenuBarX* mMenuBar; // [weak] + NSMenuItem* mNativeMenuItem; // strong ref, we own + + nsString mLabel; + nsString mKeyEquivalent; + + nsIMenu* mMenuParent; // weak, parent owns us + nsMenuBarX* mMenuBar; // weak + + nsCOMPtr mContent; nsCOMPtr mCommandContent; nsRefPtr mIcon; - PRBool mIsChecked; + + PRUint8 mModifiers; + PRPackedBool mEnabled; + PRPackedBool mIsChecked; + EMenuItemType mType; // regular, checkbox, radio, or separator }; #endif // nsMenuItemX_h_ diff --git a/widget/src/cocoa/nsMenuItemX.mm b/widget/src/cocoa/nsMenuItemX.mm index 4b3e12177f56..2cfd8b11823c 100644 --- a/widget/src/cocoa/nsMenuItemX.mm +++ b/widget/src/cocoa/nsMenuItemX.mm @@ -36,35 +36,39 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsMenuItemX.h" -#include "nsMenuBarX.h" -#include "nsMenuX.h" -#include "nsMenuItemIconX.h" -#include "nsMenuUtilsX.h" - -#include "nsObjCExceptions.h" - #include "nsCOMPtr.h" -#include "nsWidgetAtoms.h" -#include "nsGUIEvent.h" - #include "nsIContent.h" +#include "nsObjCExceptions.h" +#include "nsMenuBarX.h" // for MenuHelpers namespace +#include "nsMenuItemX.h" +#include "nsIMenu.h" +#include "nsIMenuBar.h" #include "nsIWidget.h" +#include "nsINameSpaceManager.h" +#include "nsWidgetAtoms.h" +#include "nsIServiceManager.h" #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIPrivateDOMEvent.h" #include "nsIDOMEventTarget.h" #include "nsIDOMDocumentEvent.h" -#include "nsIDOMElement.h" + +#include "nsMenuItemIconX.h" +#include "nsGUIEvent.h" + + +NS_IMPL_ISUPPORTS1(nsMenuItemX, nsIMenuItem) nsMenuItemX::nsMenuItemX() { - mType = eRegularMenuItemType; - mNativeMenuItem = nil; - mMenuParent = nsnull; - mMenuBar = nsnull; - mIsChecked = PR_FALSE; + mNativeMenuItem = nil; + mMenuParent = nsnull; + mMenuBar = nsnull; + mKeyEquivalent.AssignLiteral(" "); + mEnabled = PR_TRUE; + mIsChecked = PR_FALSE; + mType = eRegular; } @@ -82,18 +86,19 @@ nsMenuItemX::~nsMenuItemX() } -nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode) +NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + mContent = aNode; // addref + mMenuParent = aParent; // weak + mType = aItemType; - mMenuParent = aParent; - mContent = aNode; + // register for AttributeChanged messages mMenuBar = aMenuBar; - NS_ASSERTION(mMenuBar, "No menu bar given, must have one!"); - + NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); mMenuBar->RegisterForContentChanges(mContent, this); nsCOMPtr domDoc(do_QueryInterface(mContent->GetCurrentDoc())); @@ -115,25 +120,26 @@ nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItem } } } - - // decide enabled state based on command content if it exists, otherwise do it based + + // set up mEnabled based on command content if it exists, otherwise do it based // on our own content - PRBool isEnabled; if (mCommandContent) - isEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + mEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); else - isEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); - + mEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + + mLabel = aLabel; + // set up the native menu item - if (mType == eSeparatorMenuItemType) { + if (mType == nsIMenuItem::eSeparator) { mNativeMenuItem = [[NSMenuItem separatorItem] retain]; } else { - NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(aLabel); + NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; - - [mNativeMenuItem setEnabled:(BOOL)isEnabled]; + + [mNativeMenuItem setEnabled:(BOOL)mEnabled]; SetChecked(mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)); @@ -142,9 +148,11 @@ nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItem if (domDoc) { nsAutoString keyValue; mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::key, keyValue); + if (!keyValue.IsEmpty()) { nsCOMPtr keyElement; domDoc->GetElementById(keyValue, getter_AddRefs(keyElement)); + if (keyElement) { nsCOMPtr keyContent(do_QueryInterface(keyElement)); nsAutoString keyChar(NS_LITERAL_STRING(" ")); @@ -152,7 +160,7 @@ nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItem nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 modifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); + PRUint8 modifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); SetKeyEquiv(modifiers, keyChar); } @@ -160,17 +168,31 @@ nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItem } } - mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); - if (!mIcon) - return NS_ERROR_OUT_OF_MEMORY; - + mIcon = new nsMenuItemIconX(static_cast(this), mMenuParent, mContent, mNativeMenuItem); + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -nsresult nsMenuItemX::SetChecked(PRBool aIsChecked) +NS_METHOD +nsMenuItemX::GetLabel(nsString &aText) +{ + aText = mLabel; + return NS_OK; +} + + +NS_METHOD +nsMenuItemX::GetEnabled(PRBool *aIsEnabled) +{ + *aIsEnabled = mEnabled; + return NS_OK; +} + + +NS_METHOD nsMenuItemX::SetChecked(PRBool aIsChecked) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -193,19 +215,41 @@ nsresult nsMenuItemX::SetChecked(PRBool aIsChecked) } -EMenuItemType nsMenuItemX::GetMenuItemType() +NS_METHOD nsMenuItemX::GetChecked(PRBool *aIsEnabled) { - return mType; + *aIsEnabled = mIsChecked; + return NS_OK; +} + + +NS_METHOD nsMenuItemX::GetMenuItemType(EMenuItemType *aType) +{ + *aType = mType; + return NS_OK; +} + + +NS_METHOD nsMenuItemX::GetNativeData(void *& aData) +{ + aData = mNativeMenuItem; + return NS_OK; +} + + +NS_METHOD nsMenuItemX::IsSeparator(PRBool & aIsSep) +{ + aIsSep = (mType == nsIMenuItem::eSeparator); + return NS_OK; } // Executes the "cached" javaScript command. // Returns NS_OK if the command was executed properly, otherwise an error code. -void nsMenuItemX::DoCommand() +NS_IMETHODIMP nsMenuItemX::DoCommand() { // flip "checked" state if we're a checkbox menu, or an un-checked radio menu - if (mType == eCheckboxMenuItemType || - (mType == eRadioMenuItemType && !mIsChecked)) { + if (mType == nsIMenuItem::eCheckbox || + (mType == nsIMenuItem::eRadio && !mIsChecked)) { if (!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::autocheck, nsWidgetAtoms::_false, eCaseMatters)) SetChecked(!mIsChecked); @@ -216,28 +260,29 @@ void nsMenuItemX::DoCommand() nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); mContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); + return NS_OK; } -nsresult nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) +NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) { if (!mContent) return NS_ERROR_FAILURE; - + // get owner document for content nsCOMPtr parentDoc = mContent->GetOwnerDoc(); if (!parentDoc) { NS_WARNING("Failed to get owner nsIDocument for menu item content"); return NS_ERROR_FAILURE; } - + // get interface for creating DOM events from content owner document nsCOMPtr DOMEventFactory = do_QueryInterface(parentDoc); if (!DOMEventFactory) { NS_WARNING("Failed to QI parent nsIDocument to nsIDOMDocumentEvent"); return NS_ERROR_FAILURE; } - + // create DOM event nsCOMPtr event; nsresult rv = DOMEventFactory->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); @@ -246,11 +291,11 @@ nsresult nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preven return rv; } event->InitEvent(eventName, PR_TRUE, PR_TRUE); - + // mark DOM event as trusted nsCOMPtr privateEvent(do_QueryInterface(event)); privateEvent->SetTrusted(PR_TRUE); - + // send DOM event nsCOMPtr eventTarget = do_QueryInterface(mContent); rv = eventTarget->DispatchEvent(event, preventDefaultCalled); @@ -258,14 +303,22 @@ nsresult nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preven NS_WARNING("Failed to send DOM event via nsIDOMEventTarget"); return rv; } - + return NS_OK; } +NS_METHOD nsMenuItemX::GetShortcutChar(nsString &aText) +{ + aText = mKeyEquivalent; + return NS_OK; +} + + // Walk the sibling list looking for nodes with the same name and // uncheck them all. -void nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) +void +nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) { nsAutoString myGroupName; inCheckedContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::name, myGroupName); @@ -296,11 +349,13 @@ void nsMenuItemX::SetKeyEquiv(PRUint8 aModifiers, const nsString &aText) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - unsigned int macModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(aModifiers); + mModifiers = aModifiers; + unsigned int macModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(mModifiers); [mNativeMenuItem setKeyEquivalentModifierMask:macModifiers]; - NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)aText.get() - length:aText.Length()] lowercaseString]; + mKeyEquivalent = aText; + NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)mKeyEquivalent.get() + length:mKeyEquivalent.Length()] lowercaseString]; if ([keyEquivalent isEqualToString:@" "]) [mNativeMenuItem setKeyEquivalent:@""]; else @@ -327,7 +382,7 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten if (aAttribute == nsWidgetAtoms::checked) { // if we're a radio menu, uncheck our sibling radio items. No need to // do any of this if we're just a normal check menu. - if (mType == eRadioMenuItemType) { + if (mType == nsIMenuItem::eRadio) { if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)) UncheckRadioSiblings(mContent); @@ -377,7 +432,8 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten } -void nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void +nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { if (aChild == mCommandContent) { mMenuBar->UnregisterForContentChanges(mCommandContent); @@ -388,14 +444,27 @@ void nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChi } -void nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void +nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { mMenuParent->SetRebuild(PR_TRUE); } -void nsMenuItemX::SetupIcon() +NS_IMETHODIMP +nsMenuItemX::SetupIcon() { - if (mIcon) - mIcon->SetupIcon(); + if (!mIcon) + return NS_ERROR_OUT_OF_MEMORY; + + return mIcon->SetupIcon(); +} + + +NS_IMETHODIMP +nsMenuItemX::GetMenuItemContent(nsIContent ** aMenuItemContent) +{ + NS_ENSURE_ARG_POINTER(aMenuItemContent); + NS_IF_ADDREF(*aMenuItemContent = mContent); + return NS_OK; } diff --git a/widget/src/cocoa/nsMenuUtilsX.h b/widget/src/cocoa/nsMenuUtilsX.h deleted file mode 100644 index ff3ffd91ef79..000000000000 --- a/widget/src/cocoa/nsMenuUtilsX.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Josh Aas - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsMenuUtilsX_h_ -#define nsMenuUtilsX_h_ - -#include "nscore.h" -#include "nsGUIEvent.h" - -#import - -class nsIContent; -class nsString; -class nsMenuBarX; - -// Namespace containing utility functions used in our native menu implementation. -namespace nsMenuUtilsX -{ - nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); - NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); // returned object is not retained - PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); - unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); - nsMenuBarX* GetHiddenWindowMenuBar(); // returned object is not retained - NSMenuItem* GetStandardEditMenuItem(); // returned object is not retained - PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); -} - -#endif // nsMenuUtilsX_h_ diff --git a/widget/src/cocoa/nsMenuUtilsX.mm b/widget/src/cocoa/nsMenuUtilsX.mm deleted file mode 100644 index d1d645af049c..000000000000 --- a/widget/src/cocoa/nsMenuUtilsX.mm +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Josh Aas - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsMenuUtilsX.h" -#include "nsMenuBarX.h" -#include "nsMenuItemX.h" -#include "nsObjCExceptions.h" -#include "nsCocoaUtils.h" -#include "nsCocoaWindow.h" -#include "nsWidgetAtoms.h" - -#import - -nsEventStatus nsMenuUtilsX::DispatchCommandTo(nsIContent* aTargetContent) -{ - NS_PRECONDITION(aTargetContent, "null ptr"); - - nsEventStatus status = nsEventStatus_eConsumeNoDefault; - nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); - - // FIXME: Should probably figure out how to init this with the actual - // pressed keys, but this is a big old edge case anyway. -dwh - - aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); - return status; -} - - -NSString* nsMenuUtilsX::CreateTruncatedCocoaLabel(const nsString& itemLabel) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with - // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an - // easy way to compute what this should be given the system font, etc, so we're just going - // to hard code it to something reasonable and bigger fonts will just have to deal. - const short kMaxItemPixelWidth = 300; - NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; - ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); - return label; // caller releases - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; -} - - -PRUint8 nsMenuUtilsX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) -{ - PRUint8 modifiers = knsMenuItemNoModifier; - char* str = ToNewCString(modifiersAttribute); - char* newStr; - char* token = strtok_r(str, ", \t", &newStr); - while (token != NULL) { - if (strcmp(token, "shift") == 0) - modifiers |= knsMenuItemShiftModifier; - else if (strcmp(token, "alt") == 0) - modifiers |= knsMenuItemAltModifier; - else if (strcmp(token, "control") == 0) - modifiers |= knsMenuItemControlModifier; - else if ((strcmp(token, "accel") == 0) || - (strcmp(token, "meta") == 0)) { - modifiers |= knsMenuItemCommandModifier; - } - token = strtok_r(newStr, ", \t", &newStr); - } - free(str); - - return modifiers; -} - - -unsigned int nsMenuUtilsX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) -{ - unsigned int macModifiers = 0; - - if (geckoModifiers & knsMenuItemShiftModifier) - macModifiers |= NSShiftKeyMask; - if (geckoModifiers & knsMenuItemAltModifier) - macModifiers |= NSAlternateKeyMask; - if (geckoModifiers & knsMenuItemControlModifier) - macModifiers |= NSControlKeyMask; - if (geckoModifiers & knsMenuItemCommandModifier) - macModifiers |= NSCommandKeyMask; - - return macModifiers; -} - - -nsMenuBarX* nsMenuUtilsX::GetHiddenWindowMenuBar() -{ - nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); - if (hiddenWindowWidgetNoCOMPtr) - return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); - else - return nsnull; -} - - -// It would be nice if we could localize these edit menu names. -static NSMenuItem* standardEditMenuItem = nil; -NSMenuItem* nsMenuUtilsX::GetStandardEditMenuItem() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - if (standardEditMenuItem) - return standardEditMenuItem; - - standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; - NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; - [standardEditMenuItem setSubmenu:standardEditMenu]; - [standardEditMenu release]; - - // Add Undo - NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; - [standardEditMenu addItem:undoItem]; - [undoItem release]; - - // Add Redo - NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; - [standardEditMenu addItem:redoItem]; - [redoItem release]; - - // Add separator - [standardEditMenu addItem:[NSMenuItem separatorItem]]; - - // Add Cut - NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; - [standardEditMenu addItem:cutItem]; - [cutItem release]; - - // Add Copy - NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; - [standardEditMenu addItem:copyItem]; - [copyItem release]; - - // Add Paste - NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; - [standardEditMenu addItem:pasteItem]; - [pasteItem release]; - - // Add Delete - NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; - [standardEditMenu addItem:deleteItem]; - [deleteItem release]; - - // Add Select All - NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; - [standardEditMenu addItem:selectAllItem]; - [selectAllItem release]; - - return standardEditMenuItem; - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; -} - - -PRBool nsMenuUtilsX::NodeIsHiddenOrCollapsed(nsIContent* inContent) -{ - return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)); -} diff --git a/widget/src/cocoa/nsMenuX.h b/widget/src/cocoa/nsMenuX.h index a73c4b6c8426..5521016a7b9c 100644 --- a/widget/src/cocoa/nsMenuX.h +++ b/widget/src/cocoa/nsMenuX.h @@ -39,19 +39,19 @@ #ifndef nsMenuX_h_ #define nsMenuX_h_ -#import -#import - -#include "nsMenuBaseX.h" -#include "nsMenuBarX.h" #include "nsCOMPtr.h" -#include "nsChangeObserver.h" #include "nsAutoPtr.h" +#include "nsIMenu.h" +#include "nsChangeObserver.h" +#include "nsMenuBarX.h" +#import +#import + + +class nsIMenuBar; class nsMenuX; class nsMenuItemIconX; -class nsMenuItemX; -class nsIWidget; // MenuDelegate is used to receive Cocoa notifications for @@ -66,71 +66,99 @@ class nsIWidget; @end -// Once instantiated, this object lives until its DOM node or its parent window is destroyed. -// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. -class nsMenuX : public nsMenuObjectX, +class nsMenuX : public nsIMenu, public nsChangeObserver { public: - nsMenuX(); - virtual ~nsMenuX(); + nsMenuX(); + virtual ~nsMenuX(); - // If > 0, the OS is indexing all the app's menus (triggered by opening - // Help menu on Leopard and higher). There are some things that are - // unsafe to do while this is happening. - static PRInt32 sIndexingMenuLevel; + // If > 0, the OS is indexing all the app's menus (triggered by opening + // Help menu on Leopard and higher). There are some things that are + // unsafe to do while this is happening. + static PRInt32 sIndexingMenuLevel; - NS_DECL_CHANGEOBSERVER + NS_DECL_ISUPPORTS + NS_DECL_CHANGEOBSERVER - // nsMenuObjectX - void* NativeData() {return (void*)mMacMenu;} - nsMenuObjectTypeX MenuObjectType() {return eSubmenuObjectType;} + id GetNativeMenuItem(); - // nsMenuX - nsresult Create(nsMenuObjectX* aParent, const nsAString &aLabel, - nsMenuBarX* aMenuBar, nsIContent* aNode); - PRUint32 GetItemCount(); - nsMenuObjectX* GetItemAt(PRUint32 aPos); - nsresult GetVisibleItemCount(PRUint32 &aCount); - nsMenuObjectX* GetVisibleItemAt(PRUint32 aPos); - nsEventStatus MenuOpened(const nsMenuEvent& aMenuEvent); - void MenuClosed(const nsMenuEvent& aMenuEvent); - void SetRebuild(PRBool aMenuEvent); - NSMenuItem* NativeMenuItem(); + // nsIMenu Methods + NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, + nsMenuBarX* aMenuBar, nsIContent* aNode); + NS_IMETHOD GetParent(nsISupports *&aParent); + NS_IMETHOD GetLabel(nsString &aText); + NS_IMETHOD SetLabel(const nsAString &aText); + NS_IMETHOD GetAccessKey(nsString &aText); + NS_IMETHOD SetAccessKey(const nsAString &aText); + NS_IMETHOD AddItem(nsISupports* aText); + NS_IMETHOD GetItemCount(PRUint32 &aCount); + NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); + NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount); + NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); + NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem); + NS_IMETHOD RemoveItem(const PRUint32 aPos); + NS_IMETHOD RemoveAll(); + NS_IMETHOD GetNativeData(void** aData); + NS_IMETHOD SetNativeData(void* aData); + NS_IMETHOD GetMenuContent(nsIContent ** aMenuNode); + NS_IMETHOD SetEnabled(PRBool aIsEnabled); + NS_IMETHOD GetEnabled(PRBool* aIsEnabled); + + NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, PRBool aEnabled); + NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, + void** aMenuRef, + PRUint16* aMenuItemIndex); + NS_IMETHOD SetupIcon(); + nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent); + void MenuDeselected(const nsMenuEvent & aMenuEvent); + void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); + void MenuDestruct(const nsMenuEvent & aMenuEvent); + void SetRebuild(PRBool aMenuEvent); protected: - void MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode); - nsresult RemoveAll(); - nsresult SetEnabled(PRBool aIsEnabled); - nsresult GetEnabled(PRBool* aIsEnabled); - nsresult SetupIcon(); - nsresult CountVisibleBefore(PRUint32* outVisibleBefore); - void GetMenuPopupContent(nsIContent** aResult); - PRBool OnOpen(); - PRBool OnOpened(); - PRBool OnClose(); - PRBool OnClosed(); - nsresult AddMenuItem(nsMenuItemX* aMenuItem); - nsresult AddMenu(nsMenuX* aMenu); - void LoadMenuItem(nsIContent* inMenuItemContent); - void LoadSubMenu(nsIContent* inMenuContent); - GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); + // Determines how many menus are visible among the siblings that are before me. + // It doesn't matter if I am visible. + nsresult CountVisibleBefore(PRUint32* outVisibleBefore); - nsTArray< nsAutoPtr > mMenuObjectsArray; - nsString mLabel; - PRUint32 mVisibleItemsCount; // cache - nsMenuObjectX* mParent; // [weak] - nsMenuBarX* mMenuBar; // [weak] - nsRefPtr mIcon; - GeckoNSMenu* mMacMenu; // [strong] - MenuDelegate* mMenuDelegate; // [strong] - NSMenuItem* mNativeMenuItem; // [strong] - PRPackedBool mIsEnabled; - PRPackedBool mDestroyHandlerCalled; - PRPackedBool mNeedsRebuild; - PRPackedBool mConstructed; - PRPackedBool mVisible; - PRPackedBool mXBLAttached; + // fetch the content node associated with the menupopup item + void GetMenuPopupContent(nsIContent** aResult); + + // fire handlers for oncreate/ondestroy + PRBool OnDestroy(); + PRBool OnCreate(); + PRBool OnDestroyed(); + PRBool OnCreated(); + + nsresult AddMenuItem(nsIMenuItem * aMenuItem); + nsresult AddMenu(nsIMenu * aMenu); + + void LoadMenuItem(nsIContent* inMenuItemContent); + void LoadSubMenu(nsIContent* inMenuContent); + + GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); + +protected: + nsString mLabel; + nsCOMArray mMenuItemsArray; + PRUint32 mVisibleItemsCount; // caching number of visible items in mMenuItemsArray + + nsISupports* mParent; // weak, my parent owns me + nsMenuBarX* mMenuBar; // weak ref, it will outlive us + nsCOMPtr mMenuContent; // the |menu| tag, strong ref + nsRefPtr mIcon; + + // Mac specific + PRInt16 mMacMenuID; + GeckoNSMenu* mMacMenu; // strong ref, we own it + MenuDelegate* mMenuDelegate; // strong ref, we keep this around to get events for us + NSMenuItem* mNativeMenuItem; // strong ref, we own + PRPackedBool mIsEnabled; + PRPackedBool mDestroyHandlerCalled; + PRPackedBool mNeedsRebuild; + PRPackedBool mConstructed; + PRPackedBool mVisible; // are we visible to the user? + PRPackedBool mXBLAttached; }; #endif // nsMenuX_h_ diff --git a/widget/src/cocoa/nsMenuX.mm b/widget/src/cocoa/nsMenuX.mm index 250f74987a0c..079e2db68b8e 100644 --- a/widget/src/cocoa/nsMenuX.mm +++ b/widget/src/cocoa/nsMenuX.mm @@ -37,34 +37,38 @@ * ***** END LICENSE BLOCK ***** */ #include "nsMenuX.h" -#include "nsMenuItemX.h" -#include "nsMenuUtilsX.h" -#include "nsMenuItemIconX.h" -#include "nsObjCExceptions.h" - -#include "nsToolkit.h" -#include "nsCocoaUtils.h" #include "nsCOMPtr.h" -#include "prinrval.h" -#include "nsString.h" -#include "nsReadableUtils.h" -#include "nsUnicharUtils.h" -#include "plstr.h" -#include "nsWidgetAtoms.h" -#include "nsGUIEvent.h" -#include "nsCRT.h" - +#include "nsObjCExceptions.h" #include "nsIDocument.h" #include "nsIContent.h" #include "nsIDOMDocument.h" #include "nsIDocumentObserver.h" #include "nsIComponentManager.h" +#include "prinrval.h" #include "nsIRollupListener.h" -#include "nsIDOMElement.h" + +#include "nsMenuItemIconX.h" +#include "nsIMenu.h" +#include "nsIMenuBar.h" +#include "nsIMenuItem.h" +#include "nsToolkit.h" +#include "nsCocoaUtils.h" + +#include "nsString.h" +#include "nsReadableUtils.h" +#include "nsUnicharUtils.h" +#include "plstr.h" + +#include "nsINameSpaceManager.h" +#include "nsWidgetAtoms.h" #include "nsIXBLService.h" #include "nsIServiceManager.h" +#include "nsGUIEvent.h" + +#include "nsCRT.h" + #include "jsapi.h" #include "nsIScriptGlobalObject.h" #include "nsIScriptContext.h" @@ -74,16 +78,22 @@ extern nsIRollupListener * gRollupListener; extern nsIWidget * gRollupWidget; -extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); - static PRBool gConstructingMenu = PR_FALSE; + static PRBool gMenuMethodsSwizzled = PR_FALSE; +// CIDs +#include "nsWidgetsCID.h" +static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); +static NS_DEFINE_CID(kMenuItemCID, NS_MENUITEM_CID); + +NS_IMPL_ISUPPORTS1(nsMenuX, nsIMenu) + PRInt32 nsMenuX::sIndexingMenuLevel = 0; nsMenuX::nsMenuX() -: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), +: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), mMacMenuID(0), mMacMenu(nil), mNativeMenuItem(nil), mIsEnabled(PR_TRUE), mDestroyHandlerCalled(PR_FALSE), mNeedsRebuild(PR_TRUE), mConstructed(PR_FALSE), mVisible(PR_TRUE), mXBLAttached(PR_FALSE) @@ -122,42 +132,46 @@ nsMenuX::~nsMenuX() [mNativeMenuItem release]; // alert the change notifier we don't care no more - if (mContent) - mMenuBar->UnregisterForContentChanges(mContent); + if (mMenuContent) + mMenuBar->UnregisterForContentChanges(mMenuContent); NS_OBJC_END_TRY_ABORT_BLOCK; } -nsresult nsMenuX::Create(nsMenuObjectX* aParent, const nsAString& aLabel, - nsMenuBarX* aMenuBar, nsIContent* aNode) +NS_IMETHODIMP +nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - mContent = aNode; - mLabel = aLabel; - mMacMenu = CreateMenuWithGeckoString(mLabel); + mMenuContent = aNode; + NS_ASSERTION(mMenuContent, "Menu not given a dom node at creation time"); // register this menu to be notified when changes are made to our content object mMenuBar = aMenuBar; // weak ref NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); - mMenuBar->RegisterForContentChanges(mContent, this); + mMenuBar->RegisterForContentChanges(mMenuContent, this); mParent = aParent; // our parent could be either a menu bar (if we're toplevel) or a menu (if we're a submenu) - nsMenuObjectTypeX parentType = mParent->MenuObjectType(); - NS_ASSERTION((parentType == eMenuBarObjectType || parentType == eSubmenuObjectType), - "Menu parent not a menu bar or menu!"); + nsCOMPtr menubar = do_QueryInterface(aParent); + nsCOMPtr menu = do_QueryInterface(aParent); + NS_ASSERTION(menubar || menu, "Menu parent not a menu bar or menu!"); - if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent)) - mVisible = PR_FALSE; - if (mContent->GetChildCount() == 0) + // SetLabel will create the native menu if it has not been created yet + SetLabel(aLabel); + + if (NodeIsHiddenOrCollapsed(mMenuContent)) mVisible = PR_FALSE; - SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + if (menubar && mMenuContent->GetChildCount() == 0) + mVisible = PR_FALSE; - NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); + SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); + + NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; @@ -167,9 +181,11 @@ nsresult nsMenuX::Create(nsMenuObjectX* aParent, const nsAString& aLabel, // native menu items being created. If we only call MenuConstruct when a menu // is actually selected, then we can't access keyboard commands until the // menu gets selected, which is bad. - MenuConstruct(nsnull, nsnull); - - mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); + nsMenuEvent fake(PR_TRUE, 0, nsnull); + MenuConstruct(fake, nsnull, nsnull); + + if (menu) + mIcon = new nsMenuItemIconX(static_cast(this), menu, mMenuContent, mNativeMenuItem); return NS_OK; @@ -177,37 +193,102 @@ nsresult nsMenuX::Create(nsMenuObjectX* aParent, const nsAString& aLabel, } -nsresult nsMenuX::AddMenuItem(nsMenuItemX* aMenuItem) +NS_IMETHODIMP nsMenuX::GetParent(nsISupports*& aParent) +{ + aParent = mParent; + NS_IF_ADDREF(aParent); + return NS_OK; +} + + +NS_IMETHODIMP nsMenuX::GetLabel(nsString &aText) +{ + aText = mLabel; + return NS_OK; +} + + +NS_IMETHODIMP nsMenuX::SetLabel(const nsAString &aText) +{ + mLabel = aText; + // create an actual NSMenu if this is the first time + if (mMacMenu == nil) + mMacMenu = CreateMenuWithGeckoString(mLabel); + return NS_OK; +} + + +NS_IMETHODIMP nsMenuX::GetAccessKey(nsString &aText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuX::SetAccessKey(const nsAString &aText) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +// This should only be used internally by our menu implementation. In all other +// cases menus and their items should be added and modified via the DOM. +NS_IMETHODIMP nsMenuX::AddItem(nsISupports* aItem) +{ + nsresult rv = NS_ERROR_FAILURE; + + if (!aItem) + return NS_ERROR_INVALID_ARG; + + // Figure out what we're adding + nsCOMPtr menuItem(do_QueryInterface(aItem, &rv)); + if (NS_SUCCEEDED(rv)) { + rv = AddMenuItem(menuItem); + } + else { + nsCOMPtr menu(do_QueryInterface(aItem, &rv)); + if (NS_SUCCEEDED(rv)) + rv = AddMenu(menu); + } + + return rv; +} + + +nsresult nsMenuX::AddMenuItem(nsIMenuItem * aMenuItem) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; if (!aMenuItem) return NS_ERROR_INVALID_ARG; - mMenuObjectsArray.AppendElement(aMenuItem); - if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenuItem->Content())) + nsCOMPtr menuItemContent; + aMenuItem->GetMenuItemContent(getter_AddRefs(menuItemContent)); + mMenuItemsArray.AppendObject(aMenuItem); // owning ref + if (menuItemContent && NodeIsHiddenOrCollapsed(menuItemContent)) return NS_OK; ++mVisibleItemsCount; - - NSMenuItem* newNativeMenuItem = (NSMenuItem*)aMenuItem->NativeData(); - + // add the menu item to this menu + NSMenuItem* newNativeMenuItem; + aMenuItem->GetNativeData((void*&)newNativeMenuItem); + if (!newNativeMenuItem) + return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; // set up target/action [newNativeMenuItem setTarget:nsMenuBarX::sNativeEventTarget]; [newNativeMenuItem setAction:@selector(menuItemHit:)]; - + // set its command. we get the unique command id from the menubar [newNativeMenuItem setTag:mMenuBar->RegisterForCommand(aMenuItem)]; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -nsresult nsMenuX::AddMenu(nsMenuX* aMenu) +nsresult nsMenuX::AddMenu(nsIMenu * aMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -215,18 +296,22 @@ nsresult nsMenuX::AddMenu(nsMenuX* aMenu) if (!aMenu) return NS_ERROR_NULL_POINTER; - mMenuObjectsArray.AppendElement(aMenu); - if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenu->Content())) + nsCOMPtr menuContent; + aMenu->GetMenuContent(getter_AddRefs(menuContent)); + mMenuItemsArray.AppendObject(aMenu); // owning ref + if (menuContent && NodeIsHiddenOrCollapsed(menuContent)) return NS_OK; ++mVisibleItemsCount; // We have to add a menu item and then associate the menu with it - NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->NativeMenuItem(); + NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->GetNativeMenuItem(); if (!newNativeMenuItem) return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; - - [newNativeMenuItem setSubmenu:(NSMenu*)aMenu->NativeData()]; + + NSMenu* childMenu; + if (aMenu->GetNativeData((void**)&childMenu) == NS_OK) + [newNativeMenuItem setSubmenu:childMenu]; return NS_OK; @@ -235,32 +320,48 @@ nsresult nsMenuX::AddMenu(nsMenuX* aMenu) // Includes all items, including hidden/collapsed ones -PRUint32 nsMenuX::GetItemCount() +NS_IMETHODIMP nsMenuX::GetItemCount(PRUint32 &aCount) { - return mMenuObjectsArray.Length(); + aCount = mMenuItemsArray.Count(); + return NS_OK; } // Includes all items, including hidden/collapsed ones -nsMenuObjectX* nsMenuX::GetItemAt(PRUint32 aPos) +NS_IMETHODIMP nsMenuX::GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) { - if (aPos >= (PRUint32)mMenuObjectsArray.Length()) - return NULL; + if (aPos >= (PRUint32)mMenuItemsArray.Count()) + return NS_ERROR_INVALID_ARG; - return mMenuObjectsArray[aPos]; + aMenuItem = mMenuItemsArray.ObjectAt(aPos); + NS_IF_ADDREF(aMenuItem); + return NS_OK; } -// Checks submenus and menu items. Not suitable for submenus that are children -// of a menu bar, which has slightly different rules for visiblity. -static PRBool MenuNodeIsVisible(nsMenuObjectX* item) +// Checks both nsIMenus and nsIMenuItems. Not suitable for menus that are children +// of nsIMenuBar, which has slightly different rules for visiblity. +static PRBool MenuNodeIsVisible(nsISupports *item) { - return (!nsMenuUtilsX::NodeIsHiddenOrCollapsed(item->Content())); + // Find the content for this item in the menu, be it a MenuItem or a Menu + nsCOMPtr itemContent; + nsCOMPtr menuItem = do_QueryInterface(item); + if (menuItem) { + menuItem->GetMenuItemContent(getter_AddRefs(itemContent)); + } + else { + nsCOMPtr menu = do_QueryInterface(item); + if (menu) + menu->GetMenuContent(getter_AddRefs(itemContent)); + } + + // Check the visibility of the item's content + return (itemContent && !NodeIsHiddenOrCollapsed(itemContent)); } // Only includes visible items -nsresult nsMenuX::GetVisibleItemCount(PRUint32 &aCount) +NS_IMETHODIMP nsMenuX::GetVisibleItemCount(PRUint32 &aCount) { aCount = mVisibleItemsCount; return NS_OK; @@ -269,36 +370,53 @@ nsresult nsMenuX::GetVisibleItemCount(PRUint32 &aCount) // Only includes visible items. Note that this is provides O(N) access // If you need to iterate or search, consider using GetItemAt and doing your own filtering -nsMenuObjectX* nsMenuX::GetVisibleItemAt(PRUint32 aPos) +NS_IMETHODIMP nsMenuX::GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) { - - PRUint32 count = mMenuObjectsArray.Length(); + PRUint32 count = mMenuItemsArray.Count(); if (aPos >= mVisibleItemsCount || aPos >= count) - return NULL; + return NS_ERROR_INVALID_ARG; // If there are no invisible items, can provide direct access - if (mVisibleItemsCount == count) - return mMenuObjectsArray[aPos]; + if (mVisibleItemsCount == count) { + nsCOMPtr item = mMenuItemsArray.ObjectAt(aPos); + aMenuItem = item; + NS_IF_ADDREF(aMenuItem); + return NS_OK; + } // Otherwise, traverse the array until we find the the item we're looking for. - nsMenuObjectX* item; + nsCOMPtr item; PRUint32 visibleNodeIndex = 0; for (PRUint32 i = 0; i < count; i++) { - item = mMenuObjectsArray[i]; + item = mMenuItemsArray.ObjectAt(i); if (MenuNodeIsVisible(item)) { if (aPos == visibleNodeIndex) { // we found the visible node we're looking for, return it - return item; + aMenuItem = item; + NS_IF_ADDREF(aMenuItem); + return NS_OK; } visibleNodeIndex++; } } - return NULL; + return NS_ERROR_FAILURE; } -nsresult nsMenuX::RemoveAll() +NS_IMETHODIMP nsMenuX::InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuX::RemoveItem(const PRUint32 aPos) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP nsMenuX::RemoveAll() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -311,20 +429,41 @@ nsresult nsMenuX::RemoveAll() for (int i = [mMacMenu numberOfItems] - 1; i >= 0; i--) [mMacMenu removeItemAtIndex:i]; } - - mMenuObjectsArray.Clear(); + // get rid of Gecko menu items + mMenuItemsArray.Clear(); mVisibleItemsCount = 0; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) +NS_IMETHODIMP nsMenuX::GetNativeData(void ** aData) +{ + *aData = mMacMenu; + return NS_OK; +} + + +NS_IMETHODIMP nsMenuX::SetNativeData(void * aData) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + [mMacMenu release]; + mMacMenu = [(NSMenu*)aData retain]; + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; + // printf("JOSH: MenuSelected called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); + // Determine if this is the correct menu to handle the event MenuRef selectedMenuHandle = (MenuRef)aMenuEvent.mCommand; @@ -332,10 +471,10 @@ nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) // must be a carbon MenuRef to be had if (_NSGetCarbonMenu(mMacMenu) == selectedMenuHandle) { // Open the node. - mContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); + mMenuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); - // Fire a handler. If we're told to stop, don't build the menu at all - PRBool keepProcessing = OnOpen(); + // Fire our oncreate handler. If we're told to stop, don't build the menu at all + PRBool keepProcessing = OnCreate(); if (!mNeedsRebuild || !keepProcessing) return nsEventStatus_eConsumeNoDefault; @@ -344,21 +483,21 @@ nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) if (mNeedsRebuild) RemoveAll(); - MenuConstruct(nsnull, nsnull); + MenuConstruct(aMenuEvent, nsnull, nsnull); mConstructed = true; } - OnOpened(); + OnCreated(); // Now that it's built, fire the popupShown event. return nsEventStatus_eConsumeNoDefault; } else { // Make sure none of our submenus are the ones that should be handling this - PRUint32 count = mMenuObjectsArray.Length(); - for (PRUint32 i = 0; i < count; i++) { - nsMenuObjectX* menuObject = mMenuObjectsArray[i]; - if (menuObject->MenuObjectType() == eSubmenuObjectType) { - nsEventStatus status = static_cast(menuObject)->MenuOpened(aMenuEvent); + for (PRUint32 i = mMenuItemsArray.Count() - 1; i >= 0; i--) { + nsISupports* menuSupports = mMenuItemsArray.ObjectAt(i); + nsCOMPtr menu = do_QueryInterface(menuSupports); + if (menu) { + nsEventStatus status = menu->MenuSelected(aMenuEvent); if (status != nsEventStatus_eIgnore) return status; } @@ -371,26 +510,20 @@ nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) } -void nsMenuX::MenuClosed(const nsMenuEvent & aMenuEvent) +void nsMenuX::MenuDeselected(const nsMenuEvent & aMenuEvent) { + // Destroy the menu if (mConstructed) { - // Don't close if a handler tells us to stop. - if (!OnClose()) - return; - - if (mNeedsRebuild) - mConstructed = false; - - mContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); - - OnClosed(); - + MenuDestruct(aMenuEvent); mConstructed = false; } } -void nsMenuX::MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode) +void nsMenuX::MenuConstruct( + const nsMenuEvent & aMenuEvent, + nsIWidget * aParentWindow, + void * aMenuNode) { mConstructed = false; gConstructingMenu = PR_TRUE; @@ -449,7 +582,23 @@ void nsMenuX::MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode) gConstructingMenu = PR_FALSE; mNeedsRebuild = PR_FALSE; - // printf("Done building, mMenuObjectsArray.Count() = %d \n", mMenuObjectsArray.Count()); + // printf("Done building, mMenuItemsArray.Count() = %d \n", mMenuItemsArray.Count()); +} + + +void nsMenuX::MenuDestruct(const nsMenuEvent & aMenuEvent) +{ + // printf("nsMenuX::MenuDestruct() called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); + + // Fire our ondestroy handler. If we're told to stop, don't destroy the menu. + if (!OnDestroy()) + return; + + if (mNeedsRebuild) + mConstructed = false; + // Close the node. + mMenuContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); + OnDestroyed(); } @@ -460,7 +609,7 @@ void nsMenuX::SetRebuild(PRBool aNeedsRebuild) } -nsresult nsMenuX::SetEnabled(PRBool aIsEnabled) +NS_IMETHODIMP nsMenuX::SetEnabled(PRBool aIsEnabled) { if (aIsEnabled != mIsEnabled) { // we always want to rebuild when this changes @@ -471,7 +620,7 @@ nsresult nsMenuX::SetEnabled(PRBool aIsEnabled) } -nsresult nsMenuX::GetEnabled(PRBool* aIsEnabled) +NS_IMETHODIMP nsMenuX::GetEnabled(PRBool* aIsEnabled) { NS_ENSURE_ARG_POINTER(aIsEnabled); *aIsEnabled = mIsEnabled; @@ -479,6 +628,14 @@ nsresult nsMenuX::GetEnabled(PRBool* aIsEnabled) } +NS_IMETHODIMP nsMenuX::GetMenuContent(nsIContent ** aMenuContent) +{ + NS_ENSURE_ARG_POINTER(aMenuContent); + NS_IF_ADDREF(*aMenuContent = mMenuContent); + return NS_OK; +} + + GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; @@ -486,16 +643,16 @@ GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) NSString* title = [NSString stringWithCharacters:(UniChar*)menuTitle.get() length:menuTitle.Length()]; GeckoNSMenu* myMenu = [[GeckoNSMenu alloc] initWithTitle:title]; [myMenu setDelegate:mMenuDelegate]; - + // We don't want this menu to auto-enable menu items because then Cocoa // overrides our decisions and things get incorrectly enabled/disabled. [myMenu setAutoenablesItems:NO]; - + // we used to install Carbon event handlers here, but since NSMenu* doesn't // create its underlying MenuRef until just before display, we delay until // that happens. Now we install the event handlers when Cocoa notifies // us that a menu is about to display - see the Cocoa MenuDelegate class. - + return myMenu; NS_OBJC_END_TRY_ABORT_BLOCK_NIL; @@ -507,41 +664,38 @@ void nsMenuX::LoadMenuItem(nsIContent* inMenuItemContent) if (!inMenuItemContent) return; + // create nsMenuItem + nsCOMPtr pnsMenuItem = do_CreateInstance(kMenuItemCID); + if (!pnsMenuItem) + return; + nsAutoString menuitemName; inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuitemName); // printf("menuitem %s \n", NS_LossyConvertUTF16toASCII(menuitemName).get()); - EMenuItemType itemType = eRegularMenuItemType; + nsIMenuItem::EMenuItemType itemType = nsIMenuItem::eRegular; if (inMenuItemContent->Tag() == nsWidgetAtoms::menuseparator) { - itemType = eSeparatorMenuItemType; + itemType = nsIMenuItem::eSeparator; } else { static nsIContent::AttrValuesArray strings[] = {&nsWidgetAtoms::checkbox, &nsWidgetAtoms::radio, nsnull}; switch (inMenuItemContent->FindAttrValueIn(kNameSpaceID_None, nsWidgetAtoms::type, strings, eCaseMatters)) { - case 0: itemType = eCheckboxMenuItemType; break; - case 1: itemType = eRadioMenuItemType; break; + case 0: itemType = nsIMenuItem::eCheckbox; break; + case 1: itemType = nsIMenuItem::eRadio; break; } } // Create the item. - nsMenuItemX* menuItem = new nsMenuItemX(); - if (!menuItem) - return; + pnsMenuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); - nsresult rv = menuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); - if (NS_FAILED(rv)) { - delete menuItem; - return; - } - - AddMenuItem(menuItem); + AddMenuItem(pnsMenuItem); // This needs to happen after the nsIMenuItem object is inserted into // our item array in AddMenuItem() - menuItem->SetupIcon(); + pnsMenuItem->SetupIcon(); } @@ -551,27 +705,24 @@ void nsMenuX::LoadSubMenu(nsIContent* inMenuContent) inMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); //printf("Creating Menu [%s] \n", NS_LossyConvertUTF16toASCII(menuName).get()); - nsAutoPtr menu(new nsMenuX()); - if (!menu) + // Create nsMenu + nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); + if (!pnsMenu) return; - nsresult rv = menu->Create(this, menuName, mMenuBar, inMenuContent); - if (NS_FAILED(rv)) - return; + pnsMenu->Create(reinterpret_cast(this), menuName, EmptyString(), mMenuBar, inMenuContent); - AddMenu(menu); + AddMenu(pnsMenu); // This needs to happen after the nsIMenu object is inserted into // our item array in AddMenu() - menu->SetupIcon(); - - menu.forget(); + pnsMenu->SetupIcon(); } -// This menu is about to open. Returns TRUE if we should keep processing the event, -// FALSE if the handler wants to stop the opening of the menu. -PRBool nsMenuX::OnOpen() +// Fire our oncreate handler. Returns TRUE if we should keep processing the event, +// FALSE if the handler wants to stop the creation of the menu +PRBool nsMenuX::OnCreate() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWING, nsnull, @@ -581,14 +732,15 @@ PRBool nsMenuX::OnOpen() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mContent; + nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; - // If the open is going to succeed we need to walk our menu items, checking to - // see if any of them have a command attribute. If so, several apptributes - // must potentially be updated. + // the menu is going to show and the oncreate handler has executed. We + // now need to walk our menu items, checking to see if any of them have + // a command attribute. If so, several apptributes must potentially + // be updated. if (popupContent) { nsCOMPtr domDoc(do_QueryInterface(popupContent->GetDocument())); @@ -645,7 +797,7 @@ PRBool nsMenuX::OnOpen() } -PRBool nsMenuX::OnOpened() +PRBool nsMenuX::OnCreated() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWN, nsnull, nsMouseEvent::eReal); @@ -654,7 +806,7 @@ PRBool nsMenuX::OnOpened() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mContent; + nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; @@ -663,9 +815,9 @@ PRBool nsMenuX::OnOpened() } -// Returns TRUE if we should keep processing the event, FALSE if the handler -// wants to stop the closing of the menu. -PRBool nsMenuX::OnClose() +// Fire our ondestroy handler. Returns TRUE if we should keep processing the event, +// FALSE if the handler wants to stop the destruction of the menu +PRBool nsMenuX::OnDestroy() { if (mDestroyHandlerCalled) return PR_TRUE; @@ -678,7 +830,7 @@ PRBool nsMenuX::OnClose() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mContent; + nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -690,7 +842,7 @@ PRBool nsMenuX::OnClose() } -PRBool nsMenuX::OnClosed() +PRBool nsMenuX::OnDestroyed() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_HIDDEN, nsnull, @@ -700,7 +852,7 @@ PRBool nsMenuX::OnClosed() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mContent; + nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -726,11 +878,11 @@ void nsMenuX::GetMenuPopupContent(nsIContent** aResult) if (!xblService) return; - PRUint32 count = mContent->GetChildCount(); + PRUint32 count = mMenuContent->GetChildCount(); for (PRUint32 i = 0; i < count; i++) { PRInt32 dummy; - nsIContent *child = mContent->GetChildAt(i); + nsIContent *child = mMenuContent->GetChildAt(i); nsCOMPtr tag; xblService->ResolveTag(child, &dummy, getter_AddRefs(tag)); if (tag == nsWidgetAtoms::menupopup) { @@ -750,48 +902,102 @@ nsresult nsMenuX::CountVisibleBefore(PRUint32* outVisibleBefore) { NS_ASSERTION(outVisibleBefore, "bad index param in nsMenuX::CountVisibleBefore"); - nsMenuObjectTypeX parentType = mParent->MenuObjectType(); - if (parentType == eMenuBarObjectType) { - nsMenuBarX* menubarParent = static_cast(mParent); - PRUint32 numMenus = menubarParent->GetMenuCount(); - + nsCOMPtr menubarParent = do_QueryInterface(mParent); + if (menubarParent) { + PRUint32 numMenus = 0; + menubarParent->GetMenuCount(numMenus); + // Find this menu among the children of my parent menubar *outVisibleBefore = 1; // start at 1, the Application menu will always be there for (PRUint32 i = 0; i < numMenus; i++) { - nsMenuX* currMenu = menubarParent->GetMenuAt(i); - if (currMenu == this) { + nsCOMPtr currMenu; + menubarParent->GetMenuAt(i, *getter_AddRefs(currMenu)); + if (currMenu == static_cast(this)) { // we found ourselves, break out return NS_OK; } - + if (currMenu) { - nsIContent* menuContent = currMenu->Content(); - if (menuContent->GetChildCount() > 0 && - !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { + nsCOMPtr menuContent; + currMenu->GetMenuContent(getter_AddRefs(menuContent)); + if (menuContent && + menuContent->GetChildCount() > 0 && + !NodeIsHiddenOrCollapsed(menuContent)) { ++(*outVisibleBefore); } } } - } - else if (parentType == eSubmenuObjectType) { + } // if menubarParent + else { + nsCOMPtr menuParent = do_QueryInterface(mParent); + if (!menuParent) + return NS_ERROR_FAILURE; + + PRUint32 numItems; + menuParent->GetItemCount(numItems); + // Find this menu among the children of my parent menu - nsMenuX* menuParent = static_cast(mParent); - PRUint32 numItems = menuParent->GetItemCount(); for (PRUint32 i = 0; i < numItems; i++) { // Using GetItemAt instead of GetVisibleItemAt to avoid O(N^2) - nsMenuObjectX* currItem = menuParent->GetItemAt(i); - if (currItem == this) - return NS_OK; // we found ourselves, break out + nsCOMPtr currItem; + menuParent->GetItemAt(i, *getter_AddRefs(currItem)); + nsCOMPtr currMenu = do_QueryInterface(currItem); + if (currMenu == static_cast(this)) { + // we found ourselves, break out + return NS_OK; + } + // If the node is visible increment the outparam. if (MenuNodeIsVisible(currItem)) ++(*outVisibleBefore); + } } return NS_ERROR_FAILURE; } -NSMenuItem* nsMenuX::NativeMenuItem() +NS_IMETHODIMP +nsMenuX::ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, + PRBool aEnabled) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + + +NS_IMETHODIMP +nsMenuX::GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, + void** aMenuRef, + PRUint16* aMenuItemIndex) +{ + if (!mMacMenu) + return NS_ERROR_FAILURE; + + // look for the menu item given, and skip invisible elements + PRUint32 menuItemCount; + GetItemCount(menuItemCount); + PRUint32 visibleNodeIndex = 0; + for (PRUint32 i = 0; i < menuItemCount; i++) { + nsCOMPtr currItem; + GetItemAt(i, *getter_AddRefs(currItem)); + // Only check visible nodes + if (MenuNodeIsVisible(currItem)) { + if (currItem == aMenuItem) { + *aMenuRef = _NSGetCarbonMenu(mMacMenu); + // add 1 because carbon menu items are 1-indexed. + *aMenuItemIndex = visibleNodeIndex + 1; + return NS_OK; + } + visibleNodeIndex++; + } + } + + return NS_ERROR_FAILURE; +} + + +id +nsMenuX::GetNativeMenuItem() { return mNativeMenuItem; } @@ -802,8 +1008,8 @@ NSMenuItem* nsMenuX::NativeMenuItem() // -void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, - nsIAtom *aAttribute) +void +nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, nsIAtom *aAttribute) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; @@ -811,44 +1017,51 @@ void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConte if (gConstructingMenu || (aAttribute == nsWidgetAtoms::open)) return; - nsMenuObjectTypeX parentType = mParent->MenuObjectType(); + nsCOMPtr menubarParent = do_QueryInterface(mParent); if (aAttribute == nsWidgetAtoms::disabled) { SetRebuild(PR_TRUE); - SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); } else if (aAttribute == nsWidgetAtoms::label) { SetRebuild(PR_TRUE); - mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); + mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); // invalidate my parent. If we're a submenu parent, we have to rebuild // the parent menu in order for the changes to be picked up. If we're // a regular menu, just change the title and redraw the menubar. - if (parentType == eMenuBarObjectType) { + if (menubarParent) { // reuse the existing menu, to avoid rebuilding the root menu bar. NS_ASSERTION(mMacMenu, "nsMenuX::AttributeChanged: invalid menu handle."); - NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); [mMacMenu setTitle:newCocoaLabelString]; [newCocoaLabelString release]; } else { - static_cast(mParent)->SetRebuild(PR_TRUE); + nsCOMPtr parentMenu(do_QueryInterface(mParent)); + parentMenu->SetRebuild(PR_TRUE); } } else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - PRBool contentIsHiddenOrCollapsed = nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent); + PRBool contentIsHiddenOrCollapsed = NodeIsHiddenOrCollapsed(mMenuContent); // don't do anything if the state is correct already if (contentIsHiddenOrCollapsed != mVisible) return; + nsCOMPtr menuParent = do_QueryInterface(mParent); if (contentIsHiddenOrCollapsed) { - if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { - NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); + void *clientData = nsnull; + if (menubarParent) + menubarParent->GetNativeData(clientData); + else if (menuParent) + menuParent->GetNativeData(&clientData); + if (clientData) { + NSMenu* parentMenu = reinterpret_cast(clientData); // An exception will get thrown if we try to remove an item that isn't // in the menu. if ([parentMenu indexOfItem:mNativeMenuItem] != -1) @@ -859,8 +1072,13 @@ void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConte else { PRUint32 insertAfter = 0; if (NS_SUCCEEDED(CountVisibleBefore(&insertAfter))) { - if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { - NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); + void *clientData = nsnull; + if (menubarParent) + menubarParent->GetNativeData(clientData); + else if (menuParent) + menuParent->GetNativeData(&clientData); + if (clientData) { + NSMenu* parentMenu = reinterpret_cast(clientData); [parentMenu insertItem:mNativeMenuItem atIndex:insertAfter]; [mNativeMenuItem setSubmenu:mMacMenu]; mVisible = PR_TRUE; @@ -876,20 +1094,24 @@ void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConte } -void nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void +nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; SetRebuild(PR_TRUE); + + RemoveItem(aIndexInContainer); mMenuBar->UnregisterForContentChanges(aChild); } -void nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void +nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; @@ -897,13 +1119,12 @@ void nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, } -nsresult nsMenuX::SetupIcon() +NS_IMETHODIMP +nsMenuX::SetupIcon() { // In addition to out-of-memory, menus that are children of the menu bar // will not have mIcon set. - if (!mIcon) - return NS_ERROR_OUT_OF_MEMORY; - + if (!mIcon) return NS_ERROR_OUT_OF_MEMORY; return mIcon->SetupIcon(); } @@ -927,7 +1148,6 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe if (nsMenuX::sIndexingMenuLevel > 0) return noErr; - nsMenuX* targetMenu = static_cast(userData); UInt32 kind = ::GetEventKind(event); if (kind == kEventMenuTargetItem) { // get the position of the menu item we want @@ -938,16 +1158,20 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe // don't request a menu item that doesn't exist or we crash // this might happen just due to some random quirks in the event system PRUint32 itemCount; + nsIMenu* targetMenu = reinterpret_cast(userData); targetMenu->GetVisibleItemCount(itemCount); if (aPos >= itemCount) return eventNotHandledErr; - - // Send DOM event if we're over a menu item - nsMenuObjectX* target = targetMenu->GetVisibleItemAt((PRUint32)aPos); - if (target->MenuObjectType() == eMenuItemObjectType) { - nsMenuItemX* targetMenuItem = static_cast(target); + + nsCOMPtr aTargetMenuItem; + targetMenu->GetVisibleItemAt((PRUint32)aPos, *getter_AddRefs(aTargetMenuItem)); + + // Send DOM event + // If the QI fails, we're over a submenu and we shouldn't send the event + nsCOMPtr bTargetMenuItem(do_QueryInterface(aTargetMenuItem)); + if (bTargetMenuItem) { PRBool handlerCalledPreventDefault; // but we don't actually care - targetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); + bTargetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); return noErr; } } @@ -956,16 +1180,23 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe gRollupListener->Rollup(nsnull); return userCanceledErr; } - MenuRef menuRef; - ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); - nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); - menuEvent.time = PR_IntervalNow(); - menuEvent.mCommand = (PRUint32)menuRef; - if (kind == kEventMenuOpening) - targetMenu->MenuOpened(menuEvent); - else - targetMenu->MenuClosed(menuEvent); - return noErr; + + nsISupports* supports = reinterpret_cast(userData); + nsCOMPtr menu(do_QueryInterface(supports)); + if (menu) { + MenuRef menuRef; + ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); + nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); + menuEvent.time = PR_IntervalNow(); + menuEvent.mCommand = (PRUint32)menuRef; + if (kind == kEventMenuOpening) { + menu->MenuSelected(menuEvent); + } + else { + menu->MenuDeselected(menuEvent); + } + return noErr; + } } return eventNotHandledErr; diff --git a/widget/src/cocoa/nsPIWidgetCocoa.idl b/widget/src/cocoa/nsPIWidgetCocoa.idl index 2fa3407d8346..6126da566118 100644 --- a/widget/src/cocoa/nsPIWidgetCocoa.idl +++ b/widget/src/cocoa/nsPIWidgetCocoa.idl @@ -39,7 +39,7 @@ #include "nsISupports.idl" -interface nsMenuBarX; +interface nsIMenuBar; interface nsCocoaWindow; interface nsIWidget; @@ -56,6 +56,9 @@ interface nsPIWidgetCocoa : nsISupports { void SendSetZLevelEvent(); + // Obtain the menubar for a window + nsIMenuBar GetMenuBar(); + // Find the displayed child sheet (if aShown) or a child sheet that // wants to be displayed (if !aShown) nsCocoaWindow GetChildSheet(in boolean aShown); diff --git a/widget/src/cocoa/nsWidgetFactory.mm b/widget/src/cocoa/nsWidgetFactory.mm index 858332021a22..15cf7b904675 100644 --- a/widget/src/cocoa/nsWidgetFactory.mm +++ b/widget/src/cocoa/nsWidgetFactory.mm @@ -49,6 +49,10 @@ #include "nsAppShellSingleton.h" #include "nsFilePicker.h" +#include "nsMenuBarX.h" +#include "nsMenuX.h" +#include "nsMenuItemX.h" + #include "nsClipboard.h" #include "nsClipboardHelper.h" #include "nsTransferable.h" @@ -70,6 +74,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker) NS_GENERIC_FACTORY_CONSTRUCTOR(nsToolkit) NS_GENERIC_FACTORY_CONSTRUCTOR(nsLookAndFeel) +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuBarX) +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuX) +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuItemX) NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable) NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter) @@ -82,9 +89,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSessionX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceX) -#include "nsMenuBarX.h" -NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeMenuServiceX) - #include "nsBidiKeyboard.h" NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard) @@ -121,6 +125,18 @@ static const nsModuleComponentInfo gComponents[] = NS_LOOKANDFEEL_CID, "@mozilla.org/widget/lookandfeel;1", nsLookAndFeelConstructor }, + { "Menubar", + NS_MENUBAR_CID, + "@mozilla.org/widget/menubar/mac;1", + nsMenuBarXConstructor }, + { "Menu", + NS_MENU_CID, + "@mozilla.org/widget/menu/mac;1", + nsMenuXConstructor }, + { "MenuItem", + NS_MENUITEM_CID, + "@mozilla.org/widget/menuitem/mac;1", + nsMenuItemXConstructor }, { "Sound", NS_SOUND_CID, "@mozilla.org/sound;1", @@ -173,10 +189,6 @@ static const nsModuleComponentInfo gComponents[] = NS_IDLE_SERVICE_CID, "@mozilla.org/widget/idleservice;1", nsIdleServiceXConstructor }, - { "Native Menu Service", - NS_NATIVEMENUSERVICE_CID, - "@mozilla.org/widget/nativemenuservice;1", - nsNativeMenuServiceXConstructor }, }; NS_IMPL_NSGETMODULE_WITH_CTOR_DTOR(nsWidgetMacModule, gComponents, diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 02cc01086add..2b403789469f 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -1373,7 +1373,7 @@ nsWindow::SetIcon(const nsAString& aIconSpec) } NS_IMETHODIMP -nsWindow::SetMenuBar(void * aMenuBar) +nsWindow::SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h index 2e8ea043f83f..0631535408e8 100644 --- a/widget/src/gtk2/nsWindow.h +++ b/widget/src/gtk2/nsWindow.h @@ -141,7 +141,7 @@ public: NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); NS_IMETHOD SetWindowClass(const nsAString& xulWinType); - NS_IMETHOD SetMenuBar(void * aMenuBar); + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/os2/nsWindow.h b/widget/src/os2/nsWindow.h index 973d16223d28..ebcd7ad4aac3 100644 --- a/widget/src/os2/nsWindow.h +++ b/widget/src/os2/nsWindow.h @@ -61,6 +61,7 @@ #include "gfxOS2Surface.h" #include "gfxContext.h" +class nsIMenuBar; class imgIContainer; //#define DEBUG_FOCUS @@ -177,7 +178,7 @@ class nsWindow : public nsBaseWidget, NS_IMETHOD HideWindowChrome(PRBool aShouldHide); NS_IMETHOD SetTitle( const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD Invalidate( PRBool aIsSynchronous); NS_IMETHOD Invalidate( const nsRect & aRect, PRBool aIsSynchronous); @@ -280,6 +281,7 @@ protected: PRInt32 mPreferredHeight; PRInt32 mPreferredWidth; nsToolkit *mOS2Toolkit; + nsIMenuBar *mMenuBar; PRInt32 mWindowState; nsRefPtr mThebesSurface; diff --git a/widget/src/photon/nsWindow.cpp b/widget/src/photon/nsWindow.cpp index 50aa486f9edd..5ea978f2990b 100644 --- a/widget/src/photon/nsWindow.cpp +++ b/widget/src/photon/nsWindow.cpp @@ -53,6 +53,7 @@ #include "nsRect.h" #include "nsTransform2D.h" #include "nsGfxCIID.h" +#include "nsIMenuBar.h" #include "nsToolkit.h" #include "nsIPrefBranch.h" #include "nsIPrefService.h" diff --git a/widget/src/windows/nsWindow.h b/widget/src/windows/nsWindow.h index 0d12409793ec..170c46cc1bc9 100644 --- a/widget/src/windows/nsWindow.h +++ b/widget/src/windows/nsWindow.h @@ -61,6 +61,7 @@ class nsNativeDragTarget; class nsIRollupListener; +class nsIMenuBar; class nsIFile; class imgIContainer; @@ -189,7 +190,7 @@ public: NS_IMETHOD ScrollRect(nsRect &aRect, PRInt32 aDx, PRInt32 aDy); NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/xpwidgets/nsBaseWidget.h b/widget/src/xpwidgets/nsBaseWidget.h index 7467b0d0d7ec..4829649c7d2c 100644 --- a/widget/src/xpwidgets/nsBaseWidget.h +++ b/widget/src/xpwidgets/nsBaseWidget.h @@ -136,7 +136,6 @@ public: virtual void ConvertToDeviceCoordinates(nscoord &aX,nscoord &aY) {} virtual void FreeNativeData(void * data, PRUint32 aDataType) {} NS_IMETHOD BeginResizeDrag(nsGUIEvent* aEvent, PRInt32 aHorizontal, PRInt32 aVertical); - virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) { return NS_ERROR_NOT_IMPLEMENTED; } protected: diff --git a/widget/tests/Makefile.in b/widget/tests/Makefile.in index 4bddadfeb530..8a5ec7f53ee0 100644 --- a/widget/tests/Makefile.in +++ b/widget/tests/Makefile.in @@ -48,10 +48,5 @@ _TEST_FILES = test_bug343416.xul \ test_keycodes.xul \ $(NULL) -ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) -_TEST_FILES += native_menus_window.xul \ - test_native_menus.xul -endif - libs:: $(_TEST_FILES) $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir) diff --git a/widget/tests/native_menus_window.xul b/widget/tests/native_menus_window.xul deleted file mode 100644 index 1b68e3c4f7a7..000000000000 --- a/widget/tests/native_menus_window.xul +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/widget/tests/test_native_menus.xul b/widget/tests/test_native_menus.xul deleted file mode 100644 index ac6887170607..000000000000 --- a/widget/tests/test_native_menus.xul +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - Native menu system tests - - - - diff --git a/xpfe/appshell/src/Makefile.in b/xpfe/appshell/src/Makefile.in index 0e2eaf312fa5..65b6f346e726 100644 --- a/xpfe/appshell/src/Makefile.in +++ b/xpfe/appshell/src/Makefile.in @@ -103,3 +103,4 @@ EXTRA_DSO_LDOPTS = \ $(NULL) include $(topsrcdir)/config/rules.mk + diff --git a/xpfe/appshell/src/nsWebShellWindow.cpp b/xpfe/appshell/src/nsWebShellWindow.cpp index 9b7149bd487b..f83abc822596 100644 --- a/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/xpfe/appshell/src/nsWebShellWindow.cpp @@ -109,8 +109,8 @@ #include "nsIMarkupDocumentViewer.h" #include "nsIFocusEventSuppressor.h" -#ifdef XP_MACOSX -#include "nsINativeMenuService.h" +#if defined(XP_MACOSX) +#include "nsIMenuBar.h" #define USE_NATIVE_MENUS #endif @@ -122,6 +122,9 @@ static PRUint32 gWebShellWindowCount = 0; /* Define Class IDs */ static NS_DEFINE_CID(kWindowCID, NS_WINDOW_CID); +#include "nsWidgetsCID.h" +static NS_DEFINE_CID(kMenuBarCID, NS_MENUBAR_CID); + #define SIZE_PERSISTENCE_TIMEOUT 500 // msec nsWebShellWindow::nsWebShellWindow() : nsXULWindow() @@ -549,17 +552,23 @@ static void LoadNativeMenus(nsIDOMDocument *aDOMDoc, nsIWidget *aParentWindow) aDOMDoc->GetElementsByTagNameNS(NS_LITERAL_STRING("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"), NS_LITERAL_STRING("menubar"), getter_AddRefs(menubarElements)); - + nsCOMPtr menubarNode; if (menubarElements) menubarElements->Item(0, getter_AddRefs(menubarNode)); + if (!menubarNode) return; - nsCOMPtr nms = do_GetService("@mozilla.org/widget/nativemenuservice;1"); - nsCOMPtr menubarContent(do_QueryInterface(menubarNode)); - if (nms && menubarContent) - nms->CreateNativeMenuBar(aParentWindow, menubarContent); + nsCOMPtr pnsMenuBar = do_CreateInstance(kMenuBarCID); + if (!pnsMenuBar) + return; + + pnsMenuBar->Create(aParentWindow); + + // fake event + nsMenuEvent fake(PR_TRUE, 0, nsnull); + pnsMenuBar->MenuConstruct(fake, aParentWindow, menubarNode); } #endif From 8c4bd172af82db3d3ac50326109bd65e217e08b1 Mon Sep 17 00:00:00 2001 From: Mats Palmgren Date: Fri, 27 Jun 2008 16:04:19 +0200 Subject: [PATCH 25/98] Remove the element from the id map when it's removed from the document. b=441994 r+sr=roc --- content/xul/document/src/nsXULDocument.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/content/xul/document/src/nsXULDocument.cpp b/content/xul/document/src/nsXULDocument.cpp index 7a5eb983a0c6..94d6be477ee1 100644 --- a/content/xul/document/src/nsXULDocument.cpp +++ b/content/xul/document/src/nsXULDocument.cpp @@ -1740,8 +1740,11 @@ nsXULDocument::RemoveSubtreeFromDocument(nsIContent* aElement) return rv; } - // 2. Remove the element from the resource-to-element map + // 2. Remove the element from the resource-to-element map. + // Also remove it from the id map, since we added it in + // AddElementToDocumentPre(). RemoveElementFromRefMap(aElement); + RemoveFromIdTable(aElement); // 3. If the element is a 'command updater', then remove the // element from the document's command dispatcher. From 654875982ba3e9fb35ed61c86577d93c993c7cbc Mon Sep 17 00:00:00 2001 From: Kai Engert Date: Fri, 27 Jun 2008 16:28:08 +0200 Subject: [PATCH 26/98] Bug 426555, nsClientAuthRememberService must be refcounted and implement nsISupportsWeakReference r+sr=mrbkap --- .../manager/ssl/src/nsClientAuthRemember.cpp | 5 +++-- security/manager/ssl/src/nsClientAuthRemember.h | 4 +++- security/manager/ssl/src/nsNSSComponent.cpp | 17 ++++++++++++----- security/manager/ssl/src/nsNSSComponent.h | 2 +- security/manager/ssl/src/nsNSSIOLayer.cpp | 10 ++-------- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/security/manager/ssl/src/nsClientAuthRemember.cpp b/security/manager/ssl/src/nsClientAuthRemember.cpp index fcb3ebc14552..9e4cbbfa2bce 100644 --- a/security/manager/ssl/src/nsClientAuthRemember.cpp +++ b/security/manager/ssl/src/nsClientAuthRemember.cpp @@ -58,8 +58,9 @@ #include "nsNSSCleaner.h" NSSCleanupAutoPtrClass(CERTCertificate, CERT_DestroyCertificate) -NS_IMPL_THREADSAFE_ISUPPORTS1(nsClientAuthRememberService, - nsIObserver) +NS_IMPL_THREADSAFE_ISUPPORTS2(nsClientAuthRememberService, + nsIObserver, + nsISupportsWeakReference) nsClientAuthRememberService::nsClientAuthRememberService() { diff --git a/security/manager/ssl/src/nsClientAuthRemember.h b/security/manager/ssl/src/nsClientAuthRemember.h index efa7c959f599..cb3193f4f421 100644 --- a/security/manager/ssl/src/nsClientAuthRemember.h +++ b/security/manager/ssl/src/nsClientAuthRemember.h @@ -46,6 +46,7 @@ #include "nsAutoPtr.h" #include "nsNSSCertificate.h" #include "nsString.h" +#include "nsWeakReference.h" #include "prmon.h" class nsClientAuthRemember @@ -138,7 +139,8 @@ class nsClientAuthRememberEntry : public PLDHashEntryHdr nsCString mHostWithCert; }; -class nsClientAuthRememberService : public nsIObserver +class nsClientAuthRememberService : public nsIObserver, + public nsSupportsWeakReference { public: NS_DECL_ISUPPORTS diff --git a/security/manager/ssl/src/nsNSSComponent.cpp b/security/manager/ssl/src/nsNSSComponent.cpp index f180f1d121ba..70582f690951 100644 --- a/security/manager/ssl/src/nsNSSComponent.cpp +++ b/security/manager/ssl/src/nsNSSComponent.cpp @@ -296,8 +296,10 @@ nsNSSComponent::nsNSSComponent() memset(&mIdentityInfoCallOnce, 0, sizeof(PRCallOnceType)); nsSSLIOLayerHelpers::Init(); - mClientAuthRememberService.Init(); - + mClientAuthRememberService = new nsClientAuthRememberService; + if (mClientAuthRememberService) + mClientAuthRememberService->Init(); + NS_ASSERTION( (0 == mInstanceCount), "nsNSSComponent is a singleton, but instantiated multiple times!"); ++mInstanceCount; hashTableCerts = nsnull; @@ -1684,7 +1686,9 @@ nsNSSComponent::ShutdownNSS() ShutdownSmartCardThreads(); SSL_ClearSessionCache(); - mClientAuthRememberService.ClearRememberedDecisions(); + if (mClientAuthRememberService) { + mClientAuthRememberService->ClearRememberedDecisions(); + } UnloadLoadableRoots(); CleanupIdentityInfo(); PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("evaporating psm resources\n")); @@ -2150,7 +2154,9 @@ void nsNSSComponent::ShowAlert(AlertIdentifier ai) nsresult nsNSSComponent::LogoutAuthenticatedPK11() { - mClientAuthRememberService.ClearRememberedDecisions(); + if (mClientAuthRememberService) { + mClientAuthRememberService->ClearRememberedDecisions(); + } return mShutdownObjectList->doPK11Logout(); } @@ -2416,7 +2422,8 @@ NS_IMETHODIMP nsNSSComponent::GetClientAuthRememberService(nsClientAuthRememberService **cars) { NS_ENSURE_ARG_POINTER(cars); - *cars = &mClientAuthRememberService; + NS_IF_ADDREF(*cars = mClientAuthRememberService); + return NS_OK; } //--------------------------------------------- diff --git a/security/manager/ssl/src/nsNSSComponent.h b/security/manager/ssl/src/nsNSSComponent.h index eada819c8600..3f64dd88a1fc 100644 --- a/security/manager/ssl/src/nsNSSComponent.h +++ b/security/manager/ssl/src/nsNSSComponent.h @@ -328,7 +328,7 @@ private: nsSSLThread *mSSLThread; nsCertVerificationThread *mCertVerificationThread; nsNSSHttpInterface mHttpForNSS; - nsClientAuthRememberService mClientAuthRememberService; + nsRefPtr mClientAuthRememberService; static PRStatus PR_CALLBACK IdentityInfoInit(void); PRCallOnceType mIdentityInfoCallOnce; diff --git a/security/manager/ssl/src/nsNSSIOLayer.cpp b/security/manager/ssl/src/nsNSSIOLayer.cpp index 0a4882189ad7..25e9798e9552 100644 --- a/security/manager/ssl/src/nsNSSIOLayer.cpp +++ b/security/manager/ssl/src/nsNSSIOLayer.cpp @@ -2622,15 +2622,9 @@ SECStatus nsNSS_SSLGetClientAuthData(void* arg, PRFileDesc* socket, nsresult rv; NS_DEFINE_CID(nssComponentCID, NS_NSSCOMPONENT_CID); nsCOMPtr nssComponent(do_GetService(nssComponentCID, &rv)); - // it's ok to keep our raw pointer to the nsClientAuthRememberService - // as long as we hold the reference to the nssComponent. - // Yes, this sucks, but this is branch only code, - // and I don't want to deal with new interfaces, and want to use full - // typed pointers. - // Note nsINSSComponent is NOT exposed to anywhere outside of PSM. - nsClientAuthRememberService *cars = nsnull; + nsRefPtr cars; if (nssComponent) { - nssComponent->GetClientAuthRememberService(&cars); + nssComponent->GetClientAuthRememberService(getter_AddRefs(cars)); } PRBool hasRemembered = PR_FALSE; From ec546c652c067e71e60b119bb47a8afa51139636 Mon Sep 17 00:00:00 2001 From: Shawn Wilsher Date: Fri, 27 Jun 2008 11:59:14 -0400 Subject: [PATCH 27/98] Bug 441716 - test_retention_is_0_closes.xul is flakey on linux The test now listens for a "domwindowclosed" notification from the window watch service instead of using a timer which is unreliable. Upon receiving the notification, it dispatches an event to the main thread to perform the proper checks to allow time for any other events listening to that topic to process. This also adds a utils.js file that download manager chrome tests can use. So far, only one function has been added that will execute a function on the main thread; executeSoon. r=gavin --- .../downloads/tests/chrome/Makefile.in | 1 + .../chrome/test_retention_is_0_closes.xul | 55 +++++++++-------- .../mozapps/downloads/tests/chrome/utils.js | 60 +++++++++++++++++++ 3 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 toolkit/mozapps/downloads/tests/chrome/utils.js diff --git a/toolkit/mozapps/downloads/tests/chrome/Makefile.in b/toolkit/mozapps/downloads/tests/chrome/Makefile.in index d9c750de851e..ea5af1dd276c 100644 --- a/toolkit/mozapps/downloads/tests/chrome/Makefile.in +++ b/toolkit/mozapps/downloads/tests/chrome/Makefile.in @@ -61,6 +61,7 @@ _CHROME_FILES = \ test_space_key_pauses_resumes.xul \ test_ui_stays_open_on_alert_clickback.xul \ test_bug_429247.xul \ + utils.js \ $(NULL) ifneq (,$(filter cocoa, $(MOZ_WIDGET_TOOLKIT))) diff --git a/toolkit/mozapps/downloads/tests/chrome/test_retention_is_0_closes.xul b/toolkit/mozapps/downloads/tests/chrome/test_retention_is_0_closes.xul index ade9fdf92ce8..04d919f64724 100644 --- a/toolkit/mozapps/downloads/tests/chrome/test_retention_is_0_closes.xul +++ b/toolkit/mozapps/downloads/tests/chrome/test_retention_is_0_closes.xul @@ -53,13 +53,21 @@ src="chrome://mochikit/content/MochiKit/packed.js"/> + + +

+ +

+  
+

From 20070e579d50772e0c7704bd4f326e25aa07b95a Mon Sep 17 00:00:00 2001
From: Steven Michaud 
Date: Fri, 27 Jun 2008 12:11:24 -0500
Subject: [PATCH 29/98] Crash when closing pop-under window without focusing
 it. b=433644 r=josh sr=roc

---
 widget/src/cocoa/nsChildView.mm | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm
index 2cc6e1109a49..81d3aa164846 100644
--- a/widget/src/cocoa/nsChildView.mm
+++ b/widget/src/cocoa/nsChildView.mm
@@ -424,7 +424,18 @@ nsChildView::~nsChildView()
     childView->mParentWidget = nsnull;
   }
 
-  TearDownView(); // should have already been done from Destroy
+  NS_WARN_IF_FALSE(mOnDestroyCalled, "nsChildView object destroyed without calling Destroy()");
+
+  // An nsChildView object that was in use can be destroyed without Destroy()
+  // ever being called on it.  So we also need to do a quick, safe cleanup
+  // here (it's too late to just call Destroy(), which can cause crashes).
+  // It's particularly important to make sure widgetDestroyed is called on our
+  // mView -- this method NULLs mView's mGeckoChild, and NULL checks on
+  // mGeckoChild are used throughout the ChildView class to tell if it's safe
+  // to use a ChildView object.
+  [mView widgetDestroyed]; // Safe if mView is nil.
+  mParentWidget = nil;
+  TearDownView(); // Safe if called twice.
 }
 
 

From a93b574466cfd19e45108f52a82d8b34d2a6be4d Mon Sep 17 00:00:00 2001
From: Johnny Stenback 
Date: Fri, 27 Jun 2008 12:27:40 -0700
Subject: [PATCH 30/98] First part of the fix for bug 435334. Move the JVM auth
 tools from the OJI code into the plugin code. The code in question is in no
 way dependent on OJI and will be completely removed once the NPAPI has
 support for what this code offers. r=joshmoz@gmail.com, sr=jonas@sicking.cc

--HG--
rename : modules/oji/public/nsIJVMAuthTools.idl => modules/plugin/base/public/nsIJVMAuthTools.idl
rename : modules/oji/src/nsJVMAuthTools.cpp => modules/plugin/base/src/nsJVMAuthTools.cpp
rename : modules/oji/src/nsJVMAuthTools.h => modules/plugin/base/src/nsJVMAuthTools.h
---
 modules/oji/public/Makefile.in                     |  1 -
 modules/oji/src/Makefile.in                        |  1 -
 modules/oji/src/nsCJVMManagerFactory.cpp           |  8 --------
 modules/plugin/base/public/Makefile.in             |  1 +
 .../base}/public/nsIJVMAuthTools.idl               |  0
 modules/plugin/base/src/Makefile.in                |  1 +
 .../{oji => plugin/base}/src/nsJVMAuthTools.cpp    |  0
 modules/{oji => plugin/base}/src/nsJVMAuthTools.h  |  0
 modules/plugin/base/src/nsPluginModule.cpp         | 14 +++++++++++---
 9 files changed, 13 insertions(+), 13 deletions(-)
 rename modules/{oji => plugin/base}/public/nsIJVMAuthTools.idl (100%)
 rename modules/{oji => plugin/base}/src/nsJVMAuthTools.cpp (100%)
 rename modules/{oji => plugin/base}/src/nsJVMAuthTools.h (100%)

diff --git a/modules/oji/public/Makefile.in b/modules/oji/public/Makefile.in
index 1b7f7e386614..76cbe78a0adc 100644
--- a/modules/oji/public/Makefile.in
+++ b/modules/oji/public/Makefile.in
@@ -48,7 +48,6 @@ GRE_MODULE	= 1
 XPIDLSRCS	= \
 		nsIJVMManager.idl \
 		nsIJVMPluginInstance.idl \
-		nsIJVMAuthTools.idl \
 		nsIJVMConfigManager.idl \
 		$(NULL)
 
diff --git a/modules/oji/src/Makefile.in b/modules/oji/src/Makefile.in
index 777719429c6e..7951f13ec67e 100644
--- a/modules/oji/src/Makefile.in
+++ b/modules/oji/src/Makefile.in
@@ -93,7 +93,6 @@ CPPSRCS		= \
 		nsCJVMManagerFactory.cpp \
 		nsJVMConfigManager.cpp \
 		lcglue.cpp \
-		nsJVMAuthTools.cpp \
 		$(NULL)
 
 ifeq ($(TARGET_MD_ARCH), unix)
diff --git a/modules/oji/src/nsCJVMManagerFactory.cpp b/modules/oji/src/nsCJVMManagerFactory.cpp
index 6aabd541004f..896e0eacb353 100644
--- a/modules/oji/src/nsCJVMManagerFactory.cpp
+++ b/modules/oji/src/nsCJVMManagerFactory.cpp
@@ -38,7 +38,6 @@
 
 #include "nsIModule.h"
 #include "nsIGenericFactory.h"
-#include "nsJVMAuthTools.h"
 #include "nsJVMManager.h"
 #include "nsJVMConfigManager.h"
 
@@ -55,7 +54,6 @@
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsJVMConfigManagerUnix)
 #endif
 NS_GENERIC_AGGREGATED_CONSTRUCTOR(nsJVMManager)
-NS_GENERIC_AGGREGATED_CONSTRUCTOR(nsJVMAuthTools)
 
 // The list of components we register
 static const nsModuleComponentInfo components[] = 
@@ -65,12 +63,6 @@ static const nsModuleComponentInfo components[] =
       "@mozilla.org/oji/jvm-mgr;1", 
       nsJVMManagerConstructor
     },
-
-    { "JVM Authentication Service", 
-      NS_JVMAUTHTOOLS_CID,  
-      "@mozilla.org/oji/jvm-auth-tools;1", 
-      nsJVMAuthToolsConstructor
-    },
 #ifdef XP_UNIX
     { "JVM Config Manager",
       NS_JVMCONFIGMANAGER_CID,
diff --git a/modules/plugin/base/public/Makefile.in b/modules/plugin/base/public/Makefile.in
index 016da6942498..b9a9f69d562d 100644
--- a/modules/plugin/base/public/Makefile.in
+++ b/modules/plugin/base/public/Makefile.in
@@ -91,6 +91,7 @@ XPIDLSRCS 	= \
 		nsPIPluginInstancePeer.idl \
 		nsIPluginHost.idl \
 		nsIPluginDocument.idl \
+		nsIJVMAuthTools.idl \
 		$(NULL)
 
 ifeq ($(OS_ARCH),OS2)
diff --git a/modules/oji/public/nsIJVMAuthTools.idl b/modules/plugin/base/public/nsIJVMAuthTools.idl
similarity index 100%
rename from modules/oji/public/nsIJVMAuthTools.idl
rename to modules/plugin/base/public/nsIJVMAuthTools.idl
diff --git a/modules/plugin/base/src/Makefile.in b/modules/plugin/base/src/Makefile.in
index e49cbd58422a..a80f5643e162 100644
--- a/modules/plugin/base/src/Makefile.in
+++ b/modules/plugin/base/src/Makefile.in
@@ -91,6 +91,7 @@ CPPSRCS		= \
 		nsPluginModule.cpp \
 		nsPluginInstancePeer.cpp \
 		nsJSNPRuntime.cpp \
+		nsJVMAuthTools.cpp \
 		$(NULL)
 
 ifeq ($(OS_ARCH), BeOS)
diff --git a/modules/oji/src/nsJVMAuthTools.cpp b/modules/plugin/base/src/nsJVMAuthTools.cpp
similarity index 100%
rename from modules/oji/src/nsJVMAuthTools.cpp
rename to modules/plugin/base/src/nsJVMAuthTools.cpp
diff --git a/modules/oji/src/nsJVMAuthTools.h b/modules/plugin/base/src/nsJVMAuthTools.h
similarity index 100%
rename from modules/oji/src/nsJVMAuthTools.h
rename to modules/plugin/base/src/nsJVMAuthTools.h
diff --git a/modules/plugin/base/src/nsPluginModule.cpp b/modules/plugin/base/src/nsPluginModule.cpp
index 1b0e3e5f614d..0519fcecac43 100644
--- a/modules/plugin/base/src/nsPluginModule.cpp
+++ b/modules/plugin/base/src/nsPluginModule.cpp
@@ -41,20 +41,28 @@
 #include "nsPluginsCID.h"
 #include "nsPluginHostImpl.h"
 #include "ns4xPlugin.h"
+#include "nsJVMAuthTools.h"
 
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsPluginHostImpl,
                                          nsPluginHostImpl::GetInst)
+NS_GENERIC_AGGREGATED_CONSTRUCTOR(nsJVMAuthTools)
 
 static const nsModuleComponentInfo gComponentInfo[] = {
   { "Plugin Host",
     NS_PLUGIN_HOST_CID,
     "@mozilla.org/plugin/host;1",
-    nsPluginHostImplConstructor },
-
+    nsPluginHostImplConstructor
+  },
   { "Plugin Manager",
     NS_PLUGINMANAGER_CID,
     "@mozilla.org/plugin/manager;1",
-    nsPluginHostImplConstructor },
+    nsPluginHostImplConstructor
+  },
+  { "JVM Authentication Service", 
+    NS_JVMAUTHTOOLS_CID,  
+    "@mozilla.org/oji/jvm-auth-tools;1", 
+    nsJVMAuthToolsConstructor
+  }
 };
 
 NS_IMPL_NSGETMODULE(nsPluginModule, gComponentInfo)

From 8e132b5c6f56bf33538986c88c9b54179f0ea592 Mon Sep 17 00:00:00 2001
From: Johnny Stenback 
Date: Fri, 27 Jun 2008 12:37:21 -0700
Subject: [PATCH 31/98] Fixing bug 421833. Deal better with plugin frames going
 away while initializing a plugin. r+sr=jonas@sicking.cc

---
 layout/generic/nsObjectFrame.cpp | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/layout/generic/nsObjectFrame.cpp b/layout/generic/nsObjectFrame.cpp
index d70e2df879b0..4bf2a67f550f 100644
--- a/layout/generic/nsObjectFrame.cpp
+++ b/layout/generic/nsObjectFrame.cpp
@@ -860,6 +860,8 @@ nsObjectFrame::InstantiatePlugin(nsIPluginHost* aPluginHost,
                                                 mInstanceOwner);
   }
 
+  // Note that |this| may very well be destroyed already!
+
   if (appShell) {
     appShell->ResumeNative();
   }
@@ -1598,7 +1600,8 @@ nsObjectFrame::HandleEvent(nsPresContext* aPresContext,
   return rv;
 }
 
-nsresult nsObjectFrame::GetPluginInstance(nsIPluginInstance*& aPluginInstance)
+nsresult
+nsObjectFrame::GetPluginInstance(nsIPluginInstance*& aPluginInstance)
 {
   aPluginInstance = nsnull;
 
@@ -1655,9 +1658,16 @@ nsObjectFrame::Instantiate(nsIChannel* aChannel, nsIStreamListener** aStreamList
   // This must be done before instantiating the plugin
   FixupWindow(mRect.Size());
 
+  nsWeakFrame weakFrame(this);
+
   NS_ASSERTION(!mPreventInstantiation, "Say what?");
   mPreventInstantiation = PR_TRUE;
   rv = pluginHost->InstantiatePluginForChannel(aChannel, mInstanceOwner, aStreamListener);
+
+  if (!weakFrame.IsAlive()) {
+    return NS_ERROR_NOT_AVAILABLE;
+  }
+
   NS_ASSERTION(mPreventInstantiation,
                "Instantiation should still be prevented!");
   mPreventInstantiation = PR_FALSE;
@@ -1683,6 +1693,8 @@ nsObjectFrame::Instantiate(const char* aMimeType, nsIURI* aURI)
   nsresult rv = PrepareInstanceOwner();
   NS_ENSURE_SUCCESS(rv, rv);
 
+  nsWeakFrame weakFrame(this);
+
   // This must be done before instantiating the plugin
   FixupWindow(mRect.Size());
 
@@ -1696,9 +1708,18 @@ nsObjectFrame::Instantiate(const char* aMimeType, nsIURI* aURI)
 
   rv = InstantiatePlugin(pluginHost, aMimeType, aURI);
 
+  if (!weakFrame.IsAlive()) {
+    return NS_ERROR_NOT_AVAILABLE;
+  }
+
   // finish up
   if (NS_SUCCEEDED(rv)) {
     TryNotifyContentObjectWrapper();
+
+    if (!weakFrame.IsAlive()) {
+      return NS_ERROR_NOT_AVAILABLE;
+    }
+
     CallSetWindow();
   }
 

From 3541ec9b61657c4a3c6e662c1d205c42883cddb6 Mon Sep 17 00:00:00 2001
From: Taras Glek 
Date: Fri, 27 Jun 2008 12:39:29 -0700
Subject: [PATCH 32/98] bug 442331: Added -fno-exceptions and -fno-rtti to
 Makefile.ref

---
 js/src/config.mk | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/js/src/config.mk b/js/src/config.mk
index 8ab068d43ee0..451a77ac964f 100644
--- a/js/src/config.mk
+++ b/js/src/config.mk
@@ -126,8 +126,8 @@ OPTIMIZER  = -O2 -GL
 INTERP_OPTIMIZER = -O2 -GL
 LDFLAGS    += -LTCG
 else
-OPTIMIZER  = -Os
-INTERP_OPTIMIZER = -Os
+OPTIMIZER  = -Os -fno-exceptions -fno-rtti
+INTERP_OPTIMIZER = -Os -fno-exceptions -fno-rtti
 endif
 DEFINES    += -UDEBUG -DNDEBUG -UDEBUG_$(USER)
 OBJDIR_TAG = _OPT
@@ -136,8 +136,8 @@ ifdef USE_MSVC
 OPTIMIZER  = -Zi
 INTERP_OPTIMIZER = -Zi
 else
-OPTIMIZER  = -g3
-INTERP_OPTIMIZER = -g3
+OPTIMIZER  = -g3 -fno-exceptions -fno-rtti
+INTERP_OPTIMIZER = -g3 -fno-exceptions -fno-rtti
 endif
 DEFINES    += -DDEBUG -DDEBUG_$(USER)
 OBJDIR_TAG = _DBG

From c7ccc0b721671fa5595553d442ef55f4b3051b04 Mon Sep 17 00:00:00 2001
From: Johnny Stenback 
Date: Fri, 27 Jun 2008 12:54:27 -0700
Subject: [PATCH 33/98] Fixing bug 438830. Prevent instantiation of a plugin if
 it's already been instantiated. r+sr=jonas@sicking.cc

---
 content/base/src/nsObjectLoadingContent.cpp | 20 ++++++++++++++++----
 content/base/src/nsObjectLoadingContent.h   |  8 ++++----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/content/base/src/nsObjectLoadingContent.cpp b/content/base/src/nsObjectLoadingContent.cpp
index 0ca670a11673..71719b725a90 100644
--- a/content/base/src/nsObjectLoadingContent.cpp
+++ b/content/base/src/nsObjectLoadingContent.cpp
@@ -762,15 +762,27 @@ nsObjectLoadingContent::HasNewFrame(nsIObjectFrame* aFrame)
 {
   LOG(("OBJLC [%p]: Got frame %p (mInstantiating=%i)\n", this, aFrame,
        mInstantiating));
-  if (!mInstantiating && aFrame && mType == eType_Plugin) {
+
+  // "revoke" any existing instantiate event as it likely has out of
+  // date data (frame pointer etc).
+  mPendingInstantiateEvent = nsnull;
+
+  nsCOMPtr instance;
+  aFrame->GetPluginInstance(*getter_AddRefs(instance));
+
+  if (instance) {
+    // The frame already has a plugin instance, that means the plugin
+    // has already been instantiated.
+
+    return NS_OK;
+  }
+
+  if (!mInstantiating && mType == eType_Plugin) {
     // Asynchronously call Instantiate
     // This can go away once plugin loading moves to content
     // This must be done asynchronously to ensure that the frame is correctly
     // initialized (has a view etc)
 
-    // "revoke" any existing instantiate event.
-    mPendingInstantiateEvent = nsnull;
-
     // When in a plugin document, the document will take care of calling
     // instantiate
     nsCOMPtr pDoc (do_QueryInterface(GetOurDocument()));
diff --git a/content/base/src/nsObjectLoadingContent.h b/content/base/src/nsObjectLoadingContent.h
index c5dffbe941ee..e8149a377ecd 100644
--- a/content/base/src/nsObjectLoadingContent.h
+++ b/content/base/src/nsObjectLoadingContent.h
@@ -54,10 +54,10 @@
 #include "nsIRunnable.h"
 #include "nsIChannelClassifier.h"
 
-struct nsAsyncInstantiateEvent;
-class  AutoNotifier;
-class  AutoFallback;
-class  AutoSetInstantiatingToFalse;
+class nsAsyncInstantiateEvent;
+class AutoNotifier;
+class AutoFallback;
+class AutoSetInstantiatingToFalse;
 
 /**
  * INVARIANTS OF THIS CLASS

From 161f55769a4a9419293f65fceb87ea54b4a76e33 Mon Sep 17 00:00:00 2001
From: Johnny Stenback 
Date: Fri, 27 Jun 2008 13:19:37 -0700
Subject: [PATCH 34/98] Landing fix for bug 319371. Fix how we call
 NPP_GetURLNotify() in cases where the network load fails. Patch by
 wbardwel@curl.com, r+sr=jst@mozilla.org

---
 modules/plugin/base/src/nsPluginHostImpl.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/plugin/base/src/nsPluginHostImpl.cpp b/modules/plugin/base/src/nsPluginHostImpl.cpp
index 4d1914c2389b..a315fad0d134 100644
--- a/modules/plugin/base/src/nsPluginHostImpl.cpp
+++ b/modules/plugin/base/src/nsPluginHostImpl.cpp
@@ -2384,7 +2384,7 @@ NS_IMETHODIMP nsPluginStreamListenerPeer::OnStopRequest(nsIRequest *request,
   // Set the content type to ensure we don't pass null to the plugin
   nsCAutoString aContentType;
   rv = channel->GetContentType(aContentType);
-  if (NS_FAILED(rv))
+  if (NS_FAILED(rv) && !mRequestFailed)
     return rv;
 
   if (!aContentType.IsEmpty())

From 0d4abe01521a5322b376f634b2867a1a0542160f Mon Sep 17 00:00:00 2001
From: Steven Michaud 
Date: Fri, 27 Jun 2008 15:31:54 -0500
Subject: [PATCH 35/98] Left-clicking on Customize Toolbar popup doesn't give
 app focus to Firefox. b=434097 r=josh sr=roc

---
 widget/src/cocoa/nsCocoaWindow.mm | 55 ++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 22 deletions(-)

diff --git a/widget/src/cocoa/nsCocoaWindow.mm b/widget/src/cocoa/nsCocoaWindow.mm
index 704d23b63453..009c64689fc1 100644
--- a/widget/src/cocoa/nsCocoaWindow.mm
+++ b/widget/src/cocoa/nsCocoaWindow.mm
@@ -2249,28 +2249,31 @@ already_AddRefed GetFocusedElement()
         [target scrollWheel:anEvent];
         break;
       case NSLeftMouseDown:
-        [target mouseDown:anEvent];
-        // If we're in a context menu we don't want the OS to send the coming
-        // NSLeftMouseUp event to NSApp via the window server, but we do want
-        // our ChildView to receive an NSLeftMouseUp event (and to send a Gecko
-        // NS_MOUSE_BUTTON_UP event to the corresponding nsChildView object).
-        // If our NSApp isn't active (i.e. if we're in a context menu raised
-        // by a right mouse down event) when it receives the coming NSLeftMouseUp
-        // via the window server, our app will (in effect) become partially
-        // activated, which has strange side effects:  For example, if another
-        // app's window had the focus, that window will lose the focus and the
-        // other app's main menu will be completely disabled (though it will
-        // continue to be displayed).
-        // A side effect of not allowing the coming NSLeftMouseUp event to be
-        // sent to NSApp via the window server is that our custom context
-        // menus will roll up whenever the user left-clicks on them, whether
-        // or not the left-click hit an active menu item.  This is how native
-        // context menus behave, but wasn't how our custom context menus
-        // behaved previously (on the trunk or e.g. in Firefox 2.0.0.4).
-        // If our ChildView's corresponding nsChildView object doesn't
-        // dispatch an NS_MOUSE_BUTTON_UP event, none of our active menu items
-        // will "work" on an NSLeftMouseUp.
-        if (mIsContextMenu && ![NSApp isActive]) {
+        if ([NSApp isActive]) {
+          [target mouseDown:anEvent];
+        } else if (mIsContextMenu) {
+          [target mouseDown:anEvent];
+          // If we're in a context menu and our NSApp isn't active (i.e. if
+          // we're in a context menu raised by a right mouse-down event), we
+          // don't want the OS to send the coming NSLeftMouseUp event to NSApp
+          // via the window server, but we do want our ChildView to receive an
+          // NSLeftMouseUp event (and to send a Gecko NS_MOUSE_BUTTON_UP event
+          // to the corresponding nsChildView object).  If our NSApp isn't
+          // active when it receives the coming NSLeftMouseUp via the window
+          // server, our app will (in effect) become partially activated,
+          // which has strange side effects:  For example, if another app's
+          // window had the focus, that window will lose the focus and the
+          // other app's main menu will be completely disabled (though it will
+          // continue to be displayed).
+          // A side effect of not allowing the coming NSLeftMouseUp event to be
+          // sent to NSApp via the window server is that our custom context
+          // menus will roll up whenever the user left-clicks on them, whether
+          // or not the left-click hit an active menu item.  This is how native
+          // context menus behave, but wasn't how our custom context menus
+          // behaved previously (on the trunk or e.g. in Firefox 2.0.0.4).
+          // If our ChildView's corresponding nsChildView object doesn't
+          // dispatch an NS_MOUSE_BUTTON_UP event, none of our active menu items
+          // will "work" on an NSLeftMouseUp.
           NSEvent *newEvent = [NSEvent mouseEventWithType:NSLeftMouseUp
                                                  location:windowLocation
                                             modifierFlags:[anEvent modifierFlags]
@@ -2282,6 +2285,14 @@ already_AddRefed GetFocusedElement()
                                                  pressure:0.0];
           [target mouseUp:newEvent];
           RollUpPopups();
+        } else {
+          // If our NSApp isn't active and we're not a context menu (i.e. if
+          // we're an ordinary popup window), activate us before sending the
+          // event to its target.  This prevents us from being used in the
+          // background, and resolves bmo bug 434097 (another app focus
+          // wierdness bug).
+          [NSApp activateIgnoringOtherApps:YES];
+          [target mouseDown:anEvent];
         }
         break;
       case NSLeftMouseUp:

From 4fa455df653e2bdb43c396851ac0770116b4d1fa Mon Sep 17 00:00:00 2001
From: Steven Michaud 
Date: Fri, 27 Jun 2008 15:48:03 -0500
Subject: [PATCH 36/98] Keyboard shortcuts sometimes fail. b=428405 r=josh
 sr=roc

---
 widget/src/cocoa/nsChildView.mm | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm
index 81d3aa164846..60b23c03bf99 100644
--- a/widget/src/cocoa/nsChildView.mm
+++ b/widget/src/cocoa/nsChildView.mm
@@ -5165,12 +5165,16 @@ static BOOL keyUpAlreadySentKeyDown = NO;
 
   nsAutoRetainCocoaObject kungFuDeathGrip(self);
 
-  // if we aren't the first responder, pass the event on
+  // If we're not the first responder and the first responder is an NSView
+  // object, pass the event on.  Otherwise (if, for example, the first
+  // responder is an NSWindow object) we should trust the OS to have called
+  // us correctly.
   id firstResponder = [[self window] firstResponder];
   if (firstResponder != self) {
+    // Special handling if the other first responder is a ChildView.
     if ([firstResponder isKindOfClass:[ChildView class]])
       return [(ChildView *)firstResponder performKeyEquivalent:theEvent];
-    else
+    if ([firstResponder isKindOfClass:[NSView class]])
       return [super performKeyEquivalent:theEvent];
   }
 

From e21f72ead88c203aeb26532e0cc081b26120aef9 Mon Sep 17 00:00:00 2001
From: Shawn Wilsher 
Date: Mon, 16 Jun 2008 12:58:28 -0400
Subject: [PATCH 37/98] Bug 438653 - move remaining browser tests to
 xpcshell/chrome tests This moves the two remaining browser tests in
 toolkit/mozapps/downloads/tests to an xpcshell test and a chrome test.  The
 reason for this change is to remove the dependency of the browser from
 download manager tests since it is a toolkit component. This version
 unregisters the factory that we register to override the prompt service in
 test_bug_412360.xul so we no longer leak. r=gavin

--HG--
rename : toolkit/mozapps/downloads/tests/browser/browser_bug_406857.js => toolkit/components/downloads/test/unit/test_bug_406857.js
rename : toolkit/mozapps/downloads/tests/browser/browser_bug_412360.js => toolkit/mozapps/downloads/tests/chrome/test_bug_412360.xul
---
 .../downloads/test/unit/test_bug_406857.js}   |  41 +----
 toolkit/mozapps/downloads/tests/Makefile.in   |   1 -
 .../downloads/tests/browser/Makefile.in       |  54 -------
 .../downloads/tests/chrome/Makefile.in        |   1 +
 .../test_bug_412360.xul}                      | 142 ++++++++++++------
 5 files changed, 105 insertions(+), 134 deletions(-)
 rename toolkit/{mozapps/downloads/tests/browser/browser_bug_406857.js => components/downloads/test/unit/test_bug_406857.js} (72%)
 delete mode 100644 toolkit/mozapps/downloads/tests/browser/Makefile.in
 rename toolkit/mozapps/downloads/tests/{browser/browser_bug_412360.js => chrome/test_bug_412360.xul} (52%)

diff --git a/toolkit/mozapps/downloads/tests/browser/browser_bug_406857.js b/toolkit/components/downloads/test/unit/test_bug_406857.js
similarity index 72%
rename from toolkit/mozapps/downloads/tests/browser/browser_bug_406857.js
rename to toolkit/components/downloads/test/unit/test_bug_406857.js
index 9db3598167c6..9d9ff76d152f 100644
--- a/toolkit/mozapps/downloads/tests/browser/browser_bug_406857.js
+++ b/toolkit/components/downloads/test/unit/test_bug_406857.js
@@ -39,15 +39,12 @@
  * retrying the download.
  */
 
-function test()
+function run_test()
 {
   let dm = Cc["@mozilla.org/download-manager;1"].
            getService(Ci.nsIDownloadManager);
   let db = dm.DBConnection;
 
-  // Empty any old downloads
-  db.executeSimpleSQL("DELETE FROM moz_downloads");
-
   let stmt = db.createStatement(
     "INSERT INTO moz_downloads (source, target, state, referrer) " +
     "VALUES (?1, ?2, ?3, ?4)");
@@ -79,46 +76,22 @@ function test()
     {
       switch (aDownload.state) {
         case dm.DOWNLOAD_DOWNLOADING:
-          ok(aDownload.referrer.spec == referrer, "Got referrer on download");
+          do_check_eq(aDownload.referrer.spec, referrer);
           break;
         case dm.DOWNLOAD_FINISHED:
-          ok(aDownload.referrer.spec == referrer, "Got referrer on finish");
+          do_check_eq(aDownload.referrer.spec, referrer);
 
           dm.removeListener(listener);
-          obs.removeObserver(testObs, DLMGR_UI_DONE);
           try { file.remove(false); } catch(e) { /* stupid windows box */ }
-          finish();
+          do_test_finished();
           break;
       }
     }
   };
   dm.addListener(listener);
 
-  // Close the UI if necessary
-  let wm = Cc["@mozilla.org/appshell/window-mediator;1"].
-           getService(Ci.nsIWindowMediator);
-  let win = wm.getMostRecentWindow("Download:Manager");
-  if (win) win.close();
+  // Retry the download, and wait.
+  dm.retryDownload(1);
 
-  let obs = Cc["@mozilla.org/observer-service;1"].
-            getService(Ci.nsIObserverService);
-  const DLMGR_UI_DONE = "download-manager-ui-done";
-
-  let testObs = {
-    observe: function(aSubject, aTopic, aData) {
-      if (aTopic != DLMGR_UI_DONE)
-        return;
-
-      // Send the enter key to Download Manager to retry the download
-      let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
-      EventUtils.synthesizeKey("VK_ENTER", {}, win);
-    }
-  };
-  obs.addObserver(testObs, DLMGR_UI_DONE, false);
-
-  // Show the Download Manager UI
-  Cc["@mozilla.org/download-manager-ui;1"].
-  getService(Ci.nsIDownloadManagerUI).show();
-
-  waitForExplicitFinish();
+  do_test_pending();
 }
diff --git a/toolkit/mozapps/downloads/tests/Makefile.in b/toolkit/mozapps/downloads/tests/Makefile.in
index ef7541b491cc..a9da746819de 100644
--- a/toolkit/mozapps/downloads/tests/Makefile.in
+++ b/toolkit/mozapps/downloads/tests/Makefile.in
@@ -49,7 +49,6 @@ XPCSHELL_TESTS = \
   unit \
   $(NULL)
 
-DIRS += browser
 DIRS += chrome
 
 include $(topsrcdir)/config/rules.mk
diff --git a/toolkit/mozapps/downloads/tests/browser/Makefile.in b/toolkit/mozapps/downloads/tests/browser/Makefile.in
deleted file mode 100644
index 2665bc5a2057..000000000000
--- a/toolkit/mozapps/downloads/tests/browser/Makefile.in
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla code.
-#
-# The Initial Developer of the Original Code is
-# Mozilla Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2008
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#	  Shawn Wilsher  (Original Author)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH          = ../../../../..
-topsrcdir      = @top_srcdir@
-srcdir         = @srcdir@
-VPATH          = @srcdir@
-relativesrcdir = toolkit/mozapps/downloads/tests/browser
-
-include $(DEPTH)/config/autoconf.mk
-include $(topsrcdir)/config/rules.mk
-
-_BROWSER_FILES = \
-  browser_bug_406857.js \
-  browser_bug_412360.js \
-  $(NULL)
-
-libs:: $(_BROWSER_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
diff --git a/toolkit/mozapps/downloads/tests/chrome/Makefile.in b/toolkit/mozapps/downloads/tests/chrome/Makefile.in
index 1f87ca495f54..df1d3a2e0470 100644
--- a/toolkit/mozapps/downloads/tests/chrome/Makefile.in
+++ b/toolkit/mozapps/downloads/tests/chrome/Makefile.in
@@ -61,6 +61,7 @@ _CHROME_FILES = \
   test_select_all.xul \
   test_space_key_pauses_resumes.xul \
   test_ui_stays_open_on_alert_clickback.xul \
+  test_bug_412360.xul \
   test_bug_429247.xul \
   utils.js \
   $(NULL)
diff --git a/toolkit/mozapps/downloads/tests/browser/browser_bug_412360.js b/toolkit/mozapps/downloads/tests/chrome/test_bug_412360.xul
similarity index 52%
rename from toolkit/mozapps/downloads/tests/browser/browser_bug_412360.js
rename to toolkit/mozapps/downloads/tests/chrome/test_bug_412360.xul
index 3fbfd9b2cb9a..4afe47b5b47b 100644
--- a/toolkit/mozapps/downloads/tests/browser/browser_bug_412360.js
+++ b/toolkit/mozapps/downloads/tests/chrome/test_bug_412360.xul
@@ -1,3 +1,5 @@
+
+
+
+
+
+  
+
+  
+    

+ +

+  
+
From b55cdee42aabbc8a721eac8b4fee3b7410a3a208 Mon Sep 17 00:00:00 2001 From: Dave Camp Date: Fri, 27 Jun 2008 17:22:16 -0700 Subject: [PATCH 38/98] Bug 422264: retrieving iterator of applicationCache throws NS_ERROR_DOM_INVALID_STATE_ERR. r+sr=jst --- dom/src/offline/nsDOMOfflineResourceList.cpp | 13 +++--- dom/tests/mochitest/ajax/offline/Makefile.in | 1 + .../ajax/offline/test_noManifest.html | 44 +++++++++++++++++++ 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 dom/tests/mochitest/ajax/offline/test_noManifest.html diff --git a/dom/src/offline/nsDOMOfflineResourceList.cpp b/dom/src/offline/nsDOMOfflineResourceList.cpp index 6c2cc4bf08be..48ea1261da05 100644 --- a/dom/src/offline/nsDOMOfflineResourceList.cpp +++ b/dom/src/offline/nsDOMOfflineResourceList.cpp @@ -275,13 +275,14 @@ nsDOMOfflineResourceList::Disconnect() NS_IMETHODIMP nsDOMOfflineResourceList::GetLength(PRUint32 *aLength) { + if (!mManifestURI) { + *aLength = 0; + return NS_OK; + } + nsresult rv = Init(); NS_ENSURE_SUCCESS(rv, rv); - if (!nsContentUtils::OfflineAppAllowed(mDocumentURI)) { - return NS_ERROR_DOM_SECURITY_ERR; - } - rv = CacheKeys(); NS_ENSURE_SUCCESS(rv, rv); @@ -295,10 +296,6 @@ nsDOMOfflineResourceList::Item(PRUint32 aIndex, nsAString& aURI) nsresult rv = Init(); NS_ENSURE_SUCCESS(rv, rv); - if (!nsContentUtils::OfflineAppAllowed(mDocumentURI)) { - return NS_ERROR_DOM_SECURITY_ERR; - } - SetDOMStringToNull(aURI); rv = CacheKeys(); diff --git a/dom/tests/mochitest/ajax/offline/Makefile.in b/dom/tests/mochitest/ajax/offline/Makefile.in index 04598ae47683..fa563162bde9 100644 --- a/dom/tests/mochitest/ajax/offline/Makefile.in +++ b/dom/tests/mochitest/ajax/offline/Makefile.in @@ -50,6 +50,7 @@ _TEST_FILES = \ test_badManifestMagic.html \ test_badManifestMime.html \ test_missingFile.html \ + test_noManifest.html \ test_simpleManifest.html \ test_identicalManifest.html \ test_changingManifest.html \ diff --git a/dom/tests/mochitest/ajax/offline/test_noManifest.html b/dom/tests/mochitest/ajax/offline/test_noManifest.html new file mode 100644 index 000000000000..7621aa2c7bd7 --- /dev/null +++ b/dom/tests/mochitest/ajax/offline/test_noManifest.html @@ -0,0 +1,44 @@ + + +bad manifest content type + + + + + + + + + + + + From 035a3243e1421e334c8927c079cdb57cd0872021 Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Sat, 28 Jun 2008 08:16:34 +0200 Subject: [PATCH 39/98] bug 441888 - ARIA checked menu items are not included in the total list of menu items, r=MarcoZ --- accessible/src/base/nsAccessible.cpp | 42 +++++++++++++++---- .../tests/mochitest/test_groupattrs.xul | 37 +++++++++++++--- 2 files changed, 65 insertions(+), 14 deletions(-) diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index d44695c2fc1c..1f2d981ff374 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -2117,13 +2117,21 @@ nsAccessible::GetAttributes(nsIPersistentProperties **aAttributes) // If accessible is invisible we don't want to calculate group ARIA // attributes for it. if ((role == nsIAccessibleRole::ROLE_LISTITEM || - role == nsIAccessibleRole::ROLE_MENUITEM || - role == nsIAccessibleRole::ROLE_RADIOBUTTON || - role == nsIAccessibleRole::ROLE_PAGETAB || - role == nsIAccessibleRole::ROLE_OPTION || - role == nsIAccessibleRole::ROLE_RADIOBUTTON || - role == nsIAccessibleRole::ROLE_OUTLINEITEM) && + role == nsIAccessibleRole::ROLE_MENUITEM || + role == nsIAccessibleRole::ROLE_CHECK_MENU_ITEM || + role == nsIAccessibleRole::ROLE_RADIO_MENU_ITEM || + role == nsIAccessibleRole::ROLE_RADIOBUTTON || + role == nsIAccessibleRole::ROLE_PAGETAB || + role == nsIAccessibleRole::ROLE_OPTION || + role == nsIAccessibleRole::ROLE_RADIOBUTTON || + role == nsIAccessibleRole::ROLE_OUTLINEITEM) && 0 == (State(this) & nsIAccessibleStates::STATE_INVISIBLE)) { + + PRUint32 baseRole = role; + if (role == nsIAccessibleRole::ROLE_CHECK_MENU_ITEM || + role == nsIAccessibleRole::ROLE_RADIO_MENU_ITEM) + baseRole = nsIAccessibleRole::ROLE_MENUITEM; + nsCOMPtr parent = GetParent(); NS_ENSURE_TRUE(parent, NS_ERROR_FAILURE); @@ -2135,10 +2143,17 @@ nsAccessible::GetAttributes(nsIPersistentProperties **aAttributes) NS_ENSURE_TRUE(sibling, NS_ERROR_FAILURE); PRBool foundCurrent = PR_FALSE; - PRUint32 siblingRole; + PRUint32 siblingRole, siblingBaseRole; while (sibling) { sibling->GetFinalRole(&siblingRole); - if (siblingRole == role && + + siblingBaseRole = siblingRole; + if (siblingRole == nsIAccessibleRole::ROLE_CHECK_MENU_ITEM || + siblingRole == nsIAccessibleRole::ROLE_RADIO_MENU_ITEM) + siblingBaseRole = nsIAccessibleRole::ROLE_MENUITEM; + + // If sibling is visible and has the same base role. + if (siblingBaseRole == baseRole && !(State(sibling) & nsIAccessibleStates::STATE_INVISIBLE)) { ++ setSize; if (!foundCurrent) { @@ -2147,6 +2162,17 @@ nsAccessible::GetAttributes(nsIPersistentProperties **aAttributes) foundCurrent = PR_TRUE; } } + + // If the sibling is separator + if (siblingRole == nsIAccessibleRole::ROLE_SEPARATOR) { + if (foundCurrent) // the our group is ended + break; + + // not our group, continue the searching + positionInGroup = 0; + setSize = 0; + } + sibling->GetNextSibling(getter_AddRefs(nextSibling)); sibling = nextSibling; } diff --git a/accessible/tests/mochitest/test_groupattrs.xul b/accessible/tests/mochitest/test_groupattrs.xul index 00a7c785a268..b91a27cf0f7c 100644 --- a/accessible/tests/mochitest/test_groupattrs.xul +++ b/accessible/tests/mochitest/test_groupattrs.xul @@ -30,19 +30,30 @@ this.mAttrs = this.mAcc.attributes; } + function testGroupAtts(aID, aPosInSet, aSetSize) + { + var attrs = new accAttributes(aID); + is(attrs.getAttribute("posinset"), aPosInSet, "Wrong posinset on " + aID); + is(attrs.getAttribute("setsize"), aSetSize, "Wrong setsize on " + aID); + } + function doTest() { // Activate accessibility, otherwise events aren't fired. gAccService = Components.classes["@mozilla.org/accessibleRetrieval;1"]. getService(Components.interfaces.nsIAccessibleRetrieval); - var attrs = new accAttributes("item1"); - is(attrs.getAttribute("posinset"), "1", "Wrong posinset on item1."); - is(attrs.getAttribute("setsize"), "2", "Wrong setsize on item1."); + ////////////////////////////////////////////////////////////////////////// + // xul:listbox (bug 417317) + testGroupAtts("item1", "1", "2"); + testGroupAtts("item2", "2", "2"); - attrs = new accAttributes("item2"); - is(attrs.getAttribute("posinset"), "2", "Wrong posinset on item2."); - is(attrs.getAttribute("setsize"), "2", "Wrong setsize on item2."); + ////////////////////////////////////////////////////////////////////////// + // ARIA menu (bug 441888) + testGroupAtts("aria-menuitem", "1", "3"); + testGroupAtts("aria-menuitemcheckbox", "2", "3"); + testGroupAtts("aria-menuitemradio", "3", "3"); + testGroupAtts("aria-menuitem2", "1", "1"); SimpleTest.finish(); } @@ -69,5 +80,19 @@ + + + + + From 9749c3d8290c6deff37b146315a290fca6592757 Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Sat, 28 Jun 2008 03:55:30 -0400 Subject: [PATCH 40/98] Re-landing. Decomtaminate native menu system. Add new native menu API. Lots of cleanup for the native menu system code. Memory usage and speed improvements. b=433952 r=bent r=kreeger sr=roc --- dom/public/idl/base/nsIDOMWindowUtils.idl | 11 +- dom/src/base/nsDOMWindowUtils.cpp | 16 + widget/public/Makefile.in | 2 +- widget/public/nsIMenuBar.h | 141 ----- widget/public/nsINativeMenuService.h | 60 ++ widget/public/nsIWidget.h | 23 +- widget/public/nsWidgetsCID.h | 18 +- widget/src/beos/nsWindow.h | 4 +- widget/src/cocoa/Makefile.in | 5 +- widget/src/cocoa/nsChildView.h | 5 +- widget/src/cocoa/nsChildView.mm | 47 +- widget/src/cocoa/nsCocoaUtils.mm | 7 +- widget/src/cocoa/nsCocoaWindow.h | 8 +- widget/src/cocoa/nsCocoaWindow.mm | 20 +- widget/src/cocoa/nsIMenu.h | 240 -------- widget/src/cocoa/nsIMenuItem.h | 156 ----- widget/src/cocoa/nsMenuBarX.h | 142 ++--- widget/src/cocoa/nsMenuBarX.mm | 675 ++++++++-------------- widget/src/cocoa/nsMenuBaseX.h | 68 +++ widget/src/cocoa/nsMenuItemIconX.h | 14 +- widget/src/cocoa/nsMenuItemIconX.mm | 40 +- widget/src/cocoa/nsMenuItemX.h | 77 ++- widget/src/cocoa/nsMenuItemX.mm | 197 +++---- widget/src/cocoa/nsMenuUtilsX.h | 63 ++ widget/src/cocoa/nsMenuUtilsX.mm | 197 +++++++ widget/src/cocoa/nsMenuX.h | 154 ++--- widget/src/cocoa/nsMenuX.mm | 655 +++++++-------------- widget/src/cocoa/nsPIWidgetCocoa.idl | 5 +- widget/src/cocoa/nsWidgetFactory.mm | 26 +- widget/src/gtk2/nsWindow.cpp | 2 +- widget/src/gtk2/nsWindow.h | 2 +- widget/src/os2/nsWindow.h | 4 +- widget/src/photon/nsWindow.cpp | 1 - widget/src/windows/nsWindow.h | 3 +- widget/src/xpwidgets/nsBaseWidget.h | 1 + widget/tests/Makefile.in | 5 + widget/tests/native_menus_window.xul | 115 ++++ widget/tests/test_native_menus.xul | 34 ++ xpfe/appshell/src/nsWebShellWindow.cpp | 23 +- 39 files changed, 1365 insertions(+), 1901 deletions(-) delete mode 100644 widget/public/nsIMenuBar.h create mode 100644 widget/public/nsINativeMenuService.h delete mode 100644 widget/src/cocoa/nsIMenu.h delete mode 100644 widget/src/cocoa/nsIMenuItem.h create mode 100644 widget/src/cocoa/nsMenuBaseX.h create mode 100644 widget/src/cocoa/nsMenuUtilsX.h create mode 100644 widget/src/cocoa/nsMenuUtilsX.mm create mode 100644 widget/tests/native_menus_window.xul create mode 100644 widget/tests/test_native_menus.xul diff --git a/dom/public/idl/base/nsIDOMWindowUtils.idl b/dom/public/idl/base/nsIDOMWindowUtils.idl index 067b282be8c0..b457a8f10edd 100644 --- a/dom/public/idl/base/nsIDOMWindowUtils.idl +++ b/dom/public/idl/base/nsIDOMWindowUtils.idl @@ -47,7 +47,7 @@ interface nsIDOMElement; -[scriptable, uuid(993da427-2ac3-4766-8485-21a236d258e4)] +[scriptable, uuid(ef136142-9925-45f4-a3e4-6f0d275c6aa8)] interface nsIDOMWindowUtils : nsISupports { /** @@ -160,6 +160,15 @@ interface nsIDOMWindowUtils : nsISupports { in AString aCharacters, in AString aUnmodifiedCharacters); + /** + * See nsIWidget::ActivateNativeMenuItemAt + * + * Cannot be accessed from unprivileged context (not content-accessible) + * Will throw a DOM security error if called without UniversalXPConnect + * privileges. + */ + void activateNativeMenuItemAt(in AString indexString); + /** * Focus the element aElement. The element should be in the same document * that the window is displaying. Pass null to blur the element, if any, diff --git a/dom/src/base/nsDOMWindowUtils.cpp b/dom/src/base/nsDOMWindowUtils.cpp index 1eaecee5739c..f73b1c047cfe 100644 --- a/dom/src/base/nsDOMWindowUtils.cpp +++ b/dom/src/base/nsDOMWindowUtils.cpp @@ -308,6 +308,22 @@ nsDOMWindowUtils::SendNativeKeyEvent(PRInt32 aNativeKeyboardLayout, aModifiers, aCharacters, aUnmodifiedCharacters); } +NS_IMETHODIMP +nsDOMWindowUtils::ActivateNativeMenuItemAt(const nsAString& indexString) +{ + PRBool hasCap = PR_FALSE; + if (NS_FAILED(nsContentUtils::GetSecurityManager()->IsCapabilityEnabled("UniversalXPConnect", &hasCap)) + || !hasCap) + return NS_ERROR_DOM_SECURITY_ERR; + + // get the widget to send the event to + nsCOMPtr widget = GetWidget(); + if (!widget) + return NS_ERROR_FAILURE; + + return widget->ActivateNativeMenuItemAt(indexString); +} + nsIWidget* nsDOMWindowUtils::GetWidget() { diff --git a/widget/public/Makefile.in b/widget/public/Makefile.in index 89be38f0219f..775cf0ca3c48 100644 --- a/widget/public/Makefile.in +++ b/widget/public/Makefile.in @@ -64,7 +64,7 @@ EXPORTS = \ $(NULL) ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) -EXPORTS += nsIMenuBar.h +EXPORTS += nsINativeMenuService.h endif ifeq ($(MOZ_WIDGET_TOOLKIT),os2) diff --git a/widget/public/nsIMenuBar.h b/widget/public/nsIMenuBar.h deleted file mode 100644 index 8bbcb1e6fc1a..000000000000 --- a/widget/public/nsIMenuBar.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenuBar_h__ -#define nsIMenuBar_h__ - -#include "nsISupports.h" -#include "nsString.h" -#include "nsIMenu.h" - -class nsIWidget; - -// F81C6D64-B260-44ED-9289-2E410A130E35 -#define NS_IMENUBAR_IID \ -{ 0xF81C6D64, 0xB260, 0x44ED, \ - { 0x92, 0x89, 0x2E, 0x41, 0x0A, 0x13, 0x0E, 0x35 } } - -/** - * MenuBar widget - */ -class nsIMenuBar : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUBAR_IID) - - /** - * Creates the MenuBar - * - */ - NS_IMETHOD Create(nsIWidget * aParent) = 0; - - /** - * Get the MenuBar's Parent. This addrefs. - * - */ - NS_IMETHOD GetParent(nsIWidget *&aParent) = 0; - - /** - * Set the MenuBar's Parent - * - */ - NS_IMETHOD SetParent(nsIWidget *aParent) = 0; - - /** - * Adds the Menu - * - */ - NS_IMETHOD AddMenu(nsIMenu * aMenu) = 0; - - /** - * Returns the number of menus - * - */ - NS_IMETHOD GetMenuCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu Item at a specified Index - * - */ - NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; - - /** - * Inserts a Menu at a specified Index - * - */ - NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0; - - /** - * Removes an Menu from a specified Index - * - */ - NS_IMETHOD RemoveMenu(const PRUint32 aCount) = 0; - - /** - * Removes all the Menus - * - */ - NS_IMETHOD RemoveAll() = 0; - - /** - * Gets Native MenuHandle - * - */ - NS_IMETHOD GetNativeData(void*& aData) = 0; - - /** - * Sets Native MenuHandle. Temporary hack for mac until - * nsMenuBar does it's own construction - */ - NS_IMETHOD SetNativeData(void* aData) = 0; - - /** - * Draw the menubar - * - */ - NS_IMETHOD Paint() = 0; - - /** - * Construct the menubar - * - */ - NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuBar, NS_IMENUBAR_IID) - -#endif diff --git a/widget/public/nsINativeMenuService.h b/widget/public/nsINativeMenuService.h new file mode 100644 index 000000000000..9e5f4bc0bb4b --- /dev/null +++ b/widget/public/nsINativeMenuService.h @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsINativeMenuService_h_ +#define nsINativeMenuService_h_ + +#include "nsISupports.h" + +class nsIWidget; +class nsIContent; + +// {90DF88F9-F084-4EF3-829A-49496E636DED} +#define NS_INATIVEMENUSERVICE_IID \ +{ 0x90DF88F9, 0xF084, 0x4EF3, \ +{ 0x82, 0x9A, 0x49, 0x49, 0x6E, 0x63, 0x6D, 0xED} } + +class nsINativeMenuService : public nsISupports { +public: + // Given a top-level window widget and a menu bar DOM node, sets up native + // menus. Once created, native menus are controlled via the DOM, including + // destruction. + NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode)=0; +}; + +#endif // nsINativeMenuService_h_ diff --git a/widget/public/nsIWidget.h b/widget/public/nsIWidget.h index 28848152064a..cd0ff746fb65 100644 --- a/widget/public/nsIWidget.h +++ b/widget/public/nsIWidget.h @@ -55,7 +55,6 @@ class nsIDeviceContext; class nsIRegion; struct nsRect; struct nsFont; -class nsIMenuBar; class nsIEventListener; class nsIRollupListener; class nsGUIEvent; @@ -95,10 +94,10 @@ typedef nsEventStatus (*PR_CALLBACK EVENT_CALLBACK)(nsGUIEvent *event); #define NS_NATIVE_PLUGIN_PORT_CG 101 #endif -// 517a0eef-cd1c-48b3-96f0-e341a50f120d +// 00e25b3d-c872-4985-a15e-8e650b7b8ff6 #define NS_IWIDGET_IID \ -{ 0x517a0eef, 0xcd1c, 0x48b3, \ - { 0x96, 0xf0, 0xe3, 0x41, 0xa5, 0x0f, 0x12, 0x0d } } +{ 0x00e25b3d, 0xc872, 0x4985, \ + { 0xa1, 0x5e, 0x8e, 0x65, 0x0b, 0x7b, 0x8f, 0xf6 } } // Hide the native window systems real window type so as to avoid // including native window system types and APIs. This is necessary @@ -879,7 +878,7 @@ class nsIWidget : public nsISupports { * @param aMenuBar the menubar */ - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) = 0; + NS_IMETHOD SetMenuBar(void* aMenuBar) = 0; /** * Set the widget's MenuBar's visibility @@ -1105,6 +1104,20 @@ class nsIWidget : public nsISupports { const nsAString& aCharacters, const nsAString& aUnmodifiedCharacters) = 0; + /** + * Activates a native menu item at the position specified by the index + * string. The index string is a string of positive integers separated + * by the "|" (pipe) character. The last integer in the string represents + * the item index in a submenu located using the integers prior to it. + * + * Example: 1|0|4 + * In this string, the first integer represents the top-level submenu + * in the native menu bar. Since the integer is 1, it is the second submeu + * in the native menu bar. Within that, the first item (index 0) is a + * submenu, and we want to activate the 5th item within that submenu. + */ + virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) = 0; + protected: // keep the list of children. We also keep track of our siblings. // The ownership model is as follows: parent holds a strong ref to diff --git a/widget/public/nsWidgetsCID.h b/widget/public/nsWidgetsCID.h index c9157d165cad..1f4e62ba2b5d 100644 --- a/widget/public/nsWidgetsCID.h +++ b/widget/public/nsWidgetsCID.h @@ -79,20 +79,10 @@ // Menus //----------------------------------------------------------- -// {BC658C81-4BEB-11d2-8DBB-00609703C14E} -#define NS_MENUBAR_CID \ -{ 0xbc658c81, 0x4beb, 0x11d2, \ - { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } - -// {35A3DEC1-4992-11d2-8DBA-00609703C14E} -#define NS_MENU_CID \ -{ 0x35a3dec1, 0x4992, 0x11d2, \ - { 0x8d, 0xba, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } - -// {7F045771-4BEB-11d2-8DBB-00609703C14E} -#define NS_MENUITEM_CID \ -{ 0x7f045771, 0x4beb, 0x11d2, \ - { 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } } +// {0B3FE5AA-BC72-4303-85AE-76365DF1251D} +#define NS_NATIVEMENUSERVICE_CID \ +{ 0x0B3FE5AA, 0xBC72, 0x4303, \ + { 0x85, 0xAE, 0x76, 0x36, 0x5D, 0xF1, 0x25, 0x1D} } // {F6CD4F21-53AF-11d2-8DC4-00609703C14E} #define NS_POPUPMENU_CID \ diff --git a/widget/src/beos/nsWindow.h b/widget/src/beos/nsWindow.h index cc74a387cc7d..af54d55c3487 100644 --- a/widget/src/beos/nsWindow.h +++ b/widget/src/beos/nsWindow.h @@ -48,8 +48,6 @@ #include "nsIWidget.h" -#include "nsIMenuBar.h" - #include "nsIMouseListener.h" #include "nsIEventListener.h" #include "nsString.h" @@ -164,7 +162,7 @@ public: NS_IMETHOD SetColorMap(nsColorMap *aColorMap); NS_IMETHOD Scroll(PRInt32 aDx, PRInt32 aDy, nsRect *aClipRect); NS_IMETHOD SetTitle(const nsAString& aTitle); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/cocoa/Makefile.in b/widget/src/cocoa/Makefile.in index 61a93e319905..112a4f153940 100644 --- a/widget/src/cocoa/Makefile.in +++ b/widget/src/cocoa/Makefile.in @@ -66,7 +66,7 @@ REQUIRES = xpcom \ intl \ exthandler \ appshell \ - lcms \ + lcms \ thebes \ js \ xpconnect \ @@ -84,8 +84,6 @@ endif EXPORTS = \ mozView.h \ nsChangeObserver.h \ - nsIMenu.h \ - nsIMenuItem.h \ $(NULL) CMMSRCS = \ @@ -95,6 +93,7 @@ CMMSRCS = \ nsMenuBarX.mm \ nsMenuItemX.mm \ nsMenuItemIconX.mm \ + nsMenuUtilsX.mm \ nsFilePicker.mm \ nsDragService.mm \ nsToolkit.mm \ diff --git a/widget/src/cocoa/nsChildView.h b/widget/src/cocoa/nsChildView.h index fe69c3692020..3ea7e64e1a34 100644 --- a/widget/src/cocoa/nsChildView.h +++ b/widget/src/cocoa/nsChildView.h @@ -61,7 +61,6 @@ #include "nsIEventListener.h" #include "nsString.h" #include "nsIDragService.h" -#include "nsIMenuBar.h" #include "nsplugindefs.h" @@ -291,7 +290,7 @@ public: void LocalToWindowCoordinate(nscoord& aX, nscoord& aY) { ConvertToDeviceCoordinates(aX, aY); } void LocalToWindowCoordinate(nsRect& aRect) { ConvertToDeviceCoordinates(aRect.x, aRect.y); } - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); + NS_IMETHOD SetMenuBar(void* aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD GetPreferredSize(PRInt32& aWidth, PRInt32& aHeight); @@ -305,6 +304,8 @@ public: NS_IMETHOD GetAttention(PRInt32 aCycleCount); + NS_IMETHOD ActivateNativeMenuItemAt(const nsAString& indexString); + // nsIPluginWidget NS_IMETHOD GetPluginClipRect(nsRect& outClipRect, nsPoint& outOrigin, PRBool& outWidgetVisible); NS_IMETHOD StartDrawPlugin(); diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm index 60b23c03bf99..192cb2661799 100644 --- a/widget/src/cocoa/nsChildView.mm +++ b/widget/src/cocoa/nsChildView.mm @@ -971,7 +971,7 @@ NS_IMETHODIMP nsChildView::SetColorMap(nsColorMap *aColorMap) } -NS_IMETHODIMP nsChildView::SetMenuBar(nsIMenuBar * aMenuBar) +NS_IMETHODIMP nsChildView::SetMenuBar(void* aMenuBar) { return NS_ERROR_FAILURE; // subviews don't have menu bars } @@ -1373,6 +1373,51 @@ nsresult nsChildView::SynthesizeNativeKeyEvent(PRInt32 aNativeKeyboardLayout, NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +// Used for testing native menu system structure and event handling. +NS_IMETHODIMP nsChildView::ActivateNativeMenuItemAt(const nsAString& indexString) +{ + NSString* title = [NSString stringWithCharacters:indexString.BeginReading() length:indexString.Length()]; + NSArray* indexes = [title componentsSeparatedByString:@"|"]; + unsigned int indexCount = [indexes count]; + if (indexCount == 0) + return NS_OK; + + NSMenu* currentSubmenu = [NSApp mainMenu]; + for (unsigned int i = 0; i < (indexCount - 1); i++) { + NSMenu* newSubmenu = nil; + int targetIndex; + // We remove the application menu from consideration for the top-level menu + if (i == 0) + targetIndex = [[indexes objectAtIndex:i] intValue] + 1; + else + targetIndex = [[indexes objectAtIndex:i] intValue]; + int itemCount = [currentSubmenu numberOfItems]; + if (targetIndex < itemCount) { + NSMenuItem* menuItem = [currentSubmenu itemAtIndex:targetIndex]; + if ([menuItem hasSubmenu]) + newSubmenu = [menuItem submenu]; + } + + if (newSubmenu) + currentSubmenu = newSubmenu; + else + return NS_ERROR_FAILURE; + } + + int itemCount = [currentSubmenu numberOfItems]; + int targetIndex = [[indexes objectAtIndex:(indexCount - 1)] intValue]; + if (targetIndex < itemCount) { + // NSLog(@"Performing action for native menu item titled: %@\n", + // [[currentSubmenu itemAtIndex:targetIndex] title]); + [currentSubmenu performActionForItemAtIndex:targetIndex]; + } + else { + return NS_ERROR_FAILURE; + } + + return NS_OK; +} + #pragma mark - diff --git a/widget/src/cocoa/nsCocoaUtils.mm b/widget/src/cocoa/nsCocoaUtils.mm index 750f1a6680e9..ea4c404d7262 100644 --- a/widget/src/cocoa/nsCocoaUtils.mm +++ b/widget/src/cocoa/nsCocoaUtils.mm @@ -47,6 +47,7 @@ #include "nsIXULWindow.h" #include "nsIBaseWindow.h" #include "nsIServiceManager.h" +#include "nsMenuUtilsX.h" float nsCocoaUtils::MenuBarScreenHeight() { @@ -191,7 +192,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; @@ -212,7 +213,7 @@ void nsCocoaUtils::PrepareForNativeAppModalDialog() [firstMenuItem release]; // Add standard edit menu - [newMenuBar addItem:MenuHelpersX::GetStandardEditMenuItem()]; + [newMenuBar addItem:nsMenuUtilsX::GetStandardEditMenuItem()]; // Show the new menu bar [NSApp setMainMenu:newMenuBar]; @@ -228,7 +229,7 @@ void nsCocoaUtils::CleanUpAfterNativeAppModalDialog() // Don't do anything if this is embedding. We'll assume that if there is no hidden // window we shouldn't do anything, and that should cover the embedding case. - nsIMenuBar* hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsMenuBarX* hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (!hiddenWindowMenuBar) return; diff --git a/widget/src/cocoa/nsCocoaWindow.h b/widget/src/cocoa/nsCocoaWindow.h index d2b5fdea8f90..f0d44165300b 100644 --- a/widget/src/cocoa/nsCocoaWindow.h +++ b/widget/src/cocoa/nsCocoaWindow.h @@ -46,9 +46,11 @@ #include "nsBaseWidget.h" #include "nsPIWidgetCocoa.h" +#include "nsAutoPtr.h" class nsCocoaWindow; class nsChildView; +class nsMenuBarX; typedef struct _nsCocoaWindowList { _nsCocoaWindowList() : prev(NULL), window(NULL) {} @@ -210,8 +212,8 @@ public: NS_IMETHOD SetModal(PRBool aState); NS_IMETHOD IsVisible(PRBool & aState); NS_IMETHOD SetFocus(PRBool aState=PR_FALSE); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); - virtual nsIMenuBar* GetMenuBar(); + NS_IMETHOD SetMenuBar(void* aMenuBar); + virtual nsMenuBarX* GetMenuBar(); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); @@ -275,7 +277,7 @@ protected: nsIWidget* mParent; // if we're a popup, this is our parent [WEAK] NSWindow* mWindow; // our cocoa window [STRONG] WindowDelegate* mDelegate; // our delegate for processing window msgs [STRONG] - nsCOMPtr mMenuBar; + nsRefPtr mMenuBar; NSWindow* mSheetWindowParent; // if this is a sheet, this is the NSWindow it's attached to nsChildView* mPopupContentView; // if this is a popup, this is its content widget diff --git a/widget/src/cocoa/nsCocoaWindow.mm b/widget/src/cocoa/nsCocoaWindow.mm index 009c64689fc1..3ecb1c73221a 100644 --- a/widget/src/cocoa/nsCocoaWindow.mm +++ b/widget/src/cocoa/nsCocoaWindow.mm @@ -64,6 +64,7 @@ #include "nsPIDOMWindow.h" #include "nsIDOMElement.h" #include "nsMenuBarX.h" +#include "nsMenuUtilsX.h" #include "gfxPlatform.h" #include "lcms.h" @@ -1117,13 +1118,6 @@ NS_IMETHODIMP nsCocoaWindow::GetChildSheet(PRBool aShown, nsCocoaWindow** _retva } -NS_IMETHODIMP nsCocoaWindow::GetMenuBar(nsIMenuBar** menuBar) -{ - *menuBar = mMenuBar; - return NS_OK; -} - - NS_IMETHODIMP nsCocoaWindow::GetRealParent(nsIWidget** parent) { *parent = mParent; @@ -1200,15 +1194,15 @@ nsCocoaWindow::ReportSizeEvent(NSRect *r) } -NS_IMETHODIMP nsCocoaWindow::SetMenuBar(nsIMenuBar *aMenuBar) +NS_IMETHODIMP nsCocoaWindow::SetMenuBar(void *aMenuBar) { if (mMenuBar) mMenuBar->SetParent(nsnull); - mMenuBar = aMenuBar; + mMenuBar = static_cast(aMenuBar); // We paint the hidden window menu bar if no other menu bar has been painted // yet so that some reasonable menu bar is displayed when the app starts up. - if (!gSomeMenuBarPainted && mMenuBar && (MenuHelpersX::GetHiddenWindowMenuBar() == mMenuBar)) + if (!gSomeMenuBarPainted && mMenuBar && (nsMenuUtilsX::GetHiddenWindowMenuBar() == mMenuBar)) mMenuBar->Paint(); return NS_OK; @@ -1264,7 +1258,7 @@ NS_IMETHODIMP nsCocoaWindow::ScreenToWidget(const nsRect& aOldRect, nsRect& aNew } -nsIMenuBar* nsCocoaWindow::GetMenuBar() +nsMenuBarX* nsCocoaWindow::GetMenuBar() { return mMenuBar; } @@ -1410,7 +1404,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() nsCocoaWindow* geckoWidget = [windowDelegate geckoWidget]; NS_ASSERTION(geckoWidget, "Window delegate not returning a gecko widget!"); - nsIMenuBar* geckoMenuBar = geckoWidget->GetMenuBar(); + nsMenuBarX* geckoMenuBar = geckoWidget->GetMenuBar(); if (geckoMenuBar) { geckoMenuBar->Paint(); } @@ -1498,7 +1492,7 @@ NS_IMETHODIMP nsCocoaWindow::EndSecureKeyboardInput() // app modally. If one of those is up then we want it to retain its menu bar. if ([NSApp _isRunningAppModal]) return; - nsCOMPtr hiddenWindowMenuBar = MenuHelpersX::GetHiddenWindowMenuBar(); + nsRefPtr hiddenWindowMenuBar = nsMenuUtilsX::GetHiddenWindowMenuBar(); if (hiddenWindowMenuBar) { // printf("painting hidden window menu bar due to window losing main status\n"); hiddenWindowMenuBar->Paint(); diff --git a/widget/src/cocoa/nsIMenu.h b/widget/src/cocoa/nsIMenu.h deleted file mode 100644 index 55fb8528004d..000000000000 --- a/widget/src/cocoa/nsIMenu.h +++ /dev/null @@ -1,240 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenu_h__ -#define nsIMenu_h__ - -#include "nsISupports.h" -#include "nsStringFwd.h" -#include "nsEvent.h" - -class nsIMenuBar; -class nsIMenu; -class nsIMenuItem; -class nsIContent; -class nsIWidget; -class nsMenuBarX; - - -// 9225136B-3F56-4CA3-92E0-623D5FB8356B -#define NS_IMENU_IID \ -{ 0x9225136B, 0x3F56, 0x4CA3, \ - { 0x92, 0xE0, 0x62, 0x3D, 0x5F, 0xB8, 0x35, 0x6B } } - -/** - * Menu widget - */ -class nsIMenu : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENU_IID) - - /** - * Creates the Menu - * - */ - NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; - - /** - * Get the Menu's Parent. This addrefs. - * - */ - NS_IMETHOD GetParent(nsISupports *&aParent) = 0; - - /** - * Get the Menu label - * - */ - NS_IMETHOD GetLabel(nsString &aText) = 0; - - /** - * Set the Menu label - * - */ - NS_IMETHOD SetLabel(const nsAString &aText) = 0; - - /** - * Get the Menu Access Key - * - */ - NS_IMETHOD GetAccessKey(nsString &aText) = 0; - - /** - * Set the Menu Access Key - * - */ - NS_IMETHOD SetAccessKey(const nsAString &aText) = 0; - - /** - * Set the Menu enabled state - * - */ - NS_IMETHOD SetEnabled(PRBool aIsEnabled) = 0; - - /** - * Get the Menu enabled state - * - */ - NS_IMETHOD GetEnabled(PRBool* aIsEnabled) = 0; - - /** - * Adds a Menu Item. Do not use outside of widget menu implementations. - * Add and modify menu items via DOM content. - * - */ - NS_IMETHOD AddItem(nsISupports* aItem) = 0; - - /** - * Returns the number of visible menu items - * This includes separators. It does not include hidden items. - * - */ - NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu or Menu Item at a specified Index. - * This includes separators. It does not include hidden items. - * - */ - NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; - - /** - * Returns the number of menu items - * This includes separators. It -does- include hidden items. - * - */ - NS_IMETHOD GetItemCount(PRUint32 &aCount) = 0; - - /** - * Returns a Menu or Menu Item at a specified Index. - * This includes separators. It -does- include hidden items. - * - */ - NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0; - - /** - * Inserts a Menu Item at a specified Index - * - */ - NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) = 0; - - /** - * Removes an Menu Item from a specified Index - * - */ - NS_IMETHOD RemoveItem(const PRUint32 aPos) = 0; - - /** - * Removes all the Menu Items - * - */ - NS_IMETHOD RemoveAll() = 0; - - /** - * Gets Native MenuHandle - * - */ - NS_IMETHOD GetNativeData(void** aData) = 0; - - /** - * Sets Native MenuHandle - * - */ - NS_IMETHOD SetNativeData(void* aData) = 0; - - /** - * Get menu content - * - */ - NS_IMETHOD GetMenuContent(nsIContent ** aMenuContent) = 0; - - /** - * Enable/disable native widget for a particular nsIMenuItem - * - */ - NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, - PRBool aEnabled) = 0; - - /** - * Retrieve the native menu and the index of the item within that menu. - * - */ - NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex) = 0; - - /** - * Sets an appropriate icon for the menu. - * - */ - NS_IMETHOD SetupIcon() = 0; - - /** - * Menu has been selected - * - */ - virtual nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Menu has been deselected - * - */ - virtual void MenuDeselected(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Construct menu - * - */ - virtual void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode) = 0; - - /** - * Destruct menu - * - */ - virtual void MenuDestruct(const nsMenuEvent & aMenuEvent) = 0; - - /** - * Set rebuild - * - */ - virtual void SetRebuild(PRBool aMenuEvent) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenu, NS_IMENU_IID) - -#endif diff --git a/widget/src/cocoa/nsIMenuItem.h b/widget/src/cocoa/nsIMenuItem.h deleted file mode 100644 index 7d648527f516..000000000000 --- a/widget/src/cocoa/nsIMenuItem.h +++ /dev/null @@ -1,156 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsIMenuItem_h__ -#define nsIMenuItem_h__ - -#include "prtypes.h" -#include "nsISupports.h" -#include "nsString.h" - -#include "nsIDOMElement.h" - -// 33FA04E3-EAFE-4DD1-AFB3-B3BC8C712716 -#define NS_IMENUITEM_IID \ -{ 0x33FA04E3, 0xEAFE, 0x4DD1, \ - { 0xAF, 0xB3, 0xB3, 0xBC, 0x8C, 0x71, 0x27, 0x16 } } - -class nsIMenu; -class nsIWidget; -class nsIContent; -class nsMenuBarX; - -enum { - knsMenuItemNoModifier = 0, - knsMenuItemShiftModifier = (1 << 0), - knsMenuItemAltModifier = (1 << 1), - knsMenuItemControlModifier = (1 << 2), - knsMenuItemCommandModifier = (1 << 3) -}; - -/** - * MenuItem widget - */ -class nsIMenuItem : public nsISupports { - - public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMENUITEM_IID) - - enum EMenuItemType { eRegular = 0, eCheckbox, eRadio, eSeparator} ; - - /** - * Creates the MenuItem - * - */ - NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode) = 0; - - /** - * Get the MenuItem label - * - */ - NS_IMETHOD GetLabel(nsString &aText) = 0; - - /** - * Get the Menu shortcut char - * - */ - NS_IMETHOD GetShortcutChar(nsString &aText) = 0; - - /** - * Gets whether the item is enabled or disabled - * - */ - NS_IMETHOD GetEnabled(PRBool *aIsEnabled) = 0; - - /** - * Sets whether the item is checked or not - * - */ - NS_IMETHOD SetChecked(PRBool aIsEnabled) = 0; - - /** - * Gets whether the item is checked or not - * - */ - NS_IMETHOD GetChecked(PRBool *aIsEnabled) = 0; - - /** - * Gets whether the item is a checkbox or radio - * - */ - NS_IMETHOD GetMenuItemType(EMenuItemType *aType) = 0; - - /** - * Gets Native Menu Handle - * - */ - NS_IMETHOD GetNativeData(void*& aData) = 0; - - /** - * Indicates whether it is a separator - * - */ - NS_IMETHOD IsSeparator(PRBool & aIsSep) = 0; - - /** - * Executes the "cached" JavaScript Command - * @return NS_OK if the command was executed properly, otherwise an error code - */ - NS_IMETHOD DoCommand() = 0; - - /** - * Sends a DOM event to the menu item's content node - * @return NS_OK if the event was sent properly, otherwise an error code - */ - NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) = 0; - - /** - * Sets an appropriate icon for the menu item. - */ - NS_IMETHOD SetupIcon() = 0; - - /** - * Get GetMenuItemContent - * - */ - NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent) = 0; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIMenuItem, NS_IMENUITEM_IID) - -#endif diff --git a/widget/src/cocoa/nsMenuBarX.h b/widget/src/cocoa/nsMenuBarX.h index c2cffe0fff53..bc456e169d5d 100644 --- a/widget/src/cocoa/nsMenuBarX.h +++ b/widget/src/cocoa/nsMenuBarX.h @@ -39,35 +39,29 @@ #ifndef nsMenuBarX_h_ #define nsMenuBarX_h_ -#include "nsIMenuBar.h" -#include "nsObjCExceptions.h" +#import + +#include "nsMenuBaseX.h" #include "nsIMutationObserver.h" -#include "nsCOMArray.h" #include "nsHashtable.h" -#include "nsWeakReference.h" -#include "nsIContent.h" +#include "nsINativeMenuService.h" +#include "nsAutoPtr.h" -#import -#import - -class nsIWidget; -class nsIDocument; -class nsIDOMNode; +class nsMenuX; +class nsMenuItemX; class nsChangeObserver; +class nsIWidget; +class nsIContent; +class nsIDocument; -extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); -PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); - -namespace MenuHelpersX +// The native menu service for creating native menu bars. +class nsNativeMenuServiceX : public nsINativeMenuService { - nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); - NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); - PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); - unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); - nsIMenuBar* GetHiddenWindowMenuBar(); - NSMenuItem* GetStandardEditMenuItem(); -} +public: + NS_DECL_ISUPPORTS + NS_IMETHOD CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode); +}; // Objective-C class used to allow us to have keyboard commands @@ -76,8 +70,8 @@ namespace MenuHelpersX @interface GeckoNSMenu : NSMenu { } -- (BOOL)performKeyEquivalent:(NSEvent *)theEvent; -- (void)actOnKeyEquivalent:(NSEvent *)theEvent; +- (BOOL)performKeyEquivalent:(NSEvent*)theEvent; +- (void)actOnKeyEquivalent:(NSEvent*)theEvent; - (void)performMenuUserInterfaceEffectsForEvent:(NSEvent*)theEvent; @end @@ -90,73 +84,59 @@ namespace MenuHelpersX @end -// -// Native menu bar wrapper -// - -class nsMenuBarX : public nsIMenuBar, - public nsIMutationObserver, - public nsSupportsWeakReference +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuBarX : public nsMenuObjectX, + public nsIMutationObserver { public: - nsMenuBarX(); - virtual ~nsMenuBarX(); + nsMenuBarX(); + virtual ~nsMenuBarX(); - // |NSMenuItem|s target Objective-C objects - static NativeMenuItemTarget* sNativeEventTarget; - - static nsMenuBarX* sLastGeckoMenuBarPainted; - - NS_DECL_ISUPPORTS + static NativeMenuItemTarget* sNativeEventTarget; + static nsMenuBarX* sLastGeckoMenuBarPainted; - // nsIMutationObserver - NS_DECL_NSIMUTATIONOBSERVER + // The following content nodes have been removed from the menu system. + // We save them here for use in command handling. + nsCOMPtr mAboutItemContent; + nsCOMPtr mPrefItemContent; + nsCOMPtr mQuitItemContent; - // nsIMenuBar Methods - NS_IMETHOD Create(nsIWidget * aParent); - NS_IMETHOD GetParent(nsIWidget *&aParent); - NS_IMETHOD SetParent(nsIWidget * aParent); - NS_IMETHOD AddMenu(nsIMenu * aMenu); - NS_IMETHOD GetMenuCount(PRUint32 &aCount); - NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); - NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu); - NS_IMETHOD RemoveMenu(const PRUint32 aCount); - NS_IMETHOD RemoveAll(); - NS_IMETHOD GetNativeData(void*& aData); - NS_IMETHOD Paint(); - NS_IMETHOD SetNativeData(void* aData); - NS_IMETHOD MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); + NS_DECL_ISUPPORTS + NS_DECL_NSIMUTATIONOBSERVER - PRUint32 RegisterForCommand(nsIMenuItem* aItem); - void UnregisterCommand(PRUint32 aCommandID); - nsIMenuItem* GetMenuItemForCommandID(PRUint32 inCommandID); + // nsMenuObjectX + void* NativeData() {return (void*)mRootMenu;} + nsMenuObjectTypeX MenuObjectType() {return eMenuBarObjectType;} - void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); - void UnregisterForContentChanges(nsIContent* aContent); - nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); + // nsMenuBarX + nsresult Create(nsIWidget* aParent, nsIContent* aContent); + void SetParent(nsIWidget* aParent); + void RegisterForContentChanges(nsIContent* aContent, nsChangeObserver* aMenuObject); + void UnregisterForContentChanges(nsIContent* aContent); + PRUint32 RegisterForCommand(nsMenuItemX* aItem); + void UnregisterCommand(PRUint32 aCommandID); + PRUint32 GetMenuCount(); + nsMenuX* GetMenuAt(PRUint32 aIndex); + nsMenuItemX* GetMenuItemForCommandID(PRUint32 inCommandID); + nsresult Paint(); - nsCOMPtr mAboutItemContent; // holds the content node for the about item that has - // been removed from the menubar - nsCOMPtr mPrefItemContent; // as above, but for prefs - nsCOMPtr mQuitItemContent; // as above, but for quit protected: - // Make our menubar conform to Aqua UI guidelines - void AquifyMenuBar(); - void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); + nsresult AddMenu(nsMenuX* aMenu); + void RemoveMenu(PRUint32 aIndex); + nsChangeObserver* LookupContentChangeObserver(nsIContent* aContent); + void HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode); + void AquifyMenuBar(); + NSMenuItem* CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, + int tag, NativeMenuItemTarget* target); + nsresult CreateApplicationMenu(nsMenuX* inMenu); - // build the Application menu shared by all menu bars. - NSMenuItem* CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, - int tag, NativeMenuItemTarget* target); - nsresult CreateApplicationMenu(nsIMenu* inMenu); - - nsCOMArray mMenusArray; // holds refs - nsCOMPtr mMenuBarContent; // menubar content node, strong ref - nsIWidget* mParent; // weak ref - PRBool mIsMenuBarAdded; - PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks - nsIDocument* mDocument; // pointer to document - GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar - nsHashtable mObserverTable; // stores observers for content change notification + nsTArray< nsAutoPtr > mMenuArray; + nsIWidget* mParent; // [weak] + PRUint32 mCurrentCommandID; // unique command id (per menu-bar) to give to next item that asks + nsIDocument* mDocument; // pointer to document + GeckoNSMenu* mRootMenu; // root menu, representing entire menu bar + nsHashtable mObserverTable; // stores observers for content change notification }; #endif // nsMenuBarX_h_ diff --git a/widget/src/cocoa/nsMenuBarX.mm b/widget/src/cocoa/nsMenuBarX.mm index fb46cddb4693..dc1764d3cbc0 100644 --- a/widget/src/cocoa/nsMenuBarX.mm +++ b/widget/src/cocoa/nsMenuBarX.mm @@ -36,37 +36,28 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsCOMPtr.h" -#include "nsIServiceManager.h" -#include "nsIComponentManager.h" -#include "nsINameSpaceManager.h" -#include "nsIMenu.h" -#include "nsIMenuItem.h" -#include "nsIContent.h" - #include "nsMenuBarX.h" #include "nsMenuX.h" -#include "nsChildView.h" +#include "nsMenuItemX.h" +#include "nsMenuUtilsX.h" #include "nsCocoaUtils.h" #include "nsCocoaWindow.h" -#include "nsISupports.h" -#include "nsIWidget.h" +#include "nsCOMPtr.h" #include "nsString.h" -#include "nsIStringBundle.h" -#include "nsIDocument.h" -#include "nsIMutationObserver.h" - -#include "nsIDOMDocument.h" #include "nsWidgetAtoms.h" - #include "nsGUIEvent.h" +#include "nsObjCExceptions.h" +#include "nsHashtable.h" +#include "nsThreadUtils.h" -// CIDs -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); +#include "nsIContent.h" +#include "nsIWidget.h" +#include "nsIDocument.h" +#include "nsIDOMDocument.h" +#include "nsIDOMElement.h" -NS_IMPL_ISUPPORTS3(nsMenuBarX, nsIMenuBar, nsIMutationObserver, nsISupportsWeakReference) +NS_IMPL_ISUPPORTS1(nsMenuBarX, nsIMutationObserver) NativeMenuItemTarget* nsMenuBarX::sNativeEventTarget = nil; nsMenuBarX* nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; @@ -92,18 +83,22 @@ enum { }; -PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent) +NS_IMPL_ISUPPORTS1(nsNativeMenuServiceX, nsINativeMenuService) + +NS_IMETHODIMP nsNativeMenuServiceX::CreateNativeMenuBar(nsIWidget* aParent, nsIContent* aMenuBarNode) { - return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, - nsWidgetAtoms::_true, eCaseMatters) || - inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, - nsWidgetAtoms::_true, eCaseMatters)); + NS_ASSERTION(NS_IsMainThread(), "Attempting to create native menu bar on wrong thread!"); + + nsRefPtr mb = new nsMenuBarX(); + if (!mb) + return NS_ERROR_OUT_OF_MEMORY; + + return mb->Create(aParent, aMenuBarNode); } nsMenuBarX::nsMenuBarX() : mParent(nsnull), - mIsMenuBarAdded(PR_FALSE), mCurrentCommandID(eCommand_ID_Last), mDocument(nsnull) { @@ -122,8 +117,6 @@ nsMenuBarX::~nsMenuBarX() if (nsMenuBarX::sLastGeckoMenuBarPainted == this) nsMenuBarX::sLastGeckoMenuBarPainted = nsnull; - mMenusArray.Clear(); // release all menus - // the quit/pref items of a random window might have been used if there was no // hidden window, thus we need to invalidate the weak references. if (sAboutItemContent == mAboutItemContent) @@ -136,18 +129,174 @@ nsMenuBarX::~nsMenuBarX() // make sure we unregister ourselves as a document observer if (mDocument) mDocument->RemoveMutationObserver(this); - + + // We have to manually clear the array here because clearing causes menu items + // to call back into the menu bar to unregister themselves. We don't want to + // depend on member variable ordering to ensure that the array gets cleared + // before the registration hash table is destroyed. + mMenuArray.Clear(); + [mRootMenu release]; NS_OBJC_END_TRY_ABORT_BLOCK; } -// Do what's necessary to conform to the Aqua guidelines for menus. -void -nsMenuBarX::AquifyMenuBar() +nsresult nsMenuBarX::Create(nsIWidget* aParent, nsIContent* aContent) { - nsCOMPtr domDoc(do_QueryInterface(mMenuBarContent->GetDocument())); + if (!aParent || !aContent) + return NS_ERROR_INVALID_ARG; + + mParent = aParent; + mContent = aContent; + + AquifyMenuBar(); + + nsIDocument* doc = aContent->GetOwnerDoc(); + if (!doc) + return NS_ERROR_FAILURE; + doc->AddMutationObserver(this); + mDocument = doc; + + PRUint32 count = mContent->GetChildCount(); + for (PRUint32 i = 0; i < count; i++) { + nsIContent *menuContent = mContent->GetChildAt(i); + if (menuContent) { + if (menuContent->Tag() == nsWidgetAtoms::menu && + menuContent->IsNodeOfType(nsINode::eXUL)) { + nsAutoString menuName; + menuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); + nsMenuX* newMenu = new nsMenuX(); + if (newMenu) { + nsresult rv = newMenu->Create(this, menuName, this, menuContent); + if (NS_SUCCEEDED(rv)) + AddMenu(newMenu); + else + delete newMenu; + } + } + } + } + + // Give this to the parent window. The parent takes ownership. + return mParent->SetMenuBar(this); +} + + +PRUint32 nsMenuBarX::GetMenuCount() +{ + return mMenuArray.Length(); +} + + +nsresult nsMenuBarX::AddMenu(nsMenuX* aMenu) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + // If we haven't created a global Application menu yet, do it. + if (!sApplicationMenu) { + nsresult rv = NS_OK; // avoid warning about rv being unused + rv = CreateApplicationMenu(aMenu); + NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); + + // Hook the new Application menu up to the menu bar. + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; + } + + // keep track of all added menus + mMenuArray.AppendElement(aMenu); // owner + + NSMenu* nativeMenu = (NSMenu*)aMenu->NativeData(); + nsIContent* menuContent = aMenu->Content(); + if (menuContent->GetChildCount() > 0 && + !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { + NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; + [mRootMenu addItem:newMenuItem]; + [newMenuItem setSubmenu:nativeMenu]; + } + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +void nsMenuBarX::RemoveMenu(PRUint32 aIndex) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + NS_ASSERTION(aIndex < mMenuArray.Length(), "Attempting submenu removal with bad index!"); + + // Our native menu and our internal menu object array might be out of sync. + // This happens, for example, when a submenu is hidden. Because of this we + // should not assume that a native submenu is hooked up. + [mRootMenu removeItem:(mMenuArray[aIndex]->NativeMenuItem())]; + mMenuArray.RemoveElementAt(aIndex); + + NS_OBJC_END_TRY_ABORT_BLOCK; +} + + +nsMenuX* nsMenuBarX::GetMenuAt(PRUint32 aIndex) +{ + if (mMenuArray.Length() <= aIndex) { + NS_ERROR("Requesting menu at invalid index!"); + return NULL; + } + return mMenuArray[aIndex]; +} + + +nsresult nsMenuBarX::Paint() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + NSMenu* mainMenu = [NSApp mainMenu]; + NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); + + // Swap out first item into incoming menu bar. We have to keep the same menu item for the + // Application menu and its submenu is global so we keep passing it along. + NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; + [mainMenu removeItemAtIndex:0]; + [mRootMenu insertItem:firstMenuItem atIndex:0]; + [firstMenuItem release]; + + // Set menu bar and event target. + [NSApp setMainMenu:mRootMenu]; + nsMenuBarX::sLastGeckoMenuBarPainted = this; + + gSomeMenuBarPainted = YES; + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + + +// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so +// the caller can hang onto it if they so choose. It is acceptable to pass nsull +// for |outHiddenNode| if the caller doesn't care about the hidden node. +void nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) +{ + nsCOMPtr menuItem; + inDoc->GetElementById(inID, getter_AddRefs(menuItem)); + nsCOMPtr menuContent(do_QueryInterface(menuItem)); + if (menuContent) { + menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); + if (outHiddenNode) { + *outHiddenNode = menuContent.get(); + NS_IF_ADDREF(*outHiddenNode); + } + } +} + + +// Do what is necessary to conform to the Aqua guidelines for menus. +void nsMenuBarX::AquifyMenuBar() +{ + nsCOMPtr domDoc(do_QueryInterface(mContent->GetDocument())); if (domDoc) { // remove the "About..." item and its separator HideItem(domDoc, NS_LITERAL_STRING("aboutSeparator"), nsnull); @@ -177,145 +326,13 @@ nsMenuBarX::AquifyMenuBar() } -// Hide the item in the menu by setting the 'hidden' attribute. Returns it in |outHiddenNode| so -// the caller can hang onto it if they so choose. It is acceptable to pass nsull -// for |outHiddenNode| if the caller doesn't care about the hidden node. -void -nsMenuBarX::HideItem(nsIDOMDocument* inDoc, const nsAString & inID, nsIContent** outHiddenNode) -{ - nsCOMPtr menuItem; - inDoc->GetElementById(inID, getter_AddRefs(menuItem)); - nsCOMPtr menuContent(do_QueryInterface(menuItem)); - if (menuContent) { - menuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::hidden, NS_LITERAL_STRING("true"), PR_FALSE); - if (outHiddenNode) { - *outHiddenNode = menuContent.get(); - NS_IF_ADDREF(*outHiddenNode); - } - } -} - - -NS_IMETHODIMP -nsMenuBarX::MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget* aParentWindow, void * aMenubarNode) -{ - nsIDOMNode* domNode = static_cast(aMenubarNode); - mMenuBarContent = do_QueryInterface(domNode); // strong ref - NS_ASSERTION(mMenuBarContent, "No content specified for this menubar"); - if (!mMenuBarContent) - return NS_ERROR_FAILURE; - - SetParent(aParentWindow); - - AquifyMenuBar(); - - nsCOMPtr domDoc; - domNode->GetOwnerDocument(getter_AddRefs(domDoc)); - nsCOMPtr doc(do_QueryInterface(domDoc)); - if (!doc) - return NS_ERROR_FAILURE; - doc->AddMutationObserver(this); - mDocument = doc; - - PRUint32 count = mMenuBarContent->GetChildCount(); - for (PRUint32 i = 0; i < count; i++) { - nsIContent *menu = mMenuBarContent->GetChildAt(i); - if (menu) { - if (menu->Tag() == nsWidgetAtoms::menu && - menu->IsNodeOfType(nsINode::eXUL)) { - nsAutoString menuName; - nsAutoString menuAccessKey(NS_LITERAL_STRING(" ")); - menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); - menu->GetAttr(kNameSpaceID_None, nsWidgetAtoms::accesskey, menuAccessKey); - - // Create nsMenu, the menubar will own it - nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); - if (pnsMenu) { - pnsMenu->Create(static_cast(this), menuName, menuAccessKey, this, menu); - AddMenu(pnsMenu); - } - } - } - } - - // Give the aParentWindow this nsMenuBarX to hold onto. - // The parent takes ownership. - aParentWindow->SetMenuBar(this); - - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::Create(nsIWidget *aParent) -{ - SetParent(aParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::GetParent(nsIWidget *&aParent) -{ - NS_IF_ADDREF(aParent = mParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::SetParent(nsIWidget *aParent) -{ - mParent = aParent; // weak ref - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::AddMenu(nsIMenu * aMenu) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - // If we haven't created a global Application menu yet, do it. - if (!sApplicationMenu) { - nsresult rv = NS_OK; // avoid warning about rv being unused - rv = CreateApplicationMenu(aMenu); - NS_ASSERTION(NS_SUCCEEDED(rv), "Can't create Application menu"); - - // Hook the new Application menu up to the menu bar. - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - [[mainMenu itemAtIndex:0] setSubmenu:sApplicationMenu]; - } - - // keep track of all added menus - mMenusArray.AppendObject(aMenu); // owner - - NSMenu* nativeMenu = NULL; - aMenu->GetNativeData((void**)&nativeMenu); - - nsCOMPtr menu; - aMenu->GetMenuContent(getter_AddRefs(menu)); - if (menu->GetChildCount() > 0 && - !NodeIsHiddenOrCollapsed(menu)) { - NSMenuItem* newMenuItem = [[[NSMenuItem alloc] initWithTitle:[nativeMenu title] action:NULL keyEquivalent:@""] autorelease]; - [mRootMenu addItem:newMenuItem]; - [newMenuItem setSubmenu:nativeMenu]; - } - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - // for creating menu items destined for the Application menu -NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString& nodeID, SEL action, +NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsMenuX* inMenu, const nsAString& nodeID, SEL action, int tag, NativeMenuItemTarget* target) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - nsCOMPtr menu; - inMenu->GetMenuContent(getter_AddRefs(menu)); - if (!menu) - return nil; - - nsCOMPtr doc = menu->GetDocument(); + nsCOMPtr doc = inMenu->Content()->GetDocument(); if (!doc) return nil; @@ -356,8 +373,8 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString // now grab the key equivalent modifiers nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 geckoModifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); - macKeyModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(geckoModifiers); + PRUint8 geckoModifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); + macKeyModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(geckoModifiers); } } // get the label into NSString-form @@ -382,8 +399,7 @@ NSMenuItem* nsMenuBarX::CreateNativeAppMenuItem(nsIMenu* inMenu, const nsAString // build the Application menu shared by all menu bars -nsresult -nsMenuBarX::CreateApplicationMenu(nsIMenu* inMenu) +nsresult nsMenuBarX::CreateApplicationMenu(nsMenuX* inMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -536,111 +552,33 @@ nsMenuBarX::CreateApplicationMenu(nsIMenu* inMenu) } -NS_IMETHODIMP nsMenuBarX::GetMenuCount(PRUint32 &aCount) +void nsMenuBarX::SetParent(nsIWidget* aParent) { - aCount = mMenusArray.Count(); - return NS_OK; + mParent = aParent; } - -NS_IMETHODIMP nsMenuBarX::GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) -{ - aMenu = NULL; - nsCOMPtr menu = mMenusArray.ObjectAt(aCount); - if (!menu) - return NS_OK; - - return CallQueryInterface(menu, &aMenu); // addref -} - - -NS_IMETHODIMP nsMenuBarX::InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::RemoveMenu(const PRUint32 aCount) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - mMenusArray.RemoveObjectAt(aCount); - [mRootMenu removeItemAtIndex:aCount]; - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -NS_IMETHODIMP nsMenuBarX::RemoveAll() -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::GetNativeData(void *& aData) -{ - aData = (void*)mRootMenu; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuBarX::SetNativeData(void* aData) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuBarX::Paint() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - NSMenu* mainMenu = [NSApp mainMenu]; - NS_ASSERTION([mainMenu numberOfItems] > 0, "Main menu does not have any items, something is terribly wrong!"); - - // Swap out first item into incoming menu bar. We have to keep the same menu item for the - // Application menu and its submenu is global so we keep passing it along. - NSMenuItem* firstMenuItem = [[mainMenu itemAtIndex:0] retain]; - [mainMenu removeItemAtIndex:0]; - [mRootMenu insertItem:firstMenuItem atIndex:0]; - [firstMenuItem release]; - - // Set menu bar and event target. - [NSApp setMainMenu:mRootMenu]; - nsMenuBarX::sLastGeckoMenuBarPainted = this; - - gSomeMenuBarPainted = YES; - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - // // nsIMutationObserver // -void -nsMenuBarX::CharacterDataWillChange(nsIDocument * aDocument, - nsIContent * aContent, - CharacterDataChangeInfo * aInfo) -{ -} - -void -nsMenuBarX::CharacterDataChanged(nsIDocument * aDocument, - nsIContent * aContent, - CharacterDataChangeInfo * aInfo) +void nsMenuBarX::CharacterDataWillChange(nsIDocument* aDocument, + nsIContent* aContent, + CharacterDataChangeInfo* aInfo) { } -void -nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, - PRInt32 aNewIndexInContainer) +void nsMenuBarX::CharacterDataChanged(nsIDocument* aDocument, + nsIContent* aContent, + CharacterDataChangeInfo* aInfo) { - if (aContainer != mMenuBarContent) { +} + + +void nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, + PRInt32 aNewIndexInContainer) +{ + if (aContainer != mContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aContainer, aNewIndexInContainer); @@ -656,17 +594,15 @@ nsMenuBarX::ContentAppended(nsIDocument* aDocument, nsIContent* aContainer, } -void -nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) +void nsMenuBarX::NodeWillBeDestroyed(const nsINode * aNode) { mDocument = nsnull; } -void -nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, - PRInt32 aNameSpaceID, nsIAtom * aAttribute, - PRInt32 aModType, PRUint32 aStateMask) +void nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, + PRInt32 aNameSpaceID, nsIAtom * aAttribute, + PRInt32 aModType, PRUint32 aStateMask) { // lookup and dispatch to registered thang nsChangeObserver* obs = LookupContentChangeObserver(aContent); @@ -675,11 +611,10 @@ nsMenuBarX::AttributeChanged(nsIDocument * aDocument, nsIContent * aContent, } -void -nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer == mMenuBarContent) { + if (aContainer == mContent) { UnregisterForContentChanges(aChild); RemoveMenu(aIndexInContainer); } @@ -700,11 +635,10 @@ nsMenuBarX::ContentRemoved(nsIDocument * aDocument, nsIContent * aContainer, } -void -nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, - nsIContent * aChild, PRInt32 aIndexInContainer) +void nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, + nsIContent * aChild, PRInt32 aIndexInContainer) { - if (aContainer != mMenuBarContent) { + if (aContainer != mContent) { nsChangeObserver* obs = LookupContentChangeObserver(aContainer); if (obs) obs->ObserveContentInserted(aDocument, aChild, aIndexInContainer); @@ -720,8 +654,7 @@ nsMenuBarX::ContentInserted(nsIDocument * aDocument, nsIContent * aContainer, } -void -nsMenuBarX::ParentChainChanged(nsIContent *aContent) +void nsMenuBarX::ParentChainChanged(nsIContent *aContent) { } @@ -730,24 +663,21 @@ nsMenuBarX::ParentChainChanged(nsIContent *aContent) // lifetime of all these items is bounded by the lifetime of the menubar. No need to add // any more strong refs to the picture because the containment hierarchy already uses // strong refs. -void -nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) +void nsMenuBarX::RegisterForContentChanges(nsIContent *aContent, nsChangeObserver *aMenuObject) { nsVoidKey key(aContent); mObserverTable.Put(&key, aMenuObject); } -void -nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) +void nsMenuBarX::UnregisterForContentChanges(nsIContent *aContent) { nsVoidKey key(aContent); mObserverTable.Remove(&key); } -nsChangeObserver* -nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) +nsChangeObserver* nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) { nsVoidKey key(aContent); return reinterpret_cast(mObserverTable.Get(&key)); @@ -756,8 +686,7 @@ nsMenuBarX::LookupContentChangeObserver(nsIContent* aContent) // Given a menu item, creates a unique 4-character command ID and // maps it to the item. Returns the id for use by the client. -PRUint32 -nsMenuBarX::RegisterForCommand(nsIMenuItem* inMenuItem) +PRUint32 nsMenuBarX::RegisterForCommand(nsMenuItemX* inMenuItem) { // no real need to check for uniqueness. We always start afresh with each // window at 1. Even if we did get close to the reserved Apple command id's, @@ -777,164 +706,17 @@ nsMenuBarX::RegisterForCommand(nsIMenuItem* inMenuItem) // Removes the mapping between the given 4-character command ID // and its associated menu item. -void -nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) +void nsMenuBarX::UnregisterCommand(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); mObserverTable.Remove(&key); } -nsIMenuItem* -nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) +nsMenuItemX* nsMenuBarX::GetMenuItemForCommandID(PRUint32 inCommandID) { nsPRUint32Key key(inCommandID); - return reinterpret_cast(mObserverTable.Get(&key)); -} - - -nsEventStatus -MenuHelpersX::DispatchCommandTo(nsIContent* aTargetContent) -{ - NS_PRECONDITION(aTargetContent, "null ptr"); - - nsEventStatus status = nsEventStatus_eConsumeNoDefault; - nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); - - // FIXME: Should probably figure out how to init this with the actual - // pressed keys, but this is a big old edge case anyway. -dwh - - aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); - return status; -} - - -NSString* MenuHelpersX::CreateTruncatedCocoaLabel(const nsString& itemLabel) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with - // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an - // easy way to compute what this should be given the system font, etc, so we're just going - // to hard code it to something reasonable and bigger fonts will just have to deal. - const short kMaxItemPixelWidth = 300; - NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; - ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); - return label; // caller releases - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; -} - - -PRUint8 MenuHelpersX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) -{ - PRUint8 modifiers = knsMenuItemNoModifier; - char* str = ToNewCString(modifiersAttribute); - char* newStr; - char* token = nsCRT::strtok(str, ", \t", &newStr); - while (token != NULL) { - if (PL_strcmp(token, "shift") == 0) - modifiers |= knsMenuItemShiftModifier; - else if (PL_strcmp(token, "alt") == 0) - modifiers |= knsMenuItemAltModifier; - else if (PL_strcmp(token, "control") == 0) - modifiers |= knsMenuItemControlModifier; - else if ((PL_strcmp(token, "accel") == 0) || - (PL_strcmp(token, "meta") == 0)) { - modifiers |= knsMenuItemCommandModifier; - } - token = nsCRT::strtok(newStr, ", \t", &newStr); - } - nsMemory::Free(str); - - return modifiers; -} - - -unsigned int MenuHelpersX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) -{ - unsigned int macModifiers = 0; - - if (geckoModifiers & knsMenuItemShiftModifier) - macModifiers |= NSShiftKeyMask; - if (geckoModifiers & knsMenuItemAltModifier) - macModifiers |= NSAlternateKeyMask; - if (geckoModifiers & knsMenuItemControlModifier) - macModifiers |= NSControlKeyMask; - if (geckoModifiers & knsMenuItemCommandModifier) - macModifiers |= NSCommandKeyMask; - - return macModifiers; -} - - -nsIMenuBar* MenuHelpersX::GetHiddenWindowMenuBar() -{ - nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); - if (hiddenWindowWidgetNoCOMPtr) - return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); - else - return nsnull; -} - - -// It would be nice if we could localize these edit menu names. -static NSMenuItem* standardEditMenuItem = nil; -NSMenuItem* MenuHelpersX::GetStandardEditMenuItem() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; - - if (standardEditMenuItem) - return standardEditMenuItem; - - NSMenuItem* standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; - NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; - [standardEditMenuItem setSubmenu:standardEditMenu]; - [standardEditMenu release]; - - // Add Undo - NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; - [standardEditMenu addItem:undoItem]; - [undoItem release]; - - // Add Redo - NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; - [standardEditMenu addItem:redoItem]; - [redoItem release]; - - // Add separator - [standardEditMenu addItem:[NSMenuItem separatorItem]]; - - // Add Cut - NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; - [standardEditMenu addItem:cutItem]; - [cutItem release]; - - // Add Copy - NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; - [standardEditMenu addItem:copyItem]; - [copyItem release]; - - // Add Paste - NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; - [standardEditMenu addItem:pasteItem]; - [pasteItem release]; - - // Add Delete - NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; - [standardEditMenu addItem:deleteItem]; - [deleteItem release]; - - // Add Select All - NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; - [standardEditMenu addItem:selectAllItem]; - [selectAllItem release]; - - standardEditMenuItem = standardEditMenuItem; - - return standardEditMenuItem; - - NS_OBJC_END_TRY_ABORT_BLOCK_NIL; + return reinterpret_cast(mObserverTable.Get(&key)); } @@ -1022,13 +804,13 @@ static BOOL gActOnSpecialCommands = YES; nsIContent* mostSpecificContent = sAboutItemContent; if (menuBar && menuBar->mAboutItemContent) mostSpecificContent = menuBar->mAboutItemContent; - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Prefs) { nsIContent* mostSpecificContent = sPrefItemContent; if (menuBar && menuBar->mPrefItemContent) mostSpecificContent = menuBar->mPrefItemContent; - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else if (tag == eCommand_ID_Quit) { nsIContent* mostSpecificContent = sQuitItemContent; @@ -1038,7 +820,7 @@ static BOOL gActOnSpecialCommands = YES; // message. If you want to stop a quit from happening, provide quit content and return // the event as unhandled. if (mostSpecificContent) { - MenuHelpersX::DispatchCommandTo(mostSpecificContent); + nsMenuUtilsX::DispatchCommandTo(mostSpecificContent); } else { [NSApp terminate:nil]; @@ -1061,12 +843,11 @@ static BOOL gActOnSpecialCommands = YES; return; // given the commandID, look it up in our hashtable and dispatch to - // that content node. Recall that we store weak pointers to the content - // nodes in the hash table. + // that menu item. if (menuBar) { - nsIMenuItem* content = menuBar->GetMenuItemForCommandID(static_cast(tag)); - if (content) - content->DoCommand(); + nsMenuItemX* menuItem = menuBar->GetMenuItemForCommandID(static_cast(tag)); + if (menuItem) + menuItem->DoCommand(); } NS_OBJC_END_TRY_ABORT_BLOCK; diff --git a/widget/src/cocoa/nsMenuBaseX.h b/widget/src/cocoa/nsMenuBaseX.h new file mode 100644 index 000000000000..65131507381d --- /dev/null +++ b/widget/src/cocoa/nsMenuBaseX.h @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsMenuBaseX_h_ +#define nsMenuBaseX_h_ + +#include "nsCOMPtr.h" +#include "nsIContent.h" + +enum nsMenuObjectTypeX { + eMenuBarObjectType, + eSubmenuObjectType, + eMenuItemObjectType +}; + +// All menu objects subclass this. +// Menu bars are owned by their top-level nsIWidgets. +// All other objects are memory-managed based on the DOM. +// Content removal deletes them immediately and nothing else should. +// Do not attempt to hold strong references to them or delete them. +class nsMenuObjectX +{ +public: + virtual ~nsMenuObjectX() { } + virtual nsMenuObjectTypeX MenuObjectType()=0; + virtual void* NativeData()=0; + nsIContent* Content() { return mContent; } + +protected: + nsCOMPtr mContent; +}; + +#endif // nsMenuBaseX_h_ diff --git a/widget/src/cocoa/nsMenuItemIconX.h b/widget/src/cocoa/nsMenuItemIconX.h index e774ad4ffdd5..61810d90b22b 100644 --- a/widget/src/cocoa/nsMenuItemIconX.h +++ b/widget/src/cocoa/nsMenuItemIconX.h @@ -51,7 +51,7 @@ class nsIURI; class nsIContent; class imgIRequest; -class nsIMenu; +class nsMenuObjectX; #import #import @@ -60,10 +60,9 @@ class nsIMenu; class nsMenuItemIconX : public imgIDecoderObserver { public: - nsMenuItemIconX(nsISupports* aMenuItem, - nsIMenu* aMenu, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem); + nsMenuItemIconX(nsMenuObjectX* aMenuItem, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem); private: ~nsMenuItemIconX(); @@ -86,10 +85,7 @@ public: protected: nsCOMPtr mContent; nsCOMPtr mIconRequest; - nsISupports* mMenuItem; - nsIMenu* mMenu; - MenuRef mMenuRef; - PRUint16 mMenuItemIndex; + nsMenuObjectX* mMenuObject; PRPackedBool mLoadedIcon; PRPackedBool mSetIcon; NSMenuItem* mNativeMenuItem; diff --git a/widget/src/cocoa/nsMenuItemIconX.mm b/widget/src/cocoa/nsMenuItemIconX.mm index a756b4ecc812..c2c26cc059b3 100644 --- a/widget/src/cocoa/nsMenuItemIconX.mm +++ b/widget/src/cocoa/nsMenuItemIconX.mm @@ -45,8 +45,6 @@ #include "nsObjCExceptions.h" #include "prmem.h" -#include "nsIMenu.h" -#include "nsIMenuItem.h" #include "nsIContent.h" #include "nsIDocument.h" #include "nsINameSpaceManager.h" @@ -64,6 +62,7 @@ #include "imgIRequest.h" #include "gfxIImageFrame.h" #include "nsIImage.h" +#include "nsMenuItemX.h" static const PRUint32 kIconWidth = 16; static const PRUint32 kIconHeight = 16; @@ -83,15 +82,11 @@ PRAllocCGFree(void* aInfo, const void* aData, size_t aSize) { NS_IMPL_ISUPPORTS2(nsMenuItemIconX, imgIContainerObserver, imgIDecoderObserver) -nsMenuItemIconX::nsMenuItemIconX(nsISupports* aMenuItem, - nsIMenu* aMenu, - nsIContent* aContent, - NSMenuItem* aNativeMenuItem) +nsMenuItemIconX::nsMenuItemIconX(nsMenuObjectX* aMenuItem, + nsIContent* aContent, + NSMenuItem* aNativeMenuItem) : mContent(aContent) -, mMenuItem(aMenuItem) -, mMenu(aMenu) -, mMenuRef(NULL) -, mMenuItemIndex(0) +, mMenuObject(aMenuItem) , mLoadedIcon(PR_FALSE) , mSetIcon(PR_FALSE) , mNativeMenuItem(aNativeMenuItem) @@ -112,18 +107,6 @@ nsMenuItemIconX::SetupIcon() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - nsresult rv; - if (!mMenuRef || !mMenuItemIndex) { - // These values are initialized here instead of in the constructor - // because they depend on the parent menu, mMenu, having inserted - // this object into its array of children. That can only happen after - // the object is constructed. - rv = mMenu->GetMenuRefAndItemIndexForMenuItem(mMenuItem, - (void**)&mMenuRef, - &mMenuItemIndex); - if (NS_FAILED(rv)) return rv; - } - // Still don't have one, then something is wrong, get out of here. if (!mNativeMenuItem) { NS_ERROR("No native menu item\n"); @@ -131,7 +114,7 @@ nsMenuItemIconX::SetupIcon() } nsCOMPtr iconURI; - rv = GetIconURI(getter_AddRefs(iconURI)); + nsresult rv = GetIconURI(getter_AddRefs(iconURI)); if (NS_FAILED(rv)) { // There is no icon for this menu item. An icon might have been set // earlier. Clear it. @@ -155,15 +138,14 @@ nsMenuItemIconX::GetIconURI(nsIURI** aIconURI) // The downside is that it's possible to get a menu item marked with a // native checkmark and a checkmark for an icon. Head off that possibility // by pretending that no icon exists if this is a checkable menu item. - nsCOMPtr menuItem = do_QueryInterface(mMenuItem); - if (menuItem) { - nsIMenuItem::EMenuItemType menuItemType; - menuItem->GetMenuItemType(&menuItemType); - if (menuItemType != nsIMenuItem::eRegular) + if (mMenuObject->MenuObjectType() == eMenuItemObjectType) { + nsMenuItemX* menuItem = static_cast(mMenuObject); + if (menuItem->GetMenuItemType() != eRegularMenuItemType) return NS_ERROR_FAILURE; } - if (!mContent) return NS_ERROR_FAILURE; + if (!mContent) + return NS_ERROR_FAILURE; // First, look at the content node's "image" attribute. nsAutoString imageURIString; diff --git a/widget/src/cocoa/nsMenuItemX.h b/widget/src/cocoa/nsMenuItemX.h index eae19a90216b..3054e82988c1 100644 --- a/widget/src/cocoa/nsMenuItemX.h +++ b/widget/src/cocoa/nsMenuItemX.h @@ -39,69 +39,68 @@ #ifndef nsMenuItemX_h_ #define nsMenuItemX_h_ -#include "nsIMenuItem.h" -#include "nsString.h" +#include "nsMenuBaseX.h" #include "nsChangeObserver.h" #include "nsAutoPtr.h" #import -class nsIMenu; +class nsString; class nsMenuItemIconX; +class nsMenuX; +class nsMenuBarX; -/** - * Native menu item wrapper - */ +enum { + knsMenuItemNoModifier = 0, + knsMenuItemShiftModifier = (1 << 0), + knsMenuItemAltModifier = (1 << 1), + knsMenuItemControlModifier = (1 << 2), + knsMenuItemCommandModifier = (1 << 3) +}; -class nsMenuItemX : public nsIMenuItem, +enum EMenuItemType { + eRegularMenuItemType = 0, + eCheckboxMenuItemType, + eRadioMenuItemType, + eSeparatorMenuItemType +}; + + +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuItemX : public nsMenuObjectX, public nsChangeObserver { public: nsMenuItemX(); virtual ~nsMenuItemX(); - // nsISupports - NS_DECL_ISUPPORTS NS_DECL_CHANGEOBSERVER - // nsIMenuItem Methods - NS_IMETHOD Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode); - NS_IMETHOD GetLabel(nsString &aText); - NS_IMETHOD GetShortcutChar(nsString &aText); - NS_IMETHOD GetEnabled(PRBool *aIsEnabled); - NS_IMETHOD SetChecked(PRBool aIsEnabled); - NS_IMETHOD GetChecked(PRBool *aIsEnabled); - NS_IMETHOD GetMenuItemType(EMenuItemType *aIsCheckbox); - NS_IMETHOD GetNativeData(void*& aData); - NS_IMETHOD IsSeparator(PRBool & aIsSep); + // nsMenuObjectX + void* NativeData() {return (void*)mNativeMenuItem;} + nsMenuObjectTypeX MenuObjectType() {return eMenuItemObjectType;} - NS_IMETHOD DoCommand(); - NS_IMETHOD DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled); - NS_IMETHOD SetupIcon(); - NS_IMETHOD GetMenuItemContent(nsIContent ** aMenuItemContent); + // nsMenuItemX + nsresult Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode); + nsresult SetChecked(PRBool aIsChecked); + EMenuItemType GetMenuItemType(); + void DoCommand(); + nsresult DispatchDOMEvent(const nsString &eventName, PRBool* preventDefaultCalled); + void SetupIcon(); protected: - void UncheckRadioSiblings(nsIContent* inCheckedElement); void SetKeyEquiv(PRUint8 aModifiers, const nsString &aText); - NSMenuItem* mNativeMenuItem; // strong ref, we own - - nsString mLabel; - nsString mKeyEquivalent; - - nsIMenu* mMenuParent; // weak, parent owns us - nsMenuBarX* mMenuBar; // weak - - nsCOMPtr mContent; + EMenuItemType mType; + NSMenuItem* mNativeMenuItem; // [strong] + nsMenuX* mMenuParent; // [weak] + nsMenuBarX* mMenuBar; // [weak] nsCOMPtr mCommandContent; nsRefPtr mIcon; - - PRUint8 mModifiers; - PRPackedBool mEnabled; - PRPackedBool mIsChecked; - EMenuItemType mType; // regular, checkbox, radio, or separator + PRBool mIsChecked; }; #endif // nsMenuItemX_h_ diff --git a/widget/src/cocoa/nsMenuItemX.mm b/widget/src/cocoa/nsMenuItemX.mm index 2cfd8b11823c..fecdeffd4bc2 100644 --- a/widget/src/cocoa/nsMenuItemX.mm +++ b/widget/src/cocoa/nsMenuItemX.mm @@ -36,39 +36,37 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsCOMPtr.h" -#include "nsIContent.h" -#include "nsObjCExceptions.h" -#include "nsMenuBarX.h" // for MenuHelpers namespace #include "nsMenuItemX.h" -#include "nsIMenu.h" -#include "nsIMenuBar.h" -#include "nsIWidget.h" -#include "nsINameSpaceManager.h" +#include "nsMenuBarX.h" +#include "nsMenuX.h" +#include "nsMenuItemIconX.h" +#include "nsMenuUtilsX.h" + +#include "nsObjCExceptions.h" + +#include "nsCOMPtr.h" #include "nsWidgetAtoms.h" -#include "nsIServiceManager.h" +#include "nsGUIEvent.h" + +#include "nsIContent.h" +#include "nsIWidget.h" #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIPrivateDOMEvent.h" #include "nsIDOMEventTarget.h" #include "nsIDOMDocumentEvent.h" - -#include "nsMenuItemIconX.h" -#include "nsGUIEvent.h" - - -NS_IMPL_ISUPPORTS1(nsMenuItemX, nsIMenuItem) +#include "nsIDOMElement.h" nsMenuItemX::nsMenuItemX() { - mNativeMenuItem = nil; - mMenuParent = nsnull; - mMenuBar = nsnull; - mKeyEquivalent.AssignLiteral(" "); - mEnabled = PR_TRUE; - mIsChecked = PR_FALSE; - mType = eRegular; + mType = eRegularMenuItemType; + mNativeMenuItem = nil; + mMenuParent = nsnull; + mMenuBar = nsnull; + mIsChecked = PR_FALSE; + + MOZ_COUNT_CTOR(nsMenuItemX); } @@ -82,23 +80,24 @@ nsMenuItemX::~nsMenuItemX() if (mCommandContent) mMenuBar->UnregisterForContentChanges(mCommandContent); + MOZ_COUNT_DTOR(nsMenuItemX); + NS_OBJC_END_TRY_ABORT_BLOCK; } -NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuItemType aItemType, - nsMenuBarX* aMenuBar, nsIContent* aNode) +nsresult nsMenuItemX::Create(nsMenuX* aParent, const nsString& aLabel, EMenuItemType aItemType, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - mContent = aNode; // addref - mMenuParent = aParent; // weak - mType = aItemType; + mMenuParent = aParent; + mContent = aNode; - // register for AttributeChanged messages mMenuBar = aMenuBar; - NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); + NS_ASSERTION(mMenuBar, "No menu bar given, must have one!"); + mMenuBar->RegisterForContentChanges(mContent, this); nsCOMPtr domDoc(do_QueryInterface(mContent->GetCurrentDoc())); @@ -120,26 +119,25 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt } } } - - // set up mEnabled based on command content if it exists, otherwise do it based + + // decide enabled state based on command content if it exists, otherwise do it based // on our own content + PRBool isEnabled; if (mCommandContent) - mEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + isEnabled = !mCommandContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); else - mEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); - - mLabel = aLabel; - + isEnabled = !mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, nsWidgetAtoms::_true, eCaseMatters); + // set up the native menu item - if (mType == nsIMenuItem::eSeparator) { + if (mType == eSeparatorMenuItemType) { mNativeMenuItem = [[NSMenuItem separatorItem] retain]; } else { - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(aLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; - - [mNativeMenuItem setEnabled:(BOOL)mEnabled]; + + [mNativeMenuItem setEnabled:(BOOL)isEnabled]; SetChecked(mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)); @@ -148,11 +146,9 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt if (domDoc) { nsAutoString keyValue; mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::key, keyValue); - if (!keyValue.IsEmpty()) { nsCOMPtr keyElement; domDoc->GetElementById(keyValue, getter_AddRefs(keyElement)); - if (keyElement) { nsCOMPtr keyContent(do_QueryInterface(keyElement)); nsAutoString keyChar(NS_LITERAL_STRING(" ")); @@ -160,7 +156,7 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt nsAutoString modifiersStr; keyContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::modifiers, modifiersStr); - PRUint8 modifiers = MenuHelpersX::GeckoModifiersForNodeAttribute(modifiersStr); + PRUint8 modifiers = nsMenuUtilsX::GeckoModifiersForNodeAttribute(modifiersStr); SetKeyEquiv(modifiers, keyChar); } @@ -168,31 +164,17 @@ NS_METHOD nsMenuItemX::Create(nsIMenu* aParent, const nsString & aLabel, EMenuIt } } - mIcon = new nsMenuItemIconX(static_cast(this), mMenuParent, mContent, mNativeMenuItem); - + mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); + if (!mIcon) + return NS_ERROR_OUT_OF_MEMORY; + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -NS_METHOD -nsMenuItemX::GetLabel(nsString &aText) -{ - aText = mLabel; - return NS_OK; -} - - -NS_METHOD -nsMenuItemX::GetEnabled(PRBool *aIsEnabled) -{ - *aIsEnabled = mEnabled; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::SetChecked(PRBool aIsChecked) +nsresult nsMenuItemX::SetChecked(PRBool aIsChecked) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -215,41 +197,19 @@ NS_METHOD nsMenuItemX::SetChecked(PRBool aIsChecked) } -NS_METHOD nsMenuItemX::GetChecked(PRBool *aIsEnabled) +EMenuItemType nsMenuItemX::GetMenuItemType() { - *aIsEnabled = mIsChecked; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::GetMenuItemType(EMenuItemType *aType) -{ - *aType = mType; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::GetNativeData(void *& aData) -{ - aData = mNativeMenuItem; - return NS_OK; -} - - -NS_METHOD nsMenuItemX::IsSeparator(PRBool & aIsSep) -{ - aIsSep = (mType == nsIMenuItem::eSeparator); - return NS_OK; + return mType; } // Executes the "cached" javaScript command. // Returns NS_OK if the command was executed properly, otherwise an error code. -NS_IMETHODIMP nsMenuItemX::DoCommand() +void nsMenuItemX::DoCommand() { // flip "checked" state if we're a checkbox menu, or an un-checked radio menu - if (mType == nsIMenuItem::eCheckbox || - (mType == nsIMenuItem::eRadio && !mIsChecked)) { + if (mType == eCheckboxMenuItemType || + (mType == eRadioMenuItemType && !mIsChecked)) { if (!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::autocheck, nsWidgetAtoms::_false, eCaseMatters)) SetChecked(!mIsChecked); @@ -260,29 +220,28 @@ NS_IMETHODIMP nsMenuItemX::DoCommand() nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); mContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); - return NS_OK; } -NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) +nsresult nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *preventDefaultCalled) { if (!mContent) return NS_ERROR_FAILURE; - + // get owner document for content nsCOMPtr parentDoc = mContent->GetOwnerDoc(); if (!parentDoc) { NS_WARNING("Failed to get owner nsIDocument for menu item content"); return NS_ERROR_FAILURE; } - + // get interface for creating DOM events from content owner document nsCOMPtr DOMEventFactory = do_QueryInterface(parentDoc); if (!DOMEventFactory) { NS_WARNING("Failed to QI parent nsIDocument to nsIDOMDocumentEvent"); return NS_ERROR_FAILURE; } - + // create DOM event nsCOMPtr event; nsresult rv = DOMEventFactory->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); @@ -291,11 +250,11 @@ NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *p return rv; } event->InitEvent(eventName, PR_TRUE, PR_TRUE); - + // mark DOM event as trusted nsCOMPtr privateEvent(do_QueryInterface(event)); privateEvent->SetTrusted(PR_TRUE); - + // send DOM event nsCOMPtr eventTarget = do_QueryInterface(mContent); rv = eventTarget->DispatchEvent(event, preventDefaultCalled); @@ -303,22 +262,14 @@ NS_IMETHODIMP nsMenuItemX::DispatchDOMEvent(const nsString &eventName, PRBool *p NS_WARNING("Failed to send DOM event via nsIDOMEventTarget"); return rv; } - + return NS_OK; } -NS_METHOD nsMenuItemX::GetShortcutChar(nsString &aText) -{ - aText = mKeyEquivalent; - return NS_OK; -} - - // Walk the sibling list looking for nodes with the same name and // uncheck them all. -void -nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) +void nsMenuItemX::UncheckRadioSiblings(nsIContent* inCheckedContent) { nsAutoString myGroupName; inCheckedContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::name, myGroupName); @@ -349,13 +300,11 @@ void nsMenuItemX::SetKeyEquiv(PRUint8 aModifiers, const nsString &aText) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - mModifiers = aModifiers; - unsigned int macModifiers = MenuHelpersX::MacModifiersForGeckoModifiers(mModifiers); + unsigned int macModifiers = nsMenuUtilsX::MacModifiersForGeckoModifiers(aModifiers); [mNativeMenuItem setKeyEquivalentModifierMask:macModifiers]; - mKeyEquivalent = aText; - NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)mKeyEquivalent.get() - length:mKeyEquivalent.Length()] lowercaseString]; + NSString *keyEquivalent = [[NSString stringWithCharacters:(unichar*)aText.get() + length:aText.Length()] lowercaseString]; if ([keyEquivalent isEqualToString:@" "]) [mNativeMenuItem setKeyEquivalent:@""]; else @@ -382,7 +331,7 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten if (aAttribute == nsWidgetAtoms::checked) { // if we're a radio menu, uncheck our sibling radio items. No need to // do any of this if we're just a normal check menu. - if (mType == nsIMenuItem::eRadio) { + if (mType == eRadioMenuItemType) { if (mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::checked, nsWidgetAtoms::_true, eCaseMatters)) UncheckRadioSiblings(mContent); @@ -432,8 +381,7 @@ nsMenuItemX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aConten } -void -nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { if (aChild == mCommandContent) { mMenuBar->UnregisterForContentChanges(mCommandContent); @@ -444,27 +392,14 @@ nsMenuItemX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, P } -void -nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) +void nsMenuItemX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, PRInt32 aIndexInContainer) { mMenuParent->SetRebuild(PR_TRUE); } -NS_IMETHODIMP -nsMenuItemX::SetupIcon() +void nsMenuItemX::SetupIcon() { - if (!mIcon) - return NS_ERROR_OUT_OF_MEMORY; - - return mIcon->SetupIcon(); -} - - -NS_IMETHODIMP -nsMenuItemX::GetMenuItemContent(nsIContent ** aMenuItemContent) -{ - NS_ENSURE_ARG_POINTER(aMenuItemContent); - NS_IF_ADDREF(*aMenuItemContent = mContent); - return NS_OK; + if (mIcon) + mIcon->SetupIcon(); } diff --git a/widget/src/cocoa/nsMenuUtilsX.h b/widget/src/cocoa/nsMenuUtilsX.h new file mode 100644 index 000000000000..ff3ffd91ef79 --- /dev/null +++ b/widget/src/cocoa/nsMenuUtilsX.h @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsMenuUtilsX_h_ +#define nsMenuUtilsX_h_ + +#include "nscore.h" +#include "nsGUIEvent.h" + +#import + +class nsIContent; +class nsString; +class nsMenuBarX; + +// Namespace containing utility functions used in our native menu implementation. +namespace nsMenuUtilsX +{ + nsEventStatus DispatchCommandTo(nsIContent* aTargetContent); + NSString* CreateTruncatedCocoaLabel(const nsString& itemLabel); // returned object is not retained + PRUint8 GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute); + unsigned int MacModifiersForGeckoModifiers(PRUint8 geckoModifiers); + nsMenuBarX* GetHiddenWindowMenuBar(); // returned object is not retained + NSMenuItem* GetStandardEditMenuItem(); // returned object is not retained + PRBool NodeIsHiddenOrCollapsed(nsIContent* inContent); +} + +#endif // nsMenuUtilsX_h_ diff --git a/widget/src/cocoa/nsMenuUtilsX.mm b/widget/src/cocoa/nsMenuUtilsX.mm new file mode 100644 index 000000000000..d1d645af049c --- /dev/null +++ b/widget/src/cocoa/nsMenuUtilsX.mm @@ -0,0 +1,197 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsMenuUtilsX.h" +#include "nsMenuBarX.h" +#include "nsMenuItemX.h" +#include "nsObjCExceptions.h" +#include "nsCocoaUtils.h" +#include "nsCocoaWindow.h" +#include "nsWidgetAtoms.h" + +#import + +nsEventStatus nsMenuUtilsX::DispatchCommandTo(nsIContent* aTargetContent) +{ + NS_PRECONDITION(aTargetContent, "null ptr"); + + nsEventStatus status = nsEventStatus_eConsumeNoDefault; + nsXULCommandEvent event(PR_TRUE, NS_XUL_COMMAND, nsnull); + + // FIXME: Should probably figure out how to init this with the actual + // pressed keys, but this is a big old edge case anyway. -dwh + + aTargetContent->DispatchDOMEvent(&event, nsnull, nsnull, &status); + return status; +} + + +NSString* nsMenuUtilsX::CreateTruncatedCocoaLabel(const nsString& itemLabel) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + // ::TruncateThemeText() doesn't take the number of characters to truncate to, it takes a pixel with + // to fit the string in. Ugh. I talked it over with sfraser and we couldn't come up with an + // easy way to compute what this should be given the system font, etc, so we're just going + // to hard code it to something reasonable and bigger fonts will just have to deal. + const short kMaxItemPixelWidth = 300; + NSMutableString *label = [[NSMutableString stringWithCharacters:itemLabel.get() length:itemLabel.Length()] retain]; + ::TruncateThemeText((CFMutableStringRef)label, kThemeMenuItemFont, kThemeStateActive, kMaxItemPixelWidth, truncMiddle, NULL); + return label; // caller releases + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; +} + + +PRUint8 nsMenuUtilsX::GeckoModifiersForNodeAttribute(const nsString& modifiersAttribute) +{ + PRUint8 modifiers = knsMenuItemNoModifier; + char* str = ToNewCString(modifiersAttribute); + char* newStr; + char* token = strtok_r(str, ", \t", &newStr); + while (token != NULL) { + if (strcmp(token, "shift") == 0) + modifiers |= knsMenuItemShiftModifier; + else if (strcmp(token, "alt") == 0) + modifiers |= knsMenuItemAltModifier; + else if (strcmp(token, "control") == 0) + modifiers |= knsMenuItemControlModifier; + else if ((strcmp(token, "accel") == 0) || + (strcmp(token, "meta") == 0)) { + modifiers |= knsMenuItemCommandModifier; + } + token = strtok_r(newStr, ", \t", &newStr); + } + free(str); + + return modifiers; +} + + +unsigned int nsMenuUtilsX::MacModifiersForGeckoModifiers(PRUint8 geckoModifiers) +{ + unsigned int macModifiers = 0; + + if (geckoModifiers & knsMenuItemShiftModifier) + macModifiers |= NSShiftKeyMask; + if (geckoModifiers & knsMenuItemAltModifier) + macModifiers |= NSAlternateKeyMask; + if (geckoModifiers & knsMenuItemControlModifier) + macModifiers |= NSControlKeyMask; + if (geckoModifiers & knsMenuItemCommandModifier) + macModifiers |= NSCommandKeyMask; + + return macModifiers; +} + + +nsMenuBarX* nsMenuUtilsX::GetHiddenWindowMenuBar() +{ + nsIWidget* hiddenWindowWidgetNoCOMPtr = nsCocoaUtils::GetHiddenWindowWidget(); + if (hiddenWindowWidgetNoCOMPtr) + return static_cast(hiddenWindowWidgetNoCOMPtr)->GetMenuBar(); + else + return nsnull; +} + + +// It would be nice if we could localize these edit menu names. +static NSMenuItem* standardEditMenuItem = nil; +NSMenuItem* nsMenuUtilsX::GetStandardEditMenuItem() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + + if (standardEditMenuItem) + return standardEditMenuItem; + + standardEditMenuItem = [[NSMenuItem alloc] initWithTitle:@"Edit" action:nil keyEquivalent:@""]; + NSMenu* standardEditMenu = [[NSMenu alloc] initWithTitle:@"Edit"]; + [standardEditMenuItem setSubmenu:standardEditMenu]; + [standardEditMenu release]; + + // Add Undo + NSMenuItem* undoItem = [[NSMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:) keyEquivalent:@"z"]; + [standardEditMenu addItem:undoItem]; + [undoItem release]; + + // Add Redo + NSMenuItem* redoItem = [[NSMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:) keyEquivalent:@"Z"]; + [standardEditMenu addItem:redoItem]; + [redoItem release]; + + // Add separator + [standardEditMenu addItem:[NSMenuItem separatorItem]]; + + // Add Cut + NSMenuItem* cutItem = [[NSMenuItem alloc] initWithTitle:@"Cut" action:@selector(cut:) keyEquivalent:@"x"]; + [standardEditMenu addItem:cutItem]; + [cutItem release]; + + // Add Copy + NSMenuItem* copyItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copy:) keyEquivalent:@"c"]; + [standardEditMenu addItem:copyItem]; + [copyItem release]; + + // Add Paste + NSMenuItem* pasteItem = [[NSMenuItem alloc] initWithTitle:@"Paste" action:@selector(paste:) keyEquivalent:@"v"]; + [standardEditMenu addItem:pasteItem]; + [pasteItem release]; + + // Add Delete + NSMenuItem* deleteItem = [[NSMenuItem alloc] initWithTitle:@"Delete" action:@selector(delete:) keyEquivalent:@""]; + [standardEditMenu addItem:deleteItem]; + [deleteItem release]; + + // Add Select All + NSMenuItem* selectAllItem = [[NSMenuItem alloc] initWithTitle:@"Select All" action:@selector(selectAll:) keyEquivalent:@"a"]; + [standardEditMenu addItem:selectAllItem]; + [selectAllItem release]; + + return standardEditMenuItem; + + NS_OBJC_END_TRY_ABORT_BLOCK_NIL; +} + + +PRBool nsMenuUtilsX::NodeIsHiddenOrCollapsed(nsIContent* inContent) +{ + return (inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::hidden, + nsWidgetAtoms::_true, eCaseMatters) || + inContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::collapsed, + nsWidgetAtoms::_true, eCaseMatters)); +} diff --git a/widget/src/cocoa/nsMenuX.h b/widget/src/cocoa/nsMenuX.h index 5521016a7b9c..a73c4b6c8426 100644 --- a/widget/src/cocoa/nsMenuX.h +++ b/widget/src/cocoa/nsMenuX.h @@ -39,19 +39,19 @@ #ifndef nsMenuX_h_ #define nsMenuX_h_ -#include "nsCOMPtr.h" -#include "nsAutoPtr.h" -#include "nsIMenu.h" -#include "nsChangeObserver.h" -#include "nsMenuBarX.h" - -#import #import +#import +#include "nsMenuBaseX.h" +#include "nsMenuBarX.h" +#include "nsCOMPtr.h" +#include "nsChangeObserver.h" +#include "nsAutoPtr.h" -class nsIMenuBar; class nsMenuX; class nsMenuItemIconX; +class nsMenuItemX; +class nsIWidget; // MenuDelegate is used to receive Cocoa notifications for @@ -66,99 +66,71 @@ class nsMenuItemIconX; @end -class nsMenuX : public nsIMenu, +// Once instantiated, this object lives until its DOM node or its parent window is destroyed. +// Do not hold references to this, they can become invalid any time the DOM node can be destroyed. +class nsMenuX : public nsMenuObjectX, public nsChangeObserver { public: - nsMenuX(); - virtual ~nsMenuX(); + nsMenuX(); + virtual ~nsMenuX(); - // If > 0, the OS is indexing all the app's menus (triggered by opening - // Help menu on Leopard and higher). There are some things that are - // unsafe to do while this is happening. - static PRInt32 sIndexingMenuLevel; + // If > 0, the OS is indexing all the app's menus (triggered by opening + // Help menu on Leopard and higher). There are some things that are + // unsafe to do while this is happening. + static PRInt32 sIndexingMenuLevel; - NS_DECL_ISUPPORTS - NS_DECL_CHANGEOBSERVER + NS_DECL_CHANGEOBSERVER - id GetNativeMenuItem(); + // nsMenuObjectX + void* NativeData() {return (void*)mMacMenu;} + nsMenuObjectTypeX MenuObjectType() {return eSubmenuObjectType;} - // nsIMenu Methods - NS_IMETHOD Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode); - NS_IMETHOD GetParent(nsISupports *&aParent); - NS_IMETHOD GetLabel(nsString &aText); - NS_IMETHOD SetLabel(const nsAString &aText); - NS_IMETHOD GetAccessKey(nsString &aText); - NS_IMETHOD SetAccessKey(const nsAString &aText); - NS_IMETHOD AddItem(nsISupports* aText); - NS_IMETHOD GetItemCount(PRUint32 &aCount); - NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); - NS_IMETHOD GetVisibleItemCount(PRUint32 &aCount); - NS_IMETHOD GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem); - NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem); - NS_IMETHOD RemoveItem(const PRUint32 aPos); - NS_IMETHOD RemoveAll(); - NS_IMETHOD GetNativeData(void** aData); - NS_IMETHOD SetNativeData(void* aData); - NS_IMETHOD GetMenuContent(nsIContent ** aMenuNode); - NS_IMETHOD SetEnabled(PRBool aIsEnabled); - NS_IMETHOD GetEnabled(PRBool* aIsEnabled); - - NS_IMETHOD ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, PRBool aEnabled); - NS_IMETHOD GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex); - NS_IMETHOD SetupIcon(); - nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent); - void MenuDeselected(const nsMenuEvent & aMenuEvent); - void MenuConstruct(const nsMenuEvent & aMenuEvent, nsIWidget * aParentWindow, void * aMenuNode); - void MenuDestruct(const nsMenuEvent & aMenuEvent); - void SetRebuild(PRBool aMenuEvent); + // nsMenuX + nsresult Create(nsMenuObjectX* aParent, const nsAString &aLabel, + nsMenuBarX* aMenuBar, nsIContent* aNode); + PRUint32 GetItemCount(); + nsMenuObjectX* GetItemAt(PRUint32 aPos); + nsresult GetVisibleItemCount(PRUint32 &aCount); + nsMenuObjectX* GetVisibleItemAt(PRUint32 aPos); + nsEventStatus MenuOpened(const nsMenuEvent& aMenuEvent); + void MenuClosed(const nsMenuEvent& aMenuEvent); + void SetRebuild(PRBool aMenuEvent); + NSMenuItem* NativeMenuItem(); protected: - // Determines how many menus are visible among the siblings that are before me. - // It doesn't matter if I am visible. - nsresult CountVisibleBefore(PRUint32* outVisibleBefore); + void MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode); + nsresult RemoveAll(); + nsresult SetEnabled(PRBool aIsEnabled); + nsresult GetEnabled(PRBool* aIsEnabled); + nsresult SetupIcon(); + nsresult CountVisibleBefore(PRUint32* outVisibleBefore); + void GetMenuPopupContent(nsIContent** aResult); + PRBool OnOpen(); + PRBool OnOpened(); + PRBool OnClose(); + PRBool OnClosed(); + nsresult AddMenuItem(nsMenuItemX* aMenuItem); + nsresult AddMenu(nsMenuX* aMenu); + void LoadMenuItem(nsIContent* inMenuItemContent); + void LoadSubMenu(nsIContent* inMenuContent); + GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); - // fetch the content node associated with the menupopup item - void GetMenuPopupContent(nsIContent** aResult); - - // fire handlers for oncreate/ondestroy - PRBool OnDestroy(); - PRBool OnCreate(); - PRBool OnDestroyed(); - PRBool OnCreated(); - - nsresult AddMenuItem(nsIMenuItem * aMenuItem); - nsresult AddMenu(nsIMenu * aMenu); - - void LoadMenuItem(nsIContent* inMenuItemContent); - void LoadSubMenu(nsIContent* inMenuContent); - - GeckoNSMenu* CreateMenuWithGeckoString(nsString& menuTitle); - -protected: - nsString mLabel; - nsCOMArray mMenuItemsArray; - PRUint32 mVisibleItemsCount; // caching number of visible items in mMenuItemsArray - - nsISupports* mParent; // weak, my parent owns me - nsMenuBarX* mMenuBar; // weak ref, it will outlive us - nsCOMPtr mMenuContent; // the |menu| tag, strong ref - nsRefPtr mIcon; - - // Mac specific - PRInt16 mMacMenuID; - GeckoNSMenu* mMacMenu; // strong ref, we own it - MenuDelegate* mMenuDelegate; // strong ref, we keep this around to get events for us - NSMenuItem* mNativeMenuItem; // strong ref, we own - PRPackedBool mIsEnabled; - PRPackedBool mDestroyHandlerCalled; - PRPackedBool mNeedsRebuild; - PRPackedBool mConstructed; - PRPackedBool mVisible; // are we visible to the user? - PRPackedBool mXBLAttached; + nsTArray< nsAutoPtr > mMenuObjectsArray; + nsString mLabel; + PRUint32 mVisibleItemsCount; // cache + nsMenuObjectX* mParent; // [weak] + nsMenuBarX* mMenuBar; // [weak] + nsRefPtr mIcon; + GeckoNSMenu* mMacMenu; // [strong] + MenuDelegate* mMenuDelegate; // [strong] + NSMenuItem* mNativeMenuItem; // [strong] + PRPackedBool mIsEnabled; + PRPackedBool mDestroyHandlerCalled; + PRPackedBool mNeedsRebuild; + PRPackedBool mConstructed; + PRPackedBool mVisible; + PRPackedBool mXBLAttached; }; #endif // nsMenuX_h_ diff --git a/widget/src/cocoa/nsMenuX.mm b/widget/src/cocoa/nsMenuX.mm index 079e2db68b8e..eee08dab832f 100644 --- a/widget/src/cocoa/nsMenuX.mm +++ b/widget/src/cocoa/nsMenuX.mm @@ -37,38 +37,34 @@ * ***** END LICENSE BLOCK ***** */ #include "nsMenuX.h" +#include "nsMenuItemX.h" +#include "nsMenuUtilsX.h" +#include "nsMenuItemIconX.h" -#include "nsCOMPtr.h" #include "nsObjCExceptions.h" + +#include "nsToolkit.h" +#include "nsCocoaUtils.h" +#include "nsCOMPtr.h" +#include "prinrval.h" +#include "nsString.h" +#include "nsReadableUtils.h" +#include "nsUnicharUtils.h" +#include "plstr.h" +#include "nsWidgetAtoms.h" +#include "nsGUIEvent.h" +#include "nsCRT.h" + #include "nsIDocument.h" #include "nsIContent.h" #include "nsIDOMDocument.h" #include "nsIDocumentObserver.h" #include "nsIComponentManager.h" -#include "prinrval.h" #include "nsIRollupListener.h" - -#include "nsMenuItemIconX.h" -#include "nsIMenu.h" -#include "nsIMenuBar.h" -#include "nsIMenuItem.h" -#include "nsToolkit.h" -#include "nsCocoaUtils.h" - -#include "nsString.h" -#include "nsReadableUtils.h" -#include "nsUnicharUtils.h" -#include "plstr.h" - -#include "nsINameSpaceManager.h" -#include "nsWidgetAtoms.h" +#include "nsIDOMElement.h" #include "nsIXBLService.h" #include "nsIServiceManager.h" -#include "nsGUIEvent.h" - -#include "nsCRT.h" - #include "jsapi.h" #include "nsIScriptGlobalObject.h" #include "nsIScriptContext.h" @@ -78,22 +74,16 @@ extern nsIRollupListener * gRollupListener; extern nsIWidget * gRollupWidget; +extern "C" MenuRef _NSGetCarbonMenu(NSMenu* aMenu); + static PRBool gConstructingMenu = PR_FALSE; - static PRBool gMenuMethodsSwizzled = PR_FALSE; -// CIDs -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuCID, NS_MENU_CID); -static NS_DEFINE_CID(kMenuItemCID, NS_MENUITEM_CID); - -NS_IMPL_ISUPPORTS1(nsMenuX, nsIMenu) - PRInt32 nsMenuX::sIndexingMenuLevel = 0; nsMenuX::nsMenuX() -: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), mMacMenuID(0), +: mVisibleItemsCount(0), mParent(nsnull), mMenuBar(nsnull), mMacMenu(nil), mNativeMenuItem(nil), mIsEnabled(PR_TRUE), mDestroyHandlerCalled(PR_FALSE), mNeedsRebuild(PR_TRUE), mConstructed(PR_FALSE), mVisible(PR_TRUE), mXBLAttached(PR_FALSE) @@ -116,6 +106,8 @@ nsMenuX::nsMenuX() if (!nsMenuBarX::sNativeEventTarget) nsMenuBarX::sNativeEventTarget = [[NativeMenuItemTarget alloc] init]; + MOZ_COUNT_CTOR(nsMenuX); + NS_OBJC_END_TRY_ABORT_BLOCK; } @@ -132,46 +124,44 @@ nsMenuX::~nsMenuX() [mNativeMenuItem release]; // alert the change notifier we don't care no more - if (mMenuContent) - mMenuBar->UnregisterForContentChanges(mMenuContent); + if (mContent) + mMenuBar->UnregisterForContentChanges(mContent); + + MOZ_COUNT_DTOR(nsMenuX); NS_OBJC_END_TRY_ABORT_BLOCK; } -NS_IMETHODIMP -nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString &aAccessKey, - nsMenuBarX* aMenuBar, nsIContent* aNode) +nsresult nsMenuX::Create(nsMenuObjectX* aParent, const nsAString& aLabel, + nsMenuBarX* aMenuBar, nsIContent* aNode) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - mMenuContent = aNode; - NS_ASSERTION(mMenuContent, "Menu not given a dom node at creation time"); + mContent = aNode; + mLabel = aLabel; + mMacMenu = CreateMenuWithGeckoString(mLabel); // register this menu to be notified when changes are made to our content object mMenuBar = aMenuBar; // weak ref NS_ASSERTION(mMenuBar, "No menu bar given, must have one"); - mMenuBar->RegisterForContentChanges(mMenuContent, this); + mMenuBar->RegisterForContentChanges(mContent, this); mParent = aParent; // our parent could be either a menu bar (if we're toplevel) or a menu (if we're a submenu) - nsCOMPtr menubar = do_QueryInterface(aParent); - nsCOMPtr menu = do_QueryInterface(aParent); - NS_ASSERTION(menubar || menu, "Menu parent not a menu bar or menu!"); + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); + NS_ASSERTION((parentType == eMenuBarObjectType || parentType == eSubmenuObjectType), + "Menu parent not a menu bar or menu!"); - // SetLabel will create the native menu if it has not been created yet - SetLabel(aLabel); - - if (NodeIsHiddenOrCollapsed(mMenuContent)) + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent)) + mVisible = PR_FALSE; + if (mContent->GetChildCount() == 0) mVisible = PR_FALSE; - if (menubar && mMenuContent->GetChildCount() == 0) - mVisible = PR_FALSE; + SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); - SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); - - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); mNativeMenuItem = [[NSMenuItem alloc] initWithTitle:newCocoaLabelString action:nil keyEquivalent:@""]; [newCocoaLabelString release]; @@ -181,11 +171,9 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString // native menu items being created. If we only call MenuConstruct when a menu // is actually selected, then we can't access keyboard commands until the // menu gets selected, which is bad. - nsMenuEvent fake(PR_TRUE, 0, nsnull); - MenuConstruct(fake, nsnull, nsnull); - - if (menu) - mIcon = new nsMenuItemIconX(static_cast(this), menu, mMenuContent, mNativeMenuItem); + MenuConstruct(nsnull, nsnull); + + mIcon = new nsMenuItemIconX(this, mContent, mNativeMenuItem); return NS_OK; @@ -193,102 +181,37 @@ nsMenuX::Create(nsISupports * aParent, const nsAString &aLabel, const nsAString } -NS_IMETHODIMP nsMenuX::GetParent(nsISupports*& aParent) -{ - aParent = mParent; - NS_IF_ADDREF(aParent); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::GetLabel(nsString &aText) -{ - aText = mLabel; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::SetLabel(const nsAString &aText) -{ - mLabel = aText; - // create an actual NSMenu if this is the first time - if (mMacMenu == nil) - mMacMenu = CreateMenuWithGeckoString(mLabel); - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::GetAccessKey(nsString &aText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::SetAccessKey(const nsAString &aText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -// This should only be used internally by our menu implementation. In all other -// cases menus and their items should be added and modified via the DOM. -NS_IMETHODIMP nsMenuX::AddItem(nsISupports* aItem) -{ - nsresult rv = NS_ERROR_FAILURE; - - if (!aItem) - return NS_ERROR_INVALID_ARG; - - // Figure out what we're adding - nsCOMPtr menuItem(do_QueryInterface(aItem, &rv)); - if (NS_SUCCEEDED(rv)) { - rv = AddMenuItem(menuItem); - } - else { - nsCOMPtr menu(do_QueryInterface(aItem, &rv)); - if (NS_SUCCEEDED(rv)) - rv = AddMenu(menu); - } - - return rv; -} - - -nsresult nsMenuX::AddMenuItem(nsIMenuItem * aMenuItem) +nsresult nsMenuX::AddMenuItem(nsMenuItemX* aMenuItem) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; if (!aMenuItem) return NS_ERROR_INVALID_ARG; - nsCOMPtr menuItemContent; - aMenuItem->GetMenuItemContent(getter_AddRefs(menuItemContent)); - mMenuItemsArray.AppendObject(aMenuItem); // owning ref - if (menuItemContent && NodeIsHiddenOrCollapsed(menuItemContent)) + mMenuObjectsArray.AppendElement(aMenuItem); + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenuItem->Content())) return NS_OK; ++mVisibleItemsCount; - + + NSMenuItem* newNativeMenuItem = (NSMenuItem*)aMenuItem->NativeData(); + // add the menu item to this menu - NSMenuItem* newNativeMenuItem; - aMenuItem->GetNativeData((void*&)newNativeMenuItem); - if (!newNativeMenuItem) - return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; // set up target/action [newNativeMenuItem setTarget:nsMenuBarX::sNativeEventTarget]; [newNativeMenuItem setAction:@selector(menuItemHit:)]; - + // set its command. we get the unique command id from the menubar [newNativeMenuItem setTag:mMenuBar->RegisterForCommand(aMenuItem)]; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -nsresult nsMenuX::AddMenu(nsIMenu * aMenu) +nsresult nsMenuX::AddMenu(nsMenuX* aMenu) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -296,22 +219,18 @@ nsresult nsMenuX::AddMenu(nsIMenu * aMenu) if (!aMenu) return NS_ERROR_NULL_POINTER; - nsCOMPtr menuContent; - aMenu->GetMenuContent(getter_AddRefs(menuContent)); - mMenuItemsArray.AppendObject(aMenu); // owning ref - if (menuContent && NodeIsHiddenOrCollapsed(menuContent)) + mMenuObjectsArray.AppendElement(aMenu); + if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(aMenu->Content())) return NS_OK; ++mVisibleItemsCount; // We have to add a menu item and then associate the menu with it - NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->GetNativeMenuItem(); + NSMenuItem* newNativeMenuItem = (static_cast(aMenu))->NativeMenuItem(); if (!newNativeMenuItem) return NS_ERROR_FAILURE; [mMacMenu addItem:newNativeMenuItem]; - - NSMenu* childMenu; - if (aMenu->GetNativeData((void**)&childMenu) == NS_OK) - [newNativeMenuItem setSubmenu:childMenu]; + + [newNativeMenuItem setSubmenu:(NSMenu*)aMenu->NativeData()]; return NS_OK; @@ -320,48 +239,32 @@ nsresult nsMenuX::AddMenu(nsIMenu * aMenu) // Includes all items, including hidden/collapsed ones -NS_IMETHODIMP nsMenuX::GetItemCount(PRUint32 &aCount) +PRUint32 nsMenuX::GetItemCount() { - aCount = mMenuItemsArray.Count(); - return NS_OK; + return mMenuObjectsArray.Length(); } // Includes all items, including hidden/collapsed ones -NS_IMETHODIMP nsMenuX::GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) +nsMenuObjectX* nsMenuX::GetItemAt(PRUint32 aPos) { - if (aPos >= (PRUint32)mMenuItemsArray.Count()) - return NS_ERROR_INVALID_ARG; + if (aPos >= (PRUint32)mMenuObjectsArray.Length()) + return NULL; - aMenuItem = mMenuItemsArray.ObjectAt(aPos); - NS_IF_ADDREF(aMenuItem); - return NS_OK; + return mMenuObjectsArray[aPos]; } -// Checks both nsIMenus and nsIMenuItems. Not suitable for menus that are children -// of nsIMenuBar, which has slightly different rules for visiblity. -static PRBool MenuNodeIsVisible(nsISupports *item) +// Checks submenus and menu items. Not suitable for submenus that are children +// of a menu bar, which has slightly different rules for visiblity. +static PRBool MenuNodeIsVisible(nsMenuObjectX* item) { - // Find the content for this item in the menu, be it a MenuItem or a Menu - nsCOMPtr itemContent; - nsCOMPtr menuItem = do_QueryInterface(item); - if (menuItem) { - menuItem->GetMenuItemContent(getter_AddRefs(itemContent)); - } - else { - nsCOMPtr menu = do_QueryInterface(item); - if (menu) - menu->GetMenuContent(getter_AddRefs(itemContent)); - } - - // Check the visibility of the item's content - return (itemContent && !NodeIsHiddenOrCollapsed(itemContent)); + return (!nsMenuUtilsX::NodeIsHiddenOrCollapsed(item->Content())); } // Only includes visible items -NS_IMETHODIMP nsMenuX::GetVisibleItemCount(PRUint32 &aCount) +nsresult nsMenuX::GetVisibleItemCount(PRUint32 &aCount) { aCount = mVisibleItemsCount; return NS_OK; @@ -370,53 +273,36 @@ NS_IMETHODIMP nsMenuX::GetVisibleItemCount(PRUint32 &aCount) // Only includes visible items. Note that this is provides O(N) access // If you need to iterate or search, consider using GetItemAt and doing your own filtering -NS_IMETHODIMP nsMenuX::GetVisibleItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) +nsMenuObjectX* nsMenuX::GetVisibleItemAt(PRUint32 aPos) { - PRUint32 count = mMenuItemsArray.Count(); + + PRUint32 count = mMenuObjectsArray.Length(); if (aPos >= mVisibleItemsCount || aPos >= count) - return NS_ERROR_INVALID_ARG; + return NULL; // If there are no invisible items, can provide direct access - if (mVisibleItemsCount == count) { - nsCOMPtr item = mMenuItemsArray.ObjectAt(aPos); - aMenuItem = item; - NS_IF_ADDREF(aMenuItem); - return NS_OK; - } + if (mVisibleItemsCount == count) + return mMenuObjectsArray[aPos]; // Otherwise, traverse the array until we find the the item we're looking for. - nsCOMPtr item; + nsMenuObjectX* item; PRUint32 visibleNodeIndex = 0; for (PRUint32 i = 0; i < count; i++) { - item = mMenuItemsArray.ObjectAt(i); + item = mMenuObjectsArray[i]; if (MenuNodeIsVisible(item)) { if (aPos == visibleNodeIndex) { // we found the visible node we're looking for, return it - aMenuItem = item; - NS_IF_ADDREF(aMenuItem); - return NS_OK; + return item; } visibleNodeIndex++; } } - return NS_ERROR_FAILURE; + return NULL; } -NS_IMETHODIMP nsMenuX::InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::RemoveItem(const PRUint32 aPos) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP nsMenuX::RemoveAll() +nsresult nsMenuX::RemoveAll() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; @@ -429,41 +315,20 @@ NS_IMETHODIMP nsMenuX::RemoveAll() for (int i = [mMacMenu numberOfItems] - 1; i >= 0; i--) [mMacMenu removeItemAtIndex:i]; } - // get rid of Gecko menu items - mMenuItemsArray.Clear(); + + mMenuObjectsArray.Clear(); mVisibleItemsCount = 0; - + return NS_OK; NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -NS_IMETHODIMP nsMenuX::GetNativeData(void ** aData) -{ - *aData = mMacMenu; - return NS_OK; -} - - -NS_IMETHODIMP nsMenuX::SetNativeData(void * aData) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - [mMacMenu release]; - mMacMenu = [(NSMenu*)aData retain]; - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - - -nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) +nsEventStatus nsMenuX::MenuOpened(const nsMenuEvent & aMenuEvent) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; - // printf("JOSH: MenuSelected called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); - // Determine if this is the correct menu to handle the event MenuRef selectedMenuHandle = (MenuRef)aMenuEvent.mCommand; @@ -471,10 +336,10 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) // must be a carbon MenuRef to be had if (_NSGetCarbonMenu(mMacMenu) == selectedMenuHandle) { // Open the node. - mMenuContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); + mContent->SetAttr(kNameSpaceID_None, nsWidgetAtoms::open, NS_LITERAL_STRING("true"), PR_TRUE); - // Fire our oncreate handler. If we're told to stop, don't build the menu at all - PRBool keepProcessing = OnCreate(); + // Fire a handler. If we're told to stop, don't build the menu at all + PRBool keepProcessing = OnOpen(); if (!mNeedsRebuild || !keepProcessing) return nsEventStatus_eConsumeNoDefault; @@ -483,21 +348,21 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) if (mNeedsRebuild) RemoveAll(); - MenuConstruct(aMenuEvent, nsnull, nsnull); + MenuConstruct(nsnull, nsnull); mConstructed = true; } - OnCreated(); // Now that it's built, fire the popupShown event. + OnOpened(); return nsEventStatus_eConsumeNoDefault; } else { // Make sure none of our submenus are the ones that should be handling this - for (PRUint32 i = mMenuItemsArray.Count() - 1; i >= 0; i--) { - nsISupports* menuSupports = mMenuItemsArray.ObjectAt(i); - nsCOMPtr menu = do_QueryInterface(menuSupports); - if (menu) { - nsEventStatus status = menu->MenuSelected(aMenuEvent); + PRUint32 count = mMenuObjectsArray.Length(); + for (PRUint32 i = 0; i < count; i++) { + nsMenuObjectX* menuObject = mMenuObjectsArray[i]; + if (menuObject->MenuObjectType() == eSubmenuObjectType) { + nsEventStatus status = static_cast(menuObject)->MenuOpened(aMenuEvent); if (status != nsEventStatus_eIgnore) return status; } @@ -510,20 +375,26 @@ nsEventStatus nsMenuX::MenuSelected(const nsMenuEvent & aMenuEvent) } -void nsMenuX::MenuDeselected(const nsMenuEvent & aMenuEvent) +void nsMenuX::MenuClosed(const nsMenuEvent & aMenuEvent) { - // Destroy the menu if (mConstructed) { - MenuDestruct(aMenuEvent); + // Don't close if a handler tells us to stop. + if (!OnClose()) + return; + + if (mNeedsRebuild) + mConstructed = false; + + mContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); + + OnClosed(); + mConstructed = false; } } -void nsMenuX::MenuConstruct( - const nsMenuEvent & aMenuEvent, - nsIWidget * aParentWindow, - void * aMenuNode) +void nsMenuX::MenuConstruct(nsIWidget* aParentWindow, void* aMenuNode) { mConstructed = false; gConstructingMenu = PR_TRUE; @@ -582,23 +453,7 @@ void nsMenuX::MenuConstruct( gConstructingMenu = PR_FALSE; mNeedsRebuild = PR_FALSE; - // printf("Done building, mMenuItemsArray.Count() = %d \n", mMenuItemsArray.Count()); -} - - -void nsMenuX::MenuDestruct(const nsMenuEvent & aMenuEvent) -{ - // printf("nsMenuX::MenuDestruct() called for %s \n", NS_LossyConvertUTF16toASCII(mLabel).get()); - - // Fire our ondestroy handler. If we're told to stop, don't destroy the menu. - if (!OnDestroy()) - return; - - if (mNeedsRebuild) - mConstructed = false; - // Close the node. - mMenuContent->UnsetAttr(kNameSpaceID_None, nsWidgetAtoms::open, PR_TRUE); - OnDestroyed(); + // printf("Done building, mMenuObjectsArray.Count() = %d \n", mMenuObjectsArray.Count()); } @@ -609,7 +464,7 @@ void nsMenuX::SetRebuild(PRBool aNeedsRebuild) } -NS_IMETHODIMP nsMenuX::SetEnabled(PRBool aIsEnabled) +nsresult nsMenuX::SetEnabled(PRBool aIsEnabled) { if (aIsEnabled != mIsEnabled) { // we always want to rebuild when this changes @@ -620,7 +475,7 @@ NS_IMETHODIMP nsMenuX::SetEnabled(PRBool aIsEnabled) } -NS_IMETHODIMP nsMenuX::GetEnabled(PRBool* aIsEnabled) +nsresult nsMenuX::GetEnabled(PRBool* aIsEnabled) { NS_ENSURE_ARG_POINTER(aIsEnabled); *aIsEnabled = mIsEnabled; @@ -628,14 +483,6 @@ NS_IMETHODIMP nsMenuX::GetEnabled(PRBool* aIsEnabled) } -NS_IMETHODIMP nsMenuX::GetMenuContent(nsIContent ** aMenuContent) -{ - NS_ENSURE_ARG_POINTER(aMenuContent); - NS_IF_ADDREF(*aMenuContent = mMenuContent); - return NS_OK; -} - - GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; @@ -643,16 +490,16 @@ GeckoNSMenu* nsMenuX::CreateMenuWithGeckoString(nsString& menuTitle) NSString* title = [NSString stringWithCharacters:(UniChar*)menuTitle.get() length:menuTitle.Length()]; GeckoNSMenu* myMenu = [[GeckoNSMenu alloc] initWithTitle:title]; [myMenu setDelegate:mMenuDelegate]; - + // We don't want this menu to auto-enable menu items because then Cocoa // overrides our decisions and things get incorrectly enabled/disabled. [myMenu setAutoenablesItems:NO]; - + // we used to install Carbon event handlers here, but since NSMenu* doesn't // create its underlying MenuRef until just before display, we delay until // that happens. Now we install the event handlers when Cocoa notifies // us that a menu is about to display - see the Cocoa MenuDelegate class. - + return myMenu; NS_OBJC_END_TRY_ABORT_BLOCK_NIL; @@ -664,38 +511,41 @@ void nsMenuX::LoadMenuItem(nsIContent* inMenuItemContent) if (!inMenuItemContent) return; - // create nsMenuItem - nsCOMPtr pnsMenuItem = do_CreateInstance(kMenuItemCID); - if (!pnsMenuItem) - return; - nsAutoString menuitemName; inMenuItemContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuitemName); // printf("menuitem %s \n", NS_LossyConvertUTF16toASCII(menuitemName).get()); - nsIMenuItem::EMenuItemType itemType = nsIMenuItem::eRegular; + EMenuItemType itemType = eRegularMenuItemType; if (inMenuItemContent->Tag() == nsWidgetAtoms::menuseparator) { - itemType = nsIMenuItem::eSeparator; + itemType = eSeparatorMenuItemType; } else { static nsIContent::AttrValuesArray strings[] = {&nsWidgetAtoms::checkbox, &nsWidgetAtoms::radio, nsnull}; switch (inMenuItemContent->FindAttrValueIn(kNameSpaceID_None, nsWidgetAtoms::type, strings, eCaseMatters)) { - case 0: itemType = nsIMenuItem::eCheckbox; break; - case 1: itemType = nsIMenuItem::eRadio; break; + case 0: itemType = eCheckboxMenuItemType; break; + case 1: itemType = eRadioMenuItemType; break; } } // Create the item. - pnsMenuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); + nsMenuItemX* menuItem = new nsMenuItemX(); + if (!menuItem) + return; - AddMenuItem(pnsMenuItem); + nsresult rv = menuItem->Create(this, menuitemName, itemType, mMenuBar, inMenuItemContent); + if (NS_FAILED(rv)) { + delete menuItem; + return; + } + + AddMenuItem(menuItem); // This needs to happen after the nsIMenuItem object is inserted into // our item array in AddMenuItem() - pnsMenuItem->SetupIcon(); + menuItem->SetupIcon(); } @@ -705,24 +555,27 @@ void nsMenuX::LoadSubMenu(nsIContent* inMenuContent) inMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, menuName); //printf("Creating Menu [%s] \n", NS_LossyConvertUTF16toASCII(menuName).get()); - // Create nsMenu - nsCOMPtr pnsMenu(do_CreateInstance(kMenuCID)); - if (!pnsMenu) + nsAutoPtr menu(new nsMenuX()); + if (!menu) return; - pnsMenu->Create(reinterpret_cast(this), menuName, EmptyString(), mMenuBar, inMenuContent); + nsresult rv = menu->Create(this, menuName, mMenuBar, inMenuContent); + if (NS_FAILED(rv)) + return; - AddMenu(pnsMenu); + AddMenu(menu); // This needs to happen after the nsIMenu object is inserted into // our item array in AddMenu() - pnsMenu->SetupIcon(); + menu->SetupIcon(); + + menu.forget(); } -// Fire our oncreate handler. Returns TRUE if we should keep processing the event, -// FALSE if the handler wants to stop the creation of the menu -PRBool nsMenuX::OnCreate() +// This menu is about to open. Returns TRUE if we should keep processing the event, +// FALSE if the handler wants to stop the opening of the menu. +PRBool nsMenuX::OnOpen() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWING, nsnull, @@ -732,15 +585,14 @@ PRBool nsMenuX::OnCreate() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; - // the menu is going to show and the oncreate handler has executed. We - // now need to walk our menu items, checking to see if any of them have - // a command attribute. If so, several apptributes must potentially - // be updated. + // If the open is going to succeed we need to walk our menu items, checking to + // see if any of them have a command attribute. If so, several apptributes + // must potentially be updated. if (popupContent) { nsCOMPtr domDoc(do_QueryInterface(popupContent->GetDocument())); @@ -797,7 +649,7 @@ PRBool nsMenuX::OnCreate() } -PRBool nsMenuX::OnCreated() +PRBool nsMenuX::OnOpened() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_SHOWN, nsnull, nsMouseEvent::eReal); @@ -806,7 +658,7 @@ PRBool nsMenuX::OnCreated() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); if (NS_FAILED(rv) || status == nsEventStatus_eConsumeNoDefault) return PR_FALSE; @@ -815,9 +667,9 @@ PRBool nsMenuX::OnCreated() } -// Fire our ondestroy handler. Returns TRUE if we should keep processing the event, -// FALSE if the handler wants to stop the destruction of the menu -PRBool nsMenuX::OnDestroy() +// Returns TRUE if we should keep processing the event, FALSE if the handler +// wants to stop the closing of the menu. +PRBool nsMenuX::OnClose() { if (mDestroyHandlerCalled) return PR_TRUE; @@ -830,7 +682,7 @@ PRBool nsMenuX::OnDestroy() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -842,7 +694,7 @@ PRBool nsMenuX::OnDestroy() } -PRBool nsMenuX::OnDestroyed() +PRBool nsMenuX::OnClosed() { nsEventStatus status = nsEventStatus_eIgnore; nsMouseEvent event(PR_TRUE, NS_XUL_POPUP_HIDDEN, nsnull, @@ -852,7 +704,7 @@ PRBool nsMenuX::OnDestroyed() GetMenuPopupContent(getter_AddRefs(popupContent)); nsresult rv = NS_OK; - nsIContent* dispatchTo = popupContent ? popupContent : mMenuContent; + nsIContent* dispatchTo = popupContent ? popupContent : mContent; rv = dispatchTo->DispatchDOMEvent(&event, nsnull, nsnull, &status); mDestroyHandlerCalled = PR_TRUE; @@ -878,11 +730,11 @@ void nsMenuX::GetMenuPopupContent(nsIContent** aResult) if (!xblService) return; - PRUint32 count = mMenuContent->GetChildCount(); + PRUint32 count = mContent->GetChildCount(); for (PRUint32 i = 0; i < count; i++) { PRInt32 dummy; - nsIContent *child = mMenuContent->GetChildAt(i); + nsIContent *child = mContent->GetChildAt(i); nsCOMPtr tag; xblService->ResolveTag(child, &dummy, getter_AddRefs(tag)); if (tag == nsWidgetAtoms::menupopup) { @@ -902,102 +754,48 @@ nsresult nsMenuX::CountVisibleBefore(PRUint32* outVisibleBefore) { NS_ASSERTION(outVisibleBefore, "bad index param in nsMenuX::CountVisibleBefore"); - nsCOMPtr menubarParent = do_QueryInterface(mParent); - if (menubarParent) { - PRUint32 numMenus = 0; - menubarParent->GetMenuCount(numMenus); - + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); + if (parentType == eMenuBarObjectType) { + nsMenuBarX* menubarParent = static_cast(mParent); + PRUint32 numMenus = menubarParent->GetMenuCount(); + // Find this menu among the children of my parent menubar *outVisibleBefore = 1; // start at 1, the Application menu will always be there for (PRUint32 i = 0; i < numMenus; i++) { - nsCOMPtr currMenu; - menubarParent->GetMenuAt(i, *getter_AddRefs(currMenu)); - if (currMenu == static_cast(this)) { + nsMenuX* currMenu = menubarParent->GetMenuAt(i); + if (currMenu == this) { // we found ourselves, break out return NS_OK; } - + if (currMenu) { - nsCOMPtr menuContent; - currMenu->GetMenuContent(getter_AddRefs(menuContent)); - if (menuContent && - menuContent->GetChildCount() > 0 && - !NodeIsHiddenOrCollapsed(menuContent)) { + nsIContent* menuContent = currMenu->Content(); + if (menuContent->GetChildCount() > 0 && + !nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuContent)) { ++(*outVisibleBefore); } } } - } // if menubarParent - else { - nsCOMPtr menuParent = do_QueryInterface(mParent); - if (!menuParent) - return NS_ERROR_FAILURE; - - PRUint32 numItems; - menuParent->GetItemCount(numItems); - + } + else if (parentType == eSubmenuObjectType) { // Find this menu among the children of my parent menu + nsMenuX* menuParent = static_cast(mParent); + PRUint32 numItems = menuParent->GetItemCount(); for (PRUint32 i = 0; i < numItems; i++) { // Using GetItemAt instead of GetVisibleItemAt to avoid O(N^2) - nsCOMPtr currItem; - menuParent->GetItemAt(i, *getter_AddRefs(currItem)); - nsCOMPtr currMenu = do_QueryInterface(currItem); - if (currMenu == static_cast(this)) { - // we found ourselves, break out - return NS_OK; - } - + nsMenuObjectX* currItem = menuParent->GetItemAt(i); + if (currItem == this) + return NS_OK; // we found ourselves, break out // If the node is visible increment the outparam. if (MenuNodeIsVisible(currItem)) ++(*outVisibleBefore); - } } return NS_ERROR_FAILURE; } -NS_IMETHODIMP -nsMenuX::ChangeNativeEnabledStatusForMenuItem(nsIMenuItem* aMenuItem, - PRBool aEnabled) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsMenuX::GetMenuRefAndItemIndexForMenuItem(nsISupports* aMenuItem, - void** aMenuRef, - PRUint16* aMenuItemIndex) -{ - if (!mMacMenu) - return NS_ERROR_FAILURE; - - // look for the menu item given, and skip invisible elements - PRUint32 menuItemCount; - GetItemCount(menuItemCount); - PRUint32 visibleNodeIndex = 0; - for (PRUint32 i = 0; i < menuItemCount; i++) { - nsCOMPtr currItem; - GetItemAt(i, *getter_AddRefs(currItem)); - // Only check visible nodes - if (MenuNodeIsVisible(currItem)) { - if (currItem == aMenuItem) { - *aMenuRef = _NSGetCarbonMenu(mMacMenu); - // add 1 because carbon menu items are 1-indexed. - *aMenuItemIndex = visibleNodeIndex + 1; - return NS_OK; - } - visibleNodeIndex++; - } - } - - return NS_ERROR_FAILURE; -} - - -id -nsMenuX::GetNativeMenuItem() +NSMenuItem* nsMenuX::NativeMenuItem() { return mNativeMenuItem; } @@ -1008,8 +806,8 @@ nsMenuX::GetNativeMenuItem() // -void -nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, nsIAtom *aAttribute) +void nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, + nsIAtom *aAttribute) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; @@ -1017,51 +815,44 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n if (gConstructingMenu || (aAttribute == nsWidgetAtoms::open)) return; - nsCOMPtr menubarParent = do_QueryInterface(mParent); + nsMenuObjectTypeX parentType = mParent->MenuObjectType(); if (aAttribute == nsWidgetAtoms::disabled) { SetRebuild(PR_TRUE); - SetEnabled(!mMenuContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, - nsWidgetAtoms::_true, eCaseMatters)); + SetEnabled(!mContent->AttrValueIs(kNameSpaceID_None, nsWidgetAtoms::disabled, + nsWidgetAtoms::_true, eCaseMatters)); } else if (aAttribute == nsWidgetAtoms::label) { SetRebuild(PR_TRUE); - mMenuContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); + mContent->GetAttr(kNameSpaceID_None, nsWidgetAtoms::label, mLabel); // invalidate my parent. If we're a submenu parent, we have to rebuild // the parent menu in order for the changes to be picked up. If we're // a regular menu, just change the title and redraw the menubar. - if (menubarParent) { + if (parentType == eMenuBarObjectType) { // reuse the existing menu, to avoid rebuilding the root menu bar. NS_ASSERTION(mMacMenu, "nsMenuX::AttributeChanged: invalid menu handle."); - NSString *newCocoaLabelString = MenuHelpersX::CreateTruncatedCocoaLabel(mLabel); + NSString *newCocoaLabelString = nsMenuUtilsX::CreateTruncatedCocoaLabel(mLabel); [mMacMenu setTitle:newCocoaLabelString]; [newCocoaLabelString release]; } else { - nsCOMPtr parentMenu(do_QueryInterface(mParent)); - parentMenu->SetRebuild(PR_TRUE); + static_cast(mParent)->SetRebuild(PR_TRUE); } } else if (aAttribute == nsWidgetAtoms::hidden || aAttribute == nsWidgetAtoms::collapsed) { SetRebuild(PR_TRUE); - PRBool contentIsHiddenOrCollapsed = NodeIsHiddenOrCollapsed(mMenuContent); + PRBool contentIsHiddenOrCollapsed = nsMenuUtilsX::NodeIsHiddenOrCollapsed(mContent); // don't do anything if the state is correct already if (contentIsHiddenOrCollapsed != mVisible) return; - nsCOMPtr menuParent = do_QueryInterface(mParent); if (contentIsHiddenOrCollapsed) { - void *clientData = nsnull; - if (menubarParent) - menubarParent->GetNativeData(clientData); - else if (menuParent) - menuParent->GetNativeData(&clientData); - if (clientData) { - NSMenu* parentMenu = reinterpret_cast(clientData); + if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { + NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); // An exception will get thrown if we try to remove an item that isn't // in the menu. if ([parentMenu indexOfItem:mNativeMenuItem] != -1) @@ -1072,13 +863,8 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n else { PRUint32 insertAfter = 0; if (NS_SUCCEEDED(CountVisibleBefore(&insertAfter))) { - void *clientData = nsnull; - if (menubarParent) - menubarParent->GetNativeData(clientData); - else if (menuParent) - menuParent->GetNativeData(&clientData); - if (clientData) { - NSMenu* parentMenu = reinterpret_cast(clientData); + if (parentType == eMenuBarObjectType || parentType == eSubmenuObjectType) { + NSMenu* parentMenu = (NSMenu*)mParent->NativeData(); [parentMenu insertItem:mNativeMenuItem atIndex:insertAfter]; [mNativeMenuItem setSubmenu:mMacMenu]; mVisible = PR_TRUE; @@ -1094,24 +880,20 @@ nsMenuX::ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, n } -void -nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void nsMenuX::ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; SetRebuild(PR_TRUE); - - RemoveItem(aIndexInContainer); mMenuBar->UnregisterForContentChanges(aChild); } -void -nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, - PRInt32 aIndexInContainer) -{ +void nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, + PRInt32 aIndexInContainer) +{ if (gConstructingMenu) return; @@ -1119,12 +901,13 @@ nsMenuX::ObserveContentInserted(nsIDocument *aDocument, nsIContent *aChild, } -NS_IMETHODIMP -nsMenuX::SetupIcon() +nsresult nsMenuX::SetupIcon() { // In addition to out-of-memory, menus that are children of the menu bar // will not have mIcon set. - if (!mIcon) return NS_ERROR_OUT_OF_MEMORY; + if (!mIcon) + return NS_ERROR_OUT_OF_MEMORY; + return mIcon->SetupIcon(); } @@ -1148,6 +931,7 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe if (nsMenuX::sIndexingMenuLevel > 0) return noErr; + nsMenuX* targetMenu = static_cast(userData); UInt32 kind = ::GetEventKind(event); if (kind == kEventMenuTargetItem) { // get the position of the menu item we want @@ -1158,20 +942,16 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe // don't request a menu item that doesn't exist or we crash // this might happen just due to some random quirks in the event system PRUint32 itemCount; - nsIMenu* targetMenu = reinterpret_cast(userData); targetMenu->GetVisibleItemCount(itemCount); if (aPos >= itemCount) return eventNotHandledErr; - - nsCOMPtr aTargetMenuItem; - targetMenu->GetVisibleItemAt((PRUint32)aPos, *getter_AddRefs(aTargetMenuItem)); - - // Send DOM event - // If the QI fails, we're over a submenu and we shouldn't send the event - nsCOMPtr bTargetMenuItem(do_QueryInterface(aTargetMenuItem)); - if (bTargetMenuItem) { + + // Send DOM event if we're over a menu item + nsMenuObjectX* target = targetMenu->GetVisibleItemAt((PRUint32)aPos); + if (target->MenuObjectType() == eMenuItemObjectType) { + nsMenuItemX* targetMenuItem = static_cast(target); PRBool handlerCalledPreventDefault; // but we don't actually care - bTargetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); + targetMenuItem->DispatchDOMEvent(NS_LITERAL_STRING("DOMMenuItemActive"), &handlerCalledPreventDefault); return noErr; } } @@ -1180,23 +960,16 @@ static pascal OSStatus MyMenuEventHandler(EventHandlerCallRef myHandler, EventRe gRollupListener->Rollup(nsnull); return userCanceledErr; } - - nsISupports* supports = reinterpret_cast(userData); - nsCOMPtr menu(do_QueryInterface(supports)); - if (menu) { - MenuRef menuRef; - ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); - nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); - menuEvent.time = PR_IntervalNow(); - menuEvent.mCommand = (PRUint32)menuRef; - if (kind == kEventMenuOpening) { - menu->MenuSelected(menuEvent); - } - else { - menu->MenuDeselected(menuEvent); - } - return noErr; - } + MenuRef menuRef; + ::GetEventParameter(event, kEventParamDirectObject, typeMenuRef, NULL, sizeof(menuRef), NULL, &menuRef); + nsMenuEvent menuEvent(PR_TRUE, NS_MENU_SELECTED, nsnull); + menuEvent.time = PR_IntervalNow(); + menuEvent.mCommand = (PRUint32)menuRef; + if (kind == kEventMenuOpening) + targetMenu->MenuOpened(menuEvent); + else + targetMenu->MenuClosed(menuEvent); + return noErr; } return eventNotHandledErr; diff --git a/widget/src/cocoa/nsPIWidgetCocoa.idl b/widget/src/cocoa/nsPIWidgetCocoa.idl index 6126da566118..2fa3407d8346 100644 --- a/widget/src/cocoa/nsPIWidgetCocoa.idl +++ b/widget/src/cocoa/nsPIWidgetCocoa.idl @@ -39,7 +39,7 @@ #include "nsISupports.idl" -interface nsIMenuBar; +interface nsMenuBarX; interface nsCocoaWindow; interface nsIWidget; @@ -56,9 +56,6 @@ interface nsPIWidgetCocoa : nsISupports { void SendSetZLevelEvent(); - // Obtain the menubar for a window - nsIMenuBar GetMenuBar(); - // Find the displayed child sheet (if aShown) or a child sheet that // wants to be displayed (if !aShown) nsCocoaWindow GetChildSheet(in boolean aShown); diff --git a/widget/src/cocoa/nsWidgetFactory.mm b/widget/src/cocoa/nsWidgetFactory.mm index 15cf7b904675..858332021a22 100644 --- a/widget/src/cocoa/nsWidgetFactory.mm +++ b/widget/src/cocoa/nsWidgetFactory.mm @@ -49,10 +49,6 @@ #include "nsAppShellSingleton.h" #include "nsFilePicker.h" -#include "nsMenuBarX.h" -#include "nsMenuX.h" -#include "nsMenuItemX.h" - #include "nsClipboard.h" #include "nsClipboardHelper.h" #include "nsTransferable.h" @@ -74,9 +70,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker) NS_GENERIC_FACTORY_CONSTRUCTOR(nsToolkit) NS_GENERIC_FACTORY_CONSTRUCTOR(nsLookAndFeel) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuBarX) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuX) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsMenuItemX) NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable) NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter) @@ -89,6 +82,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSessionX, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceX) +#include "nsMenuBarX.h" +NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeMenuServiceX) + #include "nsBidiKeyboard.h" NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard) @@ -125,18 +121,6 @@ static const nsModuleComponentInfo gComponents[] = NS_LOOKANDFEEL_CID, "@mozilla.org/widget/lookandfeel;1", nsLookAndFeelConstructor }, - { "Menubar", - NS_MENUBAR_CID, - "@mozilla.org/widget/menubar/mac;1", - nsMenuBarXConstructor }, - { "Menu", - NS_MENU_CID, - "@mozilla.org/widget/menu/mac;1", - nsMenuXConstructor }, - { "MenuItem", - NS_MENUITEM_CID, - "@mozilla.org/widget/menuitem/mac;1", - nsMenuItemXConstructor }, { "Sound", NS_SOUND_CID, "@mozilla.org/sound;1", @@ -189,6 +173,10 @@ static const nsModuleComponentInfo gComponents[] = NS_IDLE_SERVICE_CID, "@mozilla.org/widget/idleservice;1", nsIdleServiceXConstructor }, + { "Native Menu Service", + NS_NATIVEMENUSERVICE_CID, + "@mozilla.org/widget/nativemenuservice;1", + nsNativeMenuServiceXConstructor }, }; NS_IMPL_NSGETMODULE_WITH_CTOR_DTOR(nsWidgetMacModule, gComponents, diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 2b403789469f..02cc01086add 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -1373,7 +1373,7 @@ nsWindow::SetIcon(const nsAString& aIconSpec) } NS_IMETHODIMP -nsWindow::SetMenuBar(nsIMenuBar * aMenuBar) +nsWindow::SetMenuBar(void * aMenuBar) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h index 0631535408e8..2e8ea043f83f 100644 --- a/widget/src/gtk2/nsWindow.h +++ b/widget/src/gtk2/nsWindow.h @@ -141,7 +141,7 @@ public: NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); NS_IMETHOD SetWindowClass(const nsAString& xulWinType); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); + NS_IMETHOD SetMenuBar(void * aMenuBar); NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/os2/nsWindow.h b/widget/src/os2/nsWindow.h index ebcd7ad4aac3..973d16223d28 100644 --- a/widget/src/os2/nsWindow.h +++ b/widget/src/os2/nsWindow.h @@ -61,7 +61,6 @@ #include "gfxOS2Surface.h" #include "gfxContext.h" -class nsIMenuBar; class imgIContainer; //#define DEBUG_FOCUS @@ -178,7 +177,7 @@ class nsWindow : public nsBaseWidget, NS_IMETHOD HideWindowChrome(PRBool aShouldHide); NS_IMETHOD SetTitle( const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD Invalidate( PRBool aIsSynchronous); NS_IMETHOD Invalidate( const nsRect & aRect, PRBool aIsSynchronous); @@ -281,7 +280,6 @@ protected: PRInt32 mPreferredHeight; PRInt32 mPreferredWidth; nsToolkit *mOS2Toolkit; - nsIMenuBar *mMenuBar; PRInt32 mWindowState; nsRefPtr mThebesSurface; diff --git a/widget/src/photon/nsWindow.cpp b/widget/src/photon/nsWindow.cpp index 5ea978f2990b..50aa486f9edd 100644 --- a/widget/src/photon/nsWindow.cpp +++ b/widget/src/photon/nsWindow.cpp @@ -53,7 +53,6 @@ #include "nsRect.h" #include "nsTransform2D.h" #include "nsGfxCIID.h" -#include "nsIMenuBar.h" #include "nsToolkit.h" #include "nsIPrefBranch.h" #include "nsIPrefService.h" diff --git a/widget/src/windows/nsWindow.h b/widget/src/windows/nsWindow.h index 170c46cc1bc9..0d12409793ec 100644 --- a/widget/src/windows/nsWindow.h +++ b/widget/src/windows/nsWindow.h @@ -61,7 +61,6 @@ class nsNativeDragTarget; class nsIRollupListener; -class nsIMenuBar; class nsIFile; class imgIContainer; @@ -190,7 +189,7 @@ public: NS_IMETHOD ScrollRect(nsRect &aRect, PRInt32 aDx, PRInt32 aDy); NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD SetIcon(const nsAString& aIconSpec); - NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar) { return NS_ERROR_FAILURE; } + NS_IMETHOD SetMenuBar(void * aMenuBar) { return NS_ERROR_FAILURE; } NS_IMETHOD ShowMenuBar(PRBool aShow) { return NS_ERROR_FAILURE; } NS_IMETHOD WidgetToScreen(const nsRect& aOldRect, nsRect& aNewRect); NS_IMETHOD ScreenToWidget(const nsRect& aOldRect, nsRect& aNewRect); diff --git a/widget/src/xpwidgets/nsBaseWidget.h b/widget/src/xpwidgets/nsBaseWidget.h index 4829649c7d2c..7467b0d0d7ec 100644 --- a/widget/src/xpwidgets/nsBaseWidget.h +++ b/widget/src/xpwidgets/nsBaseWidget.h @@ -136,6 +136,7 @@ public: virtual void ConvertToDeviceCoordinates(nscoord &aX,nscoord &aY) {} virtual void FreeNativeData(void * data, PRUint32 aDataType) {} NS_IMETHOD BeginResizeDrag(nsGUIEvent* aEvent, PRInt32 aHorizontal, PRInt32 aVertical); + virtual nsresult ActivateNativeMenuItemAt(const nsAString& indexString) { return NS_ERROR_NOT_IMPLEMENTED; } protected: diff --git a/widget/tests/Makefile.in b/widget/tests/Makefile.in index 8a5ec7f53ee0..4bddadfeb530 100644 --- a/widget/tests/Makefile.in +++ b/widget/tests/Makefile.in @@ -48,5 +48,10 @@ _TEST_FILES = test_bug343416.xul \ test_keycodes.xul \ $(NULL) +ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) +_TEST_FILES += native_menus_window.xul \ + test_native_menus.xul +endif + libs:: $(_TEST_FILES) $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir) diff --git a/widget/tests/native_menus_window.xul b/widget/tests/native_menus_window.xul new file mode 100644 index 000000000000..1b68e3c4f7a7 --- /dev/null +++ b/widget/tests/native_menus_window.xul @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/widget/tests/test_native_menus.xul b/widget/tests/test_native_menus.xul new file mode 100644 index 000000000000..ac6887170607 --- /dev/null +++ b/widget/tests/test_native_menus.xul @@ -0,0 +1,34 @@ + + + + + + Native menu system tests + + + + diff --git a/xpfe/appshell/src/nsWebShellWindow.cpp b/xpfe/appshell/src/nsWebShellWindow.cpp index f83abc822596..9b7149bd487b 100644 --- a/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/xpfe/appshell/src/nsWebShellWindow.cpp @@ -109,8 +109,8 @@ #include "nsIMarkupDocumentViewer.h" #include "nsIFocusEventSuppressor.h" -#if defined(XP_MACOSX) -#include "nsIMenuBar.h" +#ifdef XP_MACOSX +#include "nsINativeMenuService.h" #define USE_NATIVE_MENUS #endif @@ -122,9 +122,6 @@ static PRUint32 gWebShellWindowCount = 0; /* Define Class IDs */ static NS_DEFINE_CID(kWindowCID, NS_WINDOW_CID); -#include "nsWidgetsCID.h" -static NS_DEFINE_CID(kMenuBarCID, NS_MENUBAR_CID); - #define SIZE_PERSISTENCE_TIMEOUT 500 // msec nsWebShellWindow::nsWebShellWindow() : nsXULWindow() @@ -552,23 +549,17 @@ static void LoadNativeMenus(nsIDOMDocument *aDOMDoc, nsIWidget *aParentWindow) aDOMDoc->GetElementsByTagNameNS(NS_LITERAL_STRING("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"), NS_LITERAL_STRING("menubar"), getter_AddRefs(menubarElements)); - + nsCOMPtr menubarNode; if (menubarElements) menubarElements->Item(0, getter_AddRefs(menubarNode)); - if (!menubarNode) return; - nsCOMPtr pnsMenuBar = do_CreateInstance(kMenuBarCID); - if (!pnsMenuBar) - return; - - pnsMenuBar->Create(aParentWindow); - - // fake event - nsMenuEvent fake(PR_TRUE, 0, nsnull); - pnsMenuBar->MenuConstruct(fake, aParentWindow, menubarNode); + nsCOMPtr nms = do_GetService("@mozilla.org/widget/nativemenuservice;1"); + nsCOMPtr menubarContent(do_QueryInterface(menubarNode)); + if (nms && menubarContent) + nms->CreateNativeMenuBar(aParentWindow, menubarContent); } #endif From bab5d29744d6c210f583608f06d892cfe7f3333d Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Sat, 28 Jun 2008 18:49:06 +0200 Subject: [PATCH 41/98] bug 442121 - Don't call into mailnews from toolkit-makefiles.sh, r=ted --- toolkit/toolkit-makefiles.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/toolkit/toolkit-makefiles.sh b/toolkit/toolkit-makefiles.sh index 53c21c0e7c48..07b4ff5fc604 100644 --- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -910,10 +910,6 @@ if test -n "$MOZ_CALENDAR"; then " fi -if [ "$MOZ_MAIL_NEWS" ]; then - . "${srcdir}/mailnews/makefiles.sh" -fi - if test -n "$MOZ_IPCD"; then add_makefiles " ipc/ipcd/Makefile From 10f21e7e3f0bb21bbcc0c50c7633ad265aced2b3 Mon Sep 17 00:00:00 2001 From: Mats Palmgren Date: Sat, 28 Jun 2008 23:45:53 +0200 Subject: [PATCH 42/98] Don't use the surface if there was an error creating it. b=441995 r+sr=roc --- widget/src/gtk2/nsWindow.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 02cc01086add..34e0278124da 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -1717,6 +1717,9 @@ nsWindow::OnExposeEvent(GtkWidget *aWidget, GdkEventExpose *aEvent) if (bufferPixmap) { bufferPixmapSurface = GetSurfaceForGdkDrawable(GDK_DRAWABLE(bufferPixmap), boundsRect.Size()); + if (bufferPixmapSurface && bufferPixmapSurface->CairoStatus()) { + bufferPixmapSurface = nsnull; + } if (bufferPixmapSurface) { bufferPixmapSurface->SetDeviceOffset(gfxPoint(-boundsRect.x, -boundsRect.y)); nsCOMPtr newRC; From 9d58c646fa3f5f8f74fc1dba2c20a2b85c923b23 Mon Sep 17 00:00:00 2001 From: Justin Dolske Date: Sun, 29 Jun 2008 17:05:48 -0700 Subject: [PATCH 43/98] =?UTF-8?q?Bug=20438394=20=E2=80=93=20land=20workaro?= =?UTF-8?q?und=20patch=20for=20unkillable=20hangs=20when=20loading=20Verif?= =?UTF-8?q?iedDownloadPlugin.plugin=20on=20trunk.=20r=3Djosh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/plugin/base/src/nsPluginsDirDarwin.cpp | 10 ++++++++++ security/nss/lib/util/secasn1d.c | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/plugin/base/src/nsPluginsDirDarwin.cpp b/modules/plugin/base/src/nsPluginsDirDarwin.cpp index 790ce31833b1..440ec8e8f80d 100644 --- a/modules/plugin/base/src/nsPluginsDirDarwin.cpp +++ b/modules/plugin/base/src/nsPluginsDirDarwin.cpp @@ -241,6 +241,16 @@ nsresult nsPluginFile::LoadPlugin(PRLibrary* &outLibrary) return NS_ERROR_NULL_POINTER; nsCAutoString temp; + mPlugin->GetNativeLeafName(temp); + /* + * Don't load the VDP fake plugin, to avoid tripping a bad bug in OS X + * 10.5.3 (see bug 436575). + */ + if (!strcmp(temp.get(), "VerifiedDownloadPlugin.plugin")) { + NS_WARNING("Preventing load of VerifiedDownloadPlugin.plugin (see bug 436575)"); + return NS_ERROR_FAILURE; + } + mPlugin->GetNativePath(temp); path = temp.get(); diff --git a/security/nss/lib/util/secasn1d.c b/security/nss/lib/util/secasn1d.c index 86160b0571c8..b9e9e497aa34 100644 --- a/security/nss/lib/util/secasn1d.c +++ b/security/nss/lib/util/secasn1d.c @@ -607,7 +607,7 @@ sec_asn1d_init_state_based_on_template (sec_asn1d_state *state) dest = state->dest; if (encode_kind & SEC_ASN1_INLINE) { /* check that there are no extraneous bits */ - PORT_Assert (encode_kind == SEC_ASN1_INLINE && !optional); +// PORT_Assert (encode_kind == SEC_ASN1_INLINE && !optional); state->place = afterInline; } else { state->place = afterImplicit; From 34067b73de3daf83d4b2dc192d6aba2005a809b5 Mon Sep 17 00:00:00 2001 From: Justin Dolske Date: Sun, 29 Jun 2008 17:10:28 -0700 Subject: [PATCH 44/98] Revert accidental checkin to NSS. --- security/nss/lib/util/secasn1d.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/nss/lib/util/secasn1d.c b/security/nss/lib/util/secasn1d.c index b9e9e497aa34..86160b0571c8 100644 --- a/security/nss/lib/util/secasn1d.c +++ b/security/nss/lib/util/secasn1d.c @@ -607,7 +607,7 @@ sec_asn1d_init_state_based_on_template (sec_asn1d_state *state) dest = state->dest; if (encode_kind & SEC_ASN1_INLINE) { /* check that there are no extraneous bits */ -// PORT_Assert (encode_kind == SEC_ASN1_INLINE && !optional); + PORT_Assert (encode_kind == SEC_ASN1_INLINE && !optional); state->place = afterInline; } else { state->place = afterImplicit; From 00bbcef891deeed9464929edfaacef3ed22948d9 Mon Sep 17 00:00:00 2001 From: Markus Stange Date: Sun, 29 Jun 2008 18:31:01 -0700 Subject: [PATCH 45/98] Bug 432028 - Undetermined progressmeter timer isn't stopped, causing high CPU load, r=enn --- toolkit/content/widgets/progressmeter.xml | 26 ++++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/toolkit/content/widgets/progressmeter.xml b/toolkit/content/widgets/progressmeter.xml index f6bdecdd4611..40e5d3774120 100644 --- a/toolkit/content/widgets/progressmeter.xml +++ b/toolkit/content/widgets/progressmeter.xml @@ -63,10 +63,12 @@ + true > 2; spacer.height = stack.boxObject.height; @@ -113,15 +110,28 @@ + + + + true Date: Mon, 30 Jun 2008 17:01:06 +0200 Subject: [PATCH 46/98] Don't cause a GC before the script is on the JS call stack. bug 440558, r=brendan --- js/src/jsinterp.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/js/src/jsinterp.cpp b/js/src/jsinterp.cpp index 0e0432b56d73..7970d6e261e3 100644 --- a/js/src/jsinterp.cpp +++ b/js/src/jsinterp.cpp @@ -1483,12 +1483,6 @@ js_Execute(JSContext *cx, JSObject *chain, JSScript *script, frame.callee = NULL; frame.fun = NULL; frame.thisp = chain; - OBJ_TO_OUTER_OBJECT(cx, frame.thisp); - if (!frame.thisp) { - ok = JS_FALSE; - goto out; - } - flags |= JSFRAME_COMPUTED_THIS; frame.argc = 0; frame.argv = NULL; frame.nvars = script->ngvars; @@ -1538,6 +1532,15 @@ js_Execute(JSContext *cx, JSObject *chain, JSScript *script, } cx->fp = &frame; + if (!down) { + OBJ_TO_OUTER_OBJECT(cx, frame.thisp); + if (!frame.thisp) { + ok = JS_FALSE; + goto out2; + } + frame.flags |= JSFRAME_COMPUTED_THIS; + } + if (hook) { hookData = hook(cx, &frame, JS_TRUE, 0, cx->debugHooks->executeHookData); @@ -1551,6 +1554,8 @@ js_Execute(JSContext *cx, JSObject *chain, JSScript *script, if (hook) hook(cx, &frame, JS_FALSE, &ok, hookData); } + +out2: if (mark) js_FreeRawStack(cx, mark); cx->fp = oldfp; From 19fb988fd458bb44411e1fdd8c3b9e63929c9962 Mon Sep 17 00:00:00 2001 From: Steven Michaud Date: Mon, 30 Jun 2008 11:30:22 -0500 Subject: [PATCH 47/98] IME doesn't work in Flash with Cocoa build (fix broken handing of key-up events, see bug 434914). b=357670 r=josh sr=roc --- widget/src/cocoa/nsAppShell.mm | 5 + widget/src/cocoa/nsChildView.h | 39 +++++ widget/src/cocoa/nsChildView.mm | 244 +++++++++++++++++++++++++++++++- 3 files changed, 286 insertions(+), 2 deletions(-) diff --git a/widget/src/cocoa/nsAppShell.mm b/widget/src/cocoa/nsAppShell.mm index 04fd87c1e0b6..e64ee6a438af 100644 --- a/widget/src/cocoa/nsAppShell.mm +++ b/widget/src/cocoa/nsAppShell.mm @@ -56,6 +56,7 @@ #include "nsIWebBrowserChrome.h" #include "nsObjCExceptions.h" #include "nsCocoaUtils.h" +#include "nsChildView.h" // defined in nsChildView.mm extern nsIRollupListener * gRollupListener; @@ -236,6 +237,8 @@ nsAppShell::Init() rv = nsBaseAppShell::Init(); + NS_InstallPluginKeyEventsHandler(); + [localPool release]; return rv; @@ -607,6 +610,8 @@ nsAppShell::Exit(void) mTerminated = PR_TRUE; + NS_RemovePluginKeyEventsHandler(); + // Quoting from Apple's doc on the [NSApplication stop:] method (from their // doc on the NSApplication class): "If this method is invoked during a // modal event loop, it will break that loop but not the main event loop." diff --git a/widget/src/cocoa/nsChildView.h b/widget/src/cocoa/nsChildView.h index 3ea7e64e1a34..62406a091271 100644 --- a/widget/src/cocoa/nsChildView.h +++ b/widget/src/cocoa/nsChildView.h @@ -71,6 +71,36 @@ class gfxASurface; class nsChildView; union nsPluginPort; +enum { + // Currently focused ChildView (while this TSM document is active). + // Transient (only set while TSMProcessRawKeyEvent() is processing a key + // event), and the ChildView will be retained and released around the call + // to TSMProcessRawKeyEvent() -- so it can be weak. + kFocusedChildViewTSMDocPropertyTag = 'GKFV', // type ChildView* [WEAK] +}; + +// Undocumented HIToolbox function used by WebKit to allow Carbon-based IME +// to work in a Cocoa-based browser (like Safari or Cocoa-widgets Firefox). +// (Recent WebKit versions actually use a thin wrapper around this function +// called WKSendKeyEventToTSM().) +// +// Calling TSMProcessRawKeyEvent() from ChildView's keyDown: and keyUp: +// methods (when the ChildView is a plugin view) bypasses Cocoa's IME +// infrastructure and (instead) causes Carbon TSM events to be sent on each +// NSKeyDown event. We install a Carbon event handler +// (PluginKeyEventsHandler()) to catch these events and pass them to Gecko +// (which in turn passes them to the plugin). +extern "C" long TSMProcessRawKeyEvent(EventRef carbonEvent); + +@interface NSEvent (Undocumented) + +// Return Cocoa event's corresponding Carbon event. Not initialized (on +// synthetic events) until the OS actually "sends" the event. This method +// has been present in the same form since at least OS X 10.2.8. +- (EventRef)_eventRef; + +@end + @interface ChildView : NSView< #ifdef ACCESSIBILITY mozAccessible, @@ -131,6 +161,11 @@ union nsPluginPort; nsIDragService* mDragService; PRUint32 mLastModifierState; + + // For use with plugins, so that we can support IME in them. We can't use + // Cocoa TSM documents (those created and managed by the NSTSMInputContext + // class) -- for some reason TSMProcessRawKeyEvent() doesn't work with them. + TSMDocumentID mPluginTSMDoc; } // these are sent to the first responder when the window key status changes @@ -143,6 +178,8 @@ union nsPluginPort; - (void)setTransparent:(BOOL)transparent; - (void)sendFocusEvent:(PRUint32)eventType; + +- (void) processPluginKeyEvent:(EventRef)aKeyEvent; @end @@ -383,5 +420,7 @@ protected: nsIPluginInstanceOwner* mPluginInstanceOwner; // [WEAK] }; +void NS_InstallPluginKeyEventsHandler(); +void NS_RemovePluginKeyEventsHandler(); #endif // nsChildView_h_ diff --git a/widget/src/cocoa/nsChildView.mm b/widget/src/cocoa/nsChildView.mm index 192cb2661799..67391491e604 100644 --- a/widget/src/cocoa/nsChildView.mm +++ b/widget/src/cocoa/nsChildView.mm @@ -2220,6 +2220,8 @@ NSEvent* gLastDragEvent = nil; mLastMouseDownEvent = nil; mDragService = nsnull; + + mPluginTSMDoc = nil; } // register for things we'll take from other applications @@ -2246,6 +2248,8 @@ NSEvent* gLastDragEvent = nil; [mPendingDirtyRects release]; [mLastMouseDownEvent release]; + if (mPluginTSMDoc) + ::DeleteTSMDocument(mPluginTSMDoc); if (sLastViewEntered == self) sLastViewEntered = nil; @@ -4490,6 +4494,84 @@ GetUSLayoutCharFromKeyTranslate(UInt32 aKeyCode, UInt32 aModifiers) } +// Called from PluginKeyEventsHandler() (a handler for Carbon TSM events) to +// process a Carbon key event for the currently focused plugin. Both Unicode +// characters and "Mac encoding characters" (in the MBCS or "multibyte +// character system") are (or should be) available from aKeyEvent, but here we +// use the MCBS characters. This is how the WebKit does things, and seems to +// be what plugins expect. +- (void) processPluginKeyEvent:(EventRef)aKeyEvent +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + if (!mGeckoChild) + return; + + nsAutoRetainCocoaObject kungFuDeathGrip(self); + + UInt32 numCharCodes; + OSStatus status = ::GetEventParameter(aKeyEvent, kEventParamKeyMacCharCodes, + typeChar, NULL, 0, &numCharCodes, NULL); + if (status != noErr) + return; + + nsAutoTArray charCodes; + charCodes.SetLength(numCharCodes); + status = ::GetEventParameter(aKeyEvent, kEventParamKeyMacCharCodes, + typeChar, NULL, numCharCodes, NULL, charCodes.Elements()); + if (status != noErr) + return; + + UInt32 modifiers; + status = ::GetEventParameter(aKeyEvent, kEventParamKeyModifiers, + typeUInt32, NULL, sizeof(modifiers), NULL, &modifiers); + if (status != noErr) + return; + + UInt32 macKeyCode; + status = ::GetEventParameter(aKeyEvent, kEventParamKeyCode, + typeUInt32, NULL, sizeof(macKeyCode), NULL, &macKeyCode); + if (status != noErr) + return; + + EventRef cloneEvent = ::CopyEvent(aKeyEvent); + for (unsigned int i = 0; i < numCharCodes; ++i) { + status = ::SetEventParameter(cloneEvent, kEventParamKeyMacCharCodes, + typeChar, 1, charCodes.Elements() + i); + if (status != noErr) + break; + + EventRecord eventRec; + if (::ConvertEventRefToEventRecord(cloneEvent, &eventRec)) { + nsKeyEvent keyDownEvent(PR_TRUE, NS_KEY_DOWN, mGeckoChild); + + PRUint32 keyCode(ConvertMacToGeckoKeyCode(macKeyCode, &keyDownEvent, @"")); + PRUint32 charCode(charCodes.ElementAt(i)); + + keyDownEvent.time = PR_IntervalNow(); + keyDownEvent.nativeMsg = &eventRec; + if (IsSpecialGeckoKey(macKeyCode)) { + keyDownEvent.keyCode = keyCode; + } else { + keyDownEvent.charCode = charCode; + keyDownEvent.isChar = PR_TRUE; + } + keyDownEvent.isShift = ((modifiers & shiftKey) != 0); + keyDownEvent.isControl = ((modifiers & controlKey) != 0); + keyDownEvent.isAlt = ((modifiers & optionKey) != 0); + keyDownEvent.isMeta = ((modifiers & cmdKey) != 0); // Should never happen + mGeckoChild->DispatchWindowEvent(keyDownEvent); + if (!mGeckoChild) + break; + } + } + + ::ReleaseEvent(cloneEvent); + + NS_OBJC_END_TRY_ABORT_BLOCK; +} + + - (nsRect)sendCompositionEvent:(PRInt32) aEventType { #ifdef DEBUG_IME @@ -5105,9 +5187,63 @@ static const char* ToEscapedString(NSString* aString, nsCAutoString& aBuf) } +// Create a TSM document for use with plugins, so that we can support IME in +// them. Once it's created, if need be (re)activate it. Some plugins (e.g. +// the Flash plugin running in Camino) don't create their own TSM document -- +// without which IME can't work. Others (e.g. the Flash plugin running in +// Firefox) create a TSM document that (somehow) makes the input window behave +// badly when it contains more than one kind of input (say Hiragana and +// Romaji). (We can't just use the per-NSView TSM documents that Cocoa +// provices (those created and managed by the NSTSMInputContext class) -- for +// some reason TSMProcessRawKeyEvent() doesn't work with them.) +- (void)activatePluginTSMDoc +{ + if (!mPluginTSMDoc) { + // Create a TSM document that supports both non-Unicode and Unicode input. + // Though [ChildView processPluginKeyEvent:] only sends Mac char codes to + // the plugin, this makes the input window behave better when it contains + // more than one kind of input (say Hiragana and Romaji). This is what + // the OS does when it creates a TSM document for use by an + // NSTSMInputContext class. + InterfaceTypeList supportedServices; + supportedServices[0] = kTextServiceDocumentInterfaceType; + supportedServices[1] = kUnicodeDocumentInterfaceType; + ::NewTSMDocument(2, supportedServices, &mPluginTSMDoc, 0); + // We'll need to use the "input window". + ::UseInputWindow(mPluginTSMDoc, YES); + ::ActivateTSMDocument(mPluginTSMDoc); + } else if (::TSMGetActiveDocument() != mPluginTSMDoc) { + ::ActivateTSMDocument(mPluginTSMDoc); + } +} + + - (void)keyDown:(NSEvent*)theEvent { + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + // If a plugin has the focus, we need to use an alternate method for + // handling NSKeyDown and NSKeyUp events (otherwise Carbon-based IME won't + // work in plugins like the Flash plugin). The same strategy is used by the + // WebKit. See PluginKeyEventsHandler() and [ChildView processPluginKeyEvent:] + // for more info. + if (mGeckoChild && mIsPluginView) { + [self activatePluginTSMDoc]; + // We use the active TSM document to pass a pointer to ourselves (the + // currently focused ChildView) to PluginKeyEventsHandler(). Because this + // pointer is weak, we should retain and release ourselves around the call + // to TSMProcessRawKeyEvent(). + nsAutoRetainCocoaObject kungFuDeathGrip(self); + ::TSMSetDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag, + sizeof(ChildView *), &self); + ::TSMProcessRawKeyEvent([theEvent _eventRef]); + ::TSMRemoveDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag); + return; + } + [self processKeyDownEvent:theEvent keyEquiv:NO]; + + NS_OBJC_END_TRY_ABORT_BLOCK; } @@ -5127,12 +5263,47 @@ static BOOL keyUpAlreadySentKeyDown = NO; ToEscapedString([theEvent characters], str1), ToEscapedString([theEvent charactersIgnoringModifiers], str2))); - // if we don't have any characters we can't generate a keyUp event - if (!mGeckoChild || [[theEvent characters] length] == 0) + if (!mGeckoChild) return; nsAutoRetainCocoaObject kungFuDeathGrip(self); + if (mIsPluginView) { + // I'm not sure the call to TSMProcessRawKeyEvent() is needed here (though + // WebKit makes one). + ::TSMProcessRawKeyEvent([theEvent _eventRef]); + + // Don't send a keyUp event if the corresponding keyDown event(s) is/are + // still being processed (idea borrowed from WebKit). + ChildView *keyDownTarget = nil; + OSStatus status = ::TSMGetDocumentProperty(mPluginTSMDoc, kFocusedChildViewTSMDocPropertyTag, + sizeof(ChildView *), nil, &keyDownTarget); + if (status != noErr) + keyDownTarget = nil; + if (keyDownTarget == self) + return; + + // PluginKeyEventsHandler() never sends keyUp events to [ChildView + // processPluginKeyEvent:], so we need to send them to Gecko here. (This + // means that when commiting text from IME, several keyDown events may be + // sent to Gecko (in processPluginKeyEvent) for one keyUp event here. + // But this is how the WebKit does it, and games expect a keyUp event to + // be sent when it actually happens (they need to be able to detect how + // long a key has been held down) -- which wouldn't be possible if we sent + // them from processPluginKeyEvent.) + nsKeyEvent keyUpEvent(PR_TRUE, NS_KEY_UP, nsnull); + [self convertCocoaKeyEvent:theEvent toGeckoEvent:&keyUpEvent]; + EventRecord macKeyUpEvent; + ConvertCocoaKeyEventToMacEvent(theEvent, macKeyUpEvent); + keyUpEvent.nativeMsg = &macKeyUpEvent; + mGeckoChild->DispatchWindowEvent(keyUpEvent); + return; + } + + // if we don't have any characters we can't generate a keyUp event + if ([[theEvent characters] length] == 0) + return; + // Cocoa doesn't send an NSKeyDown event for control-tab on 10.4, so if this // is an NSKeyUp event for control-tab, send a down event to gecko first. if (!nsToolkit::OnLeopardOrLater() && !keyUpAlreadySentKeyDown && @@ -5920,3 +6091,72 @@ nsTSMManager::CancelIME() NS_OBJC_END_TRY_ABORT_BLOCK; } + + +// Target for text services events sent as the result of calls made to +// TSMProcessRawKeyEvent() in [ChildView keyDown:] (above) when a plugin has +// the focus. The calls to TSMProcessRawKeyEvent() short-circuit Cocoa-based +// IME (which would otherwise interfere with our efforts) and allow Carbon- +// based IME to work in plugins (via the NPAPI). This strategy doesn't cause +// trouble for plugins that (like the Java Embedding Plugin) bypass the NPAPI +// to get their keyboard events and do their own Cocoa-based IME. +OSStatus PluginKeyEventsHandler(EventHandlerCallRef inHandlerRef, + EventRef inEvent, void *userData) +{ + id arp = [[NSAutoreleasePool alloc] init]; + + TSMDocumentID activeDoc = ::TSMGetActiveDocument(); + if (!activeDoc) { + [arp release]; + return eventNotHandledErr; + } + + ChildView *target = nil; + OSStatus status = ::TSMGetDocumentProperty(activeDoc, kFocusedChildViewTSMDocPropertyTag, + sizeof(ChildView *), nil, &target); + if (status != noErr) + target = nil; + if (!target) { + [arp release]; + return eventNotHandledErr; + } + + EventRef keyEvent = NULL; + status = ::GetEventParameter(inEvent, kEventParamTextInputSendKeyboardEvent, + typeEventRef, NULL, sizeof(EventRef), NULL, &keyEvent); + if ((status != noErr) || !keyEvent) { + [arp release]; + return eventNotHandledErr; + } + + [target processPluginKeyEvent:keyEvent]; + + [arp release]; + return noErr; +} + +static EventHandlerRef gPluginKeyEventsHandler = NULL; + +// Called from nsAppShell::Init() +void NS_InstallPluginKeyEventsHandler() +{ + if (gPluginKeyEventsHandler) + return; + static const EventTypeSpec sTSMEvents[] = + { { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent } }; + ::InstallEventHandler(::GetEventDispatcherTarget(), + ::NewEventHandlerUPP(PluginKeyEventsHandler), + GetEventTypeCount(sTSMEvents), + sTSMEvents, + NULL, + &gPluginKeyEventsHandler); +} + +// Called from nsAppShell::Exit() +void NS_RemovePluginKeyEventsHandler() +{ + if (!gPluginKeyEventsHandler) + return; + ::RemoveEventHandler(gPluginKeyEventsHandler); + gPluginKeyEventsHandler = NULL; +} From 41a77913db79091e1005526cdb8f2bb1b936d1b2 Mon Sep 17 00:00:00 2001 From: Igor Bukanov Date: Mon, 30 Jun 2008 18:36:59 +0200 Subject: [PATCH 48/98] [Bug 442242] SM: fixing INT_FITS_IN_JSVAL on 64 bit platforms --- js/src/jsapi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 92fbfec2e866..d3c9c48ce37b 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -103,8 +103,8 @@ JS_BEGIN_EXTERN_C #define JSVAL_INT_POW2(n) ((jsval)1 << (n)) #define JSVAL_INT_MIN (-JSVAL_INT_POW2(30)) #define JSVAL_INT_MAX (JSVAL_INT_POW2(30) - 1) -#define INT_FITS_IN_JSVAL(i) ((jsuint)(i) + JSVAL_INT_MAX + 1 <= \ - 2 * JSVAL_INT_MAX + 1) +#define INT_FITS_IN_JSVAL(i) ((jsuint)(i) - (jsuint)JSVAL_INT_MIN <= \ + (jsuint)(JSVAL_INT_MAX - JSVAL_INT_MIN)) #define JSVAL_TO_INT(v) ((jsint)(v) >> 1) #define INT_TO_JSVAL(i) (((jsval)(i) << 1) | JSVAL_INT) From 3eab5b11422137fd1ef61aabca49bf5d8e61a8d5 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 30 Jun 2008 12:44:06 -0400 Subject: [PATCH 49/98] Bug 425454 - whitelist placement-new for stack classes. Also uses treehydra analysis so we don't have to require a constructor for stack classes any more. r=taras --- config/config.mk | 3 +- xpcom/analysis/final.js | 16 ++ xpcom/analysis/stack.js | 190 ++++++++++++++++-- xpcom/analysis/static-checking.js | 182 +---------------- xpcom/tests/static-checker/Makefile.in | 7 + .../static-checker/StackNoConstructor.cpp | 11 + .../static-checker/StackPlacementNewOK.cpp | 15 ++ xpcom/tests/static-checker/StackVector.cpp | 12 ++ 8 files changed, 241 insertions(+), 195 deletions(-) create mode 100644 xpcom/analysis/final.js create mode 100644 xpcom/tests/static-checker/StackNoConstructor.cpp create mode 100644 xpcom/tests/static-checker/StackPlacementNewOK.cpp create mode 100644 xpcom/tests/static-checker/StackVector.cpp diff --git a/config/config.mk b/config/config.mk index aed5778a20bf..69e61d9af140 100644 --- a/config/config.mk +++ b/config/config.mk @@ -505,11 +505,12 @@ endif DEHYDRA_SCRIPT = $(topsrcdir)/xpcom/analysis/static-checking.js DEHYDRA_MODULES = \ - $(topsrcdir)/xpcom/analysis/stack.js \ + $(topsrcdir)/xpcom/analysis/final.js \ $(NULL) TREEHYDRA_MODULES = \ $(topsrcdir)/xpcom/analysis/outparams.js \ + $(topsrcdir)/xpcom/analysis/stack.js \ $(NULL) DEHYDRA_ARGS = \ diff --git a/xpcom/analysis/final.js b/xpcom/analysis/final.js new file mode 100644 index 000000000000..6bad0d7bca38 --- /dev/null +++ b/xpcom/analysis/final.js @@ -0,0 +1,16 @@ +function process_type(c) +{ + if ((c.kind == 'class' || c.kind == 'struct') && !c.isIncomplete) { + for each (let base in c.bases) + if (isFinal(base)) + error("Class '" + c.name + "' derives from final class '" + base.name + "'.", c.loc); + } +} + +function isFinal(c) +{ + if (c.isIncomplete) + throw Error("Can't get final property for incomplete type."); + + return hasAttribute(c, 'NS_final'); +} diff --git a/xpcom/analysis/stack.js b/xpcom/analysis/stack.js index f2be283a98cc..d0feb9494080 100644 --- a/xpcom/analysis/stack.js +++ b/xpcom/analysis/stack.js @@ -1,26 +1,178 @@ -function process_function(f, stmts) -{ - var stmt; - function getLocation() - { - if (stmt.loc) - return stmt.loc; +include("gcc_util.js"); +include("unstable/lazy_types.js"); - return f.loc; +function process_type(c) +{ + if ((c.kind == 'class' || c.kind == 'struct') && + !c.isIncomplete) + isStack(c); +} + +function isStack(c) +{ + function calculate() + { + if (hasAttribute(c, 'NS_stack')) + return true; + + for each (let base in c.bases) + if (isStack(base)) + return true; + + for each (let member in c.members) { + if (member.isFunction) + continue; + + let type = member.type; + while (true) { + if (type === undefined) + break; + + if (type.isArray) { + type = type.type; + continue; + } + + if (type.typedef) { + if (hasAttribute(type, 'NS_stack')) + return true; + + type = type.typedef; + continue; + } + break; + } + + if (type === undefined) { + warning("incomplete type for member " + member + ".", member.loc); + continue; + } + + if (type.isPointer || type.isReference) + continue; + + if (!type.kind || (type.kind != 'class' && type.kind != 'struct')) + continue; + + if (isStack(type)) + return true; + } + return false; } - function processVar(v) - { - if (v.isConstructor && - v.fieldOf && - get_class(v.memberOf, false).stack && - v.fieldOf.type.isPointer) { - error(getLocation() + ": constructed object of type '" + - v.memberOf.name + "' not on the stack."); + if (c.isIncomplete) + throw Error("Can't get stack property for incomplete type."); + + if (!c.hasOwnProperty('isStack')) + c.isStack = calculate(); + + return c.isStack; +} + +function isVoidPtr(t) +{ + return t.isPointer && t.type.name == 'void'; +} + +/** + * Detect a call to operator new. If this is operator new, and not + * placement-new, return the VAR_DECL of the temporary variable that operator + * new is always assigned to. + */ +function operator_new_assign(stmt) +{ + try { + stmt.tree_check(GIMPLE_MODIFY_STMT); + let [varDecl, callExpr] = stmt.operands(); + varDecl.tree_check(VAR_DECL); + callExpr.tree_check(CALL_EXPR); + + let fncall = callable_arg_function_decl(CALL_EXPR_FN(callExpr)). + tree_check(FUNCTION_DECL); + + let nameid = DECL_NAME(fncall); + if (IDENTIFIER_OPNAME_P(nameid)) { + let name = IDENTIFIER_POINTER(nameid); + if (name == "operator new" || name == "operator new []") { + // if this is placement-new, ignore it (should we issue a warning?) + let fncallobj = dehydra_convert(TREE_TYPE(fncall)); + if (fncallobj.parameters.length == 2 && + isVoidPtr(fncallobj.parameters[1])) + return null; + + return varDecl; + } } } + catch (e if e.TreeCheckError) { } - for each (stmt in stmts) { - iter(processVar, stmt.statements); - } + return null; +} + +function process_tree(fndecl) +{ + function findconstructors(t, stack) + { + function getLocation(t) { + let loc; + if (t) { + loc = location_of(t); + if (loc !== undefined) + return loc; + } + + for (let i = stack.length - 1; i >= 0; --i) { + let loc = location_of(stack[i]); + if (loc !== undefined) + return loc; + } + return location_of(DECL_SAVED_TREE(fndecl)); + } + + function check_opnew_assignment(varDecl, stmt) + { + if (TREE_CODE(stmt) != GIMPLE_MODIFY_STMT) { + warning("operator new not followed by a GIMPLE_MODIFY_STMT: " + TREE_CODE(stmt), getLocation(stmt)); + return; + } + + let [destVar, assign] = stmt.operands(); + if (TREE_CODE(assign) == NOP_EXPR) + assign = assign.operands()[0]; + + if (assign != varDecl) { + warning("operator new not followed by an known assignment pattern", getLocation(stmt)); + return; + } + + let destType = dehydra_convert(TREE_TYPE(destVar)); + if (!destType.isPointer && !destType.isReference) { + error("operator new not assigned to pointer/ref?", getLocation(stmt)); + return; + } + destType = destType.type; + + if (isStack(destType)) + error("constructed object of type '" + destType.name + "' not on the stack.", getLocation(stmt)); + } + + if (TREE_CODE(t) != STATEMENT_LIST) + return; + + // if we find a tuple of "operator new" / GIMPLE_MODIFY_STMT casting + // the result of operator new to a pointer type + let opnew = null; + for (let stmt in iter_statement_list(t)) { + if (opnew != null) + check_opnew_assignment(opnew, stmt); + + opnew = operator_new_assign(stmt); + } + + if (opnew != null) + warning("operator new not followed by an assignment", getLocation()); + } + + let tmap = new Map(); + walk_tree(DECL_SAVED_TREE(fndecl), findconstructors, tmap); } diff --git a/xpcom/analysis/static-checking.js b/xpcom/analysis/static-checking.js index b2fc834e418c..da29bf81e582 100644 --- a/xpcom/analysis/static-checking.js +++ b/xpcom/analysis/static-checking.js @@ -36,194 +36,26 @@ LoadModules(options['dehydra-modules']); if (treehydra_enabled()) LoadModules(options['treehydra-modules']); -/** - * gClassMap maps class names to an object with the following properties: - * - * .final = true if the class has been annotated as final, and may not be - * subclassed - * .stack = true if the class has been annotated as a class which may only - * be instantiated on the stack - */ -var gClassMap = {}; - -function ClassType(name) -{ - this.name = name; -} - -ClassType.prototype = { - final: false, - stack: false, -}; - function process_type(c) { - if (c.kind == 'class' || c.kind == 'struct') - get_class(c, true); - for each (let module in modules) if (module.hasOwnProperty('process_type')) module.process_type(c); } -/** - * Get the ClassType for a type 'c' - * - * If allowIncomplete is true and the type is incomplete, this function - * will return null. - * - * If allowIncomplete is false and the type is incomplete, this function will - * throw. - */ -function get_class(c, allowIncomplete) +function hasAttribute(c, attrname) { - var classattr, base, member, type, realtype, foundConstructor; - var bases = []; - - if (c.isIncomplete) { - if (allowIncomplete) - return null; - - throw Error("Can't process incomplete type '" + c + "'."); - } - - if (gClassMap.hasOwnProperty(c.name)) { - return gClassMap[c.name]; - } - - for each (base in c.bases) { - realtype = get_class(base, allowIncomplete); - if (realtype == null) { - error("Complete type " + c + " has incomplete base " + base); - return null; - } - - bases.push(realtype); - } - - function hasAttribute(attrname) - { - var attr; - - if (c.attributes === undefined) - return false; - - for each (attr in c.attributes) { - if (attr.name == 'user' && attr.value[0] == attrname) { - return true; - } - } + var attr; + if (c.attributes === undefined) return false; - } - classattr = new ClassType(c.name); - gClassMap[c.name] = classattr; + for each (attr in c.attributes) + if (attr.name == 'user' && attr.value[0] == attrname) + return true; - // check for .final - - if (hasAttribute('NS_final')) { - classattr.final = true; - } - - // check for .stack - - if (hasAttribute('NS_stack')) { - classattr.stack = true; - } - else { - for each (base in bases) { - if (base.stack) { - classattr.stack = true; - break; - } - } - } - - if (!classattr.stack) { - // Check members - for each (member in c.members) { - if (member.isFunction) - continue; - - type = member.type; - - /* recurse through arrays and typedefs */ - while (true) { - if (type === undefined) { - break; - } - - if (type.isArray) { - type = type.type; - continue; - } - if (type.typedef) { - type = type.typedef; - continue; - } - break; - } - - if (type === undefined) { - warning("incomplete type for member " + member + "."); - continue; - } - - if (type.isPointer || type.isReference) { - continue; - } - - if (!type.kind || (type.kind != 'class' && type.kind != 'struct')) { - continue; - } - - var membertype = get_class(type, false); - if (membertype.stack) { - classattr.stack = true; - break; - } - } - } - - // Check for errors at declaration-time - - for each (base in bases) { - if (base.final) { - error("class '" + c.name + "' inherits from final class '" + base.name + "'."); - } - } - - // At the moment, any class that is .final has to have a constructor, or - // we can't detect callsites... this may change with treehydra. - if (classattr.stack) { - foundConstructor = false; - for each (member in c.members) { - if (member.isConstructor) { - foundConstructor = true; - break; - } - } - - if (!foundConstructor) { - warning(c.loc + ": class " + c.name + " is marked stack-only but doesn't have a constructor. Static checking can't detect instantiations of this class properly."); - } - } - - return classattr; + return false; } - -/** - * Unwrap any array of types back to their base type. - */ -function unwrapArray(t) -{ - while (t.isArray) { - t = t.type; - } - return t; -} - function process_function(f, stmts) { for each (let module in modules) diff --git a/xpcom/tests/static-checker/Makefile.in b/xpcom/tests/static-checker/Makefile.in index d3027c93f934..2264211a47ff 100644 --- a/xpcom/tests/static-checker/Makefile.in +++ b/xpcom/tests/static-checker/Makefile.in @@ -55,6 +55,12 @@ FINAL_FAILURE_TESTCASES = \ STACK_FAILURE_TESTCASES = \ TestStack.cpp \ TestStackTemplate.cpp \ + StackNoConstructor.cpp \ + StackVector.cpp \ + $(NULL) + +STACK_PASS_TESTCASES = \ + StackPlacementNewOK.cpp \ $(NULL) OUTPARAMS_WARNING_TESTCASES = \ @@ -100,6 +106,7 @@ STATIC_WARNING_TESTCASES = \ STATIC_PASS_TESTCASES = \ $(OUTPARAMS_PASS_TESTCASES) \ + $(STACK_PASS_TESTCASES) \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/xpcom/tests/static-checker/StackNoConstructor.cpp b/xpcom/tests/static-checker/StackNoConstructor.cpp new file mode 100644 index 000000000000..9172d7be59b6 --- /dev/null +++ b/xpcom/tests/static-checker/StackNoConstructor.cpp @@ -0,0 +1,11 @@ +#include "nscore.h" + +struct NS_STACK_CLASS A +{ + int i; +}; + +void* Foo() +{ + return new A(); +} diff --git a/xpcom/tests/static-checker/StackPlacementNewOK.cpp b/xpcom/tests/static-checker/StackPlacementNewOK.cpp new file mode 100644 index 000000000000..110d18ed6a36 --- /dev/null +++ b/xpcom/tests/static-checker/StackPlacementNewOK.cpp @@ -0,0 +1,15 @@ +#include "nscore.h" +#include NEW_H + +struct NS_STACK_CLASS A +{ + int i; +}; + +int Foo() +{ + char buf[sizeof(A)]; + + A *a = new(&buf) A; + return a->i; +} diff --git a/xpcom/tests/static-checker/StackVector.cpp b/xpcom/tests/static-checker/StackVector.cpp new file mode 100644 index 000000000000..1e826b0c8d3b --- /dev/null +++ b/xpcom/tests/static-checker/StackVector.cpp @@ -0,0 +1,12 @@ +#include "nscore.h" + +struct NS_STACK_CLASS A +{ + int i; +}; + +void* Foo() +{ + A *a = new A[8]; + return a; +} From 2f2e63b6336814b591d444a7a1bb2b716fcaeddc Mon Sep 17 00:00:00 2001 From: Igor Bukanov Date: Mon, 30 Jun 2008 19:17:33 +0200 Subject: [PATCH 50/98] [Bug 411575] SM: faster js_PutCallObject, r=brendan --- js/src/jsfun.cpp | 178 +++++++++++++++++++++++++++++------------------ js/src/jsobj.cpp | 6 +- js/src/jsobj.h | 7 ++ 3 files changed, 119 insertions(+), 72 deletions(-) diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index 043a21248afa..3404fbd241f7 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -583,6 +583,10 @@ JSClass js_ArgumentsClass = { JS_CLASS_TRACE(args_or_call_trace), NULL }; +#define JSSLOT_SCRIPTED_FUNCTION (JSSLOT_PRIVATE + 1) +#define JSSLOT_CALL_ARGUMENTS (JSSLOT_PRIVATE + 2) +#define CALL_CLASS_FIXED_RESERVED_SLOTS 2 + JSObject * js_GetCallObject(JSContext *cx, JSStackFrame *fp, JSObject *parent) { @@ -603,10 +607,12 @@ js_GetCallObject(JSContext *cx, JSStackFrame *fp, JSObject *parent) /* Create the call object and link it to its stack frame. */ callobj = js_NewObject(cx, &js_CallClass, NULL, parent, 0); - if (!callobj || !JS_SetPrivate(cx, callobj, fp)) { - cx->weakRoots.newborn[GCX_OBJECT] = NULL; + if (!callobj) return NULL; - } + + JS_SetPrivate(cx, callobj, fp); + STOBJ_SET_SLOT(callobj, JSSLOT_SCRIPTED_FUNCTION, + OBJECT_TO_JSVAL(FUN_OBJECT(fp->fun))); fp->callobj = callobj; /* Make callobj be the scope chain and the variables object. */ @@ -616,44 +622,78 @@ js_GetCallObject(JSContext *cx, JSStackFrame *fp, JSObject *parent) return callobj; } -static JSBool -call_enumerate(JSContext *cx, JSObject *obj); +JSFunction * +js_GetCallObjectFunction(JSObject *obj) +{ + jsval v; + + JS_ASSERT(STOBJ_GET_CLASS(obj) == &js_CallClass); + v = STOBJ_GET_SLOT(obj, JSSLOT_SCRIPTED_FUNCTION); + if (JSVAL_IS_VOID(v)) { + /* Newborn or prototype object. */ + return NULL; + } + JS_ASSERT(!JSVAL_IS_PRIMITIVE(v)); + return (JSFunction *) JSVAL_TO_OBJECT(v); +} JS_FRIEND_API(JSBool) js_PutCallObject(JSContext *cx, JSStackFrame *fp) { JSObject *callobj; JSBool ok; - jsid argsid; - jsval aval; + JSFunction *fun; + uintN n; + JSScope *scope; /* - * Reuse call_enumerate here to reflect all actual args and vars into the - * call object from fp. + * Since for a call object all fixed slots happen to be taken, we can copy + * arguments and variables straight into JSObject.dslots. */ + JS_STATIC_ASSERT(JS_INITIAL_NSLOTS - JSSLOT_PRIVATE == + 1 + CALL_CLASS_FIXED_RESERVED_SLOTS); + callobj = fp->callobj; if (!callobj) return JS_TRUE; - ok = call_enumerate(cx, callobj); /* * Get the arguments object to snapshot fp's actual argument values. */ + ok = JS_TRUE; if (fp->argsobj) { if (!TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) { - argsid = ATOM_TO_JSID(cx->runtime->atomState.argumentsAtom); - aval = OBJECT_TO_JSVAL(fp->argsobj); - ok &= js_SetProperty(cx, callobj, argsid, &aval); + STOBJ_SET_SLOT(callobj, JSSLOT_CALL_ARGUMENTS, + OBJECT_TO_JSVAL(fp->argsobj)); } ok &= js_PutArgsObject(cx, fp); } + fun = fp->fun; + JS_ASSERT(fun == js_GetCallObjectFunction(callobj)); + n = JS_GET_LOCAL_NAME_COUNT(fun); + if (n != 0) { + JS_LOCK_OBJ(cx, callobj); + n += JS_INITIAL_NSLOTS; + if (n > STOBJ_NSLOTS(callobj)) + ok &= js_ReallocSlots(cx, callobj, n, JS_TRUE); + scope = OBJ_SCOPE(callobj); + if (ok) { + memcpy(callobj->dslots, fp->argv, fun->nargs * sizeof(jsval)); + memcpy(callobj->dslots + fun->nargs, fp->vars, + fun->u.i.nvars * sizeof(jsval)); + if (scope->object == callobj && n > scope->map.freeslot) + scope->map.freeslot = n; + } + JS_UNLOCK_SCOPE(cx, scope); + } + /* * Clear the private pointer to fp, which is about to go away (js_Invoke). - * Do this last because the call_enumerate and js_GetProperty calls above - * need to follow the private slot to find fp. + * Do this last because js_GetProperty calls above need to follow the + * private slot to find fp. */ - ok &= JS_SetPrivate(cx, callobj, NULL); + JS_SetPrivate(cx, callobj, NULL); fp->callobj = NULL; return ok; } @@ -661,28 +701,16 @@ js_PutCallObject(JSContext *cx, JSStackFrame *fp) static JSBool call_enumerate(JSContext *cx, JSObject *obj) { - JSStackFrame *fp; JSFunction *fun; - uintN n, i, slot; + uintN n, i; void *mark; jsuword *names; JSBool ok; JSAtom *name; JSObject *pobj; JSProperty *prop; - jsval v; - fp = (JSStackFrame *) JS_GetPrivate(cx, obj); - if (!fp) - return JS_TRUE; - JS_ASSERT(GET_FUNCTION_PRIVATE(cx, fp->callee) == fp->fun); - - /* - * Reflect actual args from fp->argv for formal parameters, and local vars - * and functions in fp->vars for declared variables and nested-at-top-level - * local functions. - */ - fun = fp->fun; + fun = js_GetCallObjectFunction(obj); n = JS_GET_LOCAL_NAME_COUNT(fun); if (n == 0) return JS_TRUE; @@ -715,11 +743,7 @@ call_enumerate(JSContext *cx, JSObject *obj) * JSPROP_PERMANENT. */ JS_ASSERT(prop && pobj == obj); - slot = ((JSScopeProperty *) prop)->slot; OBJ_DROP_PROPERTY(cx, pobj, prop); - - v = (i < fun->nargs) ? fp->argv[i] : fp->vars[i - fun->nargs]; - LOCKED_OBJ_SET_SLOT(obj, slot, v); } ok = JS_TRUE; @@ -738,36 +762,53 @@ static JSBool CallPropertyOp(JSContext *cx, JSObject *obj, jsid id, jsval *vp, JSCallPropertyKind kind, JSBool setter) { - JSStackFrame *fp; JSFunction *fun; + JSStackFrame *fp; uintN i; jsval *array; - fp = (JSStackFrame *) JS_GetPrivate(cx, obj); - if (!fp) + if (STOBJ_GET_CLASS(obj) != &js_CallClass) return JS_TRUE; - fun = fp->fun; - JS_ASSERT(fun && FUN_INTERPRETED(fun)); + + fun = js_GetCallObjectFunction(obj); + fp = (JSStackFrame *) JS_GetPrivate(cx, obj); if (kind == JSCPK_ARGUMENTS) { if (setter) { - SET_OVERRIDE_BIT(fp, CALL_ARGUMENTS); - } else if (!TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) { - JSObject *argsobj; + if (fp) + SET_OVERRIDE_BIT(fp, CALL_ARGUMENTS); + STOBJ_SET_SLOT(obj, JSSLOT_CALL_ARGUMENTS, *vp); + } else { + if (fp && !TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) { + JSObject *argsobj; - argsobj = js_GetArgsObject(cx, fp); - if (!argsobj) - return JS_FALSE; - *vp = OBJECT_TO_JSVAL(argsobj); + argsobj = js_GetArgsObject(cx, fp); + if (!argsobj) + return JS_FALSE; + *vp = OBJECT_TO_JSVAL(argsobj); + } else { + *vp = STOBJ_GET_SLOT(obj, JSSLOT_CALL_ARGUMENTS); + } } return JS_TRUE; - } + } JS_ASSERT((int16) JSVAL_TO_INT(id) == JSVAL_TO_INT(id)); i = (uint16) JSVAL_TO_INT(id); JS_ASSERT_IF(kind == JSCPK_ARG, i < fun->nargs); JS_ASSERT_IF(kind == JSCPK_VAR, i < fun->u.i.nvars); + if (!fp) { + i += CALL_CLASS_FIXED_RESERVED_SLOTS; + if (kind == JSCPK_VAR) + i += fun->nargs; + else + JS_ASSERT(kind == JSCPK_ARG); + return setter + ? JS_SetReservedSlot(cx, obj, i, *vp) + : JS_GetReservedSlot(cx, obj, i, vp); + } + JS_ASSERT(fun->u.i.nvars == fp->nvars); if (kind == JSCPK_ARG) { array = fp->argv; @@ -822,48 +863,39 @@ static JSBool call_resolve(JSContext *cx, JSObject *obj, jsval idval, uintN flags, JSObject **objp) { - JSStackFrame *fp; JSFunction *fun; jsid id; JSLocalKind localKind; JSPropertyOp getter, setter; uintN slot, attrs; - jsval *vp; - - fp = (JSStackFrame *) JS_GetPrivate(cx, obj); - if (!fp) - return JS_TRUE; - fun = fp->fun; - JS_ASSERT(fun); - JS_ASSERT(GET_FUNCTION_PRIVATE(cx, fp->callee) == fun); if (!JSVAL_IS_STRING(idval)) return JS_TRUE; + fun = js_GetCallObjectFunction(obj); + if (!fun) + return JS_TRUE; + if (!js_ValueToStringId(cx, idval, &id)) return JS_FALSE; localKind = js_LookupLocal(cx, fun, JSID_TO_ATOM(id), &slot); if (localKind != JSLOCAL_NONE) { JS_ASSERT((uint16) slot == slot); + attrs = JSPROP_PERMANENT | JSPROP_SHARED; if (localKind == JSLOCAL_ARG) { JS_ASSERT(slot < fun->nargs); - vp = fp->argv; getter = js_GetCallArg; setter = SetCallArg; - attrs = JSPROP_PERMANENT; } else { JS_ASSERT(localKind == JSLOCAL_VAR || localKind == JSLOCAL_CONST); - JS_ASSERT(fun->u.i.nvars == fp->nvars); JS_ASSERT(slot < fun->u.i.nvars); - vp = fp->vars; getter = js_GetCallVar; setter = SetCallVar; - attrs = (localKind == JSLOCAL_CONST) - ? JSPROP_PERMANENT | JSPROP_READONLY - : JSPROP_PERMANENT; + if (localKind == JSLOCAL_CONST) + attrs |= JSPROP_READONLY; } - if (!js_DefineNativeProperty(cx, obj, id, vp[slot], getter, setter, + if (!js_DefineNativeProperty(cx, obj, id, JSVAL_VOID, getter, setter, attrs, SPROP_HAS_SHORTID, (int16) slot, NULL)) { return JS_FALSE; @@ -879,7 +911,8 @@ call_resolve(JSContext *cx, JSObject *obj, jsval idval, uintN flags, if (id == ATOM_TO_JSID(cx->runtime->atomState.argumentsAtom)) { if (!js_DefineNativeProperty(cx, obj, id, JSVAL_VOID, GetCallArguments, SetCallArguments, - JSPROP_PERMANENT, 0, 0, NULL)) { + JSPROP_PERMANENT | JSPROP_SHARED, + 0, 0, NULL)) { return JS_FALSE; } *objp = obj; @@ -903,9 +936,20 @@ call_convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp) return JS_TRUE; } +static uint32 +call_reserveSlots(JSContext *cx, JSObject *obj) +{ + JSFunction *fun; + + fun = js_GetCallObjectFunction(obj); + return JS_GET_LOCAL_NAME_COUNT(fun); +} + JS_FRIEND_DATA(JSClass) js_CallClass = { js_Call_str, - JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_IS_ANONYMOUS | + JSCLASS_HAS_PRIVATE | + JSCLASS_HAS_RESERVED_SLOTS(CALL_CLASS_FIXED_RESERVED_SLOTS) | + JSCLASS_NEW_RESOLVE | JSCLASS_IS_ANONYMOUS | JSCLASS_MARK_IS_TRACE | JSCLASS_HAS_CACHED_PROTO(JSProto_Call), JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, @@ -914,7 +958,7 @@ JS_FRIEND_DATA(JSClass) js_CallClass = { NULL, NULL, NULL, NULL, NULL, NULL, - JS_CLASS_TRACE(args_or_call_trace), NULL, + JS_CLASS_TRACE(args_or_call_trace), call_reserveSlots }; /* diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 696aab876b44..46f4b2225cca 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -1951,10 +1951,6 @@ js_CloneBlockObject(JSContext *cx, JSObject *proto, JSObject *parent, return clone; } -static JSBool -js_ReallocSlots(JSContext *cx, JSObject *obj, uint32 nslots, - JSBool exactAllocation); - JSBool js_PutBlockObject(JSContext *cx, JSBool normalUnwind) { @@ -2304,7 +2300,7 @@ FreeSlots(JSContext *cx, JSObject *obj) #define DYNAMIC_WORDS_TO_SLOTS(words) \ (JS_ASSERT((words) > 1), (words) - 1 + JS_INITIAL_NSLOTS) -static JSBool +JSBool js_ReallocSlots(JSContext *cx, JSObject *obj, uint32 nslots, JSBool exactAllocation) { diff --git a/js/src/jsobj.h b/js/src/jsobj.h index fcc57ce9975e..03ff7de70226 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -689,6 +689,13 @@ js_GetRequiredSlot(JSContext *cx, JSObject *obj, uint32 slot); extern JSBool js_SetRequiredSlot(JSContext *cx, JSObject *obj, uint32 slot, jsval v); +/* + * obj must be locked. + */ +extern JSBool +js_ReallocSlots(JSContext *cx, JSObject *obj, uint32 nslots, + JSBool exactAllocation); + extern JSObject * js_CheckScopeChainValidity(JSContext *cx, JSObject *scopeobj, const char *caller); From a124d5b9a19375b65e9fdbfaad2afeab4743f1f8 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 30 Jun 2008 14:46:47 -0400 Subject: [PATCH 51/98] Bug 442714 - Mark NS_STACK_CLASS on nsAutoString, r=dbaron --- intl/uconv/src/nsScriptableUConv.h | 4 +--- modules/libpref/src/nsPrefBranch.h | 3 +-- netwerk/base/src/nsDirectoryIndexStream.h | 2 +- netwerk/streamconv/converters/nsFTPDirListingConv.h | 2 +- xpcom/string/public/nsTString.h | 4 ++-- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/intl/uconv/src/nsScriptableUConv.h b/intl/uconv/src/nsScriptableUConv.h index 401d7d09e866..27c7a2ac880b 100644 --- a/intl/uconv/src/nsScriptableUConv.h +++ b/intl/uconv/src/nsScriptableUConv.h @@ -54,9 +54,7 @@ public: virtual ~nsScriptableUnicodeConverter(); protected: - // charsets are ALWAYS very short, so its actually better to use - // nsCAutoString here - nsCAutoString mCharset; + nsCString mCharset; nsCOMPtr mEncoder; nsCOMPtr mDecoder; diff --git a/modules/libpref/src/nsPrefBranch.h b/modules/libpref/src/nsPrefBranch.h index c2970197743c..44330d4b368b 100644 --- a/modules/libpref/src/nsPrefBranch.h +++ b/modules/libpref/src/nsPrefBranch.h @@ -121,6 +121,5 @@ public: private: nsCOMPtr mFile; - nsCAutoString mRelativeToKey; // An nsCAutoString because length is always very short. - // While this makes the object larger, avoids allocation. + nsCString mRelativeToKey; }; diff --git a/netwerk/base/src/nsDirectoryIndexStream.h b/netwerk/base/src/nsDirectoryIndexStream.h index 00871a674c60..0fe473e528f7 100644 --- a/netwerk/base/src/nsDirectoryIndexStream.h +++ b/netwerk/base/src/nsDirectoryIndexStream.h @@ -48,7 +48,7 @@ class nsDirectoryIndexStream : public nsIInputStream { private: - nsCAutoString mBuf; + nsCString mBuf; PRInt32 mOffset; nsresult mStatus; diff --git a/netwerk/streamconv/converters/nsFTPDirListingConv.h b/netwerk/streamconv/converters/nsFTPDirListingConv.h index 257bf287caac..fa0de04f644a 100644 --- a/netwerk/streamconv/converters/nsFTPDirListingConv.h +++ b/netwerk/streamconv/converters/nsFTPDirListingConv.h @@ -77,7 +77,7 @@ private: char* DigestBufferLines(char *aBuffer, nsCString &aString); // member data - nsCAutoString mBuffer; // buffered data. + nsCString mBuffer; // buffered data. PRBool mSentHeading; // have we sent 100, 101, 200, and 300 lines yet? nsIStreamListener *mFinalListener; // this guy gets the converted data via his OnDataAvailable() diff --git a/xpcom/string/public/nsTString.h b/xpcom/string/public/nsTString.h index ceb833d4cbb0..3cc93b82e4de 100644 --- a/xpcom/string/public/nsTString.h +++ b/xpcom/string/public/nsTString.h @@ -487,7 +487,7 @@ class nsTFixedString_CharT : public nsTString_CharT * Subclass of nsTString_CharT that adds support for stack-based string * allocation. Do not allocate this class on the heap! ;-) */ -class nsTAutoString_CharT : public nsTFixedString_CharT +class NS_STACK_CLASS nsTAutoString_CharT : public nsTFixedString_CharT { public: @@ -631,7 +631,7 @@ class nsTXPIDLString_CharT : public nsTString_CharT * // ... * } */ -class nsTGetterCopies_CharT +class NS_STACK_CLASS nsTGetterCopies_CharT { public: typedef CharT char_type; From 4886e82b07e7eb447a54e954171a44fb496b5959 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 30 Jun 2008 15:35:11 -0400 Subject: [PATCH 52/98] Fix whitespace (hard tabs) --- xpcom/analysis/final.js | 2 +- xpcom/analysis/stack.js | 46 ++++++++++++++++++++--------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/xpcom/analysis/final.js b/xpcom/analysis/final.js index 6bad0d7bca38..26cf30707ad8 100644 --- a/xpcom/analysis/final.js +++ b/xpcom/analysis/final.js @@ -3,7 +3,7 @@ function process_type(c) if ((c.kind == 'class' || c.kind == 'struct') && !c.isIncomplete) { for each (let base in c.bases) if (isFinal(base)) - error("Class '" + c.name + "' derives from final class '" + base.name + "'.", c.loc); + error("Class '" + c.name + "' derives from final class '" + base.name + "'.", c.loc); } } diff --git a/xpcom/analysis/stack.js b/xpcom/analysis/stack.js index d0feb9494080..a649d9fddd6b 100644 --- a/xpcom/analysis/stack.js +++ b/xpcom/analysis/stack.js @@ -16,46 +16,46 @@ function isStack(c) return true; for each (let base in c.bases) - if (isStack(base)) - return true; + if (isStack(base)) + return true; for each (let member in c.members) { if (member.isFunction) - continue; + continue; let type = member.type; while (true) { - if (type === undefined) - break; + if (type === undefined) + break; - if (type.isArray) { - type = type.type; - continue; - } + if (type.isArray) { + type = type.type; + continue; + } - if (type.typedef) { - if (hasAttribute(type, 'NS_stack')) - return true; + if (type.typedef) { + if (hasAttribute(type, 'NS_stack')) + return true; - type = type.typedef; - continue; - } - break; + type = type.typedef; + continue; + } + break; } if (type === undefined) { - warning("incomplete type for member " + member + ".", member.loc); - continue; + warning("incomplete type for member " + member + ".", member.loc); + continue; } if (type.isPointer || type.isReference) - continue; + continue; if (!type.kind || (type.kind != 'class' && type.kind != 'struct')) - continue; + continue; if (isStack(type)) - return true; + return true; } return false; } @@ -98,7 +98,7 @@ function operator_new_assign(stmt) let fncallobj = dehydra_convert(TREE_TYPE(fncall)); if (fncallobj.parameters.length == 2 && isVoidPtr(fncallobj.parameters[1])) - return null; + return null; return varDecl; } @@ -164,7 +164,7 @@ function process_tree(fndecl) let opnew = null; for (let stmt in iter_statement_list(t)) { if (opnew != null) - check_opnew_assignment(opnew, stmt); + check_opnew_assignment(opnew, stmt); opnew = operator_new_assign(stmt); } From 38e0248c7826193b63eb2586faa7226694829965 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Mon, 30 Jun 2008 13:46:23 -0700 Subject: [PATCH 53/98] bug 433373 - Fix clipping region when printing selections that start later in document (taking page-scaling into account). r+sr=roc --- layout/generic/nsPageFrame.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/layout/generic/nsPageFrame.cpp b/layout/generic/nsPageFrame.cpp index 4024f9e8f1e4..e1742b48dc17 100644 --- a/layout/generic/nsPageFrame.cpp +++ b/layout/generic/nsPageFrame.cpp @@ -559,7 +559,12 @@ nsPageFrame::PaintPageContent(nsIRenderingContext& aRenderingContext, // We're doing print-selection, with one long page-content frame. // Clip to the appropriate page-content slice for the current page. NS_ASSERTION(mPageNum > 0, "page num should be positive"); - clipRect.y = expectedPageContentHeight * (mPageNum - 1); + // Note: The pageContentFrame's y-position has been set such that a zero + // y-value matches the top edge of the current page. So, to clip to the + // current page's content (in coordinates *relative* to the page content + // frame), we just negate its y-position and add the top margin. + clipRect.y = NSToCoordCeil((-pageContentFrame->GetRect().y + + mPD->mReflowMargin.top) / scale); clipRect.height = expectedPageContentHeight; NS_ASSERTION(clipRect.y < pageContentFrame->GetSize().height, "Should be clipping to region inside the page content bounds"); From d4c50db758b628471268ad75cb88db2abadc22c3 Mon Sep 17 00:00:00 2001 From: John Daggett Date: Tue, 1 Jul 2008 09:02:21 +0900 Subject: [PATCH 54/98] Bug 433997. Catch null ptrs returned by CGFontGetHMetrics in cairo mac font code to prevent top crasher. r+sr=vlad --- gfx/cairo/cairo/src/cairo-quartz-font.c | 5 +++++ gfx/thebes/public/gfxAtsuiFonts.h | 2 ++ gfx/thebes/src/gfxAtsuiFonts.cpp | 26 ++++++++++++++++++++----- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/gfx/cairo/cairo/src/cairo-quartz-font.c b/gfx/cairo/cairo/src/cairo-quartz-font.c index 4a59d676679e..5b0c87efab7a 100644 --- a/gfx/cairo/cairo/src/cairo-quartz-font.c +++ b/gfx/cairo/cairo/src/cairo-quartz-font.c @@ -188,6 +188,11 @@ _cairo_quartz_font_face_scaled_font_create (void *abstract_face, quartz_CGFontMetrics *m; m = CGFontGetHMetricsPtr (font_face->cgFont); + if (!m) { + status = _cairo_error(CAIRO_STATUS_NULL_POINTER); + goto FINISH; + } + fs_metrics.ascent = (m->ascent / ems); fs_metrics.descent = - (m->descent / ems); fs_metrics.height = fs_metrics.ascent + fs_metrics.descent + (m->leading / ems); diff --git a/gfx/thebes/public/gfxAtsuiFonts.h b/gfx/thebes/public/gfxAtsuiFonts.h index 43c2f1413e1c..8534f8e7b9b8 100644 --- a/gfx/thebes/public/gfxAtsuiFonts.h +++ b/gfx/thebes/public/gfxAtsuiFonts.h @@ -85,6 +85,7 @@ public: PRBool TestCharacterMap(PRUint32 aCh); MacOSFontEntry* GetFontEntry(); + PRBool Valid() { return mValid; } protected: const gfxFontStyle *mFontStyle; @@ -93,6 +94,7 @@ protected: nsRefPtr mFontEntry; + PRBool mValid; PRBool mHasMirroring; PRBool mHasMirroringLookedUp; diff --git a/gfx/thebes/src/gfxAtsuiFonts.cpp b/gfx/thebes/src/gfxAtsuiFonts.cpp index 5241195ce049..d49252cf4a53 100644 --- a/gfx/thebes/src/gfxAtsuiFonts.cpp +++ b/gfx/thebes/src/gfxAtsuiFonts.cpp @@ -94,7 +94,7 @@ gfxAtsuiFont::gfxAtsuiFont(MacOSFontEntry *aFontEntry, const gfxFontStyle *fontStyle, PRBool aNeedsBold) : gfxFont(aFontEntry->Name(), fontStyle), mFontStyle(fontStyle), mATSUStyle(nsnull), mFontEntry(aFontEntry), - mHasMirroring(PR_FALSE), mHasMirroringLookedUp(PR_FALSE), mAdjustedSize(0.0f) + mValid(PR_TRUE), mHasMirroring(PR_FALSE), mHasMirroringLookedUp(PR_FALSE), mAdjustedSize(0.0f) { ATSUFontID fontID = mFontEntry->GetFontID(); ATSFontRef fontRef = FMGetATSFontRefFromFont(fontID); @@ -149,8 +149,17 @@ gfxAtsuiFont::gfxAtsuiFont(MacOSFontEntry *aFontEntry, mScaledFont = cairo_scaled_font_create(mFontFace, &sizeMatrix, &ctm, fontOptions); cairo_font_options_destroy(fontOptions); - NS_ASSERTION(cairo_scaled_font_status(mScaledFont) == CAIRO_STATUS_SUCCESS, - "Failed to create scaled font"); + + cairo_status_t cairoerr = cairo_scaled_font_status(mScaledFont); + if (cairoerr != CAIRO_STATUS_SUCCESS) { + mValid = PR_FALSE; + +#ifdef DEBUG + char warnBuf[1024]; + sprintf(warnBuf, "Failed to create scaled font: %s status: %d", NS_ConvertUTF16toUTF8(mName).get(), cairoerr); + NS_WARNING(warnBuf); +#endif + } } @@ -415,6 +424,7 @@ gfxAtsuiFont::HasMirroringInfo() } PRBool gfxAtsuiFont::TestCharacterMap(PRUint32 aCh) { + if (!mValid) return PR_FALSE; return mFontEntry->TestCharacterMap(aCh); } @@ -436,9 +446,14 @@ GetOrMakeFont(MacOSFontEntry *aFontEntry, const gfxFontStyle *aStyle, PRBool aNe // the font entry name is the psname, not the family name nsRefPtr font = gfxFontCache::GetCache()->Lookup(aFontEntry->Name(), aStyle); if (!font) { - font = new gfxAtsuiFont(aFontEntry, aStyle, aNeedsBold); - if (!font) + gfxAtsuiFont *newFont = new gfxAtsuiFont(aFontEntry, aStyle, aNeedsBold); + if (!newFont) return nsnull; + if (!newFont->Valid()) { + delete newFont; + return nsnull; + } + font = newFont; gfxFontCache::GetCache()->AddNew(font); } gfxFont *f = nsnull; @@ -835,6 +850,7 @@ gfxAtsuiFontGroup::WhichPrefFontSupportsChar(PRUint32 aCh) // if ch in cmap, create and return a gfxFont if (fe && fe->TestCharacterMap(aCh)) { nsRefPtr prefFont = GetOrMakeFont(fe, &mStyle, needsBold); + if (!prefFont) continue; mLastPrefFamily = family; mLastPrefFont = prefFont; mLastPrefLang = charLang; From bad11891959217d47d5c68705502e44cc638608e Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 30 Jun 2008 21:03:29 -0400 Subject: [PATCH 55/98] Bug 442762 - Annotate mozStorageStatementScoper with NS_STACK_CLASS, r=sdwilsh --- storage/public/mozStorageHelper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/public/mozStorageHelper.h b/storage/public/mozStorageHelper.h index a7fa47bce5fd..9afbf1842848 100644 --- a/storage/public/mozStorageHelper.h +++ b/storage/public/mozStorageHelper.h @@ -150,7 +150,7 @@ protected: * Note that this always just resets the statement. If the statement doesn't * need resetting, the reset operation is inexpensive. */ -class mozStorageStatementScoper +class NS_STACK_CLASS mozStorageStatementScoper { public: mozStorageStatementScoper(mozIStorageStatement* aStatement) From 884ca0dcaec8c1936ec65813d7ae5396035c74d2 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 30 Jun 2008 21:03:50 -0400 Subject: [PATCH 56/98] Bug 442735 - Annotate classes in dom/content which only appear on the stack, r+sr=jst --- content/base/public/nsContentUtils.h | 2 +- content/base/public/nsIDocument.h | 2 +- content/base/src/mozAutoDocUpdate.h | 4 ++-- content/base/src/nsContentAreaDragDrop.cpp | 2 +- content/base/src/nsNodeUtils.cpp | 5 +++-- content/base/src/nsRange.cpp | 2 +- content/events/public/nsEventDispatcher.h | 2 +- content/events/src/nsEventStateManager.cpp | 2 +- content/events/src/nsQueryContentEventHandler.h | 2 +- content/html/content/src/nsHTMLSelectElement.h | 2 +- content/svg/content/src/nsSVGFilters.cpp | 2 +- content/svg/content/src/nsSVGValue.h | 2 +- content/xul/templates/src/nsXULTemplateBuilder.cpp | 2 +- docshell/base/nsDocShell.cpp | 2 +- dom/public/base/nsIFocusController.h | 4 ++-- dom/public/nsDOMScriptObjectHolder.h | 2 +- .../components/webbrowserpersist/src/nsWebBrowserPersist.cpp | 2 +- embedding/components/windowwatcher/src/nsWindowWatcher.cpp | 2 +- layout/base/nsPresShell.cpp | 2 +- modules/plugin/base/src/nsPluginHostImpl.h | 2 +- 20 files changed, 24 insertions(+), 23 deletions(-) diff --git a/content/base/public/nsContentUtils.h b/content/base/public/nsContentUtils.h index 6783a1a2f91a..cb1f4f9ed170 100644 --- a/content/base/public/nsContentUtils.h +++ b/content/base/public/nsContentUtils.h @@ -1379,7 +1379,7 @@ private: nsContentUtils::DropJSObjects(NS_CYCLE_COLLECTION_UPCAST(obj, clazz)) -class nsCxPusher +class NS_STACK_CLASS nsCxPusher { public: nsCxPusher(); diff --git a/content/base/public/nsIDocument.h b/content/base/public/nsIDocument.h index f173b2e8782b..c3932a6f65ea 100644 --- a/content/base/public/nsIDocument.h +++ b/content/base/public/nsIDocument.h @@ -1102,7 +1102,7 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsIDocument, NS_IDOCUMENT_IID) * event is dispatched, if necessary, when the outermost mozAutoSubtreeModified * object is deleted. */ -class mozAutoSubtreeModified +class NS_STACK_CLASS mozAutoSubtreeModified { public: /** diff --git a/content/base/src/mozAutoDocUpdate.h b/content/base/src/mozAutoDocUpdate.h index 963d4f888563..58a6a3ae55b5 100644 --- a/content/base/src/mozAutoDocUpdate.h +++ b/content/base/src/mozAutoDocUpdate.h @@ -41,7 +41,7 @@ * in which case no updates will be called. The constructor also takes a * boolean that can be set to false to prevent notifications. */ -class mozAutoDocUpdate +class NS_STACK_CLASS mozAutoDocUpdate { public: mozAutoDocUpdate(nsIDocument* aDocument, nsUpdateType aUpdateType, @@ -94,7 +94,7 @@ private: * but then have inner mozAutoDocUpdate call the last EndUpdate before. * we remove that blocker. See bug 423269. */ -class mozAutoDocConditionalContentUpdateBatch +class NS_STACK_CLASS mozAutoDocConditionalContentUpdateBatch { public: mozAutoDocConditionalContentUpdateBatch(nsIDocument* aDocument, diff --git a/content/base/src/nsContentAreaDragDrop.cpp b/content/base/src/nsContentAreaDragDrop.cpp index feba79b000fd..8f3c1a38a943 100644 --- a/content/base/src/nsContentAreaDragDrop.cpp +++ b/content/base/src/nsContentAreaDragDrop.cpp @@ -119,7 +119,7 @@ NS_INTERFACE_MAP_BEGIN(nsContentAreaDragDrop) NS_INTERFACE_MAP_END -class nsTransferableFactory +class NS_STACK_CLASS nsTransferableFactory { public: nsTransferableFactory(nsIDOMEvent* inMouseEvent, diff --git a/content/base/src/nsNodeUtils.cpp b/content/base/src/nsNodeUtils.cpp index 7e4762bd69f0..7c0f4be170d8 100755 --- a/content/base/src/nsNodeUtils.cpp +++ b/content/base/src/nsNodeUtils.cpp @@ -323,10 +323,11 @@ nsNodeUtils::GetUserData(nsINode *aNode, const nsAString &aKey, return NS_OK; } -struct nsHandlerData +struct NS_STACK_CLASS nsHandlerData { PRUint16 mOperation; - nsCOMPtr mSource, mDest; + nsCOMPtr mSource; + nsCOMPtr mDest; }; static void diff --git a/content/base/src/nsRange.cpp b/content/base/src/nsRange.cpp index 0e85492e8b06..a4b629d923f1 100644 --- a/content/base/src/nsRange.cpp +++ b/content/base/src/nsRange.cpp @@ -789,7 +789,7 @@ nsresult nsRange::SelectNodeContents(nsIDOMNode* aN) // start/end points in the future, we can switchover relatively // easy. -class RangeSubtreeIterator +class NS_STACK_CLASS RangeSubtreeIterator { private: diff --git a/content/events/public/nsEventDispatcher.h b/content/events/public/nsEventDispatcher.h index 5497a79e33be..32e771d5aa56 100644 --- a/content/events/public/nsEventDispatcher.h +++ b/content/events/public/nsEventDispatcher.h @@ -190,7 +190,7 @@ public: * before handling the system event group. * This is used in nsPresShell. */ -class nsDispatchingCallback { +class NS_STACK_CLASS nsDispatchingCallback { public: virtual void HandleEvent(nsEventChainPostVisitor& aVisitor) = 0; }; diff --git a/content/events/src/nsEventStateManager.cpp b/content/events/src/nsEventStateManager.cpp index ec2773c93353..bd9630a6f43e 100644 --- a/content/events/src/nsEventStateManager.cpp +++ b/content/events/src/nsEventStateManager.cpp @@ -2929,7 +2929,7 @@ nsEventStateManager::SetCursor(PRInt32 aCursor, imgIContainer* aContainer, return NS_OK; } -class nsESMEventCB : public nsDispatchingCallback +class NS_STACK_CLASS nsESMEventCB : public nsDispatchingCallback { public: nsESMEventCB(nsIContent* aTarget) : mTarget(aTarget) {} diff --git a/content/events/src/nsQueryContentEventHandler.h b/content/events/src/nsQueryContentEventHandler.h index e577bdff3e6f..fa402b5739f6 100644 --- a/content/events/src/nsQueryContentEventHandler.h +++ b/content/events/src/nsQueryContentEventHandler.h @@ -61,7 +61,7 @@ struct nsRect; * This class answers to NS_QUERY_* events from actual contents. */ -class nsQueryContentEventHandler { +class NS_STACK_CLASS nsQueryContentEventHandler { public: nsQueryContentEventHandler(nsPresContext *aPresContext); diff --git a/content/html/content/src/nsHTMLSelectElement.h b/content/html/content/src/nsHTMLSelectElement.h index 86f96c77b318..cbdabd0bfebf 100644 --- a/content/html/content/src/nsHTMLSelectElement.h +++ b/content/html/content/src/nsHTMLSelectElement.h @@ -190,7 +190,7 @@ private: nsCheapInt32Set mIndices; }; -class nsSafeOptionListMutation +class NS_STACK_CLASS nsSafeOptionListMutation { public: /** diff --git a/content/svg/content/src/nsSVGFilters.cpp b/content/svg/content/src/nsSVGFilters.cpp index 3aba072e8e2e..c97ba0002843 100644 --- a/content/svg/content/src/nsSVGFilters.cpp +++ b/content/svg/content/src/nsSVGFilters.cpp @@ -79,7 +79,7 @@ * filters. PLEASE NOTE that nsSVGFilterResource should ONLY be used on the * stack because it has nsAutoString member. */ -class nsSVGFilterResource +class NS_STACK_CLASS nsSVGFilterResource { public: nsSVGFilterResource(nsSVGFE *aFilter, nsSVGFilterInstance* aInstance); diff --git a/content/svg/content/src/nsSVGValue.h b/content/svg/content/src/nsSVGValue.h index e234fb0a2f4e..292afe6fb651 100644 --- a/content/svg/content/src/nsSVGValue.h +++ b/content/svg/content/src/nsSVGValue.h @@ -87,7 +87,7 @@ private: // Class that will automatically call WillModify and DidModify in its ctor // and dtor respectively (for functions that have multiple exit points). -class nsSVGValueAutoNotifier +class NS_STACK_CLASS nsSVGValueAutoNotifier { public: nsSVGValueAutoNotifier(nsSVGValue* aVal, diff --git a/content/xul/templates/src/nsXULTemplateBuilder.cpp b/content/xul/templates/src/nsXULTemplateBuilder.cpp index a72e08a167f0..2197e2d83046 100644 --- a/content/xul/templates/src/nsXULTemplateBuilder.cpp +++ b/content/xul/templates/src/nsXULTemplateBuilder.cpp @@ -1580,7 +1580,7 @@ nsXULTemplateBuilder::ParseAttribute(const nsAString& aAttributeValue, } -struct SubstituteTextClosure { +struct NS_STACK_CLASS SubstituteTextClosure { SubstituteTextClosure(nsIXULTemplateResult* aResult, nsAString& aString) : result(aResult), str(aString) {} diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index c07ee7d8bf91..1fc6b7fb1b3f 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -8440,7 +8440,7 @@ nsDocShell::WalkHistoryEntries(nsISHEntry *aRootEntry, } // callback data for WalkHistoryEntries -struct CloneAndReplaceData +struct NS_STACK_CLASS CloneAndReplaceData { CloneAndReplaceData(PRUint32 aCloneID, nsISHEntry *aReplaceEntry, nsISHEntry *aDestTreeParent) diff --git a/dom/public/base/nsIFocusController.h b/dom/public/base/nsIFocusController.h index 06df3c0e025d..5a48725b1519 100644 --- a/dom/public/base/nsIFocusController.h +++ b/dom/public/base/nsIFocusController.h @@ -90,7 +90,7 @@ public: NS_DEFINE_STATIC_IID_ACCESSOR(nsIFocusController, NS_IFOCUSCONTROLLER_IID) -class nsFocusSuppressor { +class NS_STACK_CLASS nsFocusSuppressor { public: ~nsFocusSuppressor() { @@ -128,7 +128,7 @@ private: const char *mReason; }; -class nsFocusScrollSuppressor +class NS_STACK_CLASS nsFocusScrollSuppressor { public: nsFocusScrollSuppressor(nsIFocusController* aController = nsnull) diff --git a/dom/public/nsDOMScriptObjectHolder.h b/dom/public/nsDOMScriptObjectHolder.h index ab8d46bcabb1..fb666700f293 100644 --- a/dom/public/nsDOMScriptObjectHolder.h +++ b/dom/public/nsDOMScriptObjectHolder.h @@ -46,7 +46,7 @@ // functions and a fully inline implementation should keep the cost down. // [Note that a fully inline implementation is necessary for use by other // languages, which do not link against the layout component module] -class nsScriptObjectHolder { +class NS_STACK_CLASS nsScriptObjectHolder { public: // A constructor that will cause a reference to |ctx| to be stored in // the object. Only use for short-lived object holders. diff --git a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp index 3fea51ecdc6e..29beaaa69aca 100644 --- a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp +++ b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp @@ -2356,7 +2356,7 @@ public: } }; -struct FixRedirectData +struct NS_STACK_CLASS FixRedirectData { nsCOMPtr mNewChannel; nsCOMPtr mOriginalURI; diff --git a/embedding/components/windowwatcher/src/nsWindowWatcher.cpp b/embedding/components/windowwatcher/src/nsWindowWatcher.cpp index 2affc0d0f26b..9fb96002b6e6 100644 --- a/embedding/components/windowwatcher/src/nsWindowWatcher.cpp +++ b/embedding/components/windowwatcher/src/nsWindowWatcher.cpp @@ -268,7 +268,7 @@ void nsWatcherWindowEnumerator::WindowRemoved(nsWatcherWindowEntry *inInfo) { ********************** JSContextAutoPopper ********************* ****************************************************************/ -class JSContextAutoPopper { +class NS_STACK_CLASS JSContextAutoPopper { public: JSContextAutoPopper(); ~JSContextAutoPopper(); diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index d60a71de45ee..cce1994a9392 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -1237,7 +1237,7 @@ public: PresShell* mShell; }; -class nsPresShellEventCB : public nsDispatchingCallback +class NS_STACK_CLASS nsPresShellEventCB : public nsDispatchingCallback { public: nsPresShellEventCB(PresShell* aPresShell) : mPresShell(aPresShell) {} diff --git a/modules/plugin/base/src/nsPluginHostImpl.h b/modules/plugin/base/src/nsPluginHostImpl.h index 03fb8d82e05a..23efd1b80ff8 100644 --- a/modules/plugin/base/src/nsPluginHostImpl.h +++ b/modules/plugin/base/src/nsPluginHostImpl.h @@ -474,7 +474,7 @@ private: static nsPluginHostImpl* sInst; }; -class PluginDestructionGuard : protected PRCList +class NS_STACK_CLASS PluginDestructionGuard : protected PRCList { public: PluginDestructionGuard(nsIPluginInstance *aInstance) From 4dc6d586f8e2c152639292c7dd37346370610909 Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Tue, 1 Jul 2008 03:12:46 -0400 Subject: [PATCH 57/98] Fix spelling mistake from bug 433248's patch (comment failure string) --- .../libjar/zipwriter/test/unit/test_bug433248.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/libjar/zipwriter/test/unit/test_bug433248.js b/modules/libjar/zipwriter/test/unit/test_bug433248.js index f43003dfc56e..a13fbb7424e0 100644 --- a/modules/libjar/zipwriter/test/unit/test_bug433248.js +++ b/modules/libjar/zipwriter/test/unit/test_bug433248.js @@ -42,7 +42,7 @@ function run_test() // zipW is an uninitialised zipwriter at this point. try { test = zipW.file; - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -50,7 +50,7 @@ function run_test() try { test = zipW.comment; - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -58,7 +58,7 @@ function run_test() try { zipW.comment = "test"; - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -66,7 +66,7 @@ function run_test() try { zipW.addEntryDirectory("test", 0, false); - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -74,7 +74,7 @@ function run_test() try { zipW.addEntryFile("test", Ci.nsIZipWriter.COMPRESSION_DEFAULT, tmpDir, false); - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -82,7 +82,7 @@ function run_test() try { zipW.removeEntry("test", false); - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -90,7 +90,7 @@ function run_test() try { zipW.processQueue(null, null); - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); @@ -98,7 +98,7 @@ function run_test() try { zipW.close(); - do_throw("Should have thrown unitialised error."); + do_throw("Should have thrown uninitialized error."); } catch (e) { do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); From 8503b6428bdd17c41afa648929258e5302c262be Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Tue, 1 Jul 2008 14:23:21 -0400 Subject: [PATCH 58/98] Bug 442756 - Add stack annotations to editor classes, r=glazou sr=jst --- editor/libeditor/base/nsEditorUtils.h | 14 +++++++------- editor/libeditor/base/nsSelectionState.h | 10 +++++----- editor/libeditor/html/nsTableEditor.cpp | 4 ++-- editor/libeditor/html/nsWSRunObject.h | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/editor/libeditor/base/nsEditorUtils.h b/editor/libeditor/base/nsEditorUtils.h index ff3c18ffe656..f77d19b15ccd 100644 --- a/editor/libeditor/base/nsEditorUtils.h +++ b/editor/libeditor/base/nsEditorUtils.h @@ -56,7 +56,7 @@ class nsPlaintextEditor; * stack based helper class for batching a collection of txns inside a * placeholder txn. */ -class nsAutoPlaceHolderBatch +class NS_STACK_CLASS nsAutoPlaceHolderBatch { private: nsCOMPtr mEd; @@ -82,7 +82,7 @@ class nsAutoEditBatch : public nsAutoPlaceHolderBatch * stack based helper class for saving/restoring selection. Note that this * assumes that the nodes involved are still around afterwards! */ -class nsAutoSelectionReset +class NS_STACK_CLASS nsAutoSelectionReset { private: /** ref-counted reference to the selection that we are supposed to restore */ @@ -103,7 +103,7 @@ class nsAutoSelectionReset /*************************************************************************** * stack based helper class for StartOperation()/EndOperation() sandwich */ -class nsAutoRules +class NS_STACK_CLASS nsAutoRules { public: @@ -134,7 +134,7 @@ class nsAutoRules * stack based helper class for turning off active selection adjustment * by low level transactions */ -class nsAutoTxnsConserveSelection +class NS_STACK_CLASS nsAutoTxnsConserveSelection { public: @@ -163,7 +163,7 @@ class nsAutoTxnsConserveSelection /*************************************************************************** * stack based helper class for batching reflow and paint requests. */ -class nsAutoUpdateViewBatch +class NS_STACK_CLASS nsAutoUpdateViewBatch { public: @@ -201,7 +201,7 @@ class nsBoolDomIterFunctor virtual PRBool operator()(nsIDOMNode* aNode)=0; }; -class nsDOMIterator +class NS_STACK_CLASS nsDOMIterator { public: nsDOMIterator(); @@ -239,7 +239,7 @@ class nsTrivialFunctor : public nsBoolDomIterFunctor /****************************************************************************** * general dom point utility struct *****************************************************************************/ -struct DOMPoint +struct NS_STACK_CLASS DOMPoint { nsCOMPtr node; PRInt32 offset; diff --git a/editor/libeditor/base/nsSelectionState.h b/editor/libeditor/base/nsSelectionState.h index 85d58aca5a8a..c04455e1706b 100644 --- a/editor/libeditor/base/nsSelectionState.h +++ b/editor/libeditor/base/nsSelectionState.h @@ -135,7 +135,7 @@ class nsRangeUpdater * preservation of dom points across editor actions */ -class nsAutoTrackDOMPoint +class NS_STACK_CLASS nsAutoTrackDOMPoint { private: nsRangeUpdater &mRU; @@ -170,7 +170,7 @@ class nsAutoTrackDOMPoint * Will/DidReplaceContainer() */ -class nsAutoReplaceContainerSelNotify +class NS_STACK_CLASS nsAutoReplaceContainerSelNotify { private: nsRangeUpdater &mRU; @@ -198,7 +198,7 @@ class nsAutoReplaceContainerSelNotify * Will/DidRemoveContainer() */ -class nsAutoRemoveContainerSelNotify +class NS_STACK_CLASS nsAutoRemoveContainerSelNotify { private: nsRangeUpdater &mRU; @@ -233,7 +233,7 @@ class nsAutoRemoveContainerSelNotify * Will/DidInsertContainer() */ -class nsAutoInsertContainerSelNotify +class NS_STACK_CLASS nsAutoInsertContainerSelNotify { private: nsRangeUpdater &mRU; @@ -257,7 +257,7 @@ class nsAutoInsertContainerSelNotify * Will/DidMoveNode() */ -class nsAutoMoveNodeSelNotify +class NS_STACK_CLASS nsAutoMoveNodeSelNotify { private: nsRangeUpdater &mRU; diff --git a/editor/libeditor/html/nsTableEditor.cpp b/editor/libeditor/html/nsTableEditor.cpp index d00f2eac2808..ed94642f4e75 100644 --- a/editor/libeditor/html/nsTableEditor.cpp +++ b/editor/libeditor/html/nsTableEditor.cpp @@ -69,7 +69,7 @@ /*************************************************************************** * stack based helper class for restoring selection after table edit */ -class nsSetSelectionAfterTableEdit +class NS_STACK_CLASS nsSetSelectionAfterTableEdit { private: nsCOMPtr mEd; @@ -99,7 +99,7 @@ class nsSetSelectionAfterTableEdit }; // Stack-class to turn on/off selection batching for table selection -class nsSelectionBatcher +class NS_STACK_CLASS nsSelectionBatcher { private: nsCOMPtr mSelection; diff --git a/editor/libeditor/html/nsWSRunObject.h b/editor/libeditor/html/nsWSRunObject.h index 12488e0bc37c..819d9a3bbfc8 100644 --- a/editor/libeditor/html/nsWSRunObject.h +++ b/editor/libeditor/html/nsWSRunObject.h @@ -67,7 +67,7 @@ class nsHTMLEditor; // will only render as one space (in non-preformatted stlye html), yet both // spaces count as NormalWS. Together, they render as the one visible space. -class nsWSRunObject +class NS_STACK_CLASS nsWSRunObject { public: @@ -226,7 +226,7 @@ class nsWSRunObject // always within a textnode that is one of the nodes stored in the list // in the wsRunObject. For convenience, the character at that point is also // stored in the struct. - struct WSPoint + struct NS_STACK_CLASS WSPoint { nsCOMPtr mTextNode; PRInt16 mOffset; From c547ee4c575fcbf67cc43fc46d91f1c852936563 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Tue, 1 Jul 2008 14:26:28 -0400 Subject: [PATCH 59/98] Bug 442968 - Format outparams warnings in a more standard GCC way, so that things like compilation-mode can linkify the locations, r=dmandelin --- xpcom/analysis/outparams.js | 78 ++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/xpcom/analysis/outparams.js b/xpcom/analysis/outparams.js index c74600d864f3..29c015ecd5c7 100644 --- a/xpcom/analysis/outparams.js +++ b/xpcom/analysis/outparams.js @@ -15,6 +15,13 @@ include('unstable/zero_nonzero.js', Zero_NonZero); include('mayreturn.js'); +function safe_location_of(t) { + if (t === undefined) + return UNKNOWN_LOCATION; + + return location_of(t); +} + MapFactory.use_injective = true; // Print a trace for each function analyzed @@ -551,14 +558,29 @@ OutparamCheck.prototype.checkSubstateSuccess = function(ss) { let val = ss.get(v); if (val == av.NOT_WRITTEN) { this.logResult('succ', 'not_written', 'error'); - this.warn("outparam not written on NS_SUCCEEDED(return value)", - v, this.formatBlame('Return at', ss, this.retvar)); + this.warn([ss.getBlame(this.retvar), "outparam '" + expr_display(v) + "' not written on NS_SUCCEEDED(return value)"], + [v, "outparam declared here"]); } else if (val == av.MAYBE_WRITTEN) { this.logResult('succ', 'maybe_written', 'error'); - this.warn("outparam not written on NS_SUCCEEDED(return value)", v, - this.formatBlame('Return at', ss, this.retvar), - this.formatBlame('Possibly written by unannotated outparam in call at', ss, v)); - } else { + + let blameStmt = ss.getBlame(v); + let callMsg; + let callName = ""; + try { + let callExpr = blameStmt.tree_check(GIMPLE_MODIFY_STMT). + operands()[1].tree_check(CALL_EXPR); + let callDecl = callable_arg_function_decl(CALL_EXPR_FN(callExpr)); + + callMsg = [callDecl, "declared here"]; + callName = " '" + decl_name(callDecl) + "'"; + } + catch (e if e.TreeCheckError) { } + + this.warn([ss.getBlame(this.retvar), "outparam '" + expr_display(v) + "' not written on NS_SUCCEEDED(return value)"], + [v, "outparam declared here"], + [blameStmt, "possibly written by unannotated function call" + callName], + callMsg); + } else { this.logResult('succ', '', 'ok'); } } @@ -570,41 +592,33 @@ OutparamCheck.prototype.checkSubstateFailure = function(ss) { let val = ss.get(v); if (val == av.WRITTEN) { this.logResult('fail', 'written', 'error'); - this.warn("outparam written on NS_FAILED(return value)", v, - this.formatBlame('Return at', ss, this.retvar), - this.formatBlame('Written at', ss, v)); + this.warn([ss.getBlame(this.retvar), "outparam '" + expr_display(v) + "' written on NS_FAILED(return value)"], + [v, "outparam declared here"], + [ss.getBlame(v), "written here"]); } else if (val == av.WROTE_NULL) { this.logResult('fail', 'wrote_null', 'warning'); - this.warn("NULL written to outparam on NS_FAILED(return value)", v, - this.formatBlame('Return at', ss, this.retvar), - this.formatBlame('Written at', ss, v)); + this.warn([ss.getBlame(this.retvar), "NULL written to outparam '" + expr_display(v) + "' on NS_FAILED(return value)"], + [v, "outparam declared here"], + [ss.getBlame(v), "written here"]); } else { this.logResult('fail', '', 'ok'); } } } -OutparamCheck.prototype.warn = function() { - let tag = arguments[0]; - let v = arguments[1]; - // Filter out any undefined values. - let rest = [ x for each (x in Array.slice(arguments, 2)) ]; +/** + * Generate a warning from one or more tuples [treeforloc, message] + */ +OutparamCheck.prototype.warn = function(arg0) { + let loc = safe_location_of(arg0[0]); + let msg = arg0[1]; - let label = expr_display(v) - let lines = [ tag + ': ' + label, - 'Outparam declared at: ' + loc_string(location_of(v)) ]; - lines = lines.concat(rest); - let msg = lines.join('\n '); - warning(msg); -} - -OutparamCheck.prototype.formatBlame = function(msg, ss, v) { - // If v is undefined, that means we don't have that variable, e.g., - // a return variable in a void function, so just return undefined; - if (v == undefined) return undefined; - let blame = ss.getBlame(v); - let loc = blame ? loc_string(location_of(blame)) : '?'; - return(msg + ": " + loc); + for (let i = 1; i < arguments.length; ++i) { + if (arguments[i] === undefined) continue; + let [atree, amsg] = arguments[i]; + msg += "\n" + loc_string(safe_location_of(atree)) + ": " + amsg; + } + warning(msg, loc); } OutparamCheck.prototype.logResult = function(rv, msg, kind) { From 9a110f955e8b748cadac153b7b8ebec542021b09 Mon Sep 17 00:00:00 2001 From: Ted Mielczarek Date: Tue, 1 Jul 2008 15:16:05 -0400 Subject: [PATCH 60/98] make runtests.py --log-file handle relative pathnames. r=sayrer (no bug) --- testing/mochitest/runtests.py.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing/mochitest/runtests.py.in b/testing/mochitest/runtests.py.in index 579c4eebe727..0e9fd5fe7340 100644 --- a/testing/mochitest/runtests.py.in +++ b/testing/mochitest/runtests.py.in @@ -77,6 +77,7 @@ SERVER_STARTUP_TIMEOUT = 45 INFINITY = 1.0e3000 +oldcwd = os.getcwd() SCRIPT_DIRECTORY = os.path.abspath(os.path.realpath(os.path.dirname(sys.argv[0]))) os.chdir(SCRIPT_DIRECTORY) @@ -338,7 +339,7 @@ Are you executing $objdir/_tests/testing/mochitest/runtests.py?""" if options.closeWhenDone: urlOpts.append("closeWhenDone=1") if options.logFile: - urlOpts.append("logFile=" + encodeURIComponent(options.logFile)) + urlOpts.append("logFile=" + encodeURIComponent(os.path.normpath(os.path.join(oldcwd, options.logFile)))) urlOpts.append("fileLevel=" + encodeURIComponent(options.fileLevel)) if options.consoleLevel: urlOpts.append("consoleLevel=" + encodeURIComponent(options.consoleLevel)) From 556cf36dc9e90a0b451198375fd9a90bc5de6a7a Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Tue, 1 Jul 2008 15:16:45 -0400 Subject: [PATCH 61/98] Bug 442729 - Annotate stack-only classes in layout, r+sr=roc --- layout/base/nsCSSFrameConstructor.cpp | 4 ++-- layout/base/nsChildIterator.h | 2 +- layout/base/nsDisplayList.h | 2 +- layout/base/nsICaret.h | 2 +- layout/generic/nsFrame.cpp | 2 +- layout/generic/nsFrameSelection.h | 2 +- layout/generic/nsIFrame.h | 4 ++-- layout/generic/nsSelection.cpp | 4 ++-- layout/generic/nsTextFrameThebes.cpp | 4 ++-- layout/svg/base/src/nsSVGFilterInstance.h | 2 +- layout/xul/base/src/nsBoxLayoutState.h | 2 +- view/public/nsIViewManager.h | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp index 0d24a0aa10d4..46ce73c517cd 100644 --- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -1127,7 +1127,7 @@ private: // Structure used for maintaining state information during the // frame construction process -class nsFrameConstructorState { +class NS_STACK_CLASS nsFrameConstructorState { public: nsPresContext *mPresContext; nsIPresShell *mPresShell; @@ -1731,7 +1731,7 @@ MoveChildrenTo(nsFrameManager* aFrameManager, // Structure used to ensure that bindings are properly enqueued in the // binding manager's attached queue. -struct nsAutoEnqueueBinding +struct NS_STACK_CLASS nsAutoEnqueueBinding { nsAutoEnqueueBinding(nsIDocument* aDocument) : mDocument(aDocument) diff --git a/layout/base/nsChildIterator.h b/layout/base/nsChildIterator.h index 2974ab4c0541..f719c5824fc3 100644 --- a/layout/base/nsChildIterator.h +++ b/layout/base/nsChildIterator.h @@ -52,7 +52,7 @@ * node APIs, since it handles XBL-generated anonymous content as * well. */ -class ChildIterator +class NS_STACK_CLASS ChildIterator { protected: nsCOMPtr mContent; diff --git a/layout/base/nsDisplayList.h b/layout/base/nsDisplayList.h index 52f2e74211b7..fb5bf8b0f04a 100644 --- a/layout/base/nsDisplayList.h +++ b/layout/base/nsDisplayList.h @@ -117,7 +117,7 @@ class nsDisplayTableItem; * available from the prescontext/presshell, but we copy them into the builder * for faster/more convenient access. */ -class nsDisplayListBuilder { +class NS_STACK_CLASS nsDisplayListBuilder { public: /** * @param aReferenceFrame the frame at the root of the subtree; its origin diff --git a/layout/base/nsICaret.h b/layout/base/nsICaret.h index a22e18eeee3c..81f605648c06 100644 --- a/layout/base/nsICaret.h +++ b/layout/base/nsICaret.h @@ -204,7 +204,7 @@ NS_NewCaret(nsICaret** aInstancePtrResult); // handy stack-based class for temporarily disabling the caret -class StCaretHider +class NS_STACK_CLASS StCaretHider { public: StCaretHider(nsICaret* aSelCon) diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 0a52b93950ff..00eb0739f72b 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -2335,7 +2335,7 @@ NS_IMETHODIMP nsFrame::HandleRelease(nsPresContext* aPresContext, parentContent, aEvent, aEventStatus); } -struct FrameContentRange { +struct NS_STACK_CLASS FrameContentRange { FrameContentRange(nsIContent* aContent, PRInt32 aStart, PRInt32 aEnd) : content(aContent), start(aStart), end(aEnd) { } nsCOMPtr content; diff --git a/layout/generic/nsFrameSelection.h b/layout/generic/nsFrameSelection.h index aec24dd39931..d94c0adf8f43 100644 --- a/layout/generic/nsFrameSelection.h +++ b/layout/generic/nsFrameSelection.h @@ -77,7 +77,7 @@ enum EWordMovementType { eStartWord, eEndWord, eDefaultBehavior }; * that are passed to nsFrame::PeekOffset(). See below for the description of * individual arguments. */ -struct nsPeekOffsetStruct +struct NS_STACK_CLASS nsPeekOffsetStruct { void SetData(nsSelectionAmount aAmount, nsDirection aDirection, diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h index 72cacd1b9893..2ee057c4c63c 100644 --- a/layout/generic/nsIFrame.h +++ b/layout/generic/nsIFrame.h @@ -945,7 +945,7 @@ public: // Note that the primary offset can be after the secondary offset; for places // that need the beginning and end of the object, the StartOffset and // EndOffset helpers can be used. - struct ContentOffsets { + struct NS_STACK_CLASS ContentOffsets { nsCOMPtr content; PRBool IsNull() { return !content; } PRInt32 offset; @@ -978,7 +978,7 @@ public: * loaded image that should be preferred. If it is not possible to use it, or * if it is null, mCursor should be used. */ - struct Cursor { + struct NS_STACK_CLASS Cursor { nsCOMPtr mContainer; PRInt32 mCursor; PRBool mHaveHotspot; diff --git a/layout/generic/nsSelection.cpp b/layout/generic/nsSelection.cpp index f4446999a5b8..861f8518ce27 100644 --- a/layout/generic/nsSelection.cpp +++ b/layout/generic/nsSelection.cpp @@ -381,7 +381,7 @@ private: }; // Stack-class to turn on/off selection batching for table selection -class nsSelectionBatcher +class NS_STACK_CLASS NS_FINAL_CLASS nsSelectionBatcher { private: nsCOMPtr mSelection; @@ -390,7 +390,7 @@ public: { if (mSelection) mSelection->StartBatchChanges(); } - virtual ~nsSelectionBatcher() + ~nsSelectionBatcher() { if (mSelection) mSelection->EndBatchChanges(); } diff --git a/layout/generic/nsTextFrameThebes.cpp b/layout/generic/nsTextFrameThebes.cpp index 6281deec6d39..284246af62b8 100644 --- a/layout/generic/nsTextFrameThebes.cpp +++ b/layout/generic/nsTextFrameThebes.cpp @@ -1977,7 +1977,7 @@ static PRBool IsInBounds(const gfxSkipCharsIterator& aStart, PRInt32 aContentLen } #endif -class PropertyProvider : public gfxTextRun::PropertyProvider { +class NS_STACK_CLASS PropertyProvider : public gfxTextRun::PropertyProvider { public: /** * Use this constructor for reflow, when we don't know what text is @@ -4710,7 +4710,7 @@ nsTextFrame::PeekOffsetNoAmount(PRBool aForward, PRInt32* aOffset) * is interpreted according to aDirection, so if aDirection is -1, "before" * means actually *after* the cluster content.) */ -class ClusterIterator { +class NS_STACK_CLASS ClusterIterator { public: ClusterIterator(nsTextFrame* aTextFrame, PRInt32 aPosition, PRInt32 aDirection, nsString& aContext); diff --git a/layout/svg/base/src/nsSVGFilterInstance.h b/layout/svg/base/src/nsSVGFilterInstance.h index d4ec16b86e14..5fd720bc6db4 100644 --- a/layout/svg/base/src/nsSVGFilterInstance.h +++ b/layout/svg/base/src/nsSVGFilterInstance.h @@ -51,7 +51,7 @@ class nsSVGLength2; class nsSVGElement; -class nsSVGFilterInstance +class NS_STACK_CLASS nsSVGFilterInstance { public: class ColorModel { diff --git a/layout/xul/base/src/nsBoxLayoutState.h b/layout/xul/base/src/nsBoxLayoutState.h index 8000a763a888..dac308ebdcb1 100644 --- a/layout/xul/base/src/nsBoxLayoutState.h +++ b/layout/xul/base/src/nsBoxLayoutState.h @@ -56,7 +56,7 @@ struct nsHTMLReflowMetrics; class nsString; class nsHTMLReflowCommand; -class nsBoxLayoutState +class NS_STACK_CLASS nsBoxLayoutState { public: nsBoxLayoutState(nsPresContext* aPresContext, nsIRenderingContext* aRenderingContext = nsnull, diff --git a/view/public/nsIViewManager.h b/view/public/nsIViewManager.h index 20f13f91ea00..9acd4a85e9a1 100644 --- a/view/public/nsIViewManager.h +++ b/view/public/nsIViewManager.h @@ -322,7 +322,7 @@ public: */ NS_IMETHOD EnableRefresh(PRUint32 aUpdateFlags) = 0; - class UpdateViewBatch { + class NS_STACK_CLASS UpdateViewBatch { public: UpdateViewBatch() {} /** From 833f7809a7ce4d1acf38efaf319c6d128c3c75c9 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Tue, 1 Jul 2008 15:26:37 -0400 Subject: [PATCH 62/98] Bug 442757 - nsProxiedService is a stack class, r=bent --- xpcom/proxy/public/nsProxiedService.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xpcom/proxy/public/nsProxiedService.h b/xpcom/proxy/public/nsProxiedService.h index 3355f4291017..1cc70eaf5420 100644 --- a/xpcom/proxy/public/nsProxiedService.h +++ b/xpcom/proxy/public/nsProxiedService.h @@ -93,7 +93,7 @@ // nsProxiedService //////////////////////////////////////////////////////////////////////////////// -class nsProxiedService +class NS_STACK_CLASS nsProxiedService { public: nsProxiedService(const nsCID &aClass, const nsIID &aIID, From 2250d2e485b0a9a61fa39298f4375e930726097d Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Wed, 21 May 2008 12:24:25 -0700 Subject: [PATCH 63/98] Bug 434837 - Accessors in prototype chain of arrays don't assign 'this' correctly, r=shaver, r=brendan --- js/src/jsarray.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index 1026a1d9b267..12fb17ab92af 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -701,13 +701,29 @@ array_getProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp) if (!js_IdIsIndex(ID_TO_VALUE(id), &i) || i >= ARRAY_DENSE_LENGTH(obj) || obj->dslots[i] == JSVAL_HOLE) { + JSObject *obj2; + JSProperty *prop; + JSScopeProperty *sprop; + JSObject *proto = STOBJ_GET_PROTO(obj); if (!proto) { *vp = JSVAL_VOID; return JS_TRUE; } - return OBJ_GET_PROPERTY(cx, proto, id, vp); + *vp = JSVAL_VOID; + if (js_LookupPropertyWithFlags(cx, proto, id, 0, &obj2, &prop) < 0) + return JS_FALSE; + + if (prop) { + if (OBJ_IS_NATIVE(obj2)) { + sprop = (JSScopeProperty *) prop; + if (!js_NativeGet(cx, obj, obj2, sprop, vp)) + return JS_FALSE; + } + OBJ_DROP_PROPERTY(cx, obj2, prop); + } + return JS_TRUE; } *vp = obj->dslots[i]; From 4080cd8e9b319a76a58aaed937a1161758a4c639 Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Wed, 25 Jun 2008 13:50:26 -0700 Subject: [PATCH 64/98] Bug 440473 - Crash [@ Decompile][@ js_GetSrcNoteOffset] with firebug/jQuery, r=igor --- js/src/jscntxt.h | 8 +++++--- js/src/jsscript.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index a63d6ece738a..0c9805e958a1 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -61,10 +61,12 @@ JS_BEGIN_EXTERN_C /* * js_GetSrcNote cache to avoid O(n^2) growth in finding a source note for a - * given pc in a script. + * given pc in a script. We use the script->code pointer to tag the cache, + * instead of the script address itself, so that source notes are always found + * by offset from the bytecode with which they were generated. */ typedef struct JSGSNCache { - JSScript *script; + jsbytecode *code; JSDHashTable table; #ifdef JS_GSNMETER uint32 hits; @@ -79,7 +81,7 @@ typedef struct JSGSNCache { #define GSN_CACHE_CLEAR(cache) \ JS_BEGIN_MACRO \ - (cache)->script = NULL; \ + (cache)->code = NULL; \ if ((cache)->table.ops) { \ JS_DHashTableFinish(&(cache)->table); \ (cache)->table.ops = NULL; \ diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index 8ea1684dff97..c8c98a5ac172 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -1532,7 +1532,7 @@ js_DestroyScript(JSContext *cx, JSScript *script) if (script->principals) JSPRINCIPALS_DROP(cx, script->principals); - if (JS_GSN_CACHE(cx).script == script) + if (JS_GSN_CACHE(cx).code == script->code) JS_CLEAR_GSN_CACHE(cx); /* @@ -1638,7 +1638,7 @@ js_GetSrcNoteCached(JSContext *cx, JSScript *script, jsbytecode *pc) if ((uint32)target >= script->length) return NULL; - if (JS_GSN_CACHE(cx).script == script) { + if (JS_GSN_CACHE(cx).code == script->code) { JS_METER_GSN_CACHE(cx, hits); entry = (GSNCacheEntry *) JS_DHashTableOperate(&JS_GSN_CACHE(cx).table, pc, @@ -1660,7 +1660,7 @@ js_GetSrcNoteCached(JSContext *cx, JSScript *script, jsbytecode *pc) } } - if (JS_GSN_CACHE(cx).script != script && + if (JS_GSN_CACHE(cx).code != script->code && script->length >= GSN_CACHE_THRESHOLD) { JS_CLEAR_GSN_CACHE(cx); nsrcnotes = 0; @@ -1686,7 +1686,7 @@ js_GetSrcNoteCached(JSContext *cx, JSScript *script, jsbytecode *pc) entry->sn = sn; } } - JS_GSN_CACHE(cx).script = script; + JS_GSN_CACHE(cx).code = script->code; JS_METER_GSN_CACHE(cx, fills); } } From bbb1de85befff2163fd32773db24da5e6a8b72bb Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Mon, 9 Jun 2008 15:25:33 -0700 Subject: [PATCH 65/98] Bug 435226 - dense arrays yield bogus __count__ values, r=shaver --- js/src/jsarray.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index 3c01f7a17b47..1026a1d9b267 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -912,8 +912,8 @@ array_enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, case JSENUMERATE_INIT: JS_ASSERT(OBJ_IS_DENSE_ARRAY(cx, obj)); length = ARRAY_DENSE_LENGTH(obj); - if (idp && !IndexToId(cx, length, idp)) - return JS_FALSE; + if (idp) + *idp = INT_TO_JSVAL(obj->fslots[JSSLOT_ARRAY_COUNT]); ii = NULL; for (i = 0; i != length; ++i) { if (obj->dslots[i] == JSVAL_HOLE) { From f4bd4bd0614749ed223ed9a652ad4fa23c9a40a5 Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Wed, 25 Jun 2008 14:18:12 -0700 Subject: [PATCH 66/98] Fixing a comment spacing nit. --- js/src/jscntxt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index 0c9805e958a1..cac949d9d865 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -61,7 +61,7 @@ JS_BEGIN_EXTERN_C /* * js_GetSrcNote cache to avoid O(n^2) growth in finding a source note for a - * given pc in a script. We use the script->code pointer to tag the cache, + * given pc in a script. We use the script->code pointer to tag the cache, * instead of the script address itself, so that source notes are always found * by offset from the bytecode with which they were generated. */ From 74cae524b2c3dad2788bcbd7113cf620450e73c0 Mon Sep 17 00:00:00 2001 From: Bob Clary Date: Wed, 25 Jun 2008 17:51:22 -0400 Subject: [PATCH 67/98] Sisyphus - adapt to build and test Mozilla2, bug 422942 --- testing/sisyphus/bin/build.sh | 6 +- testing/sisyphus/bin/builder.sh | 9 +- testing/sisyphus/bin/check-spider.sh | 22 +- testing/sisyphus/bin/checkout.sh | 197 ++++++++++--- testing/sisyphus/bin/create-profile.sh | 29 +- testing/sisyphus/bin/download.sh | 7 +- testing/sisyphus/bin/edit-talkback.pl | 16 +- testing/sisyphus/bin/edit-talkback.sh | 31 +- testing/sisyphus/bin/install-build.sh | 17 +- testing/sisyphus/bin/install-extensions.sh | 51 ++-- testing/sisyphus/bin/install-plugins.sh | 17 +- testing/sisyphus/bin/library.sh | 270 +++++++++++++----- testing/sisyphus/bin/memory.pl | 180 ++++++++++++ testing/sisyphus/bin/mips.pl | 72 +++++ testing/sisyphus/bin/set-build-env.sh | 66 +++-- testing/sisyphus/bin/test-setup.sh | 10 +- testing/sisyphus/bin/tester.sh | 23 ++ testing/sisyphus/bin/timed_run.py | 38 ++- testing/sisyphus/bin/uninstall-build.sh | 19 +- testing/sisyphus/bin/userhook-checkspider.js | 30 ++ ...nload-check,firefox-1.5.0-ftp,darwin.data} | 2 +- ...ownload-check,firefox-1.5.0-ftp,linux.data | 2 +- ... download-check,firefox-1.5.0-ftp,nt.data} | 2 +- ...nload-check,firefox-2.0.0-ftp,darwin.data} | 4 +- ...ownload-check,firefox-2.0.0-ftp,linux.data | 4 +- ... download-check,firefox-2.0.0-ftp,nt.data} | 2 +- ...=> download-check,firefox-all,darwin.data} | 2 +- .../download-check,firefox-all,linux.data | 2 +- ...ata => download-check,firefox-all,nt.data} | 2 +- ...nload-check,firefox-all-older,darwin.data} | 2 +- ...ownload-check,firefox-all-older,linux.data | 2 +- ... download-check,firefox-all-older,nt.data} | 2 +- ...d-check,thunderbird-1.5.0-ftp,darwin.data} | 2 +- ...oad-check,thunderbird-1.5.0-ftp,linux.data | 2 +- ...nload-check,thunderbird-1.5.0-ftp,nt.data} | 2 +- ...d-check,thunderbird-2.0.0-ftp,darwin.data} | 4 +- ...oad-check,thunderbird-2.0.0-ftp,linux.data | 4 +- ...nload-check,thunderbird-2.0.0-ftp,nt.data} | 4 +- ...ownload-check,thunderbird-all,darwin.data} | 2 +- .../download-check,thunderbird-all,linux.data | 2 +- ...=> download-check,thunderbird-all,nt.data} | 2 +- ...d-check,thunderbird-all-older,darwin.data} | 2 +- ...oad-check,thunderbird-all-older,linux.data | 2 +- ...nload-check,thunderbird-all-older,nt.data} | 2 +- ...data => firefox,1.8.0,nightly-darwin.data} | 0 ...n32.data => firefox,1.8.0,nightly-nt.data} | 0 ...data => firefox,1.8.1,nightly-darwin.data} | 2 +- .../data/firefox,1.8.1,nightly-linux.data | 2 +- ...n32.data => firefox,1.8.1,nightly-nt.data} | 2 +- ...data => firefox,1.9.0,nightly-darwin.data} | 0 ...n32.data => firefox,1.9.0,nightly-nt.data} | 0 .../data/firefox,1.9.0-gcov,debug.data | 8 + .../sisyphus/data/firefox,1.9.0-gcov,opt.data | 8 + .../data/firefox,1.9.0-jemalloc,debug.data | 8 + .../data/firefox,1.9.0-jemalloc,opt.data | 8 + .../firefox,1.9.0-jemalloc-test,debug.data | 8 + .../data/firefox,1.9.0-jemalloc-test,opt.data | 8 + .../sisyphus/data/firefox,1.9.1,debug.data | 9 + .../data/firefox,1.9.1,nightly-darwin.data | 9 + .../data/firefox,1.9.1,nightly-linux.data | 9 + .../data/firefox,1.9.1,nightly-nt.data | 9 + testing/sisyphus/data/firefox,1.9.1,opt.data | 9 + .../data/firefox,1.9.1,too-much-gc,debug.data | 9 + .../firefox,1.9.1-actionmonkey,debug.data | 9 + .../data/firefox,1.9.1-actionmonkey,opt.data | 9 + .../data/firefox,1.9.1-jemalloc,debug.data | 9 + .../data/firefox,1.9.1-jemalloc,opt.data | 9 + .../firefox,1.9.1-jemalloc-test,debug.data | 9 + .../data/firefox,1.9.1-jemalloc-test,opt.data | 9 + .../data/firefox,1.9.1-jprof,debug.data | 9 + .../data/firefox,1.9.1-jprof,opt.data | 9 + .../data/firefox,1.9.1-test,debug.data | 9 + .../sisyphus/data/firefox,1.9.1-test,opt.data | 9 + .../sisyphus/data/js,1.9.0-gcov,debug.data | 4 + testing/sisyphus/data/js,1.9.0-gcov,opt.data | 4 + testing/sisyphus/data/js,1.9.1,debug.data | 5 + testing/sisyphus/data/js,1.9.1,opt.data | 5 + .../data/js,1.9.1,too-much-gc,debug.data | 5 + .../data/js,1.9.1-actionmonkey,debug.data | 5 + .../data/js,1.9.1-actionmonkey,opt.data | 5 + .../sisyphus/data/js,1.9.1-test,debug.data | 5 + testing/sisyphus/data/js,1.9.1-test,opt.data | 5 + .../data/thunderbird,1.9.1,debug.data | 10 + .../data/thunderbird,1.9.1-test,debug.data | 13 + .../download-page/collect-urls-userhook.js | 6 +- .../tests/mozilla.org/download-page/test.sh | 3 + 86 files changed, 1084 insertions(+), 357 deletions(-) create mode 100644 testing/sisyphus/bin/memory.pl create mode 100644 testing/sisyphus/bin/mips.pl rename testing/sisyphus/data/{download-check,firefox-1.5.0-ftp,mac.data => download-check,firefox-1.5.0-ftp,darwin.data} (90%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-1.5.0-ftp,win32.data => download-check,firefox-1.5.0-ftp,nt.data} (88%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-2.0.0-ftp,mac.data => download-check,firefox-2.0.0-ftp,darwin.data} (84%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-2.0.0-ftp,win32.data => download-check,firefox-2.0.0-ftp,nt.data} (94%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-all,mac.data => download-check,firefox-all,darwin.data} (89%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-all,win32.data => download-check,firefox-all,nt.data} (87%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-all-older,mac.data => download-check,firefox-all-older,darwin.data} (89%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,firefox-all-older,win32.data => download-check,firefox-all-older,nt.data} (87%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-1.5.0-ftp,mac.data => download-check,thunderbird-1.5.0-ftp,darwin.data} (90%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-1.5.0-ftp,win32.data => download-check,thunderbird-1.5.0-ftp,nt.data} (88%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-2.0.0-ftp,mac.data => download-check,thunderbird-2.0.0-ftp,darwin.data} (86%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-2.0.0-ftp,win32.data => download-check,thunderbird-2.0.0-ftp,nt.data} (84%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-all,mac.data => download-check,thunderbird-all,darwin.data} (89%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-all,win32.data => download-check,thunderbird-all,nt.data} (87%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-all-older,mac.data => download-check,thunderbird-all-older,darwin.data} (89%) mode change 100755 => 100644 rename testing/sisyphus/data/{download-check,thunderbird-all-older,win32.data => download-check,thunderbird-all-older,nt.data} (87%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.8.0,nightly-mac.data => firefox,1.8.0,nightly-darwin.data} (100%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.8.0,nightly-win32.data => firefox,1.8.0,nightly-nt.data} (100%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.8.1,nightly-mac.data => firefox,1.8.1,nightly-darwin.data} (86%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.8.1,nightly-win32.data => firefox,1.8.1,nightly-nt.data} (85%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.9.0,nightly-mac.data => firefox,1.9.0,nightly-darwin.data} (100%) mode change 100755 => 100644 rename testing/sisyphus/data/{firefox,1.9.0,nightly-win32.data => firefox,1.9.0,nightly-nt.data} (100%) mode change 100755 => 100644 create mode 100644 testing/sisyphus/data/firefox,1.9.0-gcov,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.0-gcov,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.0-jemalloc,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.0-jemalloc,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.0-jemalloc-test,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.0-jemalloc-test,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,nightly-darwin.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,nightly-linux.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,nightly-nt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1,too-much-gc,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-actionmonkey,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-actionmonkey,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jemalloc,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jemalloc,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jemalloc-test,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jemalloc-test,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jprof,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-jprof,opt.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-test,debug.data create mode 100644 testing/sisyphus/data/firefox,1.9.1-test,opt.data create mode 100644 testing/sisyphus/data/js,1.9.0-gcov,debug.data create mode 100644 testing/sisyphus/data/js,1.9.0-gcov,opt.data create mode 100644 testing/sisyphus/data/js,1.9.1,debug.data create mode 100644 testing/sisyphus/data/js,1.9.1,opt.data create mode 100644 testing/sisyphus/data/js,1.9.1,too-much-gc,debug.data create mode 100644 testing/sisyphus/data/js,1.9.1-actionmonkey,debug.data create mode 100644 testing/sisyphus/data/js,1.9.1-actionmonkey,opt.data create mode 100644 testing/sisyphus/data/js,1.9.1-test,debug.data create mode 100644 testing/sisyphus/data/js,1.9.1-test,opt.data create mode 100644 testing/sisyphus/data/thunderbird,1.9.1,debug.data create mode 100644 testing/sisyphus/data/thunderbird,1.9.1-test,debug.data diff --git a/testing/sisyphus/bin/build.sh b/testing/sisyphus/bin/build.sh index a2a30ca28cd3..db5a1619fb55 100755 --- a/testing/sisyphus/bin/build.sh +++ b/testing/sisyphus/bin/build.sh @@ -80,16 +80,12 @@ case $product in ;; esac - if [[ "$OSID" != "win32" ]]; then + if [[ "$OSID" != "nt" ]]; then # # patch unix-like startup scripts to exec instead of # forking new processes # executable=`get_executable $product $branch $executablepath` - if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO - fi - executabledir=`dirname $executable` diff --git a/testing/sisyphus/bin/builder.sh b/testing/sisyphus/bin/builder.sh index e7d4b968bc74..ea64fb35717b 100755 --- a/testing/sisyphus/bin/builder.sh +++ b/testing/sisyphus/bin/builder.sh @@ -54,7 +54,7 @@ $SCRIPT -p products -b branches -B buildcommands -T buildtypes [-e extra] [-v] variable description =============== =========================================================== -p products required. one or more of firefox thunderbird --b branches required. one or more of 1.8.0 1.8.1 1.9.0 +-b branches required. one or more of 1.8.0 1.8.1 1.9.0 1.9.1 -B buildcommands required. one or more of clean checkout build -T buildtypes required. one or more of opt debug -e extra optional. extra qualifier to pick build tree and mozconfig. @@ -86,12 +86,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$products" || -z "$branches" || -z "$buildcommands" || \ -z "$buildtypes" ]]; then diff --git a/testing/sisyphus/bin/check-spider.sh b/testing/sisyphus/bin/check-spider.sh index be84eaf87913..e9cee9d604b2 100755 --- a/testing/sisyphus/bin/check-spider.sh +++ b/testing/sisyphus/bin/check-spider.sh @@ -55,7 +55,7 @@ $SCRIPT -p product -b branch -x executablepath -N profilename variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory-tree containing executable named 'product' -N profilename required. name of profile to be used @@ -88,12 +88,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || -z "$executablepath" || -z "$profilename" ]]; then @@ -104,21 +99,13 @@ if [[ "$product" != "firefox" && "$product" != "thunderbird" ]]; then error "product \"$product\" must be one of firefox or thunderbird" $LINENO fi -if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" ]]; +if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" && "$branch" != "1.9.1" ]]; then - error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0" $LINENO + error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0 1.9.1" $LINENO fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO -fi - -if [[ ! -x "$executable" ]]; then - error "executable \"$executable\" is not executable" $LINENO -fi - if echo "$profilename" | egrep -qiv '[a-z0-9_]'; then error "profile name must consist of letters, digits or _" $LINENO fi @@ -127,6 +114,7 @@ echo # attempt to force Spider to load tries=1 while ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "Start Spider: try $tries" \ + $EXECUTABLE_DRIVER \ "$executable" -P "$profilename" \ -spider -start -quit \ -uri "http://${TEST_HTTP}/bin/start-spider.html" \ diff --git a/testing/sisyphus/bin/checkout.sh b/testing/sisyphus/bin/checkout.sh index 7ba5dab5352d..e0664e10b8dc 100755 --- a/testing/sisyphus/bin/checkout.sh +++ b/testing/sisyphus/bin/checkout.sh @@ -44,69 +44,174 @@ if [[ -z "$TREE" ]]; then error "source tree not specified!" $LINENO fi +if [[ "$branch" == "1.9.1" ]]; then + + if [[ -z "$TEST_MOZILLA_HG" ]]; then + error "environment variable TEST_MOZILLA_HG must be set to the hg repository for branch 1.9.1" + fi + + # maintain a local copy of the hg repository + # clone specific trees from it. + + TEST_MOZILLA_HG_LOCAL=$BUILDDIR/hg.mozilla.org/`basename $TEST_MOZILLA_HG` + + if [[ ! -d $BUILDDIR/hg.mozilla.org ]]; then + mkdir $BUILDDIR/hg.mozilla.org + fi + + if [[ ! -d $TEST_MOZILLA_HG_LOCAL ]]; then + if ! hg clone -r $TEST_MOZILLA_HG_REV $TEST_MOZILLA_HG $TEST_MOZILLA_HG_LOCAL; then + error "during hg clone of $TEST_MOZILLA_HG" $LINENO + fi + fi + + cd $TEST_MOZILLA_HG_LOCAL + hg pull +fi + cd $TREE case $product in firefox) - if [[ ! ( -d mozilla && \ - -e mozilla/client.mk && \ - -e "mozilla/$project/config/mozconfig" ) ]]; then - if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ - mozilla/client.mk mozilla/$project/config/mozconfig; then - error "during checkout of $project mozconfig" $LINENO - fi - fi + case $branch in + 1.8.*|1.9.0) + if [[ ! ( -d mozilla && \ + -e mozilla/client.mk && \ + -e "mozilla/$project/config/mozconfig" ) ]]; then + if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ + mozilla/client.mk mozilla/$project/config/mozconfig; then + error "during checkout of $project mozconfig" $LINENO + fi + fi + if ! $buildbash $bashlogin -c "cd $TREE/mozilla; make -f client.mk checkout" 2>&1; then + error "during checkout of $project tree" $LINENO + fi + ;; -# cd mozilla + 1.9.1) - if ! $buildbash $bashlogin -c "cd $TREE/mozilla; make -f client.mk checkout" 2>&1; then - error "during checkout of $project tree" $LINENO - fi + if [[ ! -e mozilla/client.py ]]; then + if ! hg clone $TEST_MOZILLA_HG_LOCAL $TREE/mozilla; then + error "during hg clone of $TEST_MOZILLA_HG_LOCAL" $LINENO + fi + fi + + cd mozilla + hg pull -r $TEST_MOZILLA_HG_REV + + # do not use mozilla-build on windows systems as we + # must use the cygwin python with the cygwin mercurial. + + if ! python client.py checkout; then + error "during checkout of $project tree" $LINENO + fi + ;; + + *) + error "branch $branch not yet supported" + ;; + esac ;; thunderbird) - if [[ ! ( -d mozilla && \ - -e mozilla/client.mk && \ - -e "mozilla/$project/config/mozconfig" ) ]]; then - if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ - mozilla/client.mk mozilla/$project/config/mozconfig; then - error "during checkout of $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS $project mozconfig" $LINENO - fi - fi - if [[ ! ( -d mozilla && \ - -e mozilla/client.mk && \ - -e "mozilla/browser/config/mozconfig" ) ]]; then - if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ - mozilla/client.mk mozilla/browser/config/mozconfig; then - error "during checkout of $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS browser mozconfig" $LINENO - fi - fi - # cd mozilla + case $branch in + 1.8.*|1.9.0) + if [[ ! ( -d mozilla && \ + -e mozilla/client.mk && \ + -e "mozilla/$project/config/mozconfig" ) ]]; then + if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ + mozilla/client.mk mozilla/$project/config/mozconfig; then + error "during checkout of $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS $project mozconfig" $LINENO + fi + fi - if ! $buildbash $bashlogin -c "cd $TREE/mozilla; make -f client.mk checkout" 2>&1; then - error "during checkout of $project tree" $LINENO - fi + if [[ ! ( -d mozilla && \ + -e mozilla/client.mk && \ + -e "mozilla/browser/config/mozconfig" ) ]]; then + if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS \ + mozilla/client.mk mozilla/browser/config/mozconfig; then + error "during checkout of $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS browser mozconfig" $LINENO + fi + fi + + if ! $buildbash $bashlogin -c "cd $TREE/mozilla; make -f client.mk checkout" 2>&1; then + error "during checkout of $project tree" $LINENO + fi + ;; + + 1.9.1) + if [[ ! -e mozilla/client.py ]]; then + if ! hg clone $TEST_MOZILLA_HG_LOCAL $TREE/mozilla; then + error "during hg clone of $TEST_MOZILLA_HG_LOCAL" $LINENO + fi + fi + + cd mozilla + hg pull -r $TEST_MOZILLA_HG_REV + + # do not use mozilla-build on windows systems as we + # must use the cygwin python with the cygwin mercurial. + + if ! python client.py checkout; then + error "during checkout of $project tree" $LINENO + fi + ;; + + *) + error "branch $branch not yet supported" + ;; + esac ;; js) - if [[ ! ( -d mozilla && \ - -e mozilla/js && \ - -e mozilla/js/src ) ]]; then - if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS mozilla/js; then - error "during initial co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS mozilla/js" - fi - fi - cd mozilla/js/src + case $branch in + 1.8.*|1.9.0) + if [[ ! ( -d mozilla && \ + -e mozilla/js && \ + -e mozilla/js/src ) ]]; then + if ! eval cvs -z3 -q co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS mozilla/js; then + error "during initial co $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS mozilla/js" + fi + fi - if ! eval cvs -z3 -q update $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS -d -P 2>&1; then - error "during update $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS js/src" $LINENO - fi + cd mozilla/js/src - if ! cvs -z3 -q update -d -P -A editline config 2>&1; then - error "during checkout of js/src" $LINENO - fi + if ! eval cvs -z3 -q update $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS -d -P 2>&1; then + error "during update $MOZ_CO_FLAGS $BRANCH_CO_FLAGS $DATE_CO_FLAGS js/src" $LINENO + fi + + if ! cvs -z3 -q update -d -P -A editline config 2>&1; then + error "during checkout of js/src" $LINENO + fi + ;; + + 1.9.1) + + if [[ ! -e mozilla/client.py ]]; then + if ! hg clone $TEST_MOZILLA_HG_LOCAL $TREE/mozilla; then + error "during hg clone of $TEST_MOZILLA_HG_LOCAL" $LINENO + fi + fi + + cd mozilla + hg pull -r $TEST_MOZILLA_HG_REV + + # do not use mozilla-build on windows systems as we + # must use the cygwin python with the cygwin mercurial. + + if ! python client.py checkout; then + error "during checkout of $project tree" $LINENO + fi + + cd js/src + ;; + + *) + error "branch $branch not yet supported" + ;; + esac # end for js shell ;; *) diff --git a/testing/sisyphus/bin/create-profile.sh b/testing/sisyphus/bin/create-profile.sh index 59af95372b62..4aa3fe75fcec 100755 --- a/testing/sisyphus/bin/create-profile.sh +++ b/testing/sisyphus/bin/create-profile.sh @@ -53,7 +53,7 @@ $SCRIPT -p product -b branch -x executablepath -D directory -N profilename variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory-tree containing executable 'product' -D directory required. directory where profile is to be created. -N profilename required. profile name @@ -86,44 +86,31 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || -z "$executablepath" || \ -z "$directory" || -z "$profilename" ]]; then usage fi -if [[ "$product" != "firefox" && "$product" != "thunderbird" ]]; then +if [[ "$product" != "firefox" && "$product" != "thunderbird" && "$product" ]]; then error "product \"$product\" must be one of firefox or thunderbird" $LINENO fi -if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" ]]; +if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" && "$branch" != "1.9.1" ]]; then - error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0" $LINENO + error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0 1.9.1" $LINENO fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO -fi - -if [[ ! -x "$executable" ]]; then - error "executable \"$executable\" is not executable" $LINENO -fi - $TEST_DIR/bin/create-directory.sh -d "$directory" -n if echo "$profilename" | egrep -qiv '[a-z0-9_]'; then error "profile name \"$profilename\" must consist of letters, digits or _" $LINENO fi -if [ $OSID == "win32" ]; then +if [ $OSID == "nt" ]; then directoryospath=`cygpath -a -w $directory` if [[ -z "$directoryospath" ]]; then error "unable to convert unix path to windows path" $LINENO @@ -134,7 +121,9 @@ fi echo "creating profile $profilename in directory $directory" -if ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "-" $executable -CreateProfile "$profilename $directoryospath"; then +if ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "-" \ + $EXECUTABLE_DRIVER \ + $executable -CreateProfile "$profilename $directoryospath"; then error "creating profile $directory" $LINENO fi diff --git a/testing/sisyphus/bin/download.sh b/testing/sisyphus/bin/download.sh index 382ffc0171c9..554449b47915 100755 --- a/testing/sisyphus/bin/download.sh +++ b/testing/sisyphus/bin/download.sh @@ -88,12 +88,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z $url || -z $filepath ]] then diff --git a/testing/sisyphus/bin/edit-talkback.pl b/testing/sisyphus/bin/edit-talkback.pl index 6188f375c909..af3bea14bd59 100755 --- a/testing/sisyphus/bin/edit-talkback.pl +++ b/testing/sisyphus/bin/edit-talkback.pl @@ -71,7 +71,7 @@ sub editTalkback if ($ostype =~ /cygwin/i) { - $os = "win32"; + $os = "nt"; } elsif ($ostype =~ /linux/i) { @@ -79,7 +79,7 @@ sub editTalkback } elsif ($ostype =~ /darwin/) { - $os = "mac"; + $os = "darwin"; } else { @@ -187,7 +187,7 @@ sub editTalkback my $appdata; - if ($os eq "win32") + if ($os eq "nt") { # get application data directory in windows format $appdata = $ENV{APPDATA}; @@ -230,7 +230,7 @@ sub editTalkback { $talkbackdir="$home/.fullcircle"; } - elsif ($os eq "mac") + elsif ($os eq "darwin") { $talkbackdir="$home/Library/Application\ Support/FullCircle"; } @@ -250,7 +250,7 @@ sub editTalkback my $talkbackinidir; - if ($os eq "win32") + if ($os eq "nt") { $talkbackinidir="$talkbackdir/$vendorid/$productid/$platformid/$buildid/"; @@ -307,7 +307,7 @@ sub editTalkback } } } - elsif ($os eq "mac") + elsif ($os eq "darwin") { $talkbackinidir="$talkbackdir/$vendorid$productid$platformid$buildid"; if (! -e "$talkbackdir/$vendorid$productid$platformid$buildid" ) @@ -335,7 +335,7 @@ sub editTalkback } #print "patching Talkback.ini\n"; - if ($os eq "win32") + if ($os eq "nt") { $rc = system(("sed", "-ibak", @@ -359,7 +359,7 @@ sub editTalkback die "unable to edit Talkback.ini: $!"; } } - elsif ($os eq "mac") + elsif ($os eq "darwin") { $rc = system(("sed", "-ibak", diff --git a/testing/sisyphus/bin/edit-talkback.sh b/testing/sisyphus/bin/edit-talkback.sh index 0a2f74ddf595..dd0aad7c61ae 100755 --- a/testing/sisyphus/bin/edit-talkback.sh +++ b/testing/sisyphus/bin/edit-talkback.sh @@ -52,7 +52,7 @@ $SCRIPT -p product -b branch -x executablepath -i talkbackid [-d datafiles] variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory-tree containing executable named 'product' -i talkbackid required. identifier to add to talkback url @@ -80,12 +80,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || \ -z "$executablepath" || -z "$talkbackid" ]]; then @@ -94,14 +89,6 @@ fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO -fi - -if [[ ! -x "$executable" ]]; then - error "executable \"$executable\" is not executable" $LINENO -fi - executablepath=`dirname $executable` # escape & in talkback id to prevent replacements @@ -132,7 +119,7 @@ if [[ $talkback -eq 1 ]]; then fi case $OSID in - win32) + nt) vendorid=`dos2unix < master.ini | grep '^VendorID = "' | sed 's@VendorID = "\([^"]*\)"@\1@'` productid=`dos2unix < master.ini | grep '^ProductID = "' | sed 's@ProductID = "\([^"]*\)"@\1@'` platformid=`dos2unix < master.ini | grep '^PlatformID = "' | sed 's@PlatformID = "\([^"]*\)"@\1@'` @@ -147,7 +134,7 @@ if [[ $talkback -eq 1 ]]; then buildid=`dos2unix < master.ini | grep '^BuildID = "' | sed 's@BuildID = "\([^"]*\)"@\1@'` talkbackdir="$HOME/.fullcircle" ;; - mac) + darwin) # hack around Mac's use of spaces in directory names vendorid=`grep '^VendorID = "' master.ini | sed 's@VendorID = "\([^"]*\)"@\1@'` productid=`grep '^ProductID = "' master.ini | sed 's@ProductID = "\([^"]*\)"@\1@'` @@ -168,10 +155,10 @@ if [[ $talkback -eq 1 ]]; then mkdir -p "$talkbackdir" case $OSID in - win32) + nt) talkbackinidir="$talkbackdir/$vendorid/$productid/$platformid/$buildid" ;; - linux | mac ) + linux | darwin ) talkbackinidir="$talkbackdir/$vendorid$productid$platformid$buildid" ;; esac @@ -185,13 +172,13 @@ if [[ $talkback -eq 1 ]]; then cp ${TEST_DIR}/talkback/$OSID/Talkback.ini . case "$OSID" in - win32) + nt) sed -i.bak "s@URLEdit .*@URLEdit = \"mozqa:$talkbackid\"@" Talkback.ini ;; - linux ) + linux) sed -i.bak "s@URLEditControl .*@URLEditControl = \"mozqa:$talkbackid\"@" Talkback.ini ;; - mac ) + darwin) sed -i.bak "s@URLEditControl .*@URLEditControl = \"mozqa:$talkbackid\"@" Talkback.ini ;; *) diff --git a/testing/sisyphus/bin/install-build.sh b/testing/sisyphus/bin/install-build.sh index 00b4970d9f41..99c7d03ed9df 100755 --- a/testing/sisyphus/bin/install-build.sh +++ b/testing/sisyphus/bin/install-build.sh @@ -52,7 +52,7 @@ $SCRIPT -p product -b branch -x executablepath -f filename [-d datafiles] variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory where to install build -f filename required. path to filename where installer is stored -d datafiles optional. one or more filenames of files containing @@ -79,12 +79,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || -z "$executablepath" || -z "$filename" ]] then @@ -97,7 +92,7 @@ $TEST_DIR/bin/create-directory.sh -d "$executablepath" -n filetype=`file $filename` -if [[ $OSID == "win32" ]]; then +if [[ $OSID == "nt" ]]; then if echo $filetype | grep -iq windows; then chmod u+x "$filename" @@ -108,6 +103,8 @@ if [[ $OSID == "win32" ]]; then fi elif echo $filetype | grep -iq 'zip archive'; then unzip -o -d "$executablepath" "$filename" + find $executablepath -name '*.exe' | xargs chmod u+x + find $executablepath -name '*.dll' | xargs chmod u+x else error "$unknown file type $filetype" $LINENO fi @@ -152,9 +149,7 @@ else # forking new processes # executable=`get_executable $product $branch $executablepath` - if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty directory" $LINENO - fi + executabledir=`dirname $executable` # patch to use exec to prevent forked processes diff --git a/testing/sisyphus/bin/install-extensions.sh b/testing/sisyphus/bin/install-extensions.sh index 73475d723ce0..79a7c94f315a 100755 --- a/testing/sisyphus/bin/install-extensions.sh +++ b/testing/sisyphus/bin/install-extensions.sh @@ -39,7 +39,7 @@ source $TEST_DIR/bin/library.sh -echo "$SCRIPT $@" +TEST_STARTUP_TRIES=${TEST_STARTUP_TRIES:-3} # # options processing @@ -55,7 +55,7 @@ $SCRIPT -p product -b branch -x executablepath -N profilename -E extensions variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory-tree containing executable named 'product' -N profilename required. profile name @@ -85,12 +85,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || \ -z "$executablepath" || -z "$profilename" || -z "$extensions" ]]; then @@ -101,21 +96,13 @@ if [[ "$product" != "firefox" && "$product" != "thunderbird" ]]; then error "product \"$product\" must be one of firefox or thunderbird" $LINENO fi -if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" ]]; +if [[ "$branch" != "1.8.0" && "$branch" != "1.8.1" && "$branch" != "1.9.0" && "$branch" != "1.9.1" ]]; then - error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0" $LINENO + error "branch \"$branch\" must be one of 1.8.0, 1.8.1, 1.9.0 1.9.1" $LINENO fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO -fi - -if [[ ! -x "$executable" ]]; then - error "executable \"$executable\" is not executable" $LINENO -fi - if echo $profilename | egrep -qiv '[a-z0-9_]'; then error "profile name must consist of letters, digits or _" $LINENO fi @@ -124,14 +111,23 @@ for extension in $extensions/all/*.xpi; do if [[ $extension == "$extensions/all/*.xpi" ]]; then break fi - if [[ "$OSID" == "win32" ]]; then + if [[ "$OSID" == "nt" ]]; then extensionos=`cygpath -a -w $extension` else extensionos="$extension" fi echo installing $extension - $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "-" $executable -P $profilename -install-global-extension "$extensionos" + let tries=1 + while ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "Install extension $extension: try $tries" \ + $EXECUTABLE_DRIVER \ + $executable -P $profilename -install-global-extension "$extensionos"; do + let tries=tries+1 + if [[ "$tries" -gt $TEST_STARTUP_TRIES ]]; then + error "Failed to install extension $extension. Exiting..." $LINENO + fi + sleep 30 + done # there is no reliable method of determining if the install worked # from the output or from the exit code. done @@ -140,17 +136,22 @@ for extension in $extensions/$OSID/*; do if [[ $extension == "$extensions/$OSID/*" ]]; then break fi - if [[ "$OSID" == "win32" ]]; then + if [[ "$OSID" == "nt" ]]; then extensionos=`cygpath -a -w $extension` else extensionos="$extension" fi echo installing $extension - if ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "-" $executable -P $profilename -install-global-extension "$extensionos"; then - error "Failed to install $extensionos" $LINENO - fi - + let tries=1 + while ! $TEST_DIR/bin/timed_run.py ${TEST_STARTUP_TIMEOUT} "Install extension $extension: try $tries" \ + $executable -P $profilename -install-global-extension "$extensionos"; do + let tries=tries+1 + if [[ "$tries" -gt $TEST_STARTUP_TRIES ]]; then + error "Failed to install extension $extension. Exiting..." $LINENO + fi + sleep 30 + done done # restart twice to make extension manager happy diff --git a/testing/sisyphus/bin/install-plugins.sh b/testing/sisyphus/bin/install-plugins.sh index 096ebdbf315e..641b1b85321f 100755 --- a/testing/sisyphus/bin/install-plugins.sh +++ b/testing/sisyphus/bin/install-plugins.sh @@ -52,7 +52,7 @@ $SCRIPT -p product -b branch -x executablepath -D directory [-d datafiles] variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. path to browser executable -D directory required. path to location of plugins/components -d datafiles optional. one or more filenames of files containing @@ -80,12 +80,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loadata $datafiles if [[ -z "$product" || -z "$branch" || \ -z "$executablepath" || -z "$directory" ]]; then @@ -98,14 +93,6 @@ fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - error "get_executable $product $branch $executablepath returned empty path" $LINENO -fi - -if [[ ! -x "$executable" ]]; then - error "executable \"$executable\" is not executable" $LINENO -fi - executablepath=`dirname $executable` # diff --git a/testing/sisyphus/bin/library.sh b/testing/sisyphus/bin/library.sh index 2fa8bea6d305..1fa05e15daea 100755 --- a/testing/sisyphus/bin/library.sh +++ b/testing/sisyphus/bin/library.sh @@ -85,42 +85,27 @@ function _exit() trap "_exit" EXIT - # error message - # output error message end exit 2 +# error message +# output error message end exit 2 - error() - { - local message=$1 - local lineno=$2 +error() +{ + local message=$1 + local lineno=$2 - debug "error: $0:$LINENO" + debug "error: $0:$LINENO" - echo -e "FATAL ERROR in script $0:$lineno $message\n" 1>&2 - if [[ "$0" == "-bash" || "$0" == "bash" ]]; then - return 0 - fi - exit 2 - } + echo -e "FATAL ERROR in script $0:$lineno $message\n" 1>&2 + if [[ "$0" == "-bash" || "$0" == "bash" ]]; then + return 0 + fi + exit 2 +} if [[ -z "$LIBRARYSH" ]]; then # skip remainder of script if it has already included - LIBRARYSH=1 - - # set time format for pipeline timing reports - TIMEFORMAT="Elapsed time %0R seconds, User %0U seconds, System %0S seconds, CPU %P%%" - - MALLOC_CHECK_=2 - - ulimit -c 0 - - # debug msg - # - # output debugging message to stdout if $DEBUG is set - - DEBUG=${DEBUG:-""} - debug() { if [[ -n "$DEBUG" ]]; then @@ -137,6 +122,25 @@ if [[ -z "$LIBRARYSH" ]]; then echo -e "$@" 1>&2 } + # loaddata + # + # load data files into environment + loaddata() + { + local datafiles="$@" + local datafile + if [[ -n "$datafiles" ]]; then + for datafile in $datafiles; do + if [[ ! -e "$datafile" ]]; then + error "datafile $datafile does not exist" + fi + cat $datafile | sed 's|^|data: |' + if ! source $datafile; then + error "Unable to load data file $datafile" + fi + done + fi + } # dumpenvironment # @@ -147,6 +151,33 @@ if [[ -z "$LIBRARYSH" ]]; then set | grep '^[A-Z]' | sed 's|^|environment: |' } + dumphardware() + { + echo "uname -a:`uname -a`" + echo "uname -s:`uname -s`" + echo "uname -n:`uname -n`" + echo "uname -r:`uname -r`" + echo "uname -v:`uname -v`" + echo "uname -m:`uname -m`" + echo "uname -p:`uname -p`" + if [[ "$OSID" != "darwin" ]]; then + echo "uname -i:`uname -i`" + echo "uname -o:`uname -o`" + fi + + ulimit -a | sed 's|^|ulimit:|' + + if [[ -e /proc/cpuinfo ]]; then + cat /proc/cpuinfo | sed 's|^|cpuinfo:|' + fi + if [[ -e /proc/meminfo ]]; then + cat /proc/meminfo | sed 's|^|meminfo:|' + fi + if which system_profiler 2> /dev/null; then + system_profiler | sed 's|^|system_profiler:|' + fi + } + # dumpvars varname1, ... # # dumps name=value pairs to stdout for each variable named @@ -170,9 +201,9 @@ if [[ -z "$LIBRARYSH" ]]; then get_executable() { - get_executable_product="$1" - get_executable_branch="$2" - get_executable_directory="$3" + local get_executable_product="$1" + local get_executable_branch="$2" + local get_executable_directory="$3" if [[ -z "$get_executable_product" || \ -z "$get_executable_branch" || \ @@ -184,22 +215,35 @@ if [[ -z "$LIBRARYSH" ]]; then # should use /u+x,g+x,a+x but mac os x uses an obsolete find # filter the output to remove extraneous file in dist/bin for # cvs builds on mac os x. - get_executable_name="$get_executable_product${EXE_EXT}" - case "$OSID" in - mac) - get_executable_filter="Contents/MacOS/$get_executable_product" - if [[ "$get_executable_product" == "thunderbird" ]]; then - get_executable_name="$get_executable_product-bin" - fi - ;; - *) - get_executable_filter="$get_executable_product" - esac - if find "$get_executable_directory" -perm +111 -type f \ - -name "$get_executable_name" | \ - grep "$get_executable_filter"; then - true + local executable=`( + get_executable_name="$get_executable_product${EXE_EXT}" + case "$OSID" in + darwin) + get_executable_filter="Contents/MacOS/$get_executable_product" + if [[ "$get_executable_product" == "thunderbird" ]]; then + get_executable_name="$get_executable_product-bin" + fi + ;; + *) + get_executable_filter="$get_executable_product" + ;; + esac + if find "$get_executable_directory" -perm +111 -type f \ + -name "$get_executable_name" | \ + grep "$get_executable_filter"; then + true + fi + )` + + if [[ -z "$executable" ]]; then + error "get_executable $product $branch $executablepath returned empty path" $LINENO fi + + if [[ ! -x "$executable" ]]; then + error "executable \"$executable\" is not executable" $LINENO + fi + + echo $executable fi } @@ -216,48 +260,26 @@ if [[ -z "$LIBRARYSH" ]]; then echo $script } - SCRIPT=`get_scriptname $0` + LIBRARYSH=1 - if [[ -z "$TEST_DIR" ]]; then - # get the "bin" directory - TEST_DIR=`dirname $0` - # get the "bin" directory parent - TEST_DIR=`dirname $TEST_DIR` - if [[ ! -e "${TEST_DIR}/bin/library.sh" ]]; then - error "BAD TEST_DIR $TEST_DIR" - fi - fi - TEST_HTTP=${TEST_HTTP:-test.mozilla.com} - TEST_STARTUP_TIMEOUT=${TEST_STARTUP_TIMEOUT:-30} + MALLOC_CHECK_=2 - TEST_MACHINE=`uname -n` - TEST_KERNEL=`uname -r` - TEST_PROCESSORTYPE=`uname -p` + ulimit -c 0 # set path to make life easier if ! echo ${PATH} | grep -q $TEST_DIR/bin; then PATH=$TEST_DIR/bin:$PATH fi - if echo $OSTYPE | grep -iq cygwin; then - OSID=win32 - EXE_EXT=".exe" - elif echo $OSTYPE | grep -iq Linux; then - OSID=linux - EXE_EXT= - elif echo $OSTYPE | grep -iq darwin; then - OSID=mac - EXE_EXT= - else - error "Unknown OS $OSTYPE" - fi - # force en_US locale if ! echo "$LANG" | grep -q en_US; then LANG=en_US LC_TIME=en_US fi + # handle sorting non-ascii logs on mac os x 10.5.3 + LC_ALL=C + TEST_TIMEZONE=`date +%z` # save starting directory @@ -278,17 +300,109 @@ if [[ -z "$LIBRARYSH" ]]; then # ah crap handler timeout MOZ_GDB_SLEEP=${MOZ_GDB_SLEEP:-10} - # no dialogs on asserts - XPCOM_DEBUG_BREAK=${XPCOM_DEBUG_BREAK:-warn} - # no airbag unset MOZ_AIRBAG - MOZ_CRASHREPORTER_DISABLE=${MOZ_CRASHREPORTER_DISABLE:-1} + #MOZ_CRASHREPORTER_DISABLE=${MOZ_CRASHREPORTER_DISABLE:-1} MOZ_CRASHREPORTER_NO_REPORT=${MOZ_CRASHREPORTER_NO_REPORT:-1} #leak gauge #NSPR_LOG_MODULES=DOMLeak:5,DocumentLeak:5,nsDocShellLeak:5 + TEST_CPUSPEED="`mips.pl`" + TEST_MEMORY="`memory.pl`" + + # debug msg + # + # output debugging message to stdout if $DEBUG is set + + DEBUG=${DEBUG:-""} + + SCRIPT=`get_scriptname $0` + + if [[ -z "$TEST_DIR" ]]; then + # get the "bin" directory + TEST_DIR=`dirname $0` + # get the "bin" directory parent + TEST_DIR=`dirname $TEST_DIR` + if [[ ! -e "${TEST_DIR}/bin/library.sh" ]]; then + error "BAD TEST_DIR $TEST_DIR" + fi + fi + + TEST_HTTP=${TEST_HTTP:-test.mozilla.com} + TEST_STARTUP_TIMEOUT=${TEST_STARTUP_TIMEOUT:-30} + TEST_MACHINE=`uname -n` + + kernel_name=`uname -s` + + if [[ $kernel_name == 'Linux' ]]; then + OSID=linux + EXE_EXT= + TEST_KERNEL=`uname -r | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3|'` + TEST_PROCESSORTYPE=`cat /proc/cpuinfo | grep vendor | uniq | sed 's|vendor.* : \(.*\)|\1|'` + TIMECOMMAND='/usr/bin/time -f "Elapsed time %e seconds, User %U seconds, System %S seconds, CPU %P, Memory: %M"' + + if echo $TEST_PROCESSORTYPE | grep -q 'Intel'; then + TEST_PROCESSORTYPE=intel + elif echo $TEST_PROCESSORTYPE | grep -q 'AMD'; then + TEST_PROCESSORTYPE=amd + fi + + if uname -p | grep -q '64$'; then + TEST_PROCESSORTYPE=${TEST_PROCESSORTYPE}64 + else + TEST_PROCESSORTYPE=${TEST_PROCESSORTYPE}32 + fi + + elif [[ $kernel_name == 'Darwin' ]]; then + OSID=darwin + EXE_EXT= + TEST_KERNEL=`uname -r` + TEST_PROCESSORTYPE=`uname -p` + TIMEFORMAT="Elapsed time %E seconds, User %U seconds, System %S seconds, CPU %P%" + TIMECOMMAND=time + + if [[ $TEST_PROCESSORTYPE == "i386" ]]; then + TEST_PROCESSORTYPE=intel + fi + + # assume 32bit for now... + TEST_PROCESSORTYPE=${TEST_PROCESSORTYPE}32 + + elif echo $kernel_name | grep -q CYGWIN; then + OSID=nt + EXE_EXT=".exe" + TEST_KERNEL=`echo $kernel_name | sed 's|[^.0-9]*\([.0-9]*\).*|\1|'` + TEST_PROCESSORTYPE=`cat /proc/cpuinfo | grep vendor | uniq | sed 's|vendor.* : \(.*\)|\1|'` + TIMECOMMAND='/usr/bin/time -f "Elapsed time %e seconds, User %U seconds, System %S seconds, CPU %P, Memory: %M"' + + if echo $TEST_PROCESSORTYPE | grep -q 'Intel'; then + TEST_PROCESSORTYPE=intel + elif echo $TEST_PROCESSORTYPE | grep -q 'AMD'; then + TEST_PROCESSORTYPE=amd + fi + + if uname -p | grep -q '64$'; then + TEST_PROCESSORTYPE=${TEST_PROCESSORTYPE}64 + else + TEST_PROCESSORTYPE=${TEST_PROCESSORTYPE}32 + fi + + else + error "Unknown OS $kernel_name" $LINENO + fi + + case $TEST_PROCESSORTYPE in + *32) + if [[ $TEST_MEMORY -gt 4 ]]; then + TEST_MEMORY=4 + fi + ;; + esac + + # no dialogs on asserts + XPCOM_DEBUG_BREAK=${XPCOM_DEBUG_BREAK:-warn} + if [[ -z "$BUILDDIR" ]]; then case `uname -s` in MINGW*) diff --git a/testing/sisyphus/bin/memory.pl b/testing/sisyphus/bin/memory.pl new file mode 100644 index 000000000000..0ffb203d51c1 --- /dev/null +++ b/testing/sisyphus/bin/memory.pl @@ -0,0 +1,180 @@ +#!/usr/bin/perl -w +# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Automated Testing Code. +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +my $K = 1024; +my $M = 1024 * $K; +my $G = 1024 * $M; + +my $tmpmemory; +my $unitmemory; +my $raw_memory = 0; +my $swap_memory = 0; +my $ulimit_maxmemory = 0; +my $ulimit_virtualmemory = 0; +my $test_memory = 0; + +# hack around lack of available environment entries in both +# cygwin perl and redhat perl +open OSTYPE, "set | grep OSTYPE |" || die "Unable to open OSTYPE: $!"; +while () +{ + chomp; + $ostype .= $_; +} +close OSTYPE; + +die "Unable to determine OSTYPE" if (!$ostype); + +if ($ostype =~ /linux/i || $ostype =~ /cygwin/i) +{ + open MEMINFO, "/proc/meminfo" or die "Unable to open /proc/meminfo"; + while () + { + if ( ($tmpmemory, $unitmemory) = $_ =~ /MemTotal:\s*([0-9]*) (kB)/) + { + die "Unknown memory unit meminfo MemTotal $unitmemory" if $unitmemory ne "kB"; + + $tmpmemory *= 1024; + $raw_memory = int($tmpmemory / $G + .5); + } + elsif ( ($tmpmemory, $unitmemory) = $_ =~ /SwapTotal:\s*([0-9]*) (kB)/) + { + die "Unknown memory unit meminfo SwapTotal $unitmemory" if $unitmemory ne "kB"; + + $tmpmemory *= 1024; + $swap_memory = int($tmpmemory / $G + .5); + } + } + close MEMINFO; +} +elsif ($ostype =~ /darwin/i) +{ + open SYSTEMPROFILER, "system_profiler|" or die "Unable to open system_profiler"; + while () + { + if ( ($tmpmemory, $unitmemory) = $_ =~ /\s*Memory:\s*([0-9]*) ([a-zA-Z]*)/) + { + if ($unitmemory =~ /KB/) + { + $tmpmemory *= $K; + } + elsif ($unitmemory =~ /MB/) + { + $tmpmemory *= $M; + } + elsif ($unitmemory =~ /GB/) + { + $tmpmemory *= $G; + } + else + { + die "Unknown memory unit system_profiler $unitmemory"; + } + $raw_memory = int($tmpmemory / $G + .5); + } + } + close SYSTEMPROFILER; +} +else +{ + die "Unknown Operating System: $ostype"; +} + +open ULIMIT, 'bash -c "ulimit -a"|' or die "Unable to open ulimit -a"; + +while () +{ + if ( ($unitmemory, $tmpmemory) = $_ =~ /max memory size + \(([a-zA-Z]*), \-m\) ([0-9]*)/) + { + if ($tmpmemory eq "") + { + $tmpmemory = 0; + } + + if ($unitmemory =~ /kbytes/i) + { + $tmpmemory *= $K; + } + elsif ($unitmemory =~ /mbytes/i) + { + $tmpmemory *= $M; + } + elsif ($unitmemory =~ /gbytes/i) + { + $tmpmemory *= $G; + } + else + { + die "Unknown memory unit ulimit $unitmemory"; + } + + $ulimit_maxmemory = int($tmpmemory / $G + .5); + } + elsif ( ($unitmemory, $tmpmemory) = $_ =~ /virtual memory + \(([a-zA-Z]*), \-v\) ([0-9]*)/) + { + if ($tmpmemory eq "") + { + $tmpmemory = 0; + } + + if ($unitmemory =~ /kbytes/i) + { + $tmpmemory *= $K; + } + elsif ($unitmemory =~ /mbytes/i) + { + $tmpmemory *= $M; + } + elsif ($unitmemory =~ /gbytes/i) + { + $tmpmemory *= $G; + } + else + { + die "Unknown virtual memory unit ulimit $unitmemory"; + } + + $ulimit_virtualmemory = int($tmpmemory / $G + .5); + } +} +close ULIMIT; + +$test_memory = $ulimit_virtualmemory > 0 ? $ulimit_virtualmemory : ($raw_memory + $swap_memory); + +print "$test_memory"; + diff --git a/testing/sisyphus/bin/mips.pl b/testing/sisyphus/bin/mips.pl new file mode 100644 index 000000000000..c1e760d12bda --- /dev/null +++ b/testing/sisyphus/bin/mips.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w +# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Automated Testing Code. +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# Calculate a relative speed measurement based on +# iterating over a simple loop in perl. Print the +# result as millions of iterations per cpu second. + +sub mips +{ + my $tries = 3; # repeat count to get average + my $m = 1000000; # scale to million iterations/second + my $l = 10000000; # number of iterations to time + my $cpu = 0; # cpu time accumlator + my $dummy = 0; # dummy variable to prevent optimizations + my $i; + my $start; + my $stop; + my $a; + + for ($a = 0; $a < $tries; ++$a) + { + $start = (times)[0]; + for ($i = 0; $i < $l; ++$i) + { + $dummy += $i; + } + $stop = (times)[0]; + $cpu += $stop - $start; + } + $cpu /= $tries; + + print "" . int($l/($cpu*$m)) . "\n"; + + return $dummy; # reuse dummy variable +} + +mips; diff --git a/testing/sisyphus/bin/set-build-env.sh b/testing/sisyphus/bin/set-build-env.sh index 8491001288ff..fcbd2b04bb22 100755 --- a/testing/sisyphus/bin/set-build-env.sh +++ b/testing/sisyphus/bin/set-build-env.sh @@ -37,12 +37,16 @@ # # ***** END LICENSE BLOCK ***** +if [[ -z "$LIBRARYSH" ]]; then + source $TEST_DIR/bin/library.sh +fi + export MOZ_CVS_FLAGS="-z3 -q" export MOZILLA_OFFICIAL=1 export BUILD_OFFICIAL=1 if [[ -z "$CVSROOT" ]]; then - if grep -q mozqa@qm-mini-ubuntu01 ~/.ssh/id_dsa.pub; then + if grep -q buildbot@qm ~/.ssh/id_dsa.pub; then export CVSROOT=:ext:unittest@cvs.mozilla.org:/cvsroot else export CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot @@ -60,7 +64,7 @@ usage() usage: set-build-env.sh -p product -b branch -T buildtype [-e extra] -p product [firefox|thunderbird] --b branch [1.8.0|1.8.1|1.9.0] +-b branch [1.8.0|1.8.1|1.9.0|1.9.1] -T buildtype [opt|debug] -e extra extra qualifier to pick mozconfig and tree @@ -91,10 +95,14 @@ for step in step1; do # dummy loop for handling exits p) product=$OPTARG;; b) branch=$OPTARG;; T) buildtype=$OPTARG;; - e) extra=$OPTARG;; + e) extra="-$OPTARG";; esac done + # include environment variables + datafiles=$TEST_DIR/data/$product,$branch$extra,$buildtype.data + loaddata $datafiles + # echo product=$product, branch=$branch, buildtype=$buildtype, extra=$extra if [[ -z "$product" || -z "$branch" || -z "$buildtype" ]]; then @@ -113,11 +121,14 @@ for step in step1; do # dummy loop for handling exits fi if [[ $branch == "1.8.0" ]]; then - export BRANCH_CO_FLAGS="-r MOZILLA_1_8_0_BRANCH" + export BRANCH_CO_FLAGS=${BRANCH_CO_FLAGS:--r MOZILLA_1_8_0_BRANCH} elif [[ $branch == "1.8.1" ]]; then - export BRANCH_CO_FLAGS="-r MOZILLA_1_8_BRANCH" + export BRANCH_CO_FLAGS=${BRANCH_CO_FLAGS:--r MOZILLA_1_8_BRANCH} elif [[ $branch == "1.9.0" ]]; then export BRANCH_CO_FLAGS=""; + elif [[ $branch == "1.9.1" ]]; then + # XXX: mozilla-central + export BRANCH_CO_FLAGS=""; else echo "Unknown branch: $branch" myexit 1 @@ -127,8 +138,8 @@ for step in step1; do # dummy loop for handling exits export DATE_CO_FLAGS="-D \"$MOZ_CO_DATE\"" fi - case `uname -s` in - CYGWIN*) + case $OSID in + nt) # On Windows, Sisyphus is run under Cygwin, so the OS will be CYGWIN # regardless. Check if mozilla-build has been installed to the default @@ -147,10 +158,8 @@ for step in step1; do # dummy loop for handling exits # directory to the home directory prior to executing the command. if [[ -e "/c/mozilla-build" ]]; then - OSID=win32 export BUILDDIR=${BUILDDIR:-/c/work/mozilla/builds} export buildbash="/c/mozilla-build/msys/bin/bash" - export platform=i686 export bashlogin=--login # this is for msys' bash. if echo $branch | egrep -q '^1\.8'; then @@ -163,10 +172,8 @@ for step in step1; do # dummy loop for handling exits echo moztools Location: $MOZ_TOOLS else - OSID=win32 export BUILDDIR=${BUILDDIR:-/work/mozilla/builds} export buildbash="/bin/bash" - export platform=i686 export bashlogin=-l if echo $branch | egrep -q '^1\.8'; then @@ -188,29 +195,24 @@ for step in step1; do # dummy loop for handling exits BUILDDIR=`cygpath -u $BUILDDIR_WIN` ;; - Linux) - OSID=linux + linux) export BUILDDIR=${BUILDDIR:-/work/mozilla/builds} export buildbash="/bin/bash" - export platform=`uname -p` export bashlogin=-l # if a 64 bit linux system, assume the # compiler is in the standard reference # location /tools/gcc/bin/ - case "$platform" in - x86_64) + case "$TEST_PROCESSORTYPE" in + *64) export PATH=/tools/gcc/bin:$PATH ;; esac ;; - Darwin) - OSID=mac - + darwin) export BUILDDIR=${BUILDDIR:-/work/mozilla/builds} export buildbash="/bin/bash" - export platform=`uname -p` export bashlogin=-l ;; *) @@ -221,10 +223,14 @@ for step in step1; do # dummy loop for handling exits export CONFIG_SHELL=$buildbash export CONFIGURE_ENV_ARGS=$buildbash + + export TEST_MOZILLA_HG=${TEST_MOZILLA_HG:-http://hg.mozilla.org/mozilla-central/} + export TEST_MOZILLA_HG_REV=${TEST_MOZILLA_HG_REV:-tip} + if [[ -z $extra ]]; then export TREE="$BUILDDIR/$branch" else - export TREE="$BUILDDIR/$branch-$extra" + export TREE="$BUILDDIR/$branch$extra" # # extras can't be placed in mozconfigs since not all parts @@ -234,15 +240,15 @@ for step in step1; do # dummy loop for handling exits # case "$extra" in - too-much-gc) + -too-much-gc) export XCFLAGS="-DWAY_TOO_MUCH_GC=1" export CFLAGS="-DWAY_TOO_MUCH_GC=1" export CXXFLAGS="-DWAY_TOO_MUCH_GC=1" ;; - gcov) + -gcov) - if [[ "$OSID" == "win32" ]]; then - echo "win32 does not support gcov" + if [[ "$OSID" == "nt" ]]; then + echo "NT does not support gcov" myexit 1 fi export CFLAGS="--coverage" @@ -252,7 +258,7 @@ for step in step1; do # dummy loop for handling exits export LDFLAGS="--coverage" export XLDOPTS="--coverage" ;; - jprof) + -jprof) ;; esac fi @@ -266,14 +272,14 @@ for step in step1; do # dummy loop for handling exits # and is used to find mozilla/(browser|mail)/config/mozconfig if [[ $product == "firefox" ]]; then project=browser - export MOZCONFIG="$TREE/mozconfig-firefox-$OSID-$platform-$buildtype" + export MOZCONFIG="$TREE/mozconfig-firefox-$OSID-$TEST_PROCESSORTYPE-$buildtype" elif [[ $product == "thunderbird" ]]; then project=mail - export MOZCONFIG="$TREE/mozconfig-thunderbird-$OSID-$platform-$buildtype" + export MOZCONFIG="$TREE/mozconfig-thunderbird-$OSID-$TEST_PROCESSORTYPE-$buildtype" else echo "Assuming project=browser for product: $product" project=browser - export MOZCONFIG="$TREE/mozconfig-firefox-$OSID-$platform-$buildtype" + export MOZCONFIG="$TREE/mozconfig-firefox-$OSID-$TEST_PROCESSORTYPE-$buildtype" fi # js shell builds @@ -284,7 +290,7 @@ for step in step1; do # dummy loop for handling exits fi case "$OSID" in - mac) + darwin) export JS_EDITLINE=1 # required for mac ;; esac diff --git a/testing/sisyphus/bin/test-setup.sh b/testing/sisyphus/bin/test-setup.sh index bf879590187e..d886d6701a7e 100755 --- a/testing/sisyphus/bin/test-setup.sh +++ b/testing/sisyphus/bin/test-setup.sh @@ -59,7 +59,7 @@ $SCRIPT -p product -b branch variable description =============== =========================================================== -p product required. one of firefox thunderbird --b branch required. one of 1.8.0 1.8.1 1.9.0 +-b branch required. one of 1.8.0 1.8.1 1.9.0 1.9.1 -u url optional. url where to download build -f filepath optional. location to save downloaded build or to find previously downloaded build. If not specified, the @@ -129,12 +129,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles TEST_PRODUCT=$product TEST_BRANCH=$branch @@ -148,6 +143,7 @@ TEST_EXTENSIONDIR=$extensiondir TEST_DATAFILES=$datafiles dumpenvironment +dumphardware if [[ -z "$product" || -z "$branch" ]]; then echo "product and branch are required" diff --git a/testing/sisyphus/bin/tester.sh b/testing/sisyphus/bin/tester.sh index 84e55a7816b7..9b4d92017ffa 100755 --- a/testing/sisyphus/bin/tester.sh +++ b/testing/sisyphus/bin/tester.sh @@ -112,4 +112,27 @@ for data in $datalist; do $testscript $testargs -d $TEST_DIR/data/$data.data >> $TEST_LOG 2>&1 fi + if [[ "$XPCOM_DEBUG_BREAK" == "stack" ]]; then + case $OSID in + nt) + ;; + linux) + if which fix-linux-stack.pl > /dev/null; then + fix-linux-stack.pl < $TEST_LOG > $TEST_LOG.tmp + mv $TEST_LOG.tmp $TEST_LOG + else + error "XPCOM_DEBUG_BREAK=stack specified but fix-linux-stack.pl is not available" + fi + ;; + darwin) + if which fix-macosx-stack.pl > /dev/null; then + fix-macosx-stack.pl < $TEST_LOG > $TEST_LOG.tmp + mv $TEST_LOG.tmp $TEST_LOG + else + error "XPCOM_DEBUG_BREAK=stack specified but fix-macosx-stack.pl is not available" + fi + ;; + esac + fi + done diff --git a/testing/sisyphus/bin/timed_run.py b/testing/sisyphus/bin/timed_run.py index bdcba5342434..b1a12ccd1cbc 100755 --- a/testing/sisyphus/bin/timed_run.py +++ b/testing/sisyphus/bin/timed_run.py @@ -20,6 +20,7 @@ # the Initial Developer. All Rights Reserved. # # Contributor(s): Chris Cooper +# Jesse Ruderman # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or @@ -55,14 +56,23 @@ if prefix == "-": else: prefix = prefix + ':' +def getSignalName(num): + for p in dir(signal): + if p.startswith("SIG") and not p.startswith("SIG_"): + if getattr(signal, p) == num: + return p + return "UNKNOWN" + def alarm_handler(signum, frame): global pid global prefix try: - print "%s EXIT STATUS: TIMED OUT (%s seconds)" % (prefix, sys.argv[1]) + stoptime = time.time() + elapsedtime = stoptime - starttime + print "\n%s EXIT STATUS: TIMED OUT (%s seconds)\n" % (prefix, elapsedtime) flushkill(pid, signal.SIGKILL) except OSError, e: - print "timed_run.py: exception trying to kill process: %d (%s)" % (e.errno, e.strerror) + print "\ntimed_run.py: exception trying to kill process: %d (%s)\n" % (e.errno, e.strerror) pass flushexit(exitTimeout) @@ -79,7 +89,7 @@ def forkexec(command, args): else: # Parent return pid except OSError, e: - print "%s ERROR: %s %s failed: %d (%s) (%f seconds)" % (prefix, command, args, e.errno, e.strerror, elapsedtime) + print "\n%s ERROR: %s %s failed: %d (%s) (%f seconds)\n" % (prefix, command, args, e.errno, e.strerror, elapsedtime) flushexit(exitOSError) def flushbuffers(): @@ -106,24 +116,30 @@ try: # it appears that linux at least will on "occasion" return a status # when the process was terminated by a signal, so test signal first. if os.WIFSIGNALED(status): - print "%s EXIT STATUS: CRASHED signal %d (%f seconds)" % (prefix, os.WTERMSIG(status), elapsedtime) - flushexit(exitSignal) + signum = os.WTERMSIG(status) + if signum == 2: + msg = 'INTERRUPT' + rc = exitInterrupt + else: + msg = 'CRASHED' + rc = exitSignal + + print "\n%s EXIT STATUS: %s signal %d %s (%f seconds)\n" % (prefix, msg, signum, getSignalName(signum), elapsedtime) + flushexit(rc) + elif os.WIFEXITED(status): rc = os.WEXITSTATUS(status) msg = '' if rc == 0: msg = 'NORMAL' - elif rc < 3: + else: msg = 'ABNORMAL ' + str(rc) rc = exitSignal - else: - msg = 'CRASHED ' + str(rc) - rc = exitSignal - print "%s EXIT STATUS: %s (%f seconds)" % (prefix, msg, elapsedtime) + print "\n%s EXIT STATUS: %s (%f seconds)\n" % (prefix, msg, elapsedtime) flushexit(rc) else: - print "%s EXIT STATUS: NONE (%f seconds)" % (prefix, elapsedtime) + print "\n%s EXIT STATUS: NONE (%f seconds)\n" % (prefix, elapsedtime) flushexit(0) except KeyboardInterrupt: flushkill(pid, 9) diff --git a/testing/sisyphus/bin/uninstall-build.sh b/testing/sisyphus/bin/uninstall-build.sh index 2a6a3cff73ba..a74cc37daff0 100755 --- a/testing/sisyphus/bin/uninstall-build.sh +++ b/testing/sisyphus/bin/uninstall-build.sh @@ -52,7 +52,7 @@ $SCRIPT -p product -b branch -x executablepath [-d datafiles] variable description =============== ============================================================ -p product required. firefox|thunderbird --b branch required. 1.8.0|1.8.1|1.9.0 +-b branch required. 1.8.0|1.8.1|1.9.0|1.9.1 -x executablepath required. directory where build is installed -d datafiles optional. one or more filenames of files containing environment variable definitions to be included. @@ -80,12 +80,7 @@ while getopts $options optname ; done # include environment variables -if [[ -n "$datafiles" ]]; then - for datafile in $datafiles; do - cat $datafile | sed 's|^|data: |' - source $datafile - done -fi +loaddata $datafiles if [[ -z "$product" || -z "$branch" || -z "$executablepath" ]] then @@ -99,13 +94,9 @@ fi executable=`get_executable $product $branch $executablepath` -if [[ -z "$executable" ]]; then - exit 0 -fi - executabledir=`dirname $executable` -if [[ $OSID == "win32" ]]; then +if [[ $OSID == "nt" ]]; then # see http://nsis.sourceforge.net/Docs/Chapter3.html # if the directory already exists, attempt to uninstall @@ -113,7 +104,7 @@ if [[ $OSID == "win32" ]]; then if [[ -d "$executabledir/uninstall" ]]; then - if [[ $branch == "1.8.0" ]]; then + if [[ "$branch" == "1.8.0" ]]; then uninstallexe="$executabledir/uninstall/uninstall.exe" uninstallini="$executabledir/uninstall/uninstall.ini" if [[ -n "$uninstallexe" && -e "$uninstallexe" ]]; then @@ -126,7 +117,7 @@ if [[ $OSID == "win32" ]]; then fi fi fi - elif [[ $branch == "1.8.1" || $branch == "1.9.0" ]]; then + elif [[ "$branch" == "1.8.1" || "$branch" == "1.9.0" || "$branch" == "1.9.1" ]]; then uninstalloldexe="$executabledir/uninstall/uninst.exe" uninstallnewexe="$executabledir/uninstall/helper.exe" if [[ -n "$uninstallnewexe" && -e "$uninstallnewexe" ]]; then diff --git a/testing/sisyphus/bin/userhook-checkspider.js b/testing/sisyphus/bin/userhook-checkspider.js index 09aa52f12ce9..cf3de45ae7b2 100755 --- a/testing/sisyphus/bin/userhook-checkspider.js +++ b/testing/sisyphus/bin/userhook-checkspider.js @@ -50,9 +50,39 @@ function userOnBeforePage() function userOnAfterPage() { + var win = gSpider.mDocument.defaultView; + if (win.wrappedJSObject) + { + win = win.wrappedJSObject; + } + + dumpObject('navigator', win.navigator); + + for (var i = 0; i < win.navigator.mimeTypes.length; i++) + { + dumpObject('navigator.mimeTypes[' + i + ']', win.navigator.mimeTypes[i]); + } + + for (var i = 0; i < win.navigator.plugins.length; i++) + { + dumpObject('navigator.plugins[' + i + ']', win.navigator.plugins[i]); + } + gPageCompleted = true; } +function dumpObject(name, object) +{ + for (var p in object) + { + if (/(string|number)/.test(typeof object[p])) + { + cdump(name + '.' + p + ':' + object[p]); + } + } + +} + function userOnStop() { } diff --git a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,mac.data b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,darwin.data old mode 100755 new mode 100644 similarity index 90% rename from testing/sisyphus/data/download-check,firefox-1.5.0-ftp,mac.data rename to testing/sisyphus/data/download-check,firefox-1.5.0-ftp,darwin.data index a2f2b78d57f4..82322b71dec3 --- a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,mac.data +++ b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,darwin.data @@ -1,7 +1,7 @@ allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/1.5.0.12-candidates/rc2/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,linux.data b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,linux.data index e3751b92b607..ef0bd199972f 100755 --- a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,linux.data +++ b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,linux.data @@ -1,7 +1,7 @@ allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/1.5.0.12-candidates/rc2/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,win32.data b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,nt.data old mode 100755 new mode 100644 similarity index 88% rename from testing/sisyphus/data/download-check,firefox-1.5.0-ftp,win32.data rename to testing/sisyphus/data/download-check,firefox-1.5.0-ftp,nt.data index 3276f2d12a21..7cf97880475f --- a/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,win32.data +++ b/testing/sisyphus/data/download-check,firefox-1.5.0-ftp,nt.data @@ -1,7 +1,7 @@ allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/1.5.0.12-candidates/rc2/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,mac.data b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,darwin.data old mode 100755 new mode 100644 similarity index 84% rename from testing/sisyphus/data/download-check,firefox-2.0.0-ftp,mac.data rename to testing/sisyphus/data/download-check,firefox-2.0.0-ftp,darwin.data index e3a232ad6749..ea5c95fb015f --- a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,mac.data +++ b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,darwin.data @@ -1,7 +1,7 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.13-candidates/rc2/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.14-candidates/rc2/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,linux.data b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,linux.data index 9f52fb56bd3e..c47e089c203a 100755 --- a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,linux.data +++ b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,linux.data @@ -1,7 +1,7 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.13-candidates/rc2/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.14-candidates/rc2/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,win32.data b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,nt.data old mode 100755 new mode 100644 similarity index 94% rename from testing/sisyphus/data/download-check,firefox-2.0.0-ftp,win32.data rename to testing/sisyphus/data/download-check,firefox-2.0.0-ftp,nt.data index 0787789f1641..030d0e73963f --- a/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,win32.data +++ b/testing/sisyphus/data/download-check,firefox-2.0.0-ftp,nt.data @@ -1,4 +1,4 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.13-candidates/rc2/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2.0.0.14-candidates/rc2/ product=firefox branch=1.8.1 url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.0pre.en-US.win32.zip diff --git a/testing/sisyphus/data/download-check,firefox-all,mac.data b/testing/sisyphus/data/download-check,firefox-all,darwin.data old mode 100755 new mode 100644 similarity index 89% rename from testing/sisyphus/data/download-check,firefox-all,mac.data rename to testing/sisyphus/data/download-check,firefox-all,darwin.data index e9b73d688ab9..7ea5c75e5834 --- a/testing/sisyphus/data/download-check,firefox-all,mac.data +++ b/testing/sisyphus/data/download-check,firefox-all,darwin.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/firefox/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-all,linux.data b/testing/sisyphus/data/download-check,firefox-all,linux.data index 646aa1c25ee0..d5c18e5412c4 100755 --- a/testing/sisyphus/data/download-check,firefox-all,linux.data +++ b/testing/sisyphus/data/download-check,firefox-all,linux.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/firefox/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-all,win32.data b/testing/sisyphus/data/download-check,firefox-all,nt.data old mode 100755 new mode 100644 similarity index 87% rename from testing/sisyphus/data/download-check,firefox-all,win32.data rename to testing/sisyphus/data/download-check,firefox-all,nt.data index 78bf91ecc1bb..e965a54ed89a --- a/testing/sisyphus/data/download-check,firefox-all,win32.data +++ b/testing/sisyphus/data/download-check,firefox-all,nt.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/firefox/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-all-older,mac.data b/testing/sisyphus/data/download-check,firefox-all-older,darwin.data old mode 100755 new mode 100644 similarity index 89% rename from testing/sisyphus/data/download-check,firefox-all-older,mac.data rename to testing/sisyphus/data/download-check,firefox-all-older,darwin.data index e9487d71a528..e9b289c272a0 --- a/testing/sisyphus/data/download-check,firefox-all-older,mac.data +++ b/testing/sisyphus/data/download-check,firefox-all-older,darwin.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/firefox/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-all-older,linux.data b/testing/sisyphus/data/download-check,firefox-all-older,linux.data index ada0fb9ae9bc..3fdf23b9204c 100755 --- a/testing/sisyphus/data/download-check,firefox-all-older,linux.data +++ b/testing/sisyphus/data/download-check,firefox-all-older,linux.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/firefox/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,firefox-all-older,win32.data b/testing/sisyphus/data/download-check,firefox-all-older,nt.data old mode 100755 new mode 100644 similarity index 87% rename from testing/sisyphus/data/download-check,firefox-all-older,win32.data rename to testing/sisyphus/data/download-check,firefox-all-older,nt.data index 713d82f99550..a7d8f93550a4 --- a/testing/sisyphus/data/download-check,firefox-all-older,win32.data +++ b/testing/sisyphus/data/download-check,firefox-all-older,nt.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/firefox/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,mac.data b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,darwin.data old mode 100755 new mode 100644 similarity index 90% rename from testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,mac.data rename to testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,darwin.data index 7afce6b674a5..1f6e85ca65e0 --- a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,mac.data +++ b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,darwin.data @@ -1,7 +1,7 @@ allurl=http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,linux.data b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,linux.data index 1edeedd8d44e..1a2ee4b093ea 100755 --- a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,linux.data +++ b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,linux.data @@ -1,7 +1,7 @@ allurl=http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,win32.data b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,nt.data old mode 100755 new mode 100644 similarity index 88% rename from testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,win32.data rename to testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,nt.data index 4c03225cc5e1..e7a3f6255fc8 --- a/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,win32.data +++ b/testing/sisyphus/data/download-check,thunderbird-1.5.0-ftp,nt.data @@ -1,7 +1,7 @@ allurl=http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,mac.data b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,darwin.data old mode 100755 new mode 100644 similarity index 86% rename from testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,mac.data rename to testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,darwin.data index aea9350fc7bb..66f81080ef2b --- a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,mac.data +++ b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,darwin.data @@ -1,7 +1,7 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.12/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,linux.data b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,linux.data index 71864d9561a8..590f72eae925 100755 --- a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,linux.data +++ b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,linux.data @@ -1,7 +1,7 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.12/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,win32.data b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,nt.data old mode 100755 new mode 100644 similarity index 84% rename from testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,win32.data rename to testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,nt.data index 1e5c44df69da..1f4bc4635e24 --- a/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,win32.data +++ b/testing/sisyphus/data/download-check,thunderbird-2.0.0-ftp,nt.data @@ -1,7 +1,7 @@ -allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.12/ +allurl=http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.14/ product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all,mac.data b/testing/sisyphus/data/download-check,thunderbird-all,darwin.data old mode 100755 new mode 100644 similarity index 89% rename from testing/sisyphus/data/download-check,thunderbird-all,mac.data rename to testing/sisyphus/data/download-check,thunderbird-all,darwin.data index 552f5fc50289..5bdf9af56d45 --- a/testing/sisyphus/data/download-check,thunderbird-all,mac.data +++ b/testing/sisyphus/data/download-check,thunderbird-all,darwin.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/thunderbird/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all,linux.data b/testing/sisyphus/data/download-check,thunderbird-all,linux.data index 550d05803317..2b8bb080d496 100755 --- a/testing/sisyphus/data/download-check,thunderbird-all,linux.data +++ b/testing/sisyphus/data/download-check,thunderbird-all,linux.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/thunderbird/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all,win32.data b/testing/sisyphus/data/download-check,thunderbird-all,nt.data old mode 100755 new mode 100644 similarity index 87% rename from testing/sisyphus/data/download-check,thunderbird-all,win32.data rename to testing/sisyphus/data/download-check,thunderbird-all,nt.data index ed6a69c860ca..246376bd0548 --- a/testing/sisyphus/data/download-check,thunderbird-all,win32.data +++ b/testing/sisyphus/data/download-check,thunderbird-all,nt.data @@ -1,7 +1,7 @@ allurl=http://www.mozilla.com/en-US/thunderbird/all.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all-older,mac.data b/testing/sisyphus/data/download-check,thunderbird-all-older,darwin.data old mode 100755 new mode 100644 similarity index 89% rename from testing/sisyphus/data/download-check,thunderbird-all-older,mac.data rename to testing/sisyphus/data/download-check,thunderbird-all-older,darwin.data index 92f5364ad5a4..689ddd66ca15 --- a/testing/sisyphus/data/download-check,thunderbird-all-older,mac.data +++ b/testing/sisyphus/data/download-check,thunderbird-all-older,darwin.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/thunderbird/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/mac/en-US/Firefox%202.0.0.13.dmg +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/mac/en-US/Firefox%202.0.0.14.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all-older,linux.data b/testing/sisyphus/data/download-check,thunderbird-all-older,linux.data index 95f0a64139b9..c191d2eaca2c 100755 --- a/testing/sisyphus/data/download-check,thunderbird-all-older,linux.data +++ b/testing/sisyphus/data/download-check,thunderbird-all-older,linux.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/thunderbird/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/linux-i686/en-US/firefox-2.0.0.13.tar.gz +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/linux-i686/en-US/firefox-2.0.0.14.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/download-check,thunderbird-all-older,win32.data b/testing/sisyphus/data/download-check,thunderbird-all-older,nt.data old mode 100755 new mode 100644 similarity index 87% rename from testing/sisyphus/data/download-check,thunderbird-all-older,win32.data rename to testing/sisyphus/data/download-check,thunderbird-all-older,nt.data index 27d6b85d1341..06357774bdd5 --- a/testing/sisyphus/data/download-check,thunderbird-all-older,win32.data +++ b/testing/sisyphus/data/download-check,thunderbird-all-older,nt.data @@ -1,7 +1,7 @@ allurl=http://khan.landfill.bugzilla.org/en-US/thunderbird/all-older.html product=firefox branch=1.8.1 -url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.13/win32/en-US/Firefox%20Setup%202.0.0.13.exe +url=http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.14/win32/en-US/Firefox%20Setup%202.0.0.14.exe profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/firefox,1.8.0,nightly-mac.data b/testing/sisyphus/data/firefox,1.8.0,nightly-darwin.data old mode 100755 new mode 100644 similarity index 100% rename from testing/sisyphus/data/firefox,1.8.0,nightly-mac.data rename to testing/sisyphus/data/firefox,1.8.0,nightly-darwin.data diff --git a/testing/sisyphus/data/firefox,1.8.0,nightly-win32.data b/testing/sisyphus/data/firefox,1.8.0,nightly-nt.data old mode 100755 new mode 100644 similarity index 100% rename from testing/sisyphus/data/firefox,1.8.0,nightly-win32.data rename to testing/sisyphus/data/firefox,1.8.0,nightly-nt.data diff --git a/testing/sisyphus/data/firefox,1.8.1,nightly-mac.data b/testing/sisyphus/data/firefox,1.8.1,nightly-darwin.data old mode 100755 new mode 100644 similarity index 86% rename from testing/sisyphus/data/firefox,1.8.1,nightly-mac.data rename to testing/sisyphus/data/firefox,1.8.1,nightly-darwin.data index f0ff7a6c63e2..d23edb6c5ce9 --- a/testing/sisyphus/data/firefox,1.8.1,nightly-mac.data +++ b/testing/sisyphus/data/firefox,1.8.1,nightly-darwin.data @@ -1,6 +1,6 @@ product=firefox branch=1.8.1 -url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.14pre.en-US.mac.dmg +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.15pre.en-US.mac.dmg profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/firefox,1.8.1,nightly-linux.data b/testing/sisyphus/data/firefox,1.8.1,nightly-linux.data index 58d8af6eeb05..60796f5410bd 100755 --- a/testing/sisyphus/data/firefox,1.8.1,nightly-linux.data +++ b/testing/sisyphus/data/firefox,1.8.1,nightly-linux.data @@ -1,6 +1,6 @@ product=firefox branch=1.8.1 -url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.14pre.en-US.linux-i686.tar.gz +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.15pre.en-US.linux-i686.tar.gz profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/firefox,1.8.1,nightly-win32.data b/testing/sisyphus/data/firefox,1.8.1,nightly-nt.data old mode 100755 new mode 100644 similarity index 85% rename from testing/sisyphus/data/firefox,1.8.1,nightly-win32.data rename to testing/sisyphus/data/firefox,1.8.1,nightly-nt.data index 98518eb26b2d..5c71943d4e08 --- a/testing/sisyphus/data/firefox,1.8.1,nightly-win32.data +++ b/testing/sisyphus/data/firefox,1.8.1,nightly-nt.data @@ -1,6 +1,6 @@ product=firefox branch=1.8.1 -url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.14pre.en-US.win32.zip +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/firefox-2.0.0.15pre.en-US.win32.zip profilename=firefox-1.8.1-profile profiledirectory=/tmp/firefox-1.8.1-profile executablepath=/tmp/firefox-1.8.1 diff --git a/testing/sisyphus/data/firefox,1.9.0,nightly-mac.data b/testing/sisyphus/data/firefox,1.9.0,nightly-darwin.data old mode 100755 new mode 100644 similarity index 100% rename from testing/sisyphus/data/firefox,1.9.0,nightly-mac.data rename to testing/sisyphus/data/firefox,1.9.0,nightly-darwin.data diff --git a/testing/sisyphus/data/firefox,1.9.0,nightly-win32.data b/testing/sisyphus/data/firefox,1.9.0,nightly-nt.data old mode 100755 new mode 100644 similarity index 100% rename from testing/sisyphus/data/firefox,1.9.0,nightly-win32.data rename to testing/sisyphus/data/firefox,1.9.0,nightly-nt.data diff --git a/testing/sisyphus/data/firefox,1.9.0-gcov,debug.data b/testing/sisyphus/data/firefox,1.9.0-gcov,debug.data new file mode 100644 index 000000000000..e7cd790e8d84 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-gcov,debug.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-gcov-profile +profiledirectory=/tmp/firefox-1.9.0-gcov-profile +executablepath=${BUILDDIR}/1.9.0-gcov/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug diff --git a/testing/sisyphus/data/firefox,1.9.0-gcov,opt.data b/testing/sisyphus/data/firefox,1.9.0-gcov,opt.data new file mode 100644 index 000000000000..67d5072617e8 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-gcov,opt.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-gcov-profile +profiledirectory=/tmp/firefox-1.9.0-gcov-profile +executablepath=${BUILDDIR}/1.9.0-gcov/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt diff --git a/testing/sisyphus/data/firefox,1.9.0-jemalloc,debug.data b/testing/sisyphus/data/firefox,1.9.0-jemalloc,debug.data new file mode 100644 index 000000000000..959a40882609 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-jemalloc,debug.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-jemalloc-profile +profiledirectory=/tmp/firefox-1.9.0-jemalloc-profile +executablepath=${BUILDDIR}/1.9.0-jemalloc/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug diff --git a/testing/sisyphus/data/firefox,1.9.0-jemalloc,opt.data b/testing/sisyphus/data/firefox,1.9.0-jemalloc,opt.data new file mode 100644 index 000000000000..3708fbb807aa --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-jemalloc,opt.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-jemalloc-profile +profiledirectory=/tmp/firefox-1.9.0-jemalloc-profile +executablepath=${BUILDDIR}/1.9.0-jemalloc/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt diff --git a/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,debug.data b/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,debug.data new file mode 100644 index 000000000000..7c6c33c45477 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,debug.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-jemalloc-test-profile +profiledirectory=/tmp/firefox-1.9.0-jemalloc-test-profile +executablepath=${BUILDDIR}/1.9.0-jemalloc-test/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug diff --git a/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,opt.data b/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,opt.data new file mode 100644 index 000000000000..03a12e3169ca --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.0-jemalloc-test,opt.data @@ -0,0 +1,8 @@ +product=firefox +branch=1.9.0 +profilename=firefox-1.9.0-jemalloc-test-profile +profiledirectory=/tmp/firefox-1.9.0-jemalloc-test-profile +executablepath=${BUILDDIR}/1.9.0-jemalloc-test/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt diff --git a/testing/sisyphus/data/firefox,1.9.1,debug.data b/testing/sisyphus/data/firefox,1.9.1,debug.data new file mode 100644 index 000000000000..b3dff4367eca --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-profile +profiledirectory=/tmp/firefox-1.9.1-profile +executablepath=${BUILDDIR}/1.9.1/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1,nightly-darwin.data b/testing/sisyphus/data/firefox,1.9.1,nightly-darwin.data new file mode 100644 index 000000000000..dfa036a95646 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,nightly-darwin.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.0pre.en-US.mac.dmg +profilename=firefox-1.9.1-profile +profiledirectory=/tmp/firefox-1.9.1-profile +executablepath=/tmp/firefox-1.9.1 +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=nightly diff --git a/testing/sisyphus/data/firefox,1.9.1,nightly-linux.data b/testing/sisyphus/data/firefox,1.9.1,nightly-linux.data new file mode 100644 index 000000000000..34628de178ec --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,nightly-linux.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.0pre.en-US.linux-i686.tar.bz2 +profilename=firefox-1.9.1-profile +profiledirectory=/tmp/firefox-1.9.1-profile +executablepath=/tmp/firefox-1.9.1 +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=nightly diff --git a/testing/sisyphus/data/firefox,1.9.1,nightly-nt.data b/testing/sisyphus/data/firefox,1.9.1,nightly-nt.data new file mode 100644 index 000000000000..23b50abebee1 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,nightly-nt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +url=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.0pre.en-US.win32.zip +profilename=firefox-1.9.1-profile +profiledirectory=/tmp/firefox-1.9.1-profile +executablepath=/tmp/firefox-1.9.1 +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=nightly diff --git a/testing/sisyphus/data/firefox,1.9.1,opt.data b/testing/sisyphus/data/firefox,1.9.1,opt.data new file mode 100644 index 000000000000..3e09a17e963e --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-profile +profiledirectory=/tmp/firefox-1.9.1-profile +executablepath=${BUILDDIR}/1.9.1/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1,too-much-gc,debug.data b/testing/sisyphus/data/firefox,1.9.1,too-much-gc,debug.data new file mode 100644 index 000000000000..2469349658f3 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1,too-much-gc,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-too-much-gc-profile +profiledirectory=/tmp/firefox-1.9.1-too-much-gc-profile +executablepath=${BUILDDIR}/1.9.1-too-much-gc/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-actionmonkey,debug.data b/testing/sisyphus/data/firefox,1.9.1-actionmonkey,debug.data new file mode 100644 index 000000000000..4d4d698a8018 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-actionmonkey,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-test-profile +profiledirectory=/tmp/firefox-1.9.1-test-profile +executablepath=${BUILDDIR}/1.9.1-test/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/actionmonkey diff --git a/testing/sisyphus/data/firefox,1.9.1-actionmonkey,opt.data b/testing/sisyphus/data/firefox,1.9.1-actionmonkey,opt.data new file mode 100644 index 000000000000..bb6a86e2486f --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-actionmonkey,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-test-profile +profiledirectory=/tmp/firefox-1.9.1-test-profile +executablepath=${BUILDDIR}/1.9.1-test/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/actionmonkey diff --git a/testing/sisyphus/data/firefox,1.9.1-jemalloc,debug.data b/testing/sisyphus/data/firefox,1.9.1-jemalloc,debug.data new file mode 100644 index 000000000000..941b69e385ee --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jemalloc,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jemalloc-profile +profiledirectory=/tmp/firefox-1.9.1-jemalloc-profile +executablepath=${BUILDDIR}/1.9.1-jemalloc/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-jemalloc,opt.data b/testing/sisyphus/data/firefox,1.9.1-jemalloc,opt.data new file mode 100644 index 000000000000..cc705f564684 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jemalloc,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jemalloc-profile +profiledirectory=/tmp/firefox-1.9.1-jemalloc-profile +executablepath=${BUILDDIR}/1.9.1-jemalloc/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,debug.data b/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,debug.data new file mode 100644 index 000000000000..55c1200f3bef --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jemalloc-test-profile +profiledirectory=/tmp/firefox-1.9.1-jemalloc-test-profile +executablepath=${BUILDDIR}/1.9.1-jemalloc-test/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,opt.data b/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,opt.data new file mode 100644 index 000000000000..7920db41d233 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jemalloc-test,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jemalloc-test-profile +profiledirectory=/tmp/firefox-1.9.1-jemalloc-test-profile +executablepath=${BUILDDIR}/1.9.1-jemalloc-test/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-jprof,debug.data b/testing/sisyphus/data/firefox,1.9.1-jprof,debug.data new file mode 100644 index 000000000000..a6823f40230f --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jprof,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jprof-profile +profiledirectory=/tmp/firefox-1.9.1-jprof-profile +executablepath=${BUILDDIR}/1.9.1-jprof/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-jprof,opt.data b/testing/sisyphus/data/firefox,1.9.1-jprof,opt.data new file mode 100644 index 000000000000..b2033b6ef42e --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-jprof,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-jprof-profile +profiledirectory=/tmp/firefox-1.9.1-jprof-profile +executablepath=${BUILDDIR}/1.9.1-jprof/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-test,debug.data b/testing/sisyphus/data/firefox,1.9.1-test,debug.data new file mode 100644 index 000000000000..3328a507c4b7 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-test,debug.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-test-profile +profiledirectory=/tmp/firefox-1.9.1-test-profile +executablepath=${BUILDDIR}/1.9.1-test/mozilla/firefox-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/firefox,1.9.1-test,opt.data b/testing/sisyphus/data/firefox,1.9.1-test,opt.data new file mode 100644 index 000000000000..6de9d0b5e828 --- /dev/null +++ b/testing/sisyphus/data/firefox,1.9.1-test,opt.data @@ -0,0 +1,9 @@ +product=firefox +branch=1.9.1 +profilename=firefox-1.9.1-test-profile +profiledirectory=/tmp/firefox-1.9.1-test-profile +executablepath=${BUILDDIR}/1.9.1-test/mozilla/firefox-opt/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/js,1.9.0-gcov,debug.data b/testing/sisyphus/data/js,1.9.0-gcov,debug.data new file mode 100644 index 000000000000..6e123c2a007a --- /dev/null +++ b/testing/sisyphus/data/js,1.9.0-gcov,debug.data @@ -0,0 +1,4 @@ +product=js +branch=1.9.0 +sourcepath=${BUILDDIR}/1.9.0-gcov/mozilla/js/src +buildtype=debug diff --git a/testing/sisyphus/data/js,1.9.0-gcov,opt.data b/testing/sisyphus/data/js,1.9.0-gcov,opt.data new file mode 100644 index 000000000000..b1e84a5127fd --- /dev/null +++ b/testing/sisyphus/data/js,1.9.0-gcov,opt.data @@ -0,0 +1,4 @@ +product=js +branch=1.9.0 +sourcepath=${BUILDDIR}/1.9.0-gcov/mozilla/js/src +buildtype=opt diff --git a/testing/sisyphus/data/js,1.9.1,debug.data b/testing/sisyphus/data/js,1.9.1,debug.data new file mode 100644 index 000000000000..323349d2c5f0 --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1,debug.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1/mozilla/js/src +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/js,1.9.1,opt.data b/testing/sisyphus/data/js,1.9.1,opt.data new file mode 100644 index 000000000000..4825991f6d8f --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1,opt.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1/mozilla/js/src +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/js,1.9.1,too-much-gc,debug.data b/testing/sisyphus/data/js,1.9.1,too-much-gc,debug.data new file mode 100644 index 000000000000..dad190afd5f4 --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1,too-much-gc,debug.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1-too-much-gc/mozilla/js/src +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/js,1.9.1-actionmonkey,debug.data b/testing/sisyphus/data/js,1.9.1-actionmonkey,debug.data new file mode 100644 index 000000000000..a7c1e9ec5ef7 --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1-actionmonkey,debug.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1/mozilla/js/src +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/actionmonkey diff --git a/testing/sisyphus/data/js,1.9.1-actionmonkey,opt.data b/testing/sisyphus/data/js,1.9.1-actionmonkey,opt.data new file mode 100644 index 000000000000..cf46176a658d --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1-actionmonkey,opt.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1/mozilla/js/src +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/actionmonkey diff --git a/testing/sisyphus/data/js,1.9.1-test,debug.data b/testing/sisyphus/data/js,1.9.1-test,debug.data new file mode 100644 index 000000000000..cbca97141bdc --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1-test,debug.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1-test/mozilla/js/src +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/js,1.9.1-test,opt.data b/testing/sisyphus/data/js,1.9.1-test,opt.data new file mode 100644 index 000000000000..5921fab2554c --- /dev/null +++ b/testing/sisyphus/data/js,1.9.1-test,opt.data @@ -0,0 +1,5 @@ +product=js +branch=1.9.1 +sourcepath=${BUILDDIR}/1.9.1-test/mozilla/js/src +buildtype=opt +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/thunderbird,1.9.1,debug.data b/testing/sisyphus/data/thunderbird,1.9.1,debug.data new file mode 100644 index 000000000000..bd02e61fad07 --- /dev/null +++ b/testing/sisyphus/data/thunderbird,1.9.1,debug.data @@ -0,0 +1,10 @@ +product=thunderbird +branch=1.9.1 +profilename=thunderbird-1.9.1-profile +profiledirectory=/tmp/thunderbird-1.9.1-profile +executablepath=${BUILDDIR}/1.9.1/mozilla/thunderbird-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +profiletemplate=${TEST_DIR}/profiles/imap +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central diff --git a/testing/sisyphus/data/thunderbird,1.9.1-test,debug.data b/testing/sisyphus/data/thunderbird,1.9.1-test,debug.data new file mode 100644 index 000000000000..19624b0c2cc5 --- /dev/null +++ b/testing/sisyphus/data/thunderbird,1.9.1-test,debug.data @@ -0,0 +1,13 @@ +product=thunderbird +branch=1.9.1 +profilename=thunderbird-1.9.1-test-profile +profiledirectory=/tmp/thunderbird-1.9.1-test-profile +executablepath=${BUILDDIR}/1.9.1-test/mozilla/thunderbird-debug/dist +userpreferences=${TEST_DIR}/prefs/test-user.js +extensiondir=${TEST_DIR}/xpi +profiletemplate=${TEST_DIR}/profiles/imap +buildtype=debug +TEST_MOZILLA_HG=http://hg.mozilla.org/mozilla-central + + + diff --git a/testing/sisyphus/tests/mozilla.org/download-page/collect-urls-userhook.js b/testing/sisyphus/tests/mozilla.org/download-page/collect-urls-userhook.js index 36fe9b662d9d..e8038302b5f1 100755 --- a/testing/sisyphus/tests/mozilla.org/download-page/collect-urls-userhook.js +++ b/testing/sisyphus/tests/mozilla.org/download-page/collect-urls-userhook.js @@ -43,7 +43,7 @@ function collectLinks() case 'MacIntel': os = 'osx'; break; - case 'Linux i686': + case 'Linux*': os = 'linux'; break; default: @@ -57,10 +57,10 @@ function collectLinks() for (var ilink = 0; ilink < links.length; ilink++) { var link = links[ilink]; - if (link.href.indexOf('download.html') != -1 && + if (link.href.indexOf('http://download.mozilla.org') != -1 && link.href.indexOf('os=' + os) != -1) { - var href = 'http://download.mozilla.org/?' + link.href.split('?')[1]; + var href = link.href; cdump('href: ' + href); } } diff --git a/testing/sisyphus/tests/mozilla.org/download-page/test.sh b/testing/sisyphus/tests/mozilla.org/download-page/test.sh index d6bf2f557927..0d479743501b 100755 --- a/testing/sisyphus/tests/mozilla.org/download-page/test.sh +++ b/testing/sisyphus/tests/mozilla.org/download-page/test.sh @@ -90,12 +90,14 @@ urlfile=`mktemp /tmp/URLS.XXXX` if [[ "$test" == "all" ]]; then $TEST_DIR/bin/timed_run.py $TEST_DOWNLOAD_PAGE_TIMEOUT "test download" \ + $EXECUTABLE_DRIVER \ "$executable" -P "$profilename" -spider -start -quit \ -uri "$allurl" -timeout=$TEST_DOWNLOAD_PAGE_TIMEOUT \ -hook "http://$TEST_HTTP/tests/mozilla.org/download-page/collect-urls-userhook.js" | \ grep 'href: ' | sed 's/^href: //' > $urlfile elif [[ "$test" == "ftp" ]]; then $TEST_DIR/bin/timed_run.py $TEST_DOWNLOAD_PAGE_TIMEOUT "test download" \ + $EXECUTABLE_DRIVER \ "$executable" -P "$profilename" -spider -start -quit \ -uri "$allurl" -timeout=$TEST_DOWNLOAD_PAGE_TIMEOUT \ -hook "http://$TEST_HTTP/tests/mozilla.org/download-page/userhook-ftp.js" | \ @@ -182,6 +184,7 @@ cat $urlfile | while read url; do downloadexecutable=`get_executable $downloadproduct $downloadbranch $downloadexecutablepath` $TEST_DIR/bin/timed_run.py $TEST_DOWNLOAD_BUILD_TIMEOUT "..." \ + $EXECUTABLE_DRIVER \ "$downloadexecutable" \ -spider -P $downloadprofilename \ -uri "http://$TEST_HTTP/bin/buildinfo.html" \ From 29161b5c489f4647671d074a8deb2a95f14f94b3 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 26 Jun 2008 10:12:12 +1200 Subject: [PATCH 68/98] Bug 439375. Improve Gaussian blur inner loop. r=longsonr,sr=mats --- content/svg/content/src/nsSVGFilters.cpp | 252 ++++++++++------------- 1 file changed, 113 insertions(+), 139 deletions(-) diff --git a/content/svg/content/src/nsSVGFilters.cpp b/content/svg/content/src/nsSVGFilters.cpp index 9118bf0a2bf0..3aba072e8e2e 100644 --- a/content/svg/content/src/nsSVGFilters.cpp +++ b/content/svg/content/src/nsSVGFilters.cpp @@ -546,16 +546,6 @@ private: nsresult GetDXY(PRUint32 *aDX, PRUint32 *aDY, const nsSVGFilterInstance& aInstance); void InflateRectForBlur(nsRect* aRect, const nsSVGFilterInstance& aInstance); - PRUint8 *SetupPredivide(PRUint32 size) const; - - void BoxBlurH(PRUint8 *aInput, PRUint8 *aOutput, - PRInt32 aStride, const nsRect& aRegion, - PRUint32 leftLobe, PRUint32 rightLobe, const PRUint8 *prediv); - - void BoxBlurV(PRUint8 *aInput, PRUint8 *aOutput, - PRInt32 aStride, const nsRect& aRegion, - PRUint32 topLobe, PRUint32 bottomLobe, const PRUint8 *prediv); - void GaussianBlur(PRUint8 *aInput, PRUint8 *aOutput, nsSVGFilterResource *aFilterResource, PRUint32 aDX, PRUint32 aDY); @@ -628,101 +618,110 @@ nsSVGFEGaussianBlurElement::SetStdDeviation(float stdDeviationX, float stdDeviat return NS_OK; } -void -nsSVGFEGaussianBlurElement::BoxBlurH(PRUint8 *aInput, PRUint8 *aOutput, - PRInt32 aStride, const nsRect &aRegion, - PRUint32 leftLobe, PRUint32 rightLobe, - const PRUint8 *prediv) +/** + * We want to speed up 1/N integer divisions --- integer division is + * often rather slow. + * We know that our input numerators V are constrained to be <= 255*N, + * so the result of dividing by N always fits in 8 bits. + * So we can try approximating the division V/N as V*K/(2^24) (integer + * division, 32-bit multiply). Dividing by 2^24 is a simple shift so it's + * fast. The main problem is choosing a value for K; this function returns + * K's value. + * + * If the result is correct for the extrema, V=0 and V=255*N, then we'll + * be in good shape since both the original function and our approximation + * are linear. V=0 always gives 0 in both cases, no problem there. + * For V=255*N, let's choose the largest K that doesn't cause overflow + * and ensure that it gives the right answer. The constraints are + * (1) 255*N*K < 2^32 + * and (2) 255*N*K >= 255*(2^24) + * + * From (1) we find the best value of K is floor((2^32 - 1)/(255*N)). + * (2) tells us when this will be valid: + * N*floor((2^32 - 1)/(255*N)) >= 2^24 + * Now, floor(X) > X - 1, so (2) holds if + * N*((2^32 - 1)/(255*N) - 1) >= 2^24 + * (2^32 - 1)/255 - 2^24 >= N + * N <= 65793 + * + * If all that math confuses you, this should convince you: + * > perl -e 'for($N=1;(255*$N*int(0xFFFFFFFF/(255*$N)))>>24==255;++$N){}print"$N\n"' + * 66052 + * + * So this is fine for all reasonable values of N. For larger values of N + * we may as well just use the same approximation and accept the fact that + * the output channel values will be a little low. + */ +static PRUint32 ComputeScaledDivisor(PRUint32 aDivisor) { - PRInt32 boxSize = leftLobe + rightLobe + 1; - PRInt32 posStart = aRegion.x - leftLobe; - - for (PRInt32 y = aRegion.y; y < aRegion.YMost(); y++) { - PRUint32 sums[4] = {0, 0, 0, 0}; - PRInt32 lineIndex = aStride * y; - for (PRInt32 i = 0; i < boxSize; i++) { - PRInt32 pos = posStart + i; - pos = PR_MAX(pos, aRegion.x); - pos = PR_MIN(pos, aRegion.XMost() - 1); - PRInt32 index = lineIndex + (pos << 2); - sums[0] += aInput[index ]; - sums[1] += aInput[index + 1]; - sums[2] += aInput[index + 2]; - sums[3] += aInput[index + 3]; - } - for (PRInt32 x = aRegion.x; x < aRegion.XMost(); x++) { - PRInt32 index = lineIndex + (x << 2); - aOutput[index ] = prediv[sums[0]]; - aOutput[index + 1] = prediv[sums[1]]; - aOutput[index + 2] = prediv[sums[2]]; - aOutput[index + 3] = prediv[sums[3]]; - - PRInt32 tmp = x - leftLobe; - PRInt32 last = PR_MAX(tmp, aRegion.x); - PRInt32 next = PR_MIN(tmp + boxSize, aRegion.XMost() - 1); - PRInt32 index2 = lineIndex + (next << 2); - PRInt32 index3 = lineIndex + (last << 2); - sums[0] += aInput[index2 ] - aInput[index3 ]; - sums[1] += aInput[index2 + 1] - aInput[index3 + 1]; - sums[2] += aInput[index2 + 2] - aInput[index3 + 2]; - sums[3] += aInput[index2 + 3] - aInput[index3 + 3]; - } - } + return PR_UINT32_MAX/(255*aDivisor); } - -void -nsSVGFEGaussianBlurElement::BoxBlurV(PRUint8 *aInput, PRUint8 *aOutput, - PRInt32 aStride, const nsRect &aRegion, - PRUint32 topLobe, PRUint32 bottomLobe, - const PRUint8 *prediv) + +static void +BoxBlur(const PRUint8 *aInput, PRUint8 *aOutput, + PRInt32 aStrideMinor, PRInt32 aStartMinor, PRInt32 aEndMinor, + PRUint32 aLeftLobe, PRUint32 aRightLobe) { - PRInt32 boxSize = topLobe + bottomLobe + 1; - PRInt32 posStart = aRegion.y - topLobe; + PRUint32 boxSize = aLeftLobe + aRightLobe + 1; + PRUint32 scaledDivisor = ComputeScaledDivisor(boxSize); + PRUint32 sums[4] = {0, 0, 0, 0}; - for (PRInt32 x = aRegion.x; x < aRegion.XMost(); x++) { - PRUint32 sums[4] = {0, 0, 0, 0}; - PRInt32 fourX = x << 2; - for (PRInt32 i = 0; i < boxSize; i++) { - PRInt32 pos = posStart + i; - pos = PR_MAX(pos, aRegion.y); - pos = PR_MIN(pos, aRegion.YMost() - 1); - PRInt32 index = aStride * pos + fourX; - sums[0] += aInput[index ]; - sums[1] += aInput[index + 1]; - sums[2] += aInput[index + 2]; - sums[3] += aInput[index + 3]; + for (PRUint32 i=0; i < boxSize; i++) { + PRInt32 pos = aStartMinor - aLeftLobe + i; + pos = PR_MAX(pos, aStartMinor); + pos = PR_MIN(pos, aEndMinor - 1); +#define SUM(j) sums[j] += aInput[aStrideMinor*pos + j]; + SUM(0); SUM(1); SUM(2); SUM(3); +#undef SUM + } + + aOutput += aStrideMinor*aStartMinor; + if (aStartMinor + boxSize <= aEndMinor) { + const PRUint8 *lastInput = aInput + aStartMinor*aStrideMinor; + const PRUint8 *nextInput = aInput + (aStartMinor + aRightLobe + 1)*aStrideMinor; +#define OUTPUT(j) aOutput[j] = (sums[j]*scaledDivisor) >> 24; +#define SUM(j) sums[j] += nextInput[j] - lastInput[j]; + for (PRInt32 minor = aStartMinor; minor < aStartMinor + aLeftLobe; minor++) { + OUTPUT(0); OUTPUT(1); OUTPUT(2); OUTPUT(3); + SUM(0); SUM(1); SUM(2); SUM(3); + nextInput += aStrideMinor; + aOutput += aStrideMinor; + } + for (PRInt32 minor = aStartMinor + aLeftLobe; minor < aEndMinor - aRightLobe - 1; minor++) { + OUTPUT(0); OUTPUT(1); OUTPUT(2); OUTPUT(3); + SUM(0); SUM(1); SUM(2); SUM(3); + lastInput += aStrideMinor; + nextInput += aStrideMinor; + aOutput += aStrideMinor; } - for (PRInt32 y = aRegion.y; y < aRegion.YMost(); y++) { - PRInt32 index = aStride * y + fourX; - aOutput[index ] = prediv[sums[0]]; - aOutput[index + 1] = prediv[sums[1]]; - aOutput[index + 2] = prediv[sums[2]]; - aOutput[index + 3] = prediv[sums[3]]; + // nextInput is now aInput + aEndMinor*aStrideMinor. Set it back to + // aInput + (aEndMinor - 1)*aStrideMinor so we read the last pixel in every + // iteration of the next loop. + nextInput -= aStrideMinor; + for (PRInt32 minor = aEndMinor - aRightLobe - 1; minor < aEndMinor; minor++) { + OUTPUT(0); OUTPUT(1); OUTPUT(2); OUTPUT(3); + SUM(0); SUM(1); SUM(2); SUM(3); + lastInput += aStrideMinor; + aOutput += aStrideMinor; +#undef SUM + } + } else { + for (PRInt32 minor = aStartMinor; minor < aEndMinor; minor++) { + PRInt32 tmp = minor - aLeftLobe; + PRInt32 last = PR_MAX(tmp, aStartMinor); + PRInt32 next = PR_MIN(tmp + boxSize, aEndMinor - 1); - PRInt32 tmp = y - topLobe; - PRInt32 last = PR_MAX(tmp, aRegion.y); - PRInt32 next = PR_MIN(tmp + boxSize, aRegion.YMost() - 1); - PRInt32 index2 = aStride * next + fourX; - PRInt32 index3 = aStride * last + fourX; - sums[0] += aInput[index2 ] - aInput[index3 ]; - sums[1] += aInput[index2 + 1] - aInput[index3 + 1]; - sums[2] += aInput[index2 + 2] - aInput[index3 + 2]; - sums[3] += aInput[index2 + 3] - aInput[index3 + 3]; + OUTPUT(0); OUTPUT(1); OUTPUT(2); OUTPUT(3); +#define SUM(j) sums[j] += aInput[aStrideMinor*next + j] - \ + aInput[aStrideMinor*last + j]; + SUM(0); SUM(1); SUM(2); SUM(3); + aOutput += aStrideMinor; +#undef SUM +#undef OUTPUT } } } -PRUint8 * -nsSVGFEGaussianBlurElement::SetupPredivide(PRUint32 size) const -{ - PRUint8 *tmp = new PRUint8[size * 256]; - if (tmp) { - for (PRUint32 i = 0; i < 256; i++) - memset(tmp + i * size, i, size); - } - return tmp; -} - nsresult nsSVGFEGaussianBlurElement::GetDXY(PRUint32 *aDX, PRUint32 *aDY, const nsSVGFilterInstance& aInstance) @@ -753,12 +752,11 @@ nsSVGFEGaussianBlurElement::GaussianBlur(PRUint8 *aInput, PRUint8 *aOutput, nsSVGFilterResource *aFilterResource, PRUint32 aDX, PRUint32 aDY) { - NS_ASSERTION(aDX > 0 && aDY > 0, "Invalid stdDeviation!"); - nsAutoArrayPtr tmp(new PRUint8[aFilterResource->GetDataSize()]); if (!tmp) return; memset(tmp, 0, aFilterResource->GetDataSize()); + nsRect rect = aFilterResource->GetSurfaceRect(); #ifdef DEBUG_tor fprintf(stderr, "FILTER GAUSS rect: %d,%d %dx%d\n", @@ -767,53 +765,29 @@ nsSVGFEGaussianBlurElement::GaussianBlur(PRUint8 *aInput, PRUint8 *aOutput, PRUint32 stride = aFilterResource->GetDataStride(); - if (aDX & 1) { - // odd - nsAutoArrayPtr prediv(SetupPredivide(2 * (aDX / 2) + 1)); - if (!prediv) - return; - - BoxBlurH(aInput, tmp, stride, rect, aDX/2, aDX/2, prediv); - BoxBlurH(tmp, aOutput, stride, rect, aDX/2, aDX/2, prediv); - BoxBlurH(aOutput, tmp, stride, rect, aDX/2, aDX/2, prediv); + if (aDX == 0) { + aFilterResource->CopyImageSubregion(tmp, aInput); } else { - // even - if (aDX == 0) { - aFilterResource->CopyImageSubregion(tmp, aInput); - } else { - nsAutoArrayPtr prediv(SetupPredivide(2 * (aDX / 2) + 1)); - nsAutoArrayPtr prediv2(SetupPredivide(2 * (aDX / 2))); - if (!prediv || !prediv2) - return; - - BoxBlurH(aInput, tmp, stride, rect, aDX/2, aDX/2 - 1, prediv2); - BoxBlurH(tmp, aOutput, stride, rect, aDX/2 - 1, aDX/2, prediv2); - BoxBlurH(aOutput, tmp, stride, rect, aDX/2, aDX/2, prediv); + PRInt32 longLobe = aDX/2; + PRInt32 shortLobe = (aDX & 1) ? longLobe : longLobe - 1; + for (PRInt32 major = rect.y; major < rect.YMost(); ++major) { + PRInt32 ms = major*stride; + BoxBlur(aInput + ms, tmp + ms, 4, rect.x, rect.XMost(), longLobe, shortLobe); + BoxBlur(tmp + ms, aOutput + ms, 4, rect.x, rect.XMost(), shortLobe, longLobe); + BoxBlur(aOutput + ms, tmp + ms, 4, rect.x, rect.XMost(), longLobe, longLobe); } } - if (aDY & 1) { - // odd - nsAutoArrayPtr prediv(SetupPredivide(2 * (aDY / 2) + 1)); - if (!prediv) - return; - - BoxBlurV(tmp, aOutput, stride, rect, aDY/2, aDY/2, prediv); - BoxBlurV(aOutput, tmp, stride, rect, aDY/2, aDY/2, prediv); - BoxBlurV(tmp, aOutput, stride, rect, aDY/2, aDY/2, prediv); + if (aDY == 0) { + aFilterResource->CopyImageSubregion(aOutput, tmp); } else { - // even - if (aDY == 0) { - aFilterResource->CopyImageSubregion(aOutput, tmp); - } else { - nsAutoArrayPtr prediv(SetupPredivide(2 * (aDY / 2) + 1)); - nsAutoArrayPtr prediv2(SetupPredivide(2 * (aDY / 2))); - if (!prediv || !prediv2) - return; - - BoxBlurV(tmp, aOutput, stride, rect, aDY/2, aDY/2 - 1, prediv2); - BoxBlurV(aOutput, tmp, stride, rect, aDY/2 - 1, aDY/2, prediv2); - BoxBlurV(tmp, aOutput, stride, rect, aDY/2, aDY/2, prediv); + PRInt32 longLobe = aDY/2; + PRInt32 shortLobe = (aDY & 1) ? longLobe : longLobe - 1; + for (PRInt32 major = rect.x; major < rect.XMost(); ++major) { + PRInt32 ms = major*4; + BoxBlur(tmp + ms, aOutput + ms, stride, rect.y, rect.YMost(), longLobe, shortLobe); + BoxBlur(aOutput + ms, tmp + ms, stride, rect.y, rect.YMost(), shortLobe, longLobe); + BoxBlur(tmp + ms, aOutput + ms, stride, rect.y, rect.YMost(), longLobe, longLobe); } } } From 606f13ee78fbcc8d81d0512699e4bcfb9fa2c941 Mon Sep 17 00:00:00 2001 From: Bob Clary Date: Wed, 25 Jun 2008 18:14:01 -0400 Subject: [PATCH 69/98] Sisyphus/JavaScript - update to support 1.9.1, bug 441875 --- js/tests/Makefile | 20 +- js/tests/Patterns.pm | 223 ++ js/tests/changes.sh | 120 + js/tests/create-patterns.pl | 264 -- js/tests/get-universe.sh | 48 + js/tests/known-failures.pl | 235 +- js/tests/pattern-expander.pl | 159 + js/tests/pattern-extracter.pl | 217 ++ js/tests/post-process-logs.pl | 1048 +++---- js/tests/process-logs.sh | 98 +- js/tests/public-failures.txt | 1149 ++++--- js/tests/remove-fixed-failures.sh | 82 + js/tests/runtests.sh | 67 +- js/tests/shell.js | 4 +- js/tests/sisyphus-javascript.patch | 4577 ++++++++++++++++++++++++++++ js/tests/test-browser.sh | 336 -- js/tests/test-shell.sh | 261 -- js/tests/test.sh | 348 ++- js/tests/universe.data | 100 + js/tests/userhookeach.js | 7 - 20 files changed, 7142 insertions(+), 2221 deletions(-) create mode 100644 js/tests/Patterns.pm create mode 100644 js/tests/changes.sh delete mode 100755 js/tests/create-patterns.pl create mode 100644 js/tests/get-universe.sh create mode 100644 js/tests/pattern-expander.pl create mode 100644 js/tests/pattern-extracter.pl create mode 100644 js/tests/remove-fixed-failures.sh create mode 100644 js/tests/sisyphus-javascript.patch delete mode 100755 js/tests/test-browser.sh delete mode 100755 js/tests/test-shell.sh create mode 100644 js/tests/universe.data diff --git a/js/tests/Makefile b/js/tests/Makefile index 7ebefb71ec5f..f119e5ee490b 100644 --- a/js/tests/Makefile +++ b/js/tests/Makefile @@ -22,16 +22,14 @@ menu-list.txt: confidential-failures.txt: touch confidential-failures.txt -failures.txt: public-failures.txt confidential-failures.txt - cp public-failures.txt public-failures.txt.save - cp confidential-failures.txt confidential-failures.txt.save - sort < public-failures.txt | uniq | ./create-patterns.pl > public-failures.$$ - mv public-failures.$$ public-failures.txt - sort < confidential-failures.txt | uniq | ./create-patterns.pl > confidential-failures.$$ - mv confidential-failures.$$ confidential-failures.txt - cat public-failures.txt confidential-failures.txt | sort | uniq > failures.txt +public-failures.txt.expanded: public-failures.txt universe.data + pattern-expander.pl public-failures.txt > public-failures.txt.expanded + +confidential-failures.txt.expanded: confidential-failures.txt universe.data + pattern-expander.pl confidential-failures.txt > confidential-failures.txt.expanded + +failures.txt: public-failures.txt.expanded confidential-failures.txt.expanded + sort -u public-failures.txt.expanded confidential-failures.txt.expanded > failures.txt clean: - rm -f menubody.html menu.html menu-list.txt failures.txt excluded-*.tests included-*.tests urllist*.html urllist*.tests - - + rm -f menubody.html menu.html menu-list.txt failures.txt *failures.txt.expanded excluded-*.tests included-*.tests urllist*.html urllist*.tests diff --git a/js/tests/Patterns.pm b/js/tests/Patterns.pm new file mode 100644 index 000000000000..89ee2d3eb942 --- /dev/null +++ b/js/tests/Patterns.pm @@ -0,0 +1,223 @@ +# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +package Patterns; + +sub getuniversekey +{ + my ($machinerecord, $excludeduniversefield) = @_; + my $i; + my $key = ''; + +# dbg("getuniversekey: \$machinerecord=" . recordtostring($machinerecord) . ", \$excludeduniversefield=$excludeduniversefield"); + + for ($i = 0; $i < @universefields; $i++) + { +# dbg("getuniversekey: \$universefields[$i]=$universefields[$i]"); + + if ($universefields[$i] ne $excludeduniversefield) + { + $key .= $machinerecord->{$universefields[$i]} + } + } + +# dbg("getuniversekey=$key"); + + return $key; +} + +sub getuniverse +{ + my ($universekey, $excludeduniversefield) = @_; + my $i; + my $value; + my $testrun; + my @universe = (); + my %universehash = (); + + dbg("getuniverse: \$universekey=$universekey, \$excludeduniversefield=$excludeduniversefield"); + + for ($i = 0; $i < @testruns; $i++) + { + $testrun = $testruns[$i]; +# dbg("getuniverse: \$testruns[$i]=" . recordtostring($testrun)); + $testrununiversekey = getuniversekey($testrun, $excludeduniversefield); +# dbg("getuniverse: \$testrununiversekey=$testrununiversekey"); + if ($testrununiversekey =~ /$universekey/) + { +# dbg("getuniverse: matched \$testrununiversekey=$testrununiversekey to \$universekey=$universekey"); + $value = $testrun->{$excludeduniversefield}; + +# dbg("getuniverse: \$testrun->{$excludeduniversefield}=$value"); + + if (! $universehash{$value} ) + { +# dbg("getuniverse: pushing $value"); + push @universe, ($value); + $universehash{$value} = 1; + } + } + } + @universe = sort @universe; + dbg("getuniverse=" . join(',', @universe)); + return @universe; +} + +sub recordtostring +{ + my ($record) = @_; + my $j; + my $line = ''; + my $field; + + for ($j = 0; $j < @recordfields - 1; $j++) + { + $field = $recordfields[$j]; +# dbg("recordtostring: \$field=$field, \$record->{$field}=$record->{$field}"); + $line .= "$field=$record->{$field}, "; + } + $field = $recordfields[$#recordfields]; +# dbg("recordtodtring: \$field=$field, \$record->{$field}= $record->{$field}"); + $line .= "$field=$record->{$field}"; + + return $line; +} + +sub dumprecords +{ + my $record; + my $line; + my $prevline = ''; + my $i; + + dbg("dumping records"); + +# @records = sort sortrecords @records; + + for ($i = 0; $i < @records; $i++) + { + $record = $records[$i]; + $line = recordtostring($record); + if ($line eq $prevline) + { +# dbg("DUPLICATE $line") if ($DEBUG); + } + else + { + print "$line\n"; + $prevline = $line; + } + } +} + +sub sortrecords +{ + return recordtostring($a) cmp recordtostring($b); +} + +sub dbg +{ + if ($DEBUG) + { + print STDERR "DEBUG: " . join(" ", @_) . "\n"; + } +} + +sub copyreference +{ + my ($fromreference) = @_; + my $toreference = {}; + my $key; + + foreach $key (keys %{$fromreference}) + { + $toreference->{$key} = $fromreference->{$key}; + } + return $toreference; +} + +#my @recordfields; +#my @universefields; +#my %machines; +#my @testruns; + + +BEGIN +{ + dbg("begin"); + + my $test_dir = $ENV{TEST_DIR} || "/work/mozilla/mozilla.com/test.mozilla.com/www"; + + $DEBUG = $ENV{DEBUG}; + + @recordfields = ('TEST_ID', 'TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE', 'TEST_RESULT', 'TEST_EXITSTATUS', 'TEST_DESCRIPTION'); + @sortkeyfields = ('TEST_ID', 'TEST_RESULT', 'TEST_EXITSTATUS', 'TEST_DESCRIPTION', 'TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE', ); + @universefields = ('TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE'); + + @records = (); + + @testruns = (); + + open TESTRUNS, "<$test_dir/tests/mozilla.org/js/universe.data" or die "$?"; + + while () { + + chomp; + + my $record = {}; + + my ($test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_branch, $test_buildtype, $test_type) = $_ =~ + /^TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*)/; + + $record->{TEST_BRANCH} = $test_branch; + $record->{TEST_BUILDTYPE} = $test_buildtype; + $record->{TEST_TYPE} = $test_type; + $record->{TEST_OS} = $test_os; + $record->{TEST_KERNEL} = $test_kernel; + $record->{TEST_PROCESSORTYPE} = $test_processortype; + $record->{TEST_MEMORY} = $test_memory; + $record->{TEST_CPUSPEED} = $test_cpuspeed; + $record->{TEST_TIMEZONE} = $test_timezone; + + push @testruns, ($record); + } + + close TESTRUNS; + +} + +1; diff --git a/js/tests/changes.sh b/js/tests/changes.sh new file mode 100644 index 000000000000..019ae8031350 --- /dev/null +++ b/js/tests/changes.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# usage: changes.sh [prefix] +# +# combines the {prefix}*possible-fixes.log files into {prefix}possible-fixes.log +# and {prefix}*possible-regressions.log files into +# possible-regressions.log. +# +# This script is useful in cases where log files from different machines, branches +# and builds are being investigated. + +if cat /dev/null | sed -r 'q' > /dev/null 2>&1; then + SED="sed -r" +elif cat /dev/null | sed -E 'q' > /dev/null 2>&1; then + SED="sed -E" +else + echo "Neither sed -r or sed -E is supported" + exit 2 +fi + +workfile=`mktemp work.XXXXXXXX` +if [ $? -ne 0 ]; then + echo "Unable to create working temp file" + exit 2 +fi + +for f in ${1}*results-possible-fixes.log*; do + case $f in + *.log) + CAT=cat + ;; + *.log.bz2) + CAT=bzcat + ;; + *.log.gz) + CAT=zcat + ;; + *.log.zip) + CAT="unzip -c" + ;; + *) + echo "unknown log type: $f" + exit 2 + ;; + esac + + $CAT $f | $SED "s|$|:$f|" >> $workfile + +done + +sort -u $workfile > ${1}possible-fixes.log + +rm $workfile + + +for f in ${1}*results-possible-regressions.log*; do + case $f in + *.log) + CAT=cat + ;; + *.log.bz2) + CAT=bzcat + ;; + *.log.gz) + CAT=zcat + ;; + *.log.zip) + CAT="unzip -c" + ;; + *) + echo "unknown log type: $f" + exit 2 + ;; + esac + $CAT $f >> $workfile +done + +sort -u $workfile > ${1}possible-regressions.log + +rm $workfile + + + diff --git a/js/tests/create-patterns.pl b/js/tests/create-patterns.pl deleted file mode 100755 index 7c296be7b30d..000000000000 --- a/js/tests/create-patterns.pl +++ /dev/null @@ -1,264 +0,0 @@ -#!/usr/bin/perl -# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is Mozilla JavaScript Testing Utilities -# -# The Initial Developer of the Original Code is -# Mozilla Corporation. -# Portions created by the Initial Developer are Copyright (C) 2007 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): Bob Clary -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -# make stderr, stdout unbuffered - -select STDERR; $| = 1; -select STDOUT; $| = 1; - -my $regchars = '\[\^\-\]\|\{\}\?\*\+\.\<\>\$\(\)'; - -sub escape_patterns; -sub unescape_patterns; -sub debug; - -my $debug = $ENV{DEBUG}; -my @outputlines = (); -my @inputlines = (); - -while () { - chomp; - - # remove irrelevant data the caller is required to remove any - # other data which should not be considered during the - # consolidation such as TEST_MACHINE, etc. - - s/TEST_DATE=[^,]*,/TEST_DATE=.*,/; - - push @inputlines, ($_); - -} - -my @fieldnames = ('TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_PROCESSORTYPE', 'TEST_KERNEL', 'TEST_TIMEZONE'); - -my $pass = 0; -my $changed = 1; - -while ($changed) { - - # repeated loop until no changes are made. - - ++$pass; - $changed = 0; - - debug "pass $pass, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; - - foreach $field (@fieldnames) { - - debug "pass $pass, processing $field, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; - - # process each field across all lines so that later consolidations - # will match consolidated field values - - while ($inputline = shift(@inputlines)) { - - debug "inputline $inputline\n"; - - # get the current field value from the current input line - - ($inputvalue) = $inputline =~ /$field=\(?([^,\)]*)\)?,/; - - if ($inputvalue eq '.*') { - - # if the current input value is the any wildcard, - # then there is no need to perform a consolidation - # on the field. - - push @outputlines, ($inputline); - - next; - } - - # turn "off" any regular expression characters in the input line - - $pattern = escape_pattern($inputline); - - # Make the current field in the current pattern an any - # wildcard so that it will match any value. We are looking - # for all other lines that only differ from the current line by - # the current field value - - $pattern =~ s/$field=[^,]*,/$field=.*,/; - - # find the matches to the current pattern - - debug "pattern: $pattern\n"; - - @matched = grep /$pattern/, (@inputlines, @outputlines); - @unmatched = grep !/$pattern/, @inputlines; - - debug "" . ($#matched + 1) . " matched, " . ($#unmatched + 1) . " unmatched, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; - - if (@matched) { - - # the input line matched others - - $outputvalue = $inputvalue; - - foreach $matchline (@matched) { - - ($matchvalue) = $matchline =~ /$field=\(?([^,\)]*)\)?,/; - - if ( $inputvalue !~ /$matchvalue/ && $matchvalue !~ /$inputvalue/) { - - # the current match value and input value - # do not overlap so add the match - # field value as regular expression - # alternation | to the current field value - - debug "adding regexp alternation to $field: inputvalue: $inputvalue, matchvalue: $matchvalue"; - - $outputvalue .= "|$matchvalue"; - } - } # foreach matchline - - # replace the current inputs field value with the - # consolidated value - - if ($outputvalue =~ /\|/) { - $outputvalue = "(" . join('|', sort(split(/\|/, $outputvalue))) . ")"; - } - $inputline =~ s/$field=[^,]*,/$field=$outputvalue,/; - debug "$inputline\n"; - - $changes = 1; - } - push @outputlines, ($inputline); - - @inputlines = @unmatched; - - } # while inputline - - @inputlines = @outputlines; - @outputlines = (); - - } # foreach field -} - -@inputlines = sort @inputlines; - -my $output = join"\n", @inputlines; - -debug "output: " . ($#inputlines + 1) . " lines\n"; - -print "$output\n"; - -### # look for over specified failures -### -### $field = 'TEST_DESCRIPTION'; -### -### while ($inputline = shift(@inputlines)) { -### -### debug "inputline $inputline\n"; -### -### # turn "off" any regular expression characters in the input line -### -### $pattern = escape_pattern($inputline); -### -### # Make the TEST_DESCRIPTION field in the current pattern an any -### # wildcard so that it will match any value. We are looking -### # for all other lines that only differ from the current line by -### # the TEST_DESCRIPTION. These will be the potentially overspecified -### # failures. -### -### $pattern =~ s/$field=[^,]*,/$field=.*,/; -### -### # find the matches to the current pattern -### -### debug "pattern: $pattern\n"; -### -### @matched = grep /$pattern/, @inputlines; -### @unmatched = grep !/$pattern/, @inputlines; -### -### debug "" . ($#matched + 1) . " matched, " . ($#unmatched + 1) . " unmatched, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; -### -### if (@matched) { -### -### # the inputline overspecifies an error -### -### push @matched, ($inputline); -### -### foreach $matchline (@matched) { -### -### print STDERR "OVERSPECIFIED? : $matchline\n"; -### -### } # foreach matchline -### -### } -### -### @inputlines = @unmatched; -### -### } # while inputline -### - - - -sub escape_pattern { - - # unlike the known-failures.pl, this escape escapes the entire - # line to make it not contain any active regular expression patterns - # so that any matched will be literal and not regular - my $line = shift; - - chomp; - - # replace unescaped regular expression characters in the - # description so they are not interpreted as regexp chars - # when matching descriptions. leave the escaped regexp chars - # `regexp alone so they can be unescaped later and used in - # pattern matching. - - # see perldoc perlre - - $line =~ s/\\/\\\\/g; - - # escape regexpchars - $line =~ s/([$regchars])/\\$1/g; - - return "$line"; - -} - -sub debug { - my $msg; - if ($debug) { - $msg = shift; - print "DEBUG: $msg\n"; - } -} diff --git a/js/tests/get-universe.sh b/js/tests/get-universe.sh new file mode 100644 index 000000000000..7036d70c780c --- /dev/null +++ b/js/tests/get-universe.sh @@ -0,0 +1,48 @@ +#!/bin/bash -e +# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# usage: get-universe.sh logfile(s) > universe.data +# +# get-universe.sh reads the processed javascript logs and writes to +# stdout the unique set of fields to be used as the "universe" of test +# run data. These values are used by pattern-expander.pl and +# pattern-extracter.pl to encode the known failure files into regular +# expressions. + +sed 's|.*\(TEST_BRANCH.*\), \(TEST_OS.*\), TEST_RESULT.*|\2, \1|' $@ | sort -u diff --git a/js/tests/known-failures.pl b/js/tests/known-failures.pl index d8392070a9d4..95ec1abedcf9 100755 --- a/js/tests/known-failures.pl +++ b/js/tests/known-failures.pl @@ -49,7 +49,7 @@ sub unescape_pattern; # option arguments -my $option_desc = "b=s branch>b T=s buildtype>T t=s testtype>t l=s rawlogfile>l f=s failurelogfile>f o=s os>o r=s patterns>r z=s timezone>z O=s outputprefix>O A=s arch>A K=s kernel>K D debug>D"; +my $option_desc = "b=s branch>b T=s buildtype>T t=s testtype>t o=s os>o K=s kernel>K A=s arch>A M=s memory>M S=s speed>S z=s timezone>z l=s rawlogfile>l f=s failurelogfile>f r=s patterns>r O=s outputprefix>O D debug>D"; my $testid; my $branch; @@ -63,6 +63,8 @@ my $timezone; my $outputprefix; my $arch; my $kernel; +my $memory; +my $cpuspeed; my $debug = $ENV{DEBUG}; # pattern variables @@ -81,6 +83,10 @@ my $knownfailurearchpattern; my $failurearchpattern; my $knownfailurekernelpattern; my $failurekernelpattern; +my $knownfailurememorypattern; +my $failurememorypattern; +my $knownfailurecpuspeedpattern; +my $failurecpuspeedpattern; my @patterns; my $pattern; @@ -144,7 +150,7 @@ foreach $includedfile ( @includedfiles ) { } debug "loading patterns $patterns"; -debug "pattern filter: /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_RESULT=[^,]*, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$knownfailuretimezonepattern,/\n"; +debug "pattern filter: ^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_MEMORY=$knownfailurememorypattern, TEST_CPUSPEED=$knownfailurecpuspeedpattern, TEST_TIMEZONE=$knownfailuretimezonepattern,"; open PATTERNS, "<$patterns" or die "Unable to open known failure patterns file $patterns: $!\n"; while () { @@ -158,7 +164,7 @@ while () { { debug "test $testid was not included during this run"; } - elsif ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_RESULT=[^,]*, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$knownfailuretimezonepattern,/) { + elsif ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_MEMORY=$knownfailurememorypattern, TEST_CPUSPEED=$knownfailurecpuspeedpattern, TEST_TIMEZONE=$knownfailuretimezonepattern,/) { debug "adding pattern : $_"; push @patterns, (escape_pattern($_)); } @@ -171,7 +177,7 @@ close PATTERNS; # create a working copy of the current failures which match the users selection -debug "failure filter: ^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,"; +debug "failure filter: ^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/"; if (defined($rawlogfile)) { @@ -189,7 +195,7 @@ if (defined($rawlogfile)) { print ALLLOG "$_\n"; - if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,/) { + if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/) { debug "failure: $_"; push @failures, ($_); print FAILURELOG "$_\n"; @@ -201,17 +207,31 @@ if (defined($rawlogfile)) { close FAILURELOG; die "FATAL ERROR in post-process-logs.pl" if $inputrc != 0; - } -else { - +else +{ debug "loading failures $failurelogfile"; - open FAILURES, "<$failurelogfile" or die "Unable to open current failure log $failurelogfile: $!\n"; + my $failurelogfilemode; + + if ($failurelogfile =~ /\.bz2$/) + { + $failurelogfilemode = "bzcat $failurelogfile|"; + } + elsif ($failurelogfile =~ /\.gz$/) + { + $failurelogfilemode = "zcat $failurelogfile|"; + } + else + { + $failurelogfilemode = "<$failurelogfile"; + } + + open FAILURES, "$failurelogfilemode" or die "Unable to open current failure log $failurelogfile: $!\n"; while () { chomp; - if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,/) { + if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/) { debug "failure: $_"; push @failures, ($_); } @@ -343,25 +363,35 @@ sub usage { usage: $msg -known-failures.pl [-b|--branch] branch [-T|--buildtype] buildtype - [-t|--testtype] testtype [-o os|--os] +known-failures.pl [-b|--branch] branch + [-T|--buildtype] buildtype + [-t|--testtype] testtype + [-o|--os] os + [-K|--kernel] kernel + [-A|--arch] arch + [-M|--memory] memory + [-S|--speed] speed + [-z|--timezone] timezone + [-r|--patterns] patterns ([-f|--failurelogfile] failurelogfile|[-l|--logfile] rawlogfile]) - [-r|--patterns] patterns [-z|--timezone] timezone [-O|--outputprefix] outputprefix + [-D] variable description =============== ============================================================ -b branch branch 1.8.0, 1.8.1, 1.9.0, all -T buildtype build type opt, debug, all -t testtype test type browser, shell, all + -o os operating system nt, darwin, linux, all + -K kernel kernel, all or a specific pattern + -A arch architecture, all or a specific pattern + -M memory memory in Gigabytes, all or a specific pattern + -S speed speed, all or specific pattern + -z timezone -0400, -0700, etc. default to user\'s zone -l rawlogfile raw logfile -f failurelogfile failure logfile - -o os operating system win32, mac, linux, all -r patterns known failure patterns - -z timezone -0400, -0700, etc. default to user\'s zone -O outputprefix output files will be generated with this prefix - -A arch architecture, all or a specific pattern - -K kernel kernel, all or a specific pattern -D turn on debugging output EOF @@ -385,30 +415,48 @@ sub parse_options { elsif ($option eq "t") { $testtype = $value; } + elsif ($option eq "o") { + $os = $value; + } + elsif ($option eq "K") { + $kernel = $value; + } + elsif ($option eq "A") { + $arch = $value; + } + elsif ($option eq "M") { + $memory = $value; + } + elsif ($option eq "S") { + $cpuspeed = $value; + if ($cpuspeed < 4) + { + $cpuspeed = 'slow'; + } + elsif ($cpuspeed < 9) + { + $cpuspeed = 'medium'; + } + else + { + $cpuspeed = 'fast'; + } + } + elsif ($option eq "z") { + $timezone = $value; + } + elsif ($option eq "r") { + $patterns = $value; + } elsif ($option eq "l") { $rawlogfile = $value; } elsif ($option eq "f") { $failurelogfile = $value; } - elsif ($option eq "o") { - $os = $value; - } - elsif ($option eq "r") { - $patterns = $value; - } - elsif ($option eq "z") { - $timezone = $value; - } elsif ($option eq "O") { $outputprefix = $value; } - elsif ($option eq "A") { - $arch = $value; - } - elsif ($option eq "K") { - $kernel = $value; - } elsif ($option eq "D") { $debug = 1; } @@ -416,7 +464,7 @@ sub parse_options { } if ($debug) { - print "branch=$branch, rawlogfile=$rawlogfile failurelogfile=$failurelogfile, os=$os, buildtype=$buildtype, testtype=$testtype, patterns=$patterns, timezone=$timezone, outputprefix=$outputprefix\n"; + print "branch=$branch, buildtype=$buildtype, testtype=$testtype, os=$os, kernel=$kernel, arch=$arch, memory=$memory, cpuspeed=$cpuspeed, timezone=$timezone, patterns=$patterns, rawlogfile=$rawlogfile failurelogfile=$failurelogfile, outputprefix=$outputprefix\n"; } Getopt::Mixed::cleanup(); @@ -424,15 +472,6 @@ sub parse_options { usage "missing branch"; } - if (!defined($rawlogfile) && !defined($failurelogfile)) { - usage "missing logfile"; - } - - - if (!defined($os)) { - usage "missing os"; - } - if (!defined($buildtype)) { usage "missing buildtype"; } @@ -441,60 +480,61 @@ sub parse_options { usage "missing testtype"; } - if (!defined($patterns)) { - usage "missing patterns"; + if (!defined($os)) { + usage "missing os"; } + if (!defined($memory)) { + $memory = 'all'; + } + + if (!defined($cpuspeed)) { + $cpuspeed = 'all'; + } if (!defined($timezone)) { usage "missing timezone"; } + if (!defined($patterns)) { + usage "missing patterns"; + } + + if (!defined($rawlogfile) && !defined($failurelogfile)) { + usage "missing logfile"; + } if (!defined($outputprefix)) { usage "missing outputprefix"; } if ($branch eq "1.8.0") { - $knownfailurebranchpattern = "([^,]*1\\.8\\.0[^,]*|\\.\\*)"; + $knownfailurebranchpattern = "(1\\.8\\.0|\\.\\*)"; $failurebranchpattern = "1\\.8\\.0"; } - if ($branch eq "1.8.1") { - $knownfailurebranchpattern = "([^,]*1\\.8\\.1[^,]*|\\.\\*)"; + elsif ($branch eq "1.8.1") { + $knownfailurebranchpattern = "(1\\.8\\.1|\\.\\*)"; $failurebranchpattern = "1\\.8\\.1"; } elsif ($branch eq "1.9.0") { - $knownfailurebranchpattern = "([^,]*1\\.9\\.0[^,]*|\\.\\*)"; + $knownfailurebranchpattern = "(1\\.9\\.0|\\.\\*)"; $failurebranchpattern = "1\\.9\\.0"; } + elsif ($branch eq "1.9.1") { + $knownfailurebranchpattern = "(1\\.9\\.1|\\.\\*)"; + $failurebranchpattern = "1\\.9\\.1"; + } elsif ($branch eq "all") { $knownfailurebranchpattern = "[^,]*"; $failurebranchpattern = "[^,]*"; } - if ($os eq "win32") { - $knownfailureospattern = "([^,]*win32[^,]*|\\.\\*)"; - $failureospattern = "win32"; - } - elsif ($os eq "mac") { - $knownfailureospattern = "([^,]*mac[^,]*|\\.\\*)"; - $failureospattern = "mac"; - } - elsif ($os eq "linux") { - $knownfailureospattern = "([^,]*linux[^,]*|\\.\\*)"; - $failureospattern = "linux"; - } - elsif ($os eq "all") { - $knownfailureospattern = "[^,]*"; - $failureospattern = "[^,]*"; - } - if ($buildtype eq "opt") { - $knownfailurebuildtypepattern = "([^,]*opt[^,]*|\\.\\*)"; + $knownfailurebuildtypepattern = "(opt|\\.\\*)"; $failurebuildtypepattern = "opt"; } elsif ($buildtype eq "debug") { - $knownfailurebuildtypepattern = "([^,]*debug[^,]*|\\.\\*)"; + $knownfailurebuildtypepattern = "(debug|\\.\\*)"; $failurebuildtypepattern = "debug"; } elsif ($buildtype eq "all") { @@ -503,11 +543,11 @@ sub parse_options { } if ($testtype eq "shell") { - $knownfailuretesttypepattern = "([^,]*shell[^,]*|\\.\\*)"; + $knownfailuretesttypepattern = "(shell|\\.\\*)"; $failuretesttypepattern = "shell"; } elsif ($testtype eq "browser") { - $knownfailuretesttypepattern = "([^,]*browser[^,]*|\\.\\*)"; + $knownfailuretesttypepattern = "(browser|\\.\\*)"; $failuretesttypepattern = "browser"; } elsif ($testtype eq "all") { @@ -515,17 +555,34 @@ sub parse_options { $failuretesttypepattern = "[^,]*"; } - if ($timezone eq "all") { - $knownfailuretimezonepattern = "[^,]*"; - $failuretimezonepattern = "[^,]*"; + if ($os eq "nt") { + $knownfailureospattern = "(nt|\\.\\*)"; + $failureospattern = "nt"; + } + elsif ($os eq "darwin") { + $knownfailureospattern = "(darwin|\\.\\*)"; + $failureospattern = "darwin"; + } + elsif ($os eq "linux") { + $knownfailureospattern = "(linux|\\.\\*)"; + $failureospattern = "linux"; + } + elsif ($os eq "all") { + $knownfailureospattern = "[^,]*"; + $failureospattern = "[^,]*"; + } + + if ($kernel ne "all") { + $knownfailurekernelpattern = "(" . $kernel . "|\\.\\*)"; + $failurekernelpattern = "$kernel"; } else { - $knownfailuretimezonepattern = "([^,]*" . $timezone . "[^,]*|\\.\\*)"; - $failuretimezonepattern = "$timezone"; + $knownfailurekernelpattern = "[^,]*"; + $failurekernelpattern = "[^,]*"; } if ($arch ne "all") { - $knownfailurearchpattern = "([^,]*" . $arch . "[^,]*|\\.\\*)"; + $knownfailurearchpattern = "(" . $arch . "|\\.\\*)"; $failurearchpattern = "$arch"; } else { @@ -533,13 +590,31 @@ sub parse_options { $failurearchpattern = "[^,]*"; } - if ($kernel ne "all") { - $knownfailurekernelpattern = "([^,]*" . $kernel . "[^,]*|\\.\\*)"; - $failurekernelpattern = "$kernel"; + if ($memory ne "all") { + $knownfailurememorypattern = "(" . $memory . "|\\.\\*)"; + $failurememorypattern = "$memory"; } else { - $knownfailurekernelpattern = "[^,]*"; - $failurekernelpattern = "[^,]*"; + $knownfailurememorypattern = "[^,]*"; + $failurememorypattern = "[^,]*"; + } + + if ($cpuspeed ne "all") { + $knownfailurecpuspeedpattern = "(" . $cpuspeed . "|\\.\\*)"; + $failurecpuspeedpattern = "$cpuspeed"; + } + else { + $knownfailurecpuspeedpattern = "[^,]*"; + $failurecpuspeedpattern = "[^,]*"; + } + + if ($timezone eq "all") { + $knownfailuretimezonepattern = "[^,]*"; + $failuretimezonepattern = "[^,]*"; + } + else { + $knownfailuretimezonepattern = "(" . $timezone . "|\\.\\*)"; + $failuretimezonepattern = "$timezone"; } diff --git a/js/tests/pattern-expander.pl b/js/tests/pattern-expander.pl new file mode 100644 index 000000000000..0d0673593412 --- /dev/null +++ b/js/tests/pattern-expander.pl @@ -0,0 +1,159 @@ +#!/usr/bin/perl -w +# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# usage: pattern-expander.pl knownfailures > knownfailures.expanded +# +# pattern-expander.pl reads the specified knownfailures file and +# writes to stdout an expanded set of failures where the wildcards +# ".*" are replaced with the set of possible values specified in the +# universe.data file. + +use lib "/work/mozilla/mozilla.com/test.mozilla.com/www/tests/mozilla.org/js"; + +use Patterns; + +package Patterns; + +processfile(); + +sub processfile +{ + my ($i, $j); + + while () { + + chomp; + + $record = {}; + + my ($test_id, $test_branch, $test_buildtype, $test_type, $test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_result, $test_exitstatus, $test_description) = $_ =~ + /TEST_ID=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*), TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_RESULT=([^,]*), TEST_EXITSTATUS=([^,]*), TEST_DESCRIPTION=(.*)/; + + $record->{TEST_ID} = $test_id; + $record->{TEST_BRANCH} = $test_branch; + $record->{TEST_BUILDTYPE} = $test_buildtype; + $record->{TEST_TYPE} = $test_type; + $record->{TEST_OS} = $test_os; + $record->{TEST_KERNEL} = $test_kernel; + $record->{TEST_PROCESSORTYPE} = $test_processortype; + $record->{TEST_MEMORY} = $test_memory; + $record->{TEST_CPUSPEED} = $test_cpuspeed; + $record->{TEST_TIMEZONE} = $test_timezone; + $record->{TEST_RESULT} = $test_result; + $record->{TEST_EXITSTATUS} = $test_exitstatus; + $record->{TEST_DESCRIPTION} = $test_description; + + dbg("processfile: \$_=$_"); + + my @list1 = (); + my @list2 = (); + + my $iuniversefield; + my $universefield; + + $item1 = copyreference($record); + dbg("processfile: check copyreference"); + dbg("processfile: \$record=" . recordtostring($record)); + dbg("processfile: \$item1=" . recordtostring($item1)); + + push @list1, ($item1); + + for ($iuniversefield = 0; $iuniversefield < @universefields; $iuniversefield++) + { + $universefield = $universefields[$iuniversefield]; + + dbg("processfile: \$universefields[$iuniversefield]=$universefield, \$record->{$universefield}=$record->{$universefield}"); + + for ($j = 0; $j < @list1; $j++) + { + $item1 = $list1[$j]; + dbg("processfile: item1 \$list1[$j]=" . recordtostring($item1)); + # create a reference to a copy of the hash referenced by $item1 + if ($item1->{$universefield} ne '.*') + { + dbg("processfile: literal value"); + $item2 = copyreference($item1); + dbg("processfile: check copyreference"); + dbg("processfile: \$item1=" . recordtostring($item1)); + dbg("processfile: \$item2=" . recordtostring($item2)); + dbg("processfile: pushing existing record to list 2: " . recordtostring($item2)); + push @list2, ($item2); + } + else + { + dbg("processfile: wildcard value"); + $keyfielduniversekey = getuniversekey($item1, $universefield); + @keyfielduniverse = getuniverse($keyfielduniversekey, $universefield); + + dbg("processfile: \$keyfielduniversekey=$keyfielduniversekey, \@keyfielduniverse=" . join(',', @keyfielduniverse)); + + for ($i = 0; $i < @keyfielduniverse; $i++) + { + $item2 = copyreference($item1); + dbg("processfile: check copyreference"); + dbg("processfile: \$item1=" . recordtostring($item1)); + dbg("processfile: \$item2=" . recordtostring($item2)); + $item2->{$universefield} = $keyfielduniverse[$i]; + dbg("processfile: pushing new record to list 2 " . recordtostring($item2)); + push @list2, ($item2); + } + } + for ($i = 0; $i < @list1; $i++) + { + dbg("processfile: \$list1[$i]=" . recordtostring($list1[$i])); + } + for ($i = 0; $i < @list2; $i++) + { + dbg("processfile: \$list2[$i]=" . recordtostring($list2[$i])); + } + } + + @list1 = @list2; + @list2 = (); + } + for ($j = 0; $j < @list1; $j++) + { + $item1 = $list1[$j]; + push @records, ($item1); + } + } + @records = sort sortrecords @records; + + dumprecords(); +} + diff --git a/js/tests/pattern-extracter.pl b/js/tests/pattern-extracter.pl new file mode 100644 index 000000000000..9c142a54feee --- /dev/null +++ b/js/tests/pattern-extracter.pl @@ -0,0 +1,217 @@ +#!/usr/bin/perl -w +# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# usage: pattern-extracter.pl knownfailures.expanded > knownfailures +# +# pattern-extracter.pl reads the specified expanded knownfailures file +# (see pattern-expander.pl) and writes to stdout a set of knownfailures +# where repetitions of values found in the universe.data file are +# replaced with wildcards ".*". + +use lib "/work/mozilla/mozilla.com/test.mozilla.com/www/tests/mozilla.org/js"; + +use Patterns; + +package Patterns; + + +my $universefield; + +processfile(); + +sub processfile +{ + my $recordcurr = {}; + my $recordprev; + + my @output; + my $keycurr = ''; + my $keyprev = ''; + my @values = (); + my $universefielduniversekey; # universekey for universefield + my @universefielduniverse; + my $i; + my $j; + my $v; + + while () { + + chomp; + + $recordcurr = {}; + + my ($test_id, $test_branch, $test_buildtype, $test_type, $test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_result, $test_exitstatus, $test_description) = $_ =~ + /TEST_ID=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*), TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_RESULT=([^,]*), TEST_EXITSTATUS=([^,]*), TEST_DESCRIPTION=(.*)/; + + $recordcurr->{TEST_ID} = $test_id; + $recordcurr->{TEST_BRANCH} = $test_branch; + $recordcurr->{TEST_BUILDTYPE} = $test_buildtype; + $recordcurr->{TEST_TYPE} = $test_type; + $recordcurr->{TEST_OS} = $test_os; + $recordcurr->{TEST_KERNEL} = $test_kernel; + $recordcurr->{TEST_PROCESSORTYPE} = $test_processortype; + $recordcurr->{TEST_MEMORY} = $test_memory; + $recordcurr->{TEST_CPUSPEED} = $test_cpuspeed; + $recordcurr->{TEST_TIMEZONE} = $test_timezone; + $recordcurr->{TEST_RESULT} = $test_result; + $recordcurr->{TEST_EXITSTATUS} = $test_exitstatus; + $recordcurr->{TEST_DESCRIPTION} = $test_description; + + push @records, ($recordcurr); + } + + for ($j = $#universefields; $j >= 0; $j--) + { + $universefield = $universefields[$j]; + + @records = sort {getkey($a, $universefield) cmp getkey($b, $universefield);} @records; + + $recordprev = $records[0]; + $keyprev = getkey($recordprev, $universefield); + @values = (); + + my $recordtemp; + my $keytemp; + + dbg("processfile: begin processing records for \$universefields[$j]=$universefield"); + + for ($i = 0; $i < @records; $i++) + { + $recordcurr = $records[$i]; + $keycurr = getkey($recordcurr, $universefield); + + dbg("processfile: processing record[$i]"); + dbg("processfile: recordprev: " . recordtostring($recordprev)); + dbg("processfile: recordcurr: " . recordtostring($recordcurr)); + dbg("processfile: \$keyprev=$keyprev"); + dbg("processfile: \$keycurr=$keycurr"); + + if ($keycurr ne $keyprev) + { + # key changed, must output previous record + dbg("processfile: new key"); + $universefielduniversekey = getuniversekey($recordprev, $universefield); + @universefielduniverse = getuniverse($universefielduniversekey, $universefield); + dbg("processfile: \@values: ". join(',', @values)); + dbg("processfile: \$universefielduniversekey=$universefielduniversekey, \@universefielduniverse=" . join(',', @universefielduniverse)); + @values = ('.*') if (arraysequal(\@values, \@universefielduniverse)); + dbg("processfile: \@values=" . join(',', @values)); + + for ($v = 0; $v < @values; $v++) + { + dbg("processfile: stuffing $values[$v]"); + $recordtemp = copyreference($recordprev); + $recordtemp->{$universefield} = $values[$v]; + dbg("processfile: stuffed $recordtemp->{$universefield}"); + dbg("processfile: recordprev: " . recordtostring($recordprev)); + dbg("processfile: output: " . recordtostring($recordtemp)); + push @output, ($recordtemp); + } + @values = (); + } + dbg("processfile: collecting \$recordcurr->{$universefield}=$recordcurr->{$universefield}"); + push @values, ($recordcurr->{$universefield}); + $keyprev = $keycurr; + $recordprev = $recordcurr; + } + dbg("processfile: finish processing records for \$universefields[$j]=$universefield"); + if (@values) + { + dbg("processfile: last record for \$universefields[$j]=$universefield has pending values"); + $universefielduniversekey = getuniversekey($recordprev, $universefield); + @universefielduniverse = getuniverse($universefielduniversekey, $universefield); + dbg("processfile: \@values: ". join(',', @values)); + dbg("processfile: \$universefielduniversekey=$universefielduniversekey, \@universefielduniverse=" . join(',', @universefielduniverse)); + @values = ('.*') if (arraysequal(\@values, \@universefielduniverse)); + dbg("processfile: \@values=" . join(',', @values)); + + for ($v = 0; $v < @values; $v++) + { + dbg("processfile: stuffing $values[$v]"); + $recordtemp = copyreference($recordprev); + $recordtemp->{$universefield} = $values[$v]; + dbg("processfile: stuffed $recordprev->{$universefield}"); + dbg("processfile: recordprev: " . recordtostring($recordprev)); + dbg("processfile: output: " . recordtostring($recordtemp)); + push @output, ($recordtemp); + } + @values = (); + } + @records = @output; + @output = (); + } + + @records = sort sortrecords @records; + dumprecords(); +} + + +sub getkey +{ + my ($record, $universefield) = @_; + + my $i; + + my $key = ''; + + for ($i = 0; $i < @sortkeyfields; $i++) + { + if ($sortkeyfields[$i] ne $universefield) + { + $key .= $record->{$sortkeyfields[$i]} + } + } + return $key; +} + +sub arraysequal +{ + my ($larrayref, $rarrayref) = @_; + my $i; + + dbg("arraysequal: checking if " . (join ',', @{$larrayref}) . " is equal to " . (join ',', @{$rarrayref})); + return 0 if (@{$larrayref} != @{$rarrayref}); + + for ($i = 0; $i < @{$larrayref}; $i++) + { + return 0 if ($rarrayref->[$i] ne $larrayref->[$i]); + } + dbg("arraysequal: equal"); + return 1; +} + diff --git a/js/tests/post-process-logs.pl b/js/tests/post-process-logs.pl index 948c18f133d0..7a7ee87cb099 100755 --- a/js/tests/post-process-logs.pl +++ b/js/tests/post-process-logs.pl @@ -62,6 +62,7 @@ open TEMP, ">$temp" or local ($test_id, $tmp_test_id, + $tmp_test_exit_status, %test_id, %test_reported, $test_result, @@ -72,13 +73,15 @@ local ($test_id, $test_processortype, $test_kernel, $test_suite, - $exit_status, - $page_status, + $test_exit_status, + @expected_exit_code_list, + $expected_exit_code, + $exit_code, $state); -local ($actual_exit, $actual_signal); - -local %test_reported = (); +local $test_memory = 0; +local $test_cpuspeed = 0; +local %test_reported = (); while ($file = shift @ARGV) { @@ -100,7 +103,22 @@ while ($file = shift @ARGV) local ($test_timezone) = $test_date; $test_timezone =~ s/.*([-+]\d{4,4})/$1/; - open FILE, "$file" or die "FATAL ERROR: unable to open $file for reading: $!\n"; + my $filemode; + + if ($file =~ /\.bz2$/) + { + $filemode = "bzcat $file|"; + } + elsif ($file =~ /\.gz$/) + { + $filemode = "zcat $file|"; + } + else + { + $filemode = "<$file"; + } + + open FILE, "$filemode" or die "FATAL ERROR: unable to open $file for reading: $!\n"; dbg "process header with environment variables used in test"; @@ -116,13 +134,21 @@ while ($file = shift @ARGV) $_ =~ s/[\x01-\x08]//g; $_ =~ s/\s+$//; - dbg "INPUT: $_"; + if ($debug) + { + dbg "\nINPUT: $_"; + } - last if ( $_ =~ /^environment: EOF/); + last if ( $_ =~ /^arguments:/); if (($envvar, $envval) = $_ =~ /^environment: (TEST_[A-Z0-9_]*)=(.*)/ ) { dbg "envvar=$envvar, envval=$envval"; + if ($envvar =~ /TEST_KERNEL/) + { + $envval =~ s/([0-9]+)\.([0-9]+)\.([0-9]+).*/$1.$2.$3/; + dbg "found TEST_KERNEL"; + } $envvar =~ tr/A-Z/a-z/; $$envvar = $envval; dbg $envvar . "=" . $$envvar; @@ -133,697 +159,375 @@ while ($file = shift @ARGV) } } + if ($test_cpuspeed < 4) + { + $test_cpuspeed = 'slow'; + } + elsif ($test_cpuspeed < 9) + { + $test_cpuspeed = 'medium'; + } + else + { + $test_cpuspeed = 'fast'; + } + if ($test_product eq "js") { - while () + $test_type = "shell"; + } + elsif ($test_product eq "firefox" || $test_product eq "thunderbird") + { + $test_buildtype = "nightly" unless $test_buildtype; + $test_type = "browser"; + } + +# Expected sequence if all output written to the log. +# +# Input +# ----------------------------- +# JavaScriptTest: Begin Run +# JavaScriptTest: Begin Test t; +# jstest: t +# t:.*EXIT STATUS: +# JavaScriptTest: End Test t +# JavaScriptTest: End Run +# EOF +# + %test_id = (); + @messages = (); + $test_exit_status = ''; + $state = 'idle'; + + while () + { + chomp; + + if ($debug) { - chomp; + dbg "\nINPUT: '$_'"; + } - dbg "INPUT: $_"; + $_ =~ s/[\r]$//; + $_ =~ s/[\r]/CR/g; + $_ =~ s/[\x01-\x08]//g; + $_ =~ s/\s+$//; - if (/Wrote results to/) + if ( /^JavaScriptTest: Begin Run/) + { + dbg "Begin Run"; + + if ($state eq 'idle') { - $state = 'success'; - last; + $state = 'beginrun'; + } + else + { + warn "WARNING: state: $state, expected: idle, log: $file"; + $state = 'beginrun'; + } + } + elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: Begin Test ([^ ]*)/) + { + dbg "Begin Test: $tmp_test_id"; + + if ($state eq 'beginrun' || $state eq 'endtest') + { + $state = 'runningtest'; + } + else + { + warn "WARNING: state: $state, expected: beginrun, endtest, log: $file"; + $state = 'runningtest'; } - $_ =~ s/[\r]$//; - $_ =~ s/[\r]/CR/g; - $_ =~ s/[\x01-\x08]//g; - $_ =~ s/\s+$//; + $test_id{$state} = $tmp_test_id; + @messages = (); + @expected_exit_code_list = (); + $expected_exit_code = (); - next if ( $_ !~ /^jstest: /); + $test_id = ''; + $test_result = ''; + $test_exit_status = 'NORMAL'; # default to normal, so subtests will have a NORMAL status + $test_description = ''; + + push @expected_exit_code_list, (3) if ($tmp_test_id =~ /-n.js$/); + + } + elsif ( ($expected_exit_code) = $_ =~ /WE EXPECT EXIT CODE ([0-9]*)/ ) + { + dbg "Expected Exit Code: $expected_exit_code"; + + push @expected_exit_code_list, ($expected_exit_code); + } + elsif ( ($tmp_test_id) = $_ =~ /^jstest: (.*?) *bug:/) + { + dbg "jstest: $tmp_test_id"; + +# if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +# { +# warn "WARNING: state: $state, expected runningtest, reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +# } + + if ($state eq 'runningtest') + { + $state = 'reportingtest'; + } + elsif ($state eq 'reportingtest') + { + $state = 'reportingtest'; + } + else + { + warn "WARNING: test_id: $test_id{$state}, state: $state, expected: runningtest, reportingtest, log: $file"; + $state = 'reportingtest'; + } - ($test_id) = $_ =~ /^jstest: (.*?) *bug:/; ($test_result) = $_ =~ /result: (.*?) *type:/; - ($test_type) = $_ =~ /type: (.*?) *description:/; + ($tmp_test_type) = $_ =~ /type: (.*?) *description:/; + + die "FATAL ERROR: test_id: $test_id{$state}, jstest test type mismatch: start test_type: $test_type, current test_type: $tmp_test_type, test state: $state, log: $file" + if ($test_type ne $tmp_test_type); + ($test_description) = $_ =~ /description: (.*)/; if (!$test_description) { $test_description = ""; } + $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + + outputrecord $tmp_test_id, $test_description, $test_result; + + $test_id{$state} = $tmp_test_id; + } + elsif ( $state ne 'idle' && (($tmp_test_id) = $_ =~ /^([^:]*):.* EXIT STATUS: NORMAL/)) + { + $test_exit_status = 'NORMAL'; + dbg "Exit Status Normal: $tmp_test_id, $test_exit_status"; + + if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { + warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } + + if ($state eq 'reportingtest' || $state eq 'runningtest') + { + $state = 'exitedtest'; + } else { - ($actual_exit, $actual_signal) = $test_description =~ /expected: Expected exit [03] actual: Actual exit ([0-9]*), signal ([0-9]*)/; - if (defined($actual_exit) or defined($actual_signal)) - { - if ($actual_exit > 3 || $actual_signal > 0) - { - $test_description =~ s/ *expected: Expected exit [03] actual: Actual exit ([0-9]*), signal ([0-9]*) /EXIT STATUS: CRASHED $actual_exit signal $actual_signal, /; - } - } - elsif ($test_result eq "FAILED TIMED OUT") - { - $test_description = "EXIT STATUS: TIMED OUT, $test_description"; - $test_result = "FAILED"; - } + warn "WARNING: state: $state, expected: reportingtest, runningtest, log: $file"; + $state = 'exitedtest'; } - if ($test_description =~ /error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || - /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ ) + if (! $test_reported{$tmp_test_id}) { - dbg "Adding message: /$test_id:0: out of memory"; - $test_description .= "; /$test_id:0: out of memory"; + dbg "No test results reported: $tmp_test_id"; + + $test_result = 'FAILED'; + $test_description = 'No test results reported; messages: ' . (join '; ', @messages) . ';'; + + outputrecord $tmp_test_id, $test_description, $test_result; } - dbg "test_id: $test_id"; - dbg "test_result: $test_result"; - dbg "test_type: $test_type"; - dbg "test_description: $test_description"; - - outputrecord $test_id, $test_description, $test_result; - - dbg "-"; + $test_id{$state} = $tmp_test_id; } - } - elsif ($test_product eq "firefox") - { - %test_id = (); - @messages = (); - - $page_status = ''; - $exit_status = ''; - $test_buildtype = "nightly" unless $test_buildtype; - $test_type = "browser"; - - -# non-restart mode. start spider; for each test { load test;} exit spider; -# restart mode. for each test; { start spider; load test; exit spider; } -# -# Expected sequence if all output written to the log. -# -# Input Initial State Next State userhook event outputrecord -# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- -# Spider: Start.*start-spider.html idle startrun -# Spider: Begin loading.*start-spider.html startrun startrun -# Start Spider: try.*EXIT STATUS: NORMAL startrun initialized -# Start Spider: try.*EXIT STATUS: (TIMED OUT|CRASHED) startrun startrun -# Spider: Start.*urllist initialized initialized (non restart mode) -# Spider: Begin loading.*urllist initialized initialized (non restart mode) -# Spider: Finish loading.*urllist initialized initialized (non restart mode) -# Spider: Current Url:.*urllist initialized initialized (non restart mode) -# Spider: Start.*test=t; initialized starttest (has test id) -# JavaScriptTest: Begin Run starttest starttest onStart -# Spider: Begin loading.*test=t; starttest loadingtest (has test id) -# JavaScriptTest: Begin Test t; loadingtest runningtest onBeforePage (has test id) -# jstest: t runningtest reportingtest (has test id) yes. -# Spider: Finish loading.*t=t; reportingtest loadedtest (has test id) -# Spider: Finish loading.*t=t; runningtest pendingtest (has test id) -# Spider: Current Url:.*test=t; loadedtest loadedtest (has test id) -# http://.*test=t;.*PAGE STATUS: NORMAL loadedtest loadedtest onAfterPage (has test id) -# http://.*test=t;.*PAGE STATUS: TIMED OUT loadedtest endrun onPageTimeout (has test id) yes. -# JavaScriptTest: t Elapsed time loadedtest completedtest checkTestCompleted (has test id) -# JavaScriptTest: End Test t completedtest completedtest checkTestCompleted (has test id) -# JavaScriptTest: End Test t endrun endrun onPageTimeout (has test id) -# Spider: Start.*test=t; completedtest starttest (non restart mode) (has test id) -# JavaScriptTest: End Run completedtest endrun onStop -# JavaScriptTest: End Run loadedtest endrun onStop -# Spider: Start.*test=t; endrun starttest (restart mode) (has test id) -# http://.*test=t;.*EXIT STATUS: NORMAL endrun endrun (has test id) maybe. -# http://.*test=t;.*EXIT STATUS: TIMED OUT endrun endrun (has test id) yes. -# http://.*test=t;.*EXIT STATUS: CRASHED endrun endrun (has test id) yes. -# /work/mozilla/mozilla.com/test.mozilla.com/www$ endrun success -# EOF success success -# EOF endrun failure -# -# States has test id -# ------------------------- -# idle -# startrun -# initialized -# starttest has test id -# loadingtest has test id -# runningtest has test id -# pendingtest has test id -# reportingtest has test id -# loadedtest has test id -# endrun has test id -# completedtest has test id -# success -# failure - - dbg "Assuming starting in restart mode"; - - $mode = 'restart'; - $state = 'idle'; - - while () + elsif ( $state ne 'idle' && (($tmp_test_id) = $_ =~ /^([^:]*):.* EXIT STATUS: TIMED OUT/)) { - chomp; + $test_exit_status = 'TIMED OUT'; + dbg "Exit Status Timed Out: $tmp_test_id, $test_exit_status"; - # remove carriage returns, bels and other annoyances. - $_ =~ s/[\r]$//; - $_ =~ s/[\r]/CR/g; - $_ =~ s/[\x01-\x08]//g; - $_ =~ s/\s+$//; - - if ($debug) + if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) { - dbg "\nINPUT: $_"; + warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; } - # massage the input to make more uniform across test types and platforms - s/\.js, line ([0-9]*): out of memory/.js:$1: out of memory/g; - - - if (/^Spider: Start.*start-spider.html/) + if ($state eq 'reportingtest' || $state eq 'runningtest') { - if ($state eq 'idle') + $state = 'exitedtest'; + } + else + { + dbg "state: $state, expected: reportingtest, runningtest"; + $state = 'exitedtest'; + } + + $test_result = 'FAILED'; + $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + + outputrecord $tmp_test_id, $test_description, $test_result; + + $test_id{$state} = $tmp_test_id; + } + elsif ( $state ne 'idle' && (($tmp_test_id, $tmp_test_exit_status) = $_ =~ /^([^:]*):.* EXIT STATUS: (CRASHED signal [0-9]+ [A-Z]+) \([0-9.]+ seconds\)/)) + { + $test_exit_status = $tmp_test_exit_status; + dbg "Exit Status Crashed: $tmp_test_id, $test_exit_status"; + + if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { + warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } + + if ($state eq 'reportingtest' || $state eq 'runningtest') + { + $state = 'exitedtest'; + } + else + { + dbg "state: $state, expected: reportingtest, runningtest"; + $state = 'exitedtest'; + } + + $test_result = 'FAILED'; + $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + + outputrecord $tmp_test_id, $test_description, $test_result; + + $test_id{$state} = $tmp_test_id; + } + elsif ( $state ne 'idle' && (($tmp_test_id, $tmp_test_exit_status) = $_ =~ /^([^:]*):.* EXIT STATUS: (ABNORMAL [0-9]+) \([0-9.]+ seconds\)/)) + { + $test_exit_status = $tmp_test_exit_status; + dbg "Exit Status Abnormal: $tmp_test_id, $test_exit_status"; + + if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { + warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } + + if ($state eq 'reportingtest' || $state eq 'runningtest') + { + $state = 'exitedtest'; + } + else + { + dbg "state: $state, expected: reportingtest, runningtest"; + $state = 'exitedtest'; + } + + ($exit_code) = $test_exit_status =~ /ABNORMAL ([0-9]+)/; + + if (grep /$exit_code/, @expected_exit_code_list) + { + $test_result = 'PASSED'; + } + else + { + $test_result = 'FAILED'; + } + + $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + + dbg "Exit Code: $exit_code, Test Result: $test_result, Expected Exit Codes: " . (join '; ', @expected_exit_code_list); + + outputrecord $tmp_test_id, $test_description, $test_result; + + $test_id{$state} = $tmp_test_id; + } + elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: End Test ([^ ]*)/) + { + dbg "End Test: $tmp_test_id"; + + if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { + warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } + + if ($state eq 'exitedtest' || $state eq 'runningtest' || $state eq 'reportingtest') + { + $state = 'endtest'; + } + else + { + warn "WARNING: state: $state, expected: runningtest, reportingtest, exitedtest, log: $file"; + $state = 'endtest'; + } + + $test_id{$state} = $tmp_test_id; + } + elsif ( /^JavaScriptTest: End Run/) + { + dbg "End Run"; + + if ($state eq 'endtest') + { + $state = 'endrun'; + } + else + { + warn "WARNING: state: $state, expected: endtest, log: $file"; + $state = 'endrun'; + } + } + elsif ($_ && + !/^\s+$/ && + !/^(STATUS:| *PASSED!| *FAILED!)/ && + !/^JavaScriptTest:/ && + !/^[*][*][*]/ && + !/^[-+]{2,2}(WEBSHELL|DOMWINDOW)/ && + !/^Spider:/ && + !/real.*user.*sys.*$/ && + !/user.*system.*elapsed/) + { + if ('runningtest, reportingtest' =~ /$state/) + { + + if (/error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || + /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ || + /terminate called after throwing an instance of 'std::bad_alloc'/) { - $state = 'startrun'; + dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; + push @messages, ('/' . $test_id{$state} . ':0: out of memory'); + } + elsif (/\.js, line [0-9]+: out of memory/ ) + { + s/\.js, line ([0-9]+): out of memory/\.js:$1:/; + dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; + push @messages, ('/' . $test_id{$state} . ':0: out of memory'); } else { - warn "WARNING: state: $state, expected: idle, log: $file"; - $state = 'startrun'; - } - } - elsif (/^Spider: Begin loading.*start-spider.html/) - { - if ($state eq 'startrun') - { - $state = 'startrun'; - } - else - { - warn "WARNING: state: $state, expected: startrun, log: $file"; - $state = 'startrun'; - } - } - elsif (/^Start Spider: try.*EXIT STATUS: NORMAL/) - { - if ($state eq 'startrun') - { - $state = 'initialized'; - } - else - { - warn "WARNING: state: $state, expected: startrun, log: $file"; - $state = 'initialized'; - } - } - elsif (/^Start Spider: try.*EXIT STATUS: (TIMED OUT|CRASHED)/) - { - if ($state eq 'startrun') - { - $state = 'startrun'; - } - else - { - warn "WARNING: state: $state, expected: startrun, log: $file"; - $state = 'startrun'; - } - } - elsif ( /^Spider: Start: -url .*test.mozilla.com.tests.mozilla.org.js.urllist-/) - { - dbg "Setting mode to nonrestart"; - - $mode = 'nonrestart'; - - if ($state eq 'initialized') - { - $state = 'initialized'; - } - elsif ($state eq 'starttest') - { - $state = 'initialized'; - } - else - { - warn "WARNING: state: $state, expected: initialized, starttest, log: $file"; - $state = 'initialized'; - } - } - elsif ( ($tmp_test_id) = $_ =~ /^Spider: Start.*http.*test=([^;]*);/) - { - if ($state eq 'initialized') - { - $state = 'starttest'; - } - elsif ($state eq 'completedtest') - { - $state = 'starttest'; - } - elsif ($state eq 'endrun') - { - $state = 'starttest'; - } - else - { - warn "WARNING: state: $state, expected: initialized, completedtest, endrun, log: $file"; - $state = 'starttest'; - } - - $test_id{$state} = $tmp_test_id; - $test_id{'loadingtest'} = $test_id{'runningtest'} = $test_id{'reportingtest'} = $test_id{'loadedtest'} = $test_id{'endrun'} = $test_id {'completedtest'} = $test_id{'loadedtest'} = ''; - @messages = (); - } - elsif ( /^JavaScriptTest: Begin Run/) - { - if ($state eq 'starttest') - { - $state = 'starttest'; - } - elsif ($state eq 'initialized' && $mode eq 'nonrestart') - { - $state = 'starttest'; - } - else - { - warn "WARNING: state: $state, expected: starttest or initialized in non restart mode, mode $mode, log: $file"; - $state = 'starttest'; - } - } - elsif ( ($tmp_test_id) = $_ =~ /^Spider: Begin loading http.*test=([^;]*);/) - { - if ($mode eq 'restart' && $test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected starttest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'starttest') - { - $state = 'loadingtest'; - } - elsif ($state eq 'initialized' && $mode eq 'nonrestart') - { - $state = 'loadingtest'; - } - else - { - warn "WARNING: state: $state, expected: starttest or initialized in non restart mode, log: $file"; - $state = 'loadingtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: Begin Test ([^ ]*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected loadingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'loadingtest') - { - $state = 'runningtest'; - } - else - { - warn "WARNING: state: $state, expected: loadingtest, log: $file"; - $state = 'runningtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^jstest: (.*?) *bug:/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected runningtest, reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'runningtest') - { - $state = 'reportingtest'; - } - elsif ($state eq 'reportingtest') - { - $state = 'reportingtest'; - } - elsif ($state eq 'pendingtest') - { - $state = 'reportingtest'; - } - else - { - warn "WARNING: test_id: $test_id{$state}, state: $state, expected: runningtest, reportingtest, pendingtest, log: $file"; - $state = 'reportingtest'; - } - - ($test_result) = $_ =~ /result: (.*?) *type:/; - ($tmp_test_type) = $_ =~ /type: (.*?) *description:/; - - die "FATAL ERROR: test_id: $test_id{$state}, jstest test type mismatch: start test_type: $test_type, current test_type: $tmp_test_type, test state: $state, log: $file" - if ($test_type ne $tmp_test_type); - - ($test_description) = $_ =~ /description: (.*)/; - - if (!$test_description) - { - $test_description = ""; - } - $test_description .= ' ' . join '; ', @messages; - - outputrecord $tmp_test_id, $test_description, $test_result; - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^Spider: Finish loading http.*test=([^;]*);/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'reportingtest') - { - $state = 'loadedtest'; - } - else - { - # probably an out of memory error or a browser only delayed execution test. - dbg "state: $state, expected: reportingtest. assuming test result is pending"; - $state = 'pendingtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^Spider: Current Url:.*test=([^;]*);/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'loadedtest') - { - $state = 'loadedtest'; - } - elsif ($state eq 'reportingtest') - { - $state = 'loadedtest'; - } - elsif ($state eq 'pendingtest') - { - $state = 'pendingtest'; - } - else - { - warn "WARNING: state: $state, expected: loadedtest, reportingtest, pendingtest, log: $file"; - $state = 'loadedtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id, $page_status) = $_ =~ /^http:.*test=([^;]*);.* (PAGE STATUS: NORMAL.*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'loadedtest') - { - $state = 'loadedtest'; - } - elsif ($state eq 'pendingtest') - { - $state = 'pendingtest'; - } - elsif ($state eq 'reportingtest') - { - # test was pending, but output a result. - $state = 'loadedtest'; - } - else - { - warn "WARNING: state: $state, expected: loadedtest, pendingtest, reportingtest, log: $file"; - $state = 'loadedtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id, $page_status) = $_ =~ /^http:.*test=([^;]*);.* (PAGE STATUS: TIMED OUT.*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'loadedtest') - { - $state = 'endrun'; - } - elsif ($state eq 'runningtest') - { - $state = 'completedtest'; - } - elsif ($state eq 'reportingtest') - { - $state = 'completedtest'; - } - elsif ($state eq 'pendingtest') - { - $state = 'completedtest'; - } - else - { - warn "WARNING: state: $state, expected: loadedtest, runningtest, reportingtest, pendingtest, log: $file"; - $state = 'endrun'; - } - - $test_result = 'FAILED'; - $test_description = $page_status . ' ' . join '; ', @messages;; - - outputrecord $tmp_test_id, $test_description, $test_result; - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: ([^ ]*) Elapsed time/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'loadedtest') - { - $state = 'completedtest'; - } - elsif ($state eq 'pendingtest') - { - $state = 'pendingtest'; - } - elsif ($state eq 'reportingtest') - { - # test was pending, but has been reported. - $state = 'completedtest'; - } - else - { - warn "WARNING: state: $state, expected: loadedtest, loadedtest, pendingtest, reportingtest, log: $file"; - $state = 'completedtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: End Test ([^ ]*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected completedtest, endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'completedtest') - { - if ($mode eq 'restart') - { - $state = 'completedtest'; - } - else - { - $state = 'starttest'; - } - } - elsif ($state eq 'pendingtest') - { - $state = 'completedtest'; - - $test_result = 'UNKNOWN'; - $test_description = 'No test results reported. ' . join '; ', @messages; - - outputrecord $tmp_test_id, $test_description, $test_result; - } - elsif ($state eq 'endrun') - { - $state = 'endrun'; - } - else - { - warn "WARNING: state: $state, expected: completedtest, pendingtest, endrun, log: $file"; - $state = 'completedtest'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( /^JavaScriptTest: End Run/) - { - if ($state eq 'completedtest') - { - $state = 'endrun'; - } - elsif ($state eq 'loadedtest') - { - $state = 'endrun'; - } - elsif ($state eq 'pendingtest') - { - $state = 'pendingtest'; - } - elsif ($state eq 'starttest' && $mode eq 'nonrestart') - { - # non restart mode, at last test. - $state = 'endrun'; - } - else - { - warn "WARNING: state: $state, expected: completedtest, loadedtest, pendingtest or starttest in non restart mode, log: $file"; - $state = 'endrun'; - } - } - elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: NORMAL.*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'endrun') - { - $state = 'endrun'; - } - elsif ($state eq 'completedtest') - { - dbg "previously pending test $test_id{$state} completed and is now endrun"; - $state = 'endrun'; - } - else - { - warn "WARNING: state: $state, expected: endrun, log: $file"; - $state = 'endrun'; - } - - if (! $test_reported{$tmp_test_id}) - { - $test_result = 'UNKNOWN'; - $test_description = $exit_status . ' No test results reported. ' . join '; ', @messages; - - outputrecord $tmp_test_id, $test_description, $test_result; - } - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: TIMED OUT.*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'endrun') - { - $state = 'endrun'; - } - else - { - dbg "state: $state, expected: endrun"; - $state = 'endrun'; - } - - $test_result = 'FAILED'; - $test_description = $exit_status . ' ' . join '; ', @messages; - - outputrecord $tmp_test_id, $test_description, $test_result; - - $test_id{$state} = $tmp_test_id; - } - elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: CRASHED.*)/) - { - if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) - { - warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; - } - - if ($state eq 'endrun') - { - $state = 'endrun'; - } - else - { - dbg "state: $state, expected: endrun"; - $state = 'endrun'; - } - - $test_result = 'FAILED'; - $test_description = $exit_status . ' ' . join '; ', @messages;; - - outputrecord $tmp_test_id, $test_description, $test_result; - - $test_id{$state} = $tmp_test_id; - } - elsif ( m@^(\/cygdrive\/.|\/.)?$test_dir$@) - { - if ($state eq 'endrun') - { - $state = 'success'; - } - else - { - warn "WARNING: state: $state, expected: endrun, log: $file"; - $state = 'success'; - } - - $test_id{$state} = $tmp_test_id; - } - elsif (!/^ \=\>/ && !/^\s+$/ && !/^[*][*][*]/ && !/^[-+]{2,2}(WEBSHELL|DOMWINDOW)/ && !/^Spider:/ && - !/^JavaScriptTest:/ && !/real.*user.*sys.*$/ && !/user.*system.*elapsed/) - { - if ('starttest, loadingtest, runningtest, reportingtest, pendingtest, loadedtest, endrun, completedtest' =~ /$state/) - { - - if (/error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || - /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ ) - { - dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; - push @messages, ('/' . $test_id{$state} . ':0: out of memory'); - } - else - { - dbg "Adding message: $_"; - push @messages, ($_); - } - } - } - - if ($debug) - { - if ($test_id{$state}) - { - dbg "test_id{$state}=$test_id{$state}, " . join '; ', @messages; - } - else - { - dbg "state=$state, " . join '; ', @messages; + dbg "Adding message: $_"; + push @messages, ($_); } } } + elsif ($debug) + { + dbg "Skipping: $_"; + } + + if ($debug) + { + if ($test_id{$state}) + { + dbg "test_id{$state}=$test_id{$state}, " . (join '; ', @messages); + } + else + { + dbg "state=$state, " . (join '; ', @messages); + } + } + } + if ($state eq 'endrun') + { + $state = 'success'; } - close FILE; - - undef $test_branchid; - undef $test_date; - undef $test_buildtype; - undef $test_machine; - undef $test_product; - undef $test_suite; - die "FATAL ERROR: Test run terminated prematurely. state: $state, log: $file" if ($state ne 'success'); -} +} +close FILE; close TEMP; +undef $test_branchid; +undef $test_date; +undef $test_buildtype; +undef $test_machine; +undef $test_product; +undef $test_suite; + outresults; unlink $temp; @@ -838,7 +542,9 @@ sub dbg { sub outresults { + dbg "sorting temp file $temp"; system("sort < $temp | uniq"); + dbg "finished sorting"; } sub outputrecord @@ -849,17 +555,29 @@ sub outputrecord # output and follow it. $test_description =~ s/jstest:.*//; - if (length($test_description) > 6000) - { - $test_description = substr($test_description, 0, 6000); - } +# if (length($test_description) > 6000) +# { +# $test_description = substr($test_description, 0, 6000); +# } +# my $output = - "TEST_ID=$test_id, TEST_BRANCH=$test_branchid, TEST_RESULT=$test_result, " . - "TEST_BUILDTYPE=$test_buildtype, TEST_TYPE=$test_type, TEST_OS=$test_os, " . - "TEST_MACHINE=$test_machine, TEST_PROCESSORTYPE=$test_processortype, " . - "TEST_KERNEL=$test_kernel, TEST_DATE=$test_date, TEST_TIMEZONE=$test_timezone, " . - "TEST_DESCRIPTION=$test_description\n"; + "TEST_ID=$test_id, " . + "TEST_BRANCH=$test_branchid, " . + "TEST_BUILDTYPE=$test_buildtype, " . + "TEST_TYPE=$test_type, " . + "TEST_OS=$test_os, " . + "TEST_KERNEL=$test_kernel, " . + "TEST_PROCESSORTYPE=$test_processortype, " . + "TEST_MEMORY=$test_memory, " . + "TEST_CPUSPEED=$test_cpuspeed, " . + "TEST_TIMEZONE=$test_timezone, " . + "TEST_RESULT=$test_result, " . + "TEST_EXITSTATUS=$test_exit_status, " . + "TEST_DESCRIPTION=$test_description, " . + "TEST_MACHINE=$test_machine, " . + "TEST_DATE=$test_date" . + "\n"; if ($debug) { diff --git a/js/tests/process-logs.sh b/js/tests/process-logs.sh index 3e6704ab7f3a..bf420f2d00c4 100755 --- a/js/tests/process-logs.sh +++ b/js/tests/process-logs.sh @@ -38,13 +38,13 @@ # ***** END LICENSE BLOCK ***** if [[ -z "$TEST_DIR" ]]; then - cat < 2.6.23.*fc7 arch optional. The machine architecture as specified by uname -p If not specified, the script will attempt to determine the value from the TEST_PROCESSORTYPE line in each log. @@ -83,25 +91,17 @@ arch optional. The machine architecture as specified by uname -p 'i386' - Mac Intel 'powerpc' - Mac PowerPC -kernel optional. The machine kernel as specified by uname -r - If not specified, the script will attempt to determine the - value from the TEST_KERNEL line in the log. - 'all' - do not filter on machine kernel. Use this for - Windows. - For Linux distros, use the value of uname -r - and replace the minor version numbers with .* as in - 2.6.23.1-21.fc7 -> 2.6.23.*fc7 EOF exit 2 } while getopts "l:A:K:" optname; - do - case $optname in - l) testlogfiles=$OPTARG;; - A) optarch=$OPTARG;; - K) optkernel=$OPTARG;; - esac +do + case $optname in + l) testlogfiles=$OPTARG;; + A) optarch=$OPTARG;; + K) optkernel=$OPTARG;; + esac done if [[ -z "$testlogfiles" ]]; then @@ -112,6 +112,24 @@ for testlogfile in `ls $testlogfiles`; do debug "testlogfile=$testlogfile" + case $testlogfile in + *.log) + worktestlogfile=$testlogfile + ;; + *.log.bz2) + worktestlogfile=`mktemp $testlogfile.XXXXXX` + bunzip2 -c $testlogfile > $worktestlogfile + ;; + *.log.gz) + worktestlogfile=`mktemp $testlogfile.XXXXXX` + gunzip -c $testlogfile > $worktestlogfile + ;; + *) + echo "unknown log type: $f" + exit 2 + ;; + esac + case "$testlogfile" in *,js,*) testtype=shell;; *,firefox,*) testtype=browser;; @@ -133,8 +151,9 @@ for testlogfile in `ls $testlogfiles`; do *,1.8.0*) branch=1.8.0;; *,1.8.1*) branch=1.8.1;; *,1.9.0*) branch=1.9.0;; + *,1.9.1*) branch=1.9.1;; *) - branch=`grep '^environment: TEST_BRANCH=' $testlogfile | sed 's|.*TEST_BRANCH=\(.*\)|\1|'` + branch=`grep -m 1 '^environment: TEST_BRANCH=' $worktestlogfile | sed 's|.*TEST_BRANCH=\(.*\)|\1|'` if [[ -z "$branch" ]]; then error "unknown branch in logfile $testlogfile" $LINENO fi @@ -144,11 +163,11 @@ for testlogfile in `ls $testlogfiles`; do debug "branch=$branch" case "$testlogfile" in - *,win32,*) OSID=win32;; + *,nt,*) OSID=nt;; *,linux,*) OSID=linux;; - *,mac,*) OSID=mac;; + *,darwin,*) OSID=darwin;; *) - OSID=`grep '^environment: OSID=' $testlogfile | sed 's|.*OSID=\(.*\)|\1|'` + OSID=`grep -m 1 '^environment: OSID=' $worktestlogfile | sed 's|.*OSID=\(.*\)|\1|'` if [[ -z "$OSID" ]]; then error "unknown OS in logfile $testlogfile" $LINENO fi @@ -160,11 +179,9 @@ for testlogfile in `ls $testlogfiles`; do if [[ -n "$optkernel" ]]; then kernel="$optkernel" else - if [[ "$OSID" == "win32" ]]; then - kernel=all - else - kernel=`grep '^environment: TEST_KERNEL=' $testlogfile | sed 's|.*TEST_KERNEL=\(.*\)|\1|'` - kernel=`echo $kernel | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'` + kernel=`grep -m 1 '^environment: TEST_KERNEL=' $worktestlogfile | sed 's|.*TEST_KERNEL=\(.*\)|\1|'` + if [[ "$OSID" == "linux" ]]; then + kernel=`echo $kernel | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*|\1.\2.\3|'` fi fi @@ -173,15 +190,14 @@ for testlogfile in `ls $testlogfiles`; do if [[ -n "$optarch" ]]; then arch="$optarch" else - if [[ "$OSID" == "win32" ]]; then - arch=all - else - arch=`grep '^environment: TEST_PROCESSORTYPE=' $testlogfile | sed 's|.*TEST_PROCESSORTYPE=\(.*\)|\1|'` - fi + arch=`grep -m 1 '^environment: TEST_PROCESSORTYPE=' $worktestlogfile | sed 's|.*TEST_PROCESSORTYPE=\(.*\)|\1|'` fi debug "arch=$arch" + memory=`grep -m 1 '^environment: TEST_MEMORY=' $worktestlogfile | sed 's|.*TEST_MEMORY=\(.*\)|\1|'` + speed=`grep -m 1 '^environment: TEST_CPUSPEED=' $worktestlogfile | sed 's|.*TEST_CPUSPEED=\(.*\)|\1|'` + timezone=`basename $testlogfile | sed 's|^[-0-9]*\([-+]\)\([0-9]\{4,4\}\),.*|\1\2|'` debug "timezone=$timezone" @@ -191,9 +207,25 @@ for testlogfile in `ls $testlogfiles`; do includetests="included-$branch-$testtype-$buildtype.tests" excludetests="excluded-$branch-$testtype-$buildtype.tests" - grep '^include: ' $testlogfile | sed 's|include: ||' > $TEST_DIR/tests/mozilla.org/js/$includetests - grep '^exclude: ' $testlogfile | sed 's|exclude: ||' > $TEST_DIR/tests/mozilla.org/js/$excludetests + grep '^include: ' $worktestlogfile | sed 's|include: ||' > $TEST_DIR/tests/mozilla.org/js/$includetests + grep '^exclude: ' $worktestlogfile | sed 's|exclude: ||' > $TEST_DIR/tests/mozilla.org/js/$excludetests - $TEST_DIR/tests/mozilla.org/js/known-failures.pl -b "$branch" -T "$buildtype" -t "$testtype" -o "$OSID" -z "$timezone" -l "$testlogfile" -A "$arch" -K "$kernel" -r "$TEST_JSDIR/failures.txt" -O "$outputprefix" + $TEST_DIR/tests/mozilla.org/js/known-failures.pl \ + -b "$branch" \ + -T "$buildtype" \ + -t "$testtype" \ + -o "$OSID" \ + -K "$kernel" \ + -A "$arch" \ + -M "$memory" \ + -S "$speed" \ + -z "$timezone" \ + -r "$TEST_JSDIR/failures.txt" \ + -l "$worktestlogfile" \ + -O "$outputprefix" + if [[ "$testlogfile" != "$worktestlogfile" ]]; then + rm $worktestlogfile + unset worktestlogfile + fi done diff --git a/js/tests/public-failures.txt b/js/tests/public-failures.txt index eea4c4a725bc..77968c43bead 100644 --- a/js/tests/public-failures.txt +++ b/js/tests/public-failures.txt @@ -1,500 +1,649 @@ -TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 50 of test - 11.1.4 - XML Initializer - {} Expressions - 08 expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 51 of test - 11.1.4 - XML Initializer - {} Expressions - 08 expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 53 of test - 11.1.4 - XML Initializer - {} Expressions - 08 expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 54 of test - 11.1.4 - XML Initializer - {} Expressions - 08 expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 56 of test - 11.1.4 - XML Initializer - {} Expressions - 08 expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=PAGE STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=unknown, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=unknown, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=PAGE STATUS: TIMED OUT -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory -TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 4 of test - 13.1.2.1 - isXMLName() expected: exception actual: no exception reason: Expected value 'exception', Actual value 'no exception' -TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 6 of test - 13.1.2.1 - isXMLName() expected: actual: 0xAA-0xAA : Invalid char accepted as start : Invalid Char accepted as other NL0xB5-0xB5 : Invalid char accepted as start : Invalid Char accepted as other NL0xB7-0xB7 : Other char not acceptedNL0xBA-0xBA : Invalid char accepted as start : Invalid Char accepted as other NL0x132-0x133 : Invalid char accepted as start : Invalid Char accepted as other NL0x13F-0x140 : Invalid char accepted as start : Invalid Char accepted as other NL0x149-0x149 : Invalid char accepted as start : Invalid Char accepted as other NL0x17F-0x17F : Invalid char accepted as start : Invalid Char accepted as other NL0x1C4-0x1CC : Invalid char accepted as start : Invalid Char accepted as other NL0x1F1-0x1F3 : Invalid char accepted as start : Invalid Char accepted as other NL0x2B0-0x2B8 : Invalid Char accepted as other NL0x2BB-0x2C1 : Start char not acceptedNL0x2E0-0x2E4 : Invalid Char accepted as other NL0x37A-0x37A : Invalid Char accepted as other NL0x387-0x387 : Other char not acceptedNL0x559-0x559 : Start char not acceptedNL0x587-0x587 : Invalid char accepted as start : Invalid Char accepted as other NL0x6E5-0x6E6 : Start char not acceptedNL0xEDC-0xEDD : Invalid char accepted as start : Invalid Char accepted as other NL0x1101-0x1101 : Invalid char accepted as start : Invalid Char accepted as other NL0x1104-0x1104 : Invalid char accepted as start : Invalid Char accepted as other NL0x1108-0x1108 : Invalid char accepted as start : Invalid Char accepted as other NL0x110A-0x110A : Invalid char accepted as start : Invalid Char accepted as other NL0x110D-0x110D : Invalid char accepted as start : Invalid Char accepted as other NL0x1113-0x113B : Invalid char accepted as start : Invalid Char accepted as other NL0x113D-0x113D : Invalid char accepted as start : Invalid Char accepted as other NL0x113F-0x113F : Invalid char accepted as start : Invalid Char accepted as other NL0x1141-0x114B : Invalid char accepted as start : Invalid Char accepted as other NL0x114D-0x114D : Invalid char accepted as start : Invalid Char accepted as other NL0x114F-0x114F : Invalid char accepted as start : Invalid Char accepted as other NL0x1151-0x1153 : Invalid char accepted as start : Invalid Char accepted as other NL0x1156-0x1158 : Invalid char accepted as start : Invalid Char accepted as other NL0x1162-0x1162 : Invalid char accepted as start : Invalid Char accepted as other NL0x1164-0x1164 : Invalid char accepted as start : Invalid Char accepted as other NL0x1166-0x1166 : Invalid char accepted as start : Invalid Char accepted as other NL0x1168-0x1168 : Invalid char accepted as start : Invalid Char accepted as other NL0x116A-0x116C : Invalid char accepted as start : Invalid Char accepted as other NL0x116F-0x1171 : Invalid char accepted as start : Invalid Char accepted as other NL0x1174-0x1174 : Invalid char accepted as start : Invalid Char accepted as other NL0x1176-0x119D : Invalid char accepted as start : Invalid Char accepted as other NL0x119F-0x11A2 : Invalid char accepted as start : Invalid Char accepted as other NL0x11A9-0x11AA : Invalid char accepted as start : Invalid Char accepted as other NL0x11AC-0x11AD : Invalid char accepted as start : Invalid Char accepted as other NL0x11B0-0x11B6 : Invalid char accepted as start : Invalid Char accepted as other NL0x11B9-0x11B9 : Invalid char accepted as start : Invalid Char accepted as other NL0x11BB-0x11BB : Invalid char accepted as start : Invalid Char accepted as other NL0x11C3-0x11EA : Invalid char accepted as start : Invalid Char accepted as other NL0x11EC-0x11EF : Invalid char accepted as start : Invalid Char accepted as other NL0x11F1-0x11F8 : Invalid char accepted as start : Invalid Char accepted as other NL0x207F-0x207F : Invalid char accepted as start : Invalid Char accepted as other NL0x20DD-0x20E0 : Invalid Char accepted as other NL0x2102-0x2102 : Invalid char accepted as start : Invalid Char accepted as other NL0x2107-0x2107 : Invalid char accepted as start : Invalid Char accepted as other NL0x210A-0x2113 : Invalid char accepted as start : Invalid Char accepted as other NL0x2115-0x2115 : Invalid char accepted as start : Invalid Char accepted as other NL0x2118-0x211D : Invalid char accepted as start : Invalid Char accepted as other NL0x2124-0x2124 : Invalid char accepted as start : Invalid Char accepted as other NL0x2128-0x2128 : Invalid char accepted as start : Invalid Char accepted as other NL0x212C-0x212D : Invalid char accepted as start : Invalid Char accepted as other NL0x212F-0x2131 : Invalid char accepted as start : Invalid Char accepted as other NL0x2133-0x2138 : Invalid char accepted as start : Invalid Char accepted as other NL0x2160-0x217F : Invalid char accepted as start : Invalid Char accepted as other NL0x309B-0x309C : Invalid Char accepted as other NL0x3131-0x318E : Invalid char accepted as start : Invalid Char accepted as other NL0xF900-0xFA2D : Invalid char accepted as start : Invalid Char accepted as other NL0xFB00-0xFB06 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB13-0xFB17 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB1E-0xFB1E : Invalid Char accepted as other NL0xFB1F-0xFB28 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB2A-0xFB36 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB38-0xFB3C : Invalid char accepted as start : Invalid Char accepted as other NL0xFB3E-0xFB3E : Invalid char accepted as start : Invalid Char accepted as other NL0xFB40-0xFB41 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB43-0xFB44 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB46-0xFBB1 : Invalid char accepted as start : Invalid Char accepted as other NL0xFBD3-0xFD3D : Invalid char accepted as start : Invalid Char accepted as other NL0xFD50-0xFD8F : Invalid char accepted as start : Invalid Char accepted as other NL0xFD92-0xFDC7 : Invalid char accepted as start : Invalid Char accepted as -TEST_ID=e4x/Namespace/regress-292863.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Undeclaring namespace prefix should cause parse error expected: error actual: no error reason: Expected value 'error', Actual value 'no error' -TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Reject invalid spaces in tags expected: SyntaxError: invalid XML name actual: reason: Expected value 'SyntaxError: invalid XML name', Actual value '' -TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 2 of test - Reject invalid spaces in tags expected: SyntaxError: invalid XML tag syntax actual: reason: Expected value 'SyntaxError: invalid XML tag syntax', Actual value '' -TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: kid2->parent == xml || !kid2->parent, at `.``*`jsxml.c: -TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 2 of test - Do not assert: kid2->parent == xml || !kid2->parent expected: NL NL 3NL NL actual: NL 5NL reason: Expected value 'NL NL 3NL NL', Actual value 'NL 5NL' -TEST_ID=e4x/Regress/regress-369740.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 3 of test - generic code for function:: expected: test actual: TypeError: can't set property @mozilla.org/js/function::toString in XMLList reason: Expected value 'test', Actual value 'TypeError: can't set property @mozilla.org/js/function::toString in XMLList' -TEST_ID=e4x/Regress/regress-370016.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/e4x/Regress/regress-370016.js:`.``*`: `(`ReferenceError: `)``?`reference to undefined XML name @mozilla.org/js/function::sin -TEST_ID=e4x/Regress/regress-370048-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/e4x/Regress/regress-370048-01.js:`.``*`: `(`ReferenceError: `)``?`reference to undefined XML name @mozilla.org/js/function::length -TEST_ID=e4x/Regress/regress-370372.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/e4x/Regress/regress-370372.js:`.``*`: `(`ReferenceError: `)``?`reference to undefined XML name @mozilla.org/js/function::toString -TEST_ID=e4x/Regress/regress-394941.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=e4x/TypeConversion/10.2.1.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 5 of test - 10.2.1 - XML.toXMLString expected: -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 12 of test - 13.4.4.26 - XML normalize() expected: 1 actual: 0 reason: Expected value '1', Actual value '0' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 13 of test - 13.4.4.26 - XML normalize() expected: 1 actual: 0 reason: Expected value '1', Actual value '0' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 22 of test - 13.4.4.26 - XML normalize() expected: actual: reason: Expected value ' ', Actual value '' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 23 of test - 13.4.4.26 - XML normalize() expected: 2 actual: 1 reason: Expected value '2', Actual value '1' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 3 of test - 13.4.4.26 - XML normalize() expected: one actual: one reason: Expected value ' one ', Actual value ' one ' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 4 of test - 13.4.4.26 - XML normalize() expected: actual: reason: Expected value ' ', Actual value '' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 5 of test - 13.4.4.26 - XML normalize() expected: 2 actual: 0 reason: Expected value '2', Actual value '0' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 6 of test - 13.4.4.26 - XML normalize() expected: actual: reason: Expected value ' ', Actual value '' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 7 of test - 13.4.4.26 - XML normalize() expected: 1 actual: 0 reason: Expected value '1', Actual value '0' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 8 of test - 13.4.4.26 - XML normalize() expected: fun actual: fun reason: Expected value ' fun ', Actual value ' fun ' -TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 9 of test - 13.4.4.26 - XML normalize() expected: 2 actual: 1 reason: Expected value '2', Actual value '1' -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=xmlsimple.stringmethod === xmlsimple.function::stringmethod Section 61 expected: t actual: error reason: `.``*`/e4x/XML/regress-376773.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::charAt -TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: BUGNUMBER: 376773 STATUS: xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 1 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 2 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 3 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 4 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 5 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 6 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 7 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 8 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 9 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 10 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 11 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 12 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 13 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 14 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 15 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 16 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 17 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 18 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 19 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 20 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 21 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 22 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 23 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 24 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 25 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 26 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 27 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 28 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 29 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 30 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 31 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 32 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 33 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 34 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 35 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 36 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 37 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 38 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 39 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 40 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 41 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 42 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 43 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 44 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 45 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Sectio./e4x/XML/regress-376773.js:`.``*`: `(`ReferenceError: `)``?`reference to undefined XML name @mozilla.org/js/function::charAt n 46 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 47 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 48 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 49 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 50 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 51 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 52 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 53 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 54 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 55 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 56 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 57 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 58 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 59 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 60 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 61 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod -TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: BUGNUMBER: 376773 STATUS: xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 1 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 2 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 3 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 4 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 5 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 6 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 7 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 8 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 9 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 10 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 11 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 12 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 13 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 14 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 15 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 16 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 17 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 18 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 19 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 20 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 21 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 22 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 23 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 24 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 25 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 26 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 27 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 28 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 29 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 30 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 31 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 32 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 33 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 34 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 35 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 36 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 37 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 38 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 39 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 40 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 41 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 42 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 43 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 44 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 45 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 46 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 47 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 48 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 49 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 50 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 51 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 52 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 53 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 54 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 55 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 56 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 57 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 58 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 59 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 60 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod PASSED! Section 61 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod -TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals expected: false actual: 'function anonymous() {NL return ;NL}' does not contain ''! reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' -TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals expected: false actual: 'function anonymous() {NL return ;NL}' does not contain ''! reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 11 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . n : : z ) ; } actual: function ( ) { new x ( y ) . n : : z ; } reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 12 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . n : : z ) ; } actual: function ( ) { new x ( y ) . n : : z ; } reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 14 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . n : : [ z ] ) ; } actual: function ( ) { new x ( y ) . n : : [ z ] ; } reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 15 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . n : : [ z ] ) ; } actual: function ( ) { new x ( y ) . n : : [ z ] ; } reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 2 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) [ z ] ) ; } actual: function ( ) { new x ( y ) [ z ] ; } reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 3 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) [ z ] ) ; } actual: function ( ) { new x ( y ) [ z ] ; } reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 5 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . @ a ) ; } actual: function ( ) { new x ( y ) . @ a ; } reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 6 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . @ a ) ; } actual: function ( ) { new x ( y ) . @ a ; } reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 8 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } actual: function ( ) { new x ( y ) . @ [ n : : a ] ; } reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 9 of test - Decompilation with new operator redeaux expected: function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } actual: function ( ) { new x ( y ) . @ [ n : : a ] ; } reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' -TEST_ID=e4x/decompilation/regress-352789.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Decompilation of new and .@ expected: function ( ) { return new ( a ( ) . @ z ) ; } actual: function ( ) { return new a . @ z ; } reason: Expected value ' function ( ) { return new ( a ( ) . @ z ) ; } ', Actual value ' function ( ) { return new a . @ z ; } ' -TEST_ID=e4x/decompilation/regress-429249.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=trap should not change decompilation : after trap expected: function g ( ) { return ; } actual: function g ( ) { return ""; } reason: Expected value ' function g ( ) { return ; } ', Actual value ' function g ( ) { return ""; } ' -TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/e4x/extensions/regress-337226.js:`.``*`: `(`ReferenceError: `)``?`reference to undefined XML name @mozilla.org/js/function::parseInt -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=e4x/extensions/regress-410192.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - Proper quoting of attribute by uneval/toSource expected: "v" actual: v reason: Expected value '"v"', Actual value 'v' -TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Infinity/Math.atan2(-0, 1) expected: -Infinity actual: Infinity reason: wrong value -TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Infinity/Math.atan2(-1, Infinity) expected: -Infinity actual: Infinity reason: wrong value -TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=9.2.2, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Infinity/Math.ceil(-0.9) expected: -Infinity actual: Infinity reason: wrong value -TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=9.2.2, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Infinity/Math.ceil(-Number.MIN_VALUE) expected: -Infinity actual: Infinity reason: wrong value -TEST_ID=ecma/String/15.5.4.6-2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=var f = new Object( String.prototype.indexOf ); f('[object Window @ `[`x0`-`9a`-`f`]``+` (native @ `[`x0`-`9a`-`f`]``+`)]') expected: 0 actual: -1 reason: wrong value -TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=!(0/0) expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=1000 % 0 ? true : false expected: false actual: true reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 expected: true actual: false reason: wrong value -TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=PAGE STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-03.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: TIMED OUT`|``.``*`/ecma_3/Array/regress-322135-03.js:`.``*`: out of memory`)` -TEST_ID=ecma_3/Array/regress-322135-03.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=PAGE STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: TIMED OUT`|``.``*`/ecma_3/Array/regress-322135-04.js:`.``*`: out of memory`)` -TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=PAGE STATUS: TIMED OUT -TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/ecma_3/Array/regress-322135-04.js:`.``*`: out of memory -TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic expected: TypeError: Array.prototype.toLocaleString called on incompatible String actual: f,o,o reason: Expected value 'TypeError: Array.prototype.toLocaleString called on incompatible String', Actual value 'f,o,o' -TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic expected: TypeError: Array.prototype.toSource called on incompatible String actual: ["f", "o", "o"] reason: Expected value 'TypeError: Array.prototype.toSource called on incompatible String', Actual value '["f", "o", "o"]' -TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic expected: TypeError: Array.prototype.toString called on incompatible String actual: f,o,o reason: Expected value 'TypeError: Array.prototype.toString called on incompatible String', Actual value 'f,o,o' -TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date -1 expected: 30 actual: 1 reason: Expected value '30', Actual value '1' -TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date 0 expected: 31 actual: 1 reason: Expected value '31', Actual value '1' -TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date null expected: 31 actual: 1 reason: Expected value '31', Actual value '1' -TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`expected: -271821 actual: null -TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`expected: 275760 actual: null -TEST_ID=ecma_3/ExecutionContexts/10.1.3-2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`x is not a function -TEST_ID=ecma_3/Expressions/11.10-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.10 - & should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/Expressions/11.10-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.10 - ^ should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/Expressions/11.10-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.10 - | should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/Expressions/11.7.1-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.7.1 - << should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/Expressions/11.7.2-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.7.2 - >> should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/Expressions/11.7.3-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.7.3 - >>> should evaluate operands in order: order expected: o.valueOf, p.valueOf actual: , p.valueOfo.valueOf reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/LexicalConventions/7.9.1.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Automatic Semicolon insertion in postfix expressions: (xNL)-- y expected: SyntaxError: missing ; before statement actual: 0 reason: Type mismatch, expected type string, actual type number Expected value 'SyntaxError: missing ; before statement', Actual value '0' -TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`3.3.toString.length should be 1 expected: 1 actual: 0 reason: Expected value '1', Actual value '0' -TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Expected value 'false', Actual value 'Error: illegal radix 0' -TEST_ID=ecma_3/Operators/11.13.1-002.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=11.13.1 Simple Assignment should return type of RHS expected: string actual: number reason: Expected value 'string', Actual value 'number' -TEST_ID=ecma_3/Operators/11.4.1-002.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Type mismatch, expected type boolean, actual type string Expected value 'true', Actual value 'SyntaxError: invalid assignment left-hand side' -TEST_ID=ecma_3/RegExp/15.10.2.12.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=15.10.2.12 - CharacterClassEscape d expected: false actual: true reason: Expected value 'false', Actual value 'true' -TEST_ID=ecma_3/RegExp/regress-307456.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=ecma_3/RegExp/regress-330684.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375711.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Do not assert with /[Q-b]/i.exec(""): /[Q-b]/i.exec("") expected: No Error actual: SyntaxError: invalid range in character class reason: Expected value 'No Error', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 3 actual: Actual exit 0, signal 0 reason: BUGNUMBER: 375715 STATUS: Do not assert: (c2 <= cs->length) && (c1 <= c2) PASSED! Do not assert: (c2 <= cs->length) && (c1 <= c2) /[Wb-G]/.exec("") -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` Expected value 'SyntaxError: invalid range in character class', Actual value '' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 42 expected: ok actual: failure reason: Expected value 'ok', Actual value 'failure' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 56 expected: |x|string|x|string|0|number|xyz|string||y|string||undefined|1|number|xyz|string|z actual: |x|string|x|string|0|number|xyz|string||y|string||string|1|number|xyz|string|z reason: Expected value '|x|string|x|string|0|number|xyz|string||y|string||undefined|1|number|xyz|string|z', Actual value '|x|string|x|string|0|number|xyz|string||y|string||string|1|number|xyz|string|z' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 58 expected: xy|z|string||undefined|2|number|xyz|string| actual: xy|z|string||string|2|number|xyz|string| reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 59 expected: xy|z|string||undefined|2|number|xyz|string| actual: xy|z|string||string|2|number|xyz|string| reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 60 expected: xy|z|string||undefined|2|number|xyz|string| actual: xy|z|string||string|2|number|xyz|string| reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 61 expected: xy|z|string||string|2|number|xyz|string| actual: xyz reason: Expected value 'xy|z|string||string|2|number|xyz|string|', Actual value 'xyz' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 62 expected: x|y|string|y|string||undefined|1|number|xyz|string|z actual: x|y|string|y|string||string|1|number|xyz|string|z reason: Expected value 'x|y|string|y|string||undefined|1|number|xyz|string|z', Actual value 'x|y|string|y|string||string|1|number|xyz|string|z' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 64 expected: x|y|string|y|string||undefined|1|number|xyyz|string||y|string|y|string||undefined|2|number|xyyz|string|z actual: x|y|string|y|string||string|1|number|xyyz|string||y|string|y|string||string|2|number|xyyz|string|z reason: Expected value 'x|y|string|y|string||undefined|1|number|xyyz|string||y|string|y|string||undefined|2|number|xyyz|string|z', Actual value 'x|y|string|y|string||string|1|number|xyyz|string||y|string|y|string||string|2|number|xyyz|string|z' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 66 expected: xyy|z|string||undefined||string|3|number|xyyz|string| actual: xyy|z|string||string||string|3|number|xyyz|string| reason: Expected value 'xyy|z|string||undefined||string|3|number|xyyz|string|', Actual value 'xyy|z|string||string||string|3|number|xyyz|string|' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 67 expected: x|y|string|1|number|xyz|string||string||undefined|y|string|z actual: x|y|string|1|number|xyz|string||string||string|y|string|z reason: Expected value 'x|y|string|1|number|xyz|string||string||undefined|y|string|z', Actual value 'x|y|string|1|number|xyz|string||string||string|y|string|z' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 7 expected: /x/g/x/g/x/g actual: xnullx reason: Expected value '/x/g/x/g/x/g', Actual value 'xnullx' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return $1; }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return String($1); }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return $1; }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return String($1); }) expected: undefined actual: reason: Expected value 'undefined', Actual value '' -TEST_ID=ecma_3/Unicode/regress-352044-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` Expected value 'SyntaxError: illegal character', Actual value '' -TEST_ID=ecma_3/Unicode/regress-352044-02-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Do not ignore unicode format-control characters: `[`0`-`2`]` expected: SyntaxError: illegal character actual: reason: Expected value 'SyntaxError: illegal character', Actual value '' -TEST_ID=ecma_3/extensions/regress-368516.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Ignore unicode BOM characters: `[`0`-`1`]` expected: No Error actual: SyntaxError: illegal character reason: Expected value 'No Error', Actual value 'SyntaxError: illegal character' -TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=typeof f(/abc/) expected: object actual: function reason: wrong value -TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=typeof new f(/abc/) expected: object actual: function reason: wrong value -TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 1 of test - [,1] expected: 1 actual: 01 reason: Expected value '1', Actual value '01' -TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 2 of test - [,,1] expected: 2 actual: 012 reason: Expected value '2', Actual value '012' -TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 4 of test - [1,,] expected: 0 actual: 01 reason: Expected value '0', Actual value '01' -TEST_ID=js1_5/Array/regress-101964.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Section 1 of test - expected: Truncation took less than `[`0`-`9`]``+` ms actual: Truncation took `[`0`-`9`]``+` ms reason: Expected value 'Truncation took less than `[`0`-`9`]``+` ms', Actual value 'Truncation took `[`0`-`9`]``+` ms' -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.22.*fc6, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=unknown, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=2.6.18.*el5, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=8.11.0, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=9.2.2, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Error/regress-354246.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_5/Error/regress-354246.js:`.``*`: x is not defined -TEST_ID=js1_5/Exceptions/regress-121658.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Expressions/regress-394673.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*``(`InternalError:`|`reason:`)``?` too much recursion -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-03.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-03.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Function/regress-338121-03.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-203278-2.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/GC/regress-203278-2.js:102: out of memory -TEST_ID=js1_5/GC/regress-203278-2.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.22.*fc6, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED signal 11 -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: TIMED OUT`|`EXIT STATUS: CRASHED 0 signal 9`)` -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=9.2.2, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 5 `.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-348532.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Unknown expected: Unknown actual: error reason: http://test.mozilla.com/tests/mozilla.org/js/js1_5/GC/regress-348532.js:`.``*`: too much recursion -TEST_ID=js1_5/GC/regress-348532.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-348532.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=2.6.18.*el5, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/Regress/regress-203278-1.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-203278-1.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-203278-1.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.22.*fc6, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED signal 11 -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=2.6.18.*el5, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=unknown, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 `.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=2.6.18.*el5, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 9 -TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=2.6.18.*el5, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED signal 9 -TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.22.*fc6, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: TIMED OUT`|`EXIT STATUS: CRASHED`)` -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-314401.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-319384.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_5/Regress/regress-319384.js:`.``*`: can't convert "foo" to an integer -TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arguments no longer shared expected: false actual: true reason: Expected value 'false', Actual value 'true' -TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arity no longer shared expected: false actual: true reason: Expected value 'false', Actual value 'true' -TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: caller no longer shared expected: false actual: true reason: Expected value 'false', Actual value 'true' -TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: name no longer shared expected: false actual: true reason: Expected value 'false', Actual value 'true' -TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: :0: uncaught exception: Permission denied to get property UnnamedClass.classes -TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=JS_ReportPendingException should expected: Error actual: No Error reason: Expected value 'Error', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: javascript:Components.classes:0: Script error. -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: ./js1_5/Regress/regress-330352.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`: alert(6); } alert(5); expected: SyntaxError actual: No Error reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`: } expected: SyntaxError actual: No Error reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`: } { expected: SyntaxError actual: No Error reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`: }}}}} expected: SyntaxError actual: No Error reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c -TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED 3`|` expected: Expected exit 0 actual: Actual exit 3`)` -TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags), at `.``*`jsscript.c: -TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 reason: Testcase produced no output! -TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: ./js1_5/Regress/regress-3649-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 1 expected: toString called actual: toString not called reason: Expected value 'toString called', Actual value 'toString not called' -TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 2 expected: toString called actual: toString not called reason: Expected value 'toString called', Actual value 'toString not called' -TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 5 `.``*`/js1_5/Regress/regress-422348.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/Regress/regress-422348.js:59: out of memory -TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN decompile Infinity as 1/0 expected: function ( ) { return 1 / 0 ; } actual: function ( ) { return Infinity ; } reason: Expected value ' function ( ) { return 1 / 0 ; } ', Actual value ' function ( ) { return Infinity ; } ' -TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN: decompile NaN as 0/0 expected: function ( ) { var NaN = 0 / 0 ; return NaN ; } actual: function ( ) { var NaN = NaN ; return NaN ; } reason: Expected value ' function ( ) { var NaN = 0 / 0 ; return NaN ; } ', Actual value ' function ( ) { var NaN = NaN ; return NaN ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of new parenthetic expressions expected: function ( ) { new ( x ( y ) ( z ) ) ; } actual: function ( ) { new x ( y ) ( z ) ; } reason: Expected value ' function ( ) { new ( x ( y ) ( z ) ) ; } ', Actual value ' function ( ) { new x ( y ) ( z ) ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of new parenthetic expressions expected: function ( ) { new ( x ( y ) . z ) ; } actual: function ( ) { new x ( y ) . z ; } reason: Expected value ' function ( ) { new ( x ( y ) . z ) ; } ', Actual value ' function ( ) { new x ( y ) . z ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of new parenthetic expressions expected: function ( ) { new ( x ( z ) ) ( w ) ; } actual: function ( ) { new x ( z ) ( w ) ; } reason: Expected value ' function ( ) { new ( x ( z ) ) ( w ) ; } ', Actual value ' function ( ) { new x ( z ) ( w ) ; } ' -TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of negative 0 expected: function ( ) { return - 0 ; } actual: function ( ) { return 0 ; } reason: Expected value ' function ( ) { return - 0 ; } ', Actual value ' function ( ) { return 0 ; } ' -TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of negative 0: 8 / eval("" + f)() expected: -Infinity actual: Infinity reason: Expected value '-Infinity', Actual value 'Infinity' -TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_5/decompilation/regress-352453.js:`.``*`: `(`SyntaxError: `)``?`invalid decrement operand -TEST_ID=js1_5/decompilation/regress-353146.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of new expressions revisited expected: function ( ) { return new ( p ( 2 ) [ 1 ] ) ; } actual: function ( ) { return new p ( 2 ) [ 1 ] ; } reason: Expected value ' function ( ) { return new ( p ( 2 ) [ 1 ] ) ; } ', Actual value ' function ( ) { return new p ( 2 ) [ 1 ] ; } ' -TEST_ID=js1_5/decompilation/regress-356083.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation for ({this setter: function () { } }) expected: function ( ) { return { this setter : function ( ) { } } ; } actual: function ( ) { return { ' this ' setter : function ( ) { } } ; } reason: Expected value ' function ( ) { return { this setter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' this ' setter : function ( ) { } } ; } ' -TEST_ID=js1_5/decompilation/regress-356248.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of object literal with named getter expected: function ( ) { return { set p y ( ) { } } ; } actual: function ( ) { return { set py ( ) { } } ; } reason: Expected value ' function ( ) { return { set p y ( ) { } } ; } ', Actual value ' function ( ) { return { set py ( ) { } } ; } ' -TEST_ID=js1_5/decompilation/regress-371692.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Keep extra parentheses in conditional tests expected: function ( ) { if ( ( i = 1 ) ) { a = 2 ; } } actual: function ( ) { if ( i = 1 ) { a = 2 ; } } reason: Expected value ' function ( ) { if ( ( i = 1 ) ) { a = 2 ; } } ', Actual value ' function ( ) { if ( i = 1 ) { a = 2 ; } } ' -TEST_ID=js1_5/decompilation/regress-375882.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of switch with case 0/0 expected: function ( ) { switch ( a ) { case 0 / 0 : a ; case 1 / 0 : b ; case 1 / - 0 : c ; case - 0 : d ; default : ; } } actual: function ( ) { switch ( a ) { case NaN : a ; case Infinity : b ; case - Infinity : c ; case 0 : d ; default : ; } } reason: Expected value ' function ( ) { switch ( a ) { case 0 / 0 : a ; case 1 / 0 : b ; case 1 / - 0 : c ; case - 0 : d ; default : ; } } ', Actual value ' function ( ) { switch ( a ) { case NaN : a ; case Infinity : b ; case - Infinity : c ; case 0 : d ; default : ; } } ' -TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of new (eval()) expected: function ( ) { new ( eval ( ) ) ; } actual: function ( ) { new eval ; } reason: Expected value ' function ( ) { new ( eval ( ) ) ; } ', Actual value ' function ( ) { new eval ; } ' -TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of new (eval()) expected: function ( ) { new ( g ( ) ) ; } actual: function ( ) { new g ; } reason: Expected value ' function ( ) { new ( g ( ) ) ; } ', Actual value ' function ( ) { new g ; } ' -TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompiling Tabs: toString expected: function ( ) { return "\ t "; } actual: function ( ) { return " "; } reason: Expected value ' function ( ) { return "\ t "; } ', Actual value ' function ( ) { return " "; } ' -TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompiling Tabs: uneval expected: ( function ( ) { return "\ t "; } ) actual: ( function ( ) { return " "; } ) reason: Expected value ' ( function ( ) { return "\ t "; } ) ', Actual value ' ( function ( ) { return " "; } ) ' -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: actual: InternalError: too much recursion reason: Expected value '', Actual value 'InternalError: too much recursion' -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: actual: InternalError: too much recursion reason: Expected value '', Actual value 'InternalError: too much recursion' -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-226507.js:`.``*`: too much recursion -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-226507.js:`.``*`: too much recursion -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86|64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-226507.js:`.``*`: InternalError: too much recursion -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i386, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-226507.js:`.``*`: InternalError: too much recursion -TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") expected: "\t" actual: " " reason: Expected value '"\t"', Actual value '" "' -TEST_ID=js1_5/extensions/regress-322957.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=TryMethod should not eat getter exceptions expected: true actual: -1 reason: Type mismatch, expected type boolean, actual type number Expected value 'true', Actual value '-1' -TEST_ID=js1_5/extensions/regress-330569.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: BUGNUMBER: 336409 STATUS: Integer overflow in js_obj_toSource --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 0 --- --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 5 --- STATUS: Creating 64MB string STATUS: Done. length = 67108864 STATUS: Creating object STATUS: object.toSource() -TEST_ID=js1_5/extensions/regress-336409-2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: BUGNUMBER: 336409 STATUS: Integer overflow in js_obj_toSource --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 0 --- --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 5 --- STATUS: Creating 128MB string STATUS: Done. length = 134217728 STATUS: Creating object STATUS: object.toSource() -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: BUGNUMBER: 336410 STATUS: Integer overflow in array_toSource --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 0 --- --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 5 --- STATUS: Creating 64M length string STATUS: Done. length = 67108864 STATUS: Creating array STATUS: object.toSource() -TEST_ID=js1_5/extensions/regress-336410-2.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 5 actual: Actual exit 0, signal 6 reason: BUGNUMBER: 336410 STATUS: Integer overflow in array_toSource --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 0 --- --- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE 5 --- STATUS: Creating 128M length string STATUS: Done. length = 134217728 STATUS: Creating array STATUS: object.toSource() -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.22.*fc6, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/extensions/regress-350531.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i386), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/extensions/regress-350531.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-351448.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/([\d-\S]+)/.exec("a0- z") expected: a0-,a0- actual: SyntaxError: invalid range in character class reason: Expected value 'a0-,a0-', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/([\d-\s]+)/.exec("a0- z") expected: 0- ,0- actual: SyntaxError: invalid range in character class reason: Expected value '0- ,0- ', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=js1_5/extensions/regress-352455.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Eval object with non-function getters/setters expected: SyntaxError: invalid getter usage actual: reason: Expected value 'SyntaxError: invalid getter usage', Actual value '' -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED 3`|` expected: Expected exit 0 actual: Actual exit 3`)` -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Expected value 'function f() {NL}', Actual value 'function () {NL}' -TEST_ID=js1_5/extensions/regress-353214.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of |function() { (function ([x]) { })(); eval("return 3;") }| expected: function ( ) { ( function ( [ x ] ) { } ( ) ) ; eval ( " return 3 ;" ) ; } actual: function ( ) { ( function ( [ x ] ) { } ) ( ) ; eval ( " return 3 ;" ) ; } reason: Expected value ' function ( ) { ( function ( [ x ] ) { } ( ) ) ; eval ( " return 3 ;" ) ; } ', Actual value ' function ( ) { ( function ( [ x ] ) { } ) ( ) ; eval ( " return 3 ;" ) ; } ' -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1 expected: function ( ) { [ super ] = q ; } actual: function ( ) { [ " super " ] = q ; } reason: Expected value ' function ( ) { [ super ] = q ; } ', Actual value ' function ( ) { [ " super " ] = q ; } ' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1: compile actual expected: No Error actual: SyntaxError: invalid assignment left-hand side reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 2 expected: function ( ) { return { super getter : function ( ) { } } ; } actual: function ( ) { return { ' super ' getter : function ( ) { } } ; } reason: Expected value ' function ( ) { return { super getter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' super ' getter : function ( ) { } } ; } ' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3 expected: function ( ) { [ goto ] = a ; } actual: function ( ) { [ " goto " ] = a ; } reason: Expected value ' function ( ) { [ goto ] = a ; } ', Actual value ' function ( ) { [ " goto " ] = a ; } ' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3: compile actual expected: No Error actual: SyntaxError: invalid assignment left-hand side reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' -TEST_ID=js1_5/extensions/regress-355820.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Remove non-standard Script object expected: undefined actual: function reason: Expected value 'undefined', Actual value 'function' -TEST_ID=js1_5/extensions/regress-356085.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=js_obj_toString for getter/setter expected: ( { set p y ( ) { } } ) actual: ( { set p ( ) { } } ) reason: Expected value ' ( { set p y ( ) { } } ) ', Actual value ' ( { set p ( ) { } } ) ' -TEST_ID=js1_5/extensions/regress-363258.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Timer resolution expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=js1_5/extensions/regress-363258.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Timer resolution expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names expected: TypeError: redeclaration of property 1 actual: No warning reason: Expected value 'TypeError: redeclaration of property 1', Actual value 'No warning' -TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names expected: TypeError: redeclaration of property a actual: No warning reason: Expected value 'TypeError: redeclaration of property a', Actual value 'No warning' -TEST_ID=js1_5/extensions/regress-367923.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=strict warning for variable redeclares argument expected: TypeError: variable v redeclares argument actual: TypeError: variable v hides argument reason: Expected value 'TypeError: variable v redeclares argument', Actual value 'TypeError: variable v hides argument' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Numeric sort performance expected: (tint/tstr < 3)=true actual: (tint/tstr < 3)=false reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Numeric sort performance expected: (tint/tstr < 3)=true actual: (tint/tstr < 3)=false reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Numeric sort performance expected: (tint/tstr < 3)=true actual: (tint/tstr < 3)=false reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Numeric sort performance expected: (tint/tstr < 3)=true actual: (tint/tstr < 3)=false reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-375801.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=uneval should use "(void 0)" instead of "undefined": uneval expected: ( { a : ( void 0 ) } ) actual: ( { a : undefined } ) reason: Expected value ' ( { a : ( void 0 ) } ) ', Actual value ' ( { a : undefined } ) ' -TEST_ID=js1_5/extensions/regress-376052.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=javascript.options.anonfunfix to allow function (){} expressions: 3 expected: SyntaxError: syntax error actual: No Error reason: Expected value 'SyntaxError: syntax error', Actual value 'No Error' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 expected: ( function ( ) { return # 1 = [ a ] ; } ) actual: ( function ( ) { return # 1 = [ , a ] ; } ) reason: Expected value ' ( function ( ) { return # 1 = [ a ] ; } ) ', Actual value ' ( function ( ) { return # 1 = [ , a ] ; } ) ' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 expected: ( function ( ) { return # 1 = { a : b } ; } ) actual: ( function ( ) { return # 1 = { , a : b } ; } ) reason: Expected value ' ( function ( ) { return # 1 = { a : b } ; } ) ', Actual value ' ( function ( ) { return # 1 = { , a : b } ; } ) ' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of sharp declaration: 1: compile actual expected: No Error actual: SyntaxError: invalid property id reason: Expected value 'No Error', Actual value 'SyntaxError: invalid property id' -TEST_ID=js1_5/extensions/regress-380831.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=uneval trying to output a getter function that is a sharp definition expected: ( { b getter : # 1 = ( function ( ) { } ) , c getter : # 1 # } ) actual: ( { b getter : # 1 = ( ) { } , c getter : # 1 # } ) reason: Expected value ' ( { b getter : # 1 = ( function ( ) { } ) , c getter : # 1 # } ) ', Actual value ' ( { b getter : # 1 = ( ) { } , c getter : # 1 # } ) ' -TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: -TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_5/extensions/regress-381205.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=uneval with special getter functions: global expected: ({get x p() {print(4);}}) actual: ({get x () {print(4);}) reason: Expected value '({get x p() {print(4);}})', Actual value '({get x () {print(4);})' -TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: `(`SyntaxError: `)``?`missing : after property id -TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`, reason: Testcase produced no output! -TEST_ID=js1_5/extensions/regress-407019.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Expected match to '/Illegal operation on WrappedNative prototype object/', Actual value 'TypeError: window.Option is not a function' -TEST_ID=js1_5/extensions/regress-429264.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=2.6.24.*fc8, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 0 signal 11 -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: Sat Jan 01 -0051 00:00:00 `.``*` actual: xxxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51 reason: Expected value 'Sat Jan 01 -0051 00:00:00 `.``*`', Actual value 'xxxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: -1 99 actual: -001 -1 reason: Expected value '-1 99', Actual value '-001 -1' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: -51 49 actual: -051 -51 reason: Expected value '-51 49', Actual value '-051 -51' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: -51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51 actual: -051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051 reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51 actual: xxx-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051 reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: -1 99 actual: 000/ 0/ reason: Expected value '-1 99', Actual value '000/ 0/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: -100 00 actual: 0/00 00 reason: Expected value '-100 00', Actual value '0/00 00' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: -51 49 actual: 00+/ +/ reason: Expected value '-51 49', Actual value '00+/ +/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: 1851 51 actual: 1851 ,' reason: Expected value '1851 51', Actual value '1851 ,'' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") expected: 1899 99 actual: 1899 0/ reason: Expected value '1899 99', Actual value '1899 0/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: -9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999 actual: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reason: Expected value '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: 32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767 actual: 2767276727672767276727672767276727672767276727672767276727672767276727672767 reason: Expected value '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value '2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: -51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51 actual: 00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/ reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51 actual: xxx00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/ reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999 actual: xxxx'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reason: Expected value 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767 actual: xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767 reason: Expected value 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: Mon Jan 01 -9999 00:00:00 `.``*` actual: xxxx'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reason: Expected value 'Mon Jan 01 -9999 00:00:00 `.``*`', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: Sun Jan 01 32767 00:00:00 `.``*` actual: xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767276727672767 reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") expected: Sun Jan 01 32767 00:00:00 `.``*` actual: xxxxx2767276727672767276727672767276727672767276727672767276727672767276727672767 reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0400|-0500), TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") expected: 20:00 actual: Sat Jun 04 2005 `.``*` reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0400|-0500), TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") expected: 20:00:00 actual: Sat Jun 04 2005 `.``*` reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0400|-0500), TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") expected: 08:00:00 PM actual: Sat Jun 04 2005 `.``*` reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0700|-0800), TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") expected: 17:00 actual: Sat Jun 04 2005 `.``*` reason: Expected value '17:00', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0700|-0800), TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") expected: 17:00:00 actual: Sat Jun 04 2005 `.``*` reason: Expected value '17:00:00', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=(-0700|-0800), TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") expected: 05:00:00 PM actual: Sat Jun 04 2005 `.``*` reason: Expected value '05:00:00 PM', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%C") expected: 20 actual: Sat Jun 04 2005 `.``*` reason: Expected value '20', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%G") expected: 2005 actual: Sat Jun 04 2005 `.``*` reason: Expected value '2005', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%V") expected: 22 actual: Sat Jun 04 2005 `.``*` reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%Y-%m-%d") == Date.toLocaleFormat("%F") expected: 2005-06-04 actual: Sat Jun 04 2005 `.``*` reason: Expected value '2005-06-04', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%b") == Date.toLocaleFormat("%h") expected: Jun actual: Sat Jun 04 2005 `.``*` reason: Expected value 'Jun', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%e") expected: 4 actual: Sat Jun 04 2005 `.``*` reason: Expected value ' 4', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%g") expected: 05 actual: Sat Jun 04 2005 `.``*` reason: Expected value '05', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%D") expected: 06/04/05 actual: Sat Jun 04 2005 `.``*` reason: Expected value '06/04/05', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%n") == "NL" expected: NL actual: Sat Jun 04 2005 `.``*` reason: Expected value 'NL', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" expected: actual: Sat Jun 04 2005 `.``*` reason: Expected value ' ', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%u") expected: 6 actual: Sat Jun 04 2005 `.``*` reason: Expected value '6', Actual value 'Sat Jun 04 2005 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") expected: 05 actual: 2005 reason: Expected value '05', Actual value '2005' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") expected: Sat Jun 04 2005 `.``*` actual: 2005 reason: Expected value 'Sat Jun 04 2005 `.``*`, Actual value '2005' -TEST_ID=js1_6/Array/regress-320887.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=var x should not throw a ReferenceError expected: No error actual: ReferenceError: x is not defined reason: Expected value 'No error', Actual value 'ReferenceError: x is not defined' -TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Array.reduce should ignore holes: 1 expected: PASS actual: FAIL, reduce reason: Expected value 'PASS', Actual value 'FAIL, reduce' -TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Array.reduce should ignore holes: 2 expected: PASS actual: FAIL, reduceRight reason: Expected value 'PASS', Actual value 'FAIL, reduceRight' -TEST_ID=js1_6/Regress/regress-353078.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Do not assert with bogus toString, map, split expected: TypeError: can't convert global to string actual: No Crash reason: Expected value 'TypeError: can't convert global to string', Actual value 'No Crash' -TEST_ID=js1_7/block/regress-352422.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block expected: SyntaxError actual: reason: Expected value 'SyntaxError', Actual value '' -TEST_ID=js1_7/block/regress-352609.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=p = {}; (p.z = [let (x = 3, y = 4) x])() expected: true actual: false reason: Expected match to '/TypeError: (p.z = \[let \(x = 3, y = 4\) x\]|.*Array.*) is not a function/', Actual value 'TypeError: p.z = [(let (x = 3, y = 4) x)] is not a function' -TEST_ID=js1_7/block/regress-352786.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block expected: SyntaxError actual: reason: Expected value 'SyntaxError', Actual value '' -TEST_ID=js1_7/block/regress-352907.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block expected: SyntaxError actual: reason: Expected value 'SyntaxError', Actual value '' -TEST_ID=js1_7/block/regress-376410.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block expected: SyntaxError actual: reason: Expected value 'SyntaxError', Actual value '' -TEST_ID=js1_7/decompilation/regress-346642-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of destructuring assignment: 14 expected: function ( ) { while ( [ ] = e ) { } } actual: function ( ) { while ( ( [ ] = e ) ) { } } reason: Expected value ' function ( ) { while ( [ ] = e ) { } } ', Actual value ' function ( ) { while ( ( [ ] = e ) ) { } } ' -TEST_ID=js1_7/decompilation/regress-346642-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of destructuring assignment: 15 expected: function ( ) { while ( [ ] = a ( b ) ) { } } actual: function ( ) { while ( ( [ ] = a ( b ) ) ) { } } reason: Expected value ' function ( ) { while ( [ ] = a ( b ) ) { } } ', Actual value ' function ( ) { while ( ( [ ] = a ( b ) ) ) { } } ' -TEST_ID=js1_7/decompilation/regress-350704.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of let nested in for expected: function ( ) { try { } catch ( y ) { for ( z ( let ( y = 3 ) 4 ) ;; ) { } } } actual: function ( ) { try { } catch ( y ) { for ( z ( ( let ( y = 3 ) 4 ) ) ;; ) { } } } reason: Expected value ' function ( ) { try { } catch ( y ) { for ( z ( let ( y = 3 ) 4 ) ;; ) { } } } ', Actual value ' function ( ) { try { } catch ( y ) { for ( z ( ( let ( y = 3 ) 4 ) ) ;; ) { } } } ' -TEST_ID=js1_7/decompilation/regress-352026.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of yield in argument lists expected: function f ( ) { g ( ( ( let ( a = b ) c ) , d ) , e ) ; } actual: function f ( ) { g ( ( let ( a = b ) c , d ) , e ) ; } reason: Expected value ' function f ( ) { g ( ( ( let ( a = b ) c ) , d ) , e ) ; } ', Actual value ' function f ( ) { g ( ( let ( a = b ) c , d ) , e ) ; } ' -TEST_ID=js1_7/decompilation/regress-352079.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of various operators expected: function ( ) { f ( let ( y = 3 ) 4 ) ++; } actual: function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' -TEST_ID=js1_7/decompilation/regress-352272.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of |let| in arg to lvalue returning function expected: function ( ) { f ( let ( y = 3 ) 4 ) ++; } actual: function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' -TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { } expected: function ( ) { for ( a [ b , this ] in [ ] ) { } } actual: function ( ) { for ( let a [ ( b , this ) ] in [ ] ) { } } reason: Expected value ' function ( ) { for ( a [ b , this ] in [ ] ) { } } ', Actual value ' function ( ) { for ( let a [ ( b , this ) ] in [ ] ) { } } ' -TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { }: compile actual expected: No Error actual: SyntaxError: missing ; after for-loop initializer reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; after for-loop initializer' -TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { for(let x in []) let {} = [1]; }) expected: function ( ) { for ( let x in [ ] ) let [ ] = [ 1 ] ; } actual: function ( ) { for ( let x in [ ] ) { let [ ] = [ 1 ] ; } } reason: Expected value ' function ( ) { for ( let x in [ ] ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { for ( let x in [ ] ) { let [ ] = [ 1 ] ; } } ' -TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { while(0) let {} = [1]; }) expected: function ( ) { while ( 0 ) let [ ] = [ 1 ] ; } actual: function ( ) { while ( 0 ) { let [ ] = [ 1 ] ; } } reason: Expected value ' function ( ) { while ( 0 ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { while ( 0 ) { let [ ] = [ 1 ] ; } } ' -TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard expected: function ( ) { try { } catch ( a if [ b for each ( c in [ ] ) ] ) { } } actual: function ( ) { try { } catch ( a if [ b for each ( [ ] in [ ] ) ] ) { } } reason: Expected value ' function ( ) { try { } catch ( a if [ b for each ( c in [ ] ) ] ) { } } ', Actual value ' function ( ) { try { } catch ( a if [ b for each ( [ ] in [ ] ) ] ) { } } ' -TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard: compile actual expected: No Error actual: SyntaxError: invalid for/in left-hand side reason: Expected value 'No Error', Actual value 'SyntaxError: invalid for/in left-hand side' -TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions expected: function ( ) { return [ i * i for ( i in [ 0 ] ) if ( i % 2 ) ] ; } actual: function ( ) { return [ i * i for ( i in [ 0 ] ) ] ; } reason: Expected value ' function ( ) { return [ i * i for ( i in [ 0 ] ) if ( i % 2 ) ] ; } ', Actual value ' function ( ) { return [ i * i for ( i in [ 0 ] ) ] ; } ' -TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions expected: function ( ) { return [ i * j for ( i in [ 0 ] ) for ( j in [ 1 ] ) ] ; } actual: function ( ) { return [ i * j for ( i in [ 0 ] ) ] ; } reason: Expected value ' function ( ) { return [ i * j for ( i in [ 0 ] ) for ( j in [ 1 ] ) ] ; } ', Actual value ' function ( ) { return [ i * j for ( i in [ 0 ] ) ] ; } ' -TEST_ID=js1_7/decompilation/regress-381108.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of object literal should have space following : expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=js1_7/decompilation/regress-429252.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=trap should not change decompilation of { let x }: after trap expected: function f ( ) { { let x ; } } actual: function f ( ) { { let x ; } let x ; } reason: Expected value ' function f ( ) { { let x ; } } ', Actual value ' function f ( ) { { let x ; } let x ; } ' -TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: -TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: -TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: -TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-367629.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Decompilation of result with native function as getter expected: ({get h encodeURI() {[native code]}}) actual: ({get h () {[native code]}) reason: Expected value '({get h encodeURI() {[native code]}})', Actual value '({get h () {[native code]})' -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*` Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*` Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=athlon, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*` Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED signal 11 -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED signal 10 -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 5 -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(athlon|i686|x86_64), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 0 signal 11, reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=(i386|powerpc), TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 0 signal 10, reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 4 signal 0, reason: Testcase produced no output! -TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Keywords after get|set expected: ( { in getter : ( function ( ) { return this . for ; } ) , in setter : ( function ( value ) { this . for = value ; } ) } ) actual: SyntaxError : missing : after property id reason: Expected value ' ( { in getter : ( function ( ) { return this . for ; } ) , in setter : ( function ( value ) { this . for = value ; } ) } ) ', Actual value ' SyntaxError : missing : after property id ' -TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Keywords after get|set: compile actual expected: No Error actual: SyntaxError: missing ; before statement reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; before statement' -TEST_ID=js1_7/extensions/regress-380933.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Expected match to '/TypeError: Array.prototype.toSource called on incompatible Function/', Actual value 'No Error' -TEST_ID=js1_7/extensions/regress-381301.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=uneval of object with native-function getter expected: ( { get x decodeURI ( ) { [ native code ] } } ) actual: ( { get x ( ) { [ native code ] } ) reason: Expected value ' ( { get x decodeURI ( ) { [ native code ] } } ) ', Actual value ' ( { get x ( ) { [ native code ] } ) ' -TEST_ID=js1_7/extensions/regress-381303.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=object toSource when a property has both a getter and a setter expected: ( { get inn ( ) { return this . for ; } , set inn ( value ) { this . for = value ; } } ) actual: ( { get inn ( ) { return this [ ' for ' ] ; } , set inn ( value ) { this [ ' for ' ] = value ; } } ) reason: Expected value ' ( { get inn ( ) { return this . for ; } , set inn ( value ) { this . for = value ; } } ) ', Actual value ' ( { get inn ( ) { return this [ ' for ' ] ; } , set inn ( value ) { this [ ' for ' ] = value ; } } ) ' -TEST_ID=js1_7/extensions/regress-429266.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*`Assertion failure: nuses == 0 || *pcstack[pcdepth - 1] == JSOP_ENTERBLOCK, at jsopcode.c: -TEST_ID=js1_7/extensions/regress-429266.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 reason: BUGNUMBER: 429266 STATUS: Do not assert: nuses == 0 || *pcstack[pcdepth - 1] == JSOP_ENTERBLOCK -TEST_ID=js1_7/geniter/regress-347739.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=generator_instance.close readonly and immune: 2 expected: Inside finally: 1 Inside finally: 2 actual: Inside finally: 2 reason: Expected value 'Inside finally: 1 Inside finally: 2 ', Actual value 'Inside finally: 2 ' -TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/geniter/regress-349012-01.js:`.``*`: yield from closing generator function gen() {try {try {yield 1;} finally {actual += "Inner finally";yield 2;}} finally {actual += ",Outer finally";}} -TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=closing a generator fails to report error if yield during close is ignored expected: Inner finally,Outer finally actual: reason: Expected value 'Inner finally,Outer finally', Actual value '' -TEST_ID=js1_7/geniter/regress-349331.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=test GC-invoke close expected: true actual: false reason: Expected value 'true', Actual value 'false' -TEST_ID=js1_7/iterable/regress-340526-02.js, TEST_BRANCH=1.9.0, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Iterators: cross-referenced objects with close handler can delay close handler execution expected: 2 actual: 0 reason: Expected value '2', Actual value '0' -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=8.11.0, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=mac, TEST_MACHINE=.*, TEST_PROCESSORTYPE=powerpc, TEST_KERNEL=8.11.0, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=i686, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_7/iterable/regress-415922.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`expected: Error: its enumeration failed actual: No exception -TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of destructuring assignment: 2 `(`expected: TypeError: x.t has no properties actual: TypeError: e1.t has no properties reason: Expected value 'TypeError: x.t has no properties', Actual value 'TypeError: e1.t has no properties'`|`expected: true actual: false reason: Expected match to '/TypeError: x.t (has no properties|is undefined)/', Actual value 'TypeError: e1.t `(`has no properties`|`is undefined`)`'`)` -TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=decompilation of destructuring assignment: 8 expected: TypeError: ++x is not a function actual: TypeError: ++e1 is not a function reason: Expected value 'TypeError: ++x is not a function', Actual value 'TypeError: ++e1 is not a function' -TEST_ID=js1_7/lexical/regress-351515.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Invalid uses of yield, let keywords in js17: global: yield = 1 expected: SyntaxError: syntax error actual: SyntaxError: yield not in function reason: Expected value 'SyntaxError: syntax error', Actual value 'SyntaxError: yield not in function' -TEST_ID=js1_7/regexp/yflag.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regexp/yflag.js:`.``*`: `(`SyntaxError: `)``?`invalid flag after regular expression -TEST_ID=js1_7/regress/regress-350387.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regress/regress-350387.js:`.``*`: `(`ReferenceError: `)``?`x is not defined -TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Test reduce of empty array without initializer. : TypeError: reduce of empty array with no initial value expected: TypeError: reduce of empty array with no initial value actual: TypeError: arr0elms.reduce is not a function reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduce is not a function' -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value expected: TypeError: reduce of empty array with no initial value actual: TypeError: arr0elms.reduceRight is not a function reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function' -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regress/regress-363040-01.js:`.``*`: `(`TypeError: `)``?`arr0elms.reduce is not a function -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regress/regress-363040-01.js:`.``*`: `(`TypeError: `)``?`arr0elms.reduce is not a function -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*` Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduce is not a function' -TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regress/regress-363040-02.js:`.``*`: `(`TypeError: `)``?`arr.reduce is not a function -TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`/js1_7/regress/regress-363040-02.js:`.``*`: `(`TypeError: `)``?`arr.reduce is not a function -TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: `.``*`: uncaught exception: for-in binds name to early -TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: uncaught exception: for-in binds name to early BUGNUMBER: 372331 STATUS: for-in should not bind name too early -TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: BUGNUMBER: 372331 STATUS: for-in should not bind name too early uncaught exception: for-in binds name to early -TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`(`EXIT STATUS: CRASHED `)``?``.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LEAVEBLOCKEXPR ? fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp - 1 : fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 reason: Testcase produced no output! -TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=`.``*`reason: Testcase produced no output! -TEST_ID=js1_7/regress/regress-385133-01.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=shell, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED -TEST_ID=js1_7/regress/regress-389605.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=(browser|shell), TEST_OS=(linux|mac), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED `.``*` Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: -TEST_ID=js1_7/regress/regress-389605.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: CRASHED 3 -TEST_ID=js1_7/regress/regress-389605.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=win32, TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION= expected: Expected exit 0 actual: Actual exit 3, signal 0 -TEST_ID=js1_7/regress/regress-406477.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=eval of function x() in a function with an argument "x" and "let x" expected: actual: Unexpected test_param_result value: 1NLUnexpected test_var_result value: 1NL reason: Expected value '', Actual value 'Unexpected test_param_result value: 1NLUnexpected test_var_result value: 1NL' -TEST_ID=js1_7/regress/regress-410649.js, TEST_BRANCH=(1.8.1|1.9.0), TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=(browser|shell), TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=type for destructuring parameter case expected: function actual: number reason: Expected value 'function', Actual value 'number' -TEST_ID=js1_8/genexps/regress-384991.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=(debug|opt), TEST_TYPE=browser, TEST_OS=(linux|mac|win32), TEST_MACHINE=.*, TEST_PROCESSORTYPE=.*, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT -TEST_ID=js1_8/regress/regress-384412.js, TEST_BRANCH=1.8.1, TEST_RESULT=FAILED, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_MACHINE=.*, TEST_PROCESSORTYPE=x86_64, TEST_KERNEL=.*, TEST_DATE=.*, TEST_TIMEZONE=.*, TEST_DESCRIPTION=EXIT STATUS: TIMED OUT +TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' +TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 11 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 12 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 14 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 15 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 3 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 5 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 8 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 9 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' +TEST_ID=e4x/decompilation/regress-352789.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompilation of new and .@ reason: Expected value ' function ( ) { return new ( a ( ) . @ z ) ; } ', Actual value ' function ( ) { return new a . @ z ; } ' +TEST_ID=e4x/decompilation/regress-429249.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=trap should not change decompilation : after trap reason: Expected value ' function g ( ) { return ; } ', Actual value ' function g ( ) { return ""; } ' +TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 50 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' +TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 51 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' +TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 53 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' +TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 54 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' +TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 56 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' +TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=function::globalfunction Section reason: `.``*`/e4x/extensions/regress-337226.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::parseInt +TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-337226.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::parseInt +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-374025.js:`.``*`: out of memory +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-410192.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Proper quoting of attribute by uneval/toSource reason: Expected value '"v"', Actual value 'v' +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory +TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 4 of test - 13.1.2.1 - isXMLName() reason: Expected value 'exception', Actual value 'no exception' +TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - 13.1.2.1 - isXMLName() reason: Expected value '', Actual value '0xAA-0xAA : Invalid char accepted as start : Invalid Char accepted as other NL0xB5-0xB5 : Invalid char accepted as start : Invalid Char accepted as other NL0xB7-0xB7 : Other char not acceptedNL0xBA-0xBA : Invalid char accepted as start : Invalid Char accepted as other NL0x132-0x133 : Invalid char accepted as start : Invalid Char accepted as other NL0x13F-0x140 : Invalid char accepted as start : Invalid Char accepted as other NL0x149-0x149 : Invalid char accepted as start : Invalid Char accepted as other NL0x17F-0x17F : Invalid char accepted as start : Invalid Char accepted as other NL0x1C4-0x1CC : Invalid char accepted as start : Invalid Char accepted as other NL0x1F1-0x1F3 : Invalid char accepted as start : Invalid Char accepted as other NL0x2B0-0x2B8 : Invalid Char accepted as other NL0x2BB-0x2C1 : Start char not acceptedNL0x2E0-0x2E4 : Invalid Char accepted as other NL0x37A-0x37A : Invalid Char accepted as other NL0x387-0x387 : Other char not acceptedNL0x559-0x559 : Start char not acceptedNL0x587-0x587 : Invalid char accepted as start : Invalid Char accepted as other NL0x6E5-0x6E6 : Start char not acceptedNL0xEDC-0xEDD : Invalid char accepted as start : Invalid Char accepted as other NL0x1101-0x1101 : Invalid char accepted as start : Invalid Char accepted as other NL0x1104-0x1104 : Invalid char accepted as start : Invalid Char accepted as other NL0x1108-0x1108 : Invalid char accepted as start : Invalid Char accepted as other NL0x110A-0x110A : Invalid char accepted as start : Invalid Char accepted as other NL0x110D-0x110D : Invalid char accepted as start : Invalid Char accepted as other NL0x1113-0x113B : Invalid char accepted as start : Invalid Char accepted as other NL0x113D-0x113D : Invalid char accepted as start : Invalid Char accepted as other NL0x113F-0x113F : Invalid char accepted as start : Invalid Char accepted as other NL0x1141-0x114B : Invalid char accepted as start : Invalid Char accepted as other NL0x114D-0x114D : Invalid char accepted as start : Invalid Char accepted as other NL0x114F-0x114F : Invalid char accepted as start : Invalid Char accepted as other NL0x1151-0x1153 : Invalid char accepted as start : Invalid Char accepted as other NL0x1156-0x1158 : Invalid char accepted as start : Invalid Char accepted as other NL0x1162-0x1162 : Invalid char accepted as start : Invalid Char accepted as other NL0x1164-0x1164 : Invalid char accepted as start : Invalid Char accepted as other NL0x1166-0x1166 : Invalid char accepted as start : Invalid Char accepted as other NL0x1168-0x1168 : Invalid char accepted as start : Invalid Char accepted as other NL0x116A-0x116C : Invalid char accepted as start : Invalid Char accepted as other NL0x116F-0x1171 : Invalid char accepted as start : Invalid Char accepted as other NL0x1174-0x1174 : Invalid char accepted as start : Invalid Char accepted as other NL0x1176-0x119D : Invalid char accepted as start : Invalid Char accepted as other NL0x119F-0x11A2 : Invalid char accepted as start : Invalid Char accepted as other NL0x11A9-0x11AA : Invalid char accepted as start : Invalid Char accepted as other NL0x11AC-0x11AD : Invalid char accepted as start : Invalid Char accepted as other NL0x11B0-0x11B6 : Invalid char accepted as start : Invalid Char accepted as other NL0x11B9-0x11B9 : Invalid char accepted as start : Invalid Char accepted as other NL0x11BB-0x11BB : Invalid char accepted as start : Invalid Char accepted as other NL0x11C3-0x11EA : Invalid char accepted as start : Invalid Char accepted as other NL0x11EC-0x11EF : Invalid char accepted as start : Invalid Char accepted as other NL0x11F1-0x11F8 : Invalid char accepted as start : Invalid Char accepted as other NL0x207F-0x207F : Invalid char accepted as start : Invalid Char accepted as other NL0x20DD-0x20E0 : Invalid Char accepted as other NL0x2102-0x2102 : Invalid char accepted as start : Invalid Char accepted as other NL0x2107-0x2107 : Invalid char accepted as start : Invalid Char accepted as other NL0x210A-0x2113 : Invalid char accepted as start : Invalid Char accepted as other NL0x2115-0x2115 : Invalid char accepted as start : Invalid Char accepted as other NL0x2118-0x211D : Invalid char accepted as start : Invalid Char accepted as other NL0x2124-0x2124 : Invalid char accepted as start : Invalid Char accepted as other NL0x2128-0x2128 : Invalid char accepted as start : Invalid Char accepted as other NL0x212C-0x212D : Invalid char accepted as start : Invalid Char accepted as other NL0x212F-0x2131 : Invalid char accepted as start : Invalid Char accepted as other NL0x2133-0x2138 : Invalid char accepted as start : Invalid Char accepted as other NL0x2160-0x217F : Invalid char accepted as start : Invalid Char accepted as other NL0x309B-0x309C : Invalid Char accepted as other NL0x3131-0x318E : Invalid char accepted as start : Invalid Char accepted as other NL0xF900-0xFA2D : Invalid char accepted as start : Invalid Char accepted as other NL0xFB00-0xFB06 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB13-0xFB17 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB1E-0xFB1E : Invalid Char accepted as other NL0xFB1F-0xFB28 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB2A-0xFB36 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB38-0xFB3C : Invalid char accepted as start : Invalid Char accepted as other NL0xFB3E-0xFB3E : Invalid char accepted as start : Invalid Char accepted as other NL0xFB40-0xFB41 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB43-0xFB44 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB46-0xFBB1 : Invalid char accepted as start : Invalid Char accepted as other NL0xFBD3-0xFD3D : Invalid char accepted as start : Invalid Char accepted as other NL0xFD50-0xFD8F : Invalid char accepted as start : Invalid Char accepted as other NL0xFD92-0xFDC7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFDF0-0xFDFB : Invalid char accepted as start : Invalid Char accepted as other NL0xFE20-0xFE23 : Invalid Char accepted as other NL0xFE70-0xFE72 : Invalid char accepted as start : Invalid Char accepted as other NL0xFE74-0xFE74 : Invalid char accepted as start : Invalid Char accepted as other NL0xFE76-0xFEFC : Invalid char accepted as start : Invalid Char accepted as other NL0xFF10-0xFF19 : Invalid Char accepted as other NL0xFF21-0xFF3A : Invalid char accepted as start : Invalid Char accepted as other NL0xFF41-0xFF5A : Invalid char accepted as start : Invalid Char accepted as other NL0xFF66-0xFF6F : Invalid char accepted as start : Invalid Char accepted as other NL0xFF70-0xFF70 : Invalid Char accepted as other NL0xFF71-0xFF9D : Invalid char accepted as start : Invalid Char accepted as other NL0xFF9E-0xFF9F : Invalid Char accepted as other NL0xFFA0-0xFFBE : Invalid char accepted as start : Invalid Char accepted as other NL0xFFC2-0xFFC7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFFCA-0xFFCF : Invalid char accepted as start : Invalid Char accepted as other NL0xFFD2-0xFFD7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFFDA-0xFFDC : Invalid char accepted as start : Invalid Char accepted as other NL' +TEST_ID=e4x/Namespace/regress-292863.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Undeclaring namespace prefix should cause parse error reason: Expected value 'error', Actual value 'no error' +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-319872.js:`.``*`: out of memory +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Reject invalid spaces in tags reason: Expected value 'SyntaxError: invalid XML name', Actual value '' +TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Reject invalid spaces in tags reason: Expected value 'SyntaxError: invalid XML tag syntax', Actual value '' +TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: kid2->parent == xml || !kid2->parent, at `.``*`jsxml.c: +TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: kid2->parent == xml || !kid2->parent, at `.``*`jsxml.c: +TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Do not assert: kid2->parent == xml || !kid2->parent reason: Expected value 'NL NL 3NL NL', Actual value 'NL 5NL' +TEST_ID=e4x/Regress/regress-369740.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 3 of test - generic code for function:: reason: Expected value 'test', Actual value 'TypeError: can't set property @mozilla.org/js/function::toString in XMLList' +TEST_ID=e4x/Regress/regress-370016.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=with (nonxmlobj) function:: Section reason: `.``*`/e4x/Regress/regress-370016.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::sin +TEST_ID=e4x/Regress/regress-370016.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-370016.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::sin +TEST_ID=e4x/Regress/regress-370048-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=with (obj) function:: with xml lists Section reason: `.``*`/e4x/Regress/regress-370048-01.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::length +TEST_ID=e4x/Regress/regress-370048-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-370048-01.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::length +TEST_ID=e4x/Regress/regress-370372.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=with (xmllist) function::name assignments Section reason: `.``*`/e4x/Regress/regress-370372.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::toString +TEST_ID=e4x/Regress/regress-370372.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-370372.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::toString +TEST_ID=e4x/TypeConversion/10.2.1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 5 of test - 10.2.1 - XML.toXMLString reason: Expected value ' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 12 of test - 13.4.4.26 - XML normalize() reason: Expected value '1', Actual value '0' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 13 of test - 13.4.4.26 - XML normalize() reason: Expected value '1', Actual value '0' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 22 of test - 13.4.4.26 - XML normalize() reason: Expected value ' ', Actual value '' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 23 of test - 13.4.4.26 - XML normalize() reason: Expected value '2', Actual value '1' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 3 of test - 13.4.4.26 - XML normalize() reason: Expected value ' one ', Actual value ' one ' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 4 of test - 13.4.4.26 - XML normalize() reason: Expected value ' ', Actual value '' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 5 of test - 13.4.4.26 - XML normalize() reason: Expected value '2', Actual value '0' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - 13.4.4.26 - XML normalize() reason: Expected value ' ', Actual value '' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 7 of test - 13.4.4.26 - XML normalize() reason: Expected value '1', Actual value '0' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 8 of test - 13.4.4.26 - XML normalize() reason: Expected value ' fun ', Actual value ' fun ' +TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 9 of test - 13.4.4.26 - XML normalize() reason: Expected value '2', Actual value '1' +TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-1.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=xmlsimple.stringmethod === xmlsimple.function::stringmethod Section 61 reason: `.``*`/e4x/XML/regress-376773.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::charAt +TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Section 61 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod reason: +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/Array/regress-322135-03.js:`.``*`: out of memory +TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/Array/regress-322135-04.js:`.``*`: out of memory +TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toLocaleString called on incompatible String', Actual value 'f,o,o' +TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toSource called on incompatible String', Actual value '["f", "o", "o"]' +TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toString called on incompatible String', Actual value 'f,o,o' +TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date 0 reason: Expected value '31', Actual value '1' +TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date -1 reason: Expected value '30', Actual value '1' +TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date null reason: Expected value '31', Actual value '1' +TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.prototype.toLocaleString should not clamp year: check toLocaleString reason: Expected value '-271821', Actual value 'null' +TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.prototype.toLocaleString should not clamp year: check toLocaleString reason: Expected value '275760', Actual value 'null' +TEST_ID=ecma_3/ExecutionContexts/10.1.3-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/ExecutionContexts/10.1.3-2.js:`.``*`: x is not a function +TEST_ID=ecma_3/ExecutionContexts/10.1.3-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/ExecutionContexts/10.1.3-2.js:`.``*`: TypeError: x is not a function +TEST_ID=ecma_3/Expressions/11.10-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.10 - & should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/Expressions/11.10-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.10 - ^ should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/Expressions/11.10-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.10 - | should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/Expressions/11.7.1-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.1 - << should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/Expressions/11.7.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.2 - >> should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/Expressions/11.7.3-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.3 - >>> should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 0 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 1 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 2 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-368516.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Ignore unicode BOM characters: 0 reason: Expected value 'No Error', Actual value 'SyntaxError: illegal character' +TEST_ID=ecma_3/LexicalConventions/7.9.1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Automatic Semicolon insertion in postfix expressions: (xNL)-- y reason: Type mismatch, expected type string, actual type number Expected value 'SyntaxError: missing ; before statement', Actual value '0' +TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=3.3.toString.length should be 1 reason: Expected value '1', Actual value '0' +TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=num.toString(), num.toString(10), and num.toString(undefined) should all be equivalent reason: Type mismatch, expected type boolean, actual type object Expected value 'false', Actual value 'Error: illegal radix 0' +TEST_ID=ecma_3/Operators/11.13.1-002.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.13.1 Simple Assignment should return type of RHS reason: Expected value 'string', Actual value 'number' +TEST_ID=ecma_3/Operators/11.4.1-002.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.4.1 - The delete Operator - delete f() reason: Type mismatch, expected type boolean, actual type string Expected value 'true', Actual value 'SyntaxError: invalid assignment left-hand side' +TEST_ID=ecma_3/RegExp/15.10.2.12.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.10.2.12 - CharacterClassEscape d reason: Expected value 'false', Actual value 'true' +TEST_ID=ecma_3/RegExp/regress-307456.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-330684.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375711.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert with /[Q-b]/i.exec(""): /[Q-b]/i.exec("") reason: Expected value 'No Error', Actual value 'SyntaxError: invalid range in character class' +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: (c2 <= cs->length) && (c1 <= c2)(new RegExp("[ß-Ç]]", "i")).exec("") reason: Expected value 'SyntaxError: invalid range in character class', Actual value '' +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: (c2 <= cs->length) && (c1 <= c2)(new RegExp("[ß-Ç]]", "i")).exec("") reason: Expected value 'SyntaxError: invalid range in character class', Actual value '' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 7 reason: Expected value '/x/g/x/g/x/g', Actual value 'xnullx' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 42 reason: Expected value 'ok', Actual value 'failure' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 56 reason: Expected value '|x|string|x|string|0|number|xyz|string||y|string||undefined|1|number|xyz|string|z', Actual value '|x|string|x|string|0|number|xyz|string||y|string||string|1|number|xyz|string|z' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 58 reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 59 reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 60 reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 61 reason: Expected value 'xy|z|string||string|2|number|xyz|string|', Actual value 'xyz' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 62 reason: Expected value 'x|y|string|y|string||undefined|1|number|xyz|string|z', Actual value 'x|y|string|y|string||string|1|number|xyz|string|z' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 64 reason: Expected value 'x|y|string|y|string||undefined|1|number|xyyz|string||y|string|y|string||undefined|2|number|xyyz|string|z', Actual value 'x|y|string|y|string||string|1|number|xyyz|string||y|string|y|string||string|2|number|xyyz|string|z' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 66 reason: Expected value 'xyy|z|string||undefined||string|3|number|xyyz|string|', Actual value 'xyy|z|string||string||string|3|number|xyyz|string|' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 67 reason: Expected value 'x|y|string|1|number|xyz|string||string||undefined|y|string|z', Actual value 'x|y|string|1|number|xyz|string||string||string|y|string|z' +TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) reason: Expected value 'undefined', Actual value '' +TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return $1; }) reason: Expected value 'undefined', Actual value '' +TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return String($1); }) reason: Expected value 'undefined', Actual value '' +TEST_ID=ecma_3/Unicode/regress-352044-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=issues with Unicode escape sequences in JavaScript source code reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/Unicode/regress-352044-02-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=issues with Unicode escape sequences in JavaScript source code reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-0, 1) reason: wrong value +TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-1, Infinity) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-0.9) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-Number.MIN_VALUE) reason: wrong value +TEST_ID=ecma/String/15.5.4.6-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=var f = new Object( String.prototype.indexOf ); f('[object Window @ `.``*` (native @ `.``*`)]') reason: wrong value +TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=!(0/0) reason: wrong value +TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=1000 % 0 ? true : false reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=typeof f(/abc/) reason: wrong value +TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=typeof new f(/abc/) reason: wrong value +TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 1 of test - [,1] reason: Expected value '1', Actual value '01' +TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 2 of test - [,,1] reason: Expected value '2', Actual value '012' +TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 4 of test - [1,,] reason: Expected value '0', Actual value '01' +TEST_ID=js1_5/Array/regress-101964.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - reason: Expected value 'Truncation took less than 50 ms', Actual value 'Truncation took `.``*` ms' +TEST_ID=js1_5/Array/regress-157652.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-157652.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN decompile Infinity as 1/0 reason: Expected value ' function ( ) { return 1 / 0 ; } ', Actual value ' function ( ) { return Infinity ; } ' +TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN: decompile NaN as 0/0 reason: Expected value ' function ( ) { var NaN = 0 / 0 ; return NaN ; } ', Actual value ' function ( ) { var NaN = NaN ; return NaN ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) . z ) ; } ', Actual value ' function ( ) { new x ( y ) . z ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) ( z ) ) ; } ', Actual value ' function ( ) { new x ( y ) ( z ) ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( z ) ) ( w ) ; } ', Actual value ' function ( ) { new x ( z ) ( w ) ; } ' +TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0: 8 / eval("" + f)() reason: Expected value '-Infinity', Actual value 'Infinity' +TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0 reason: Expected value ' function ( ) { return - 0 ; } ', Actual value ' function ( ) { return 0 ; } ' +TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: invalid decrement operand +TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: SyntaxError: invalid decrement operand:; `.``*`/js1_5/decompilation/regress-352453.js:`.``*`: var f = function() { (eval)(x)-- };; `.``*`/js1_5/decompilation/regress-352453.js:`.``*`: +TEST_ID=js1_5/decompilation/regress-353146.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new expressions revisited reason: Expected value ' function ( ) { return new ( p ( 2 ) [ 1 ] ) ; } ', Actual value ' function ( ) { return new p ( 2 ) [ 1 ] ; } ' +TEST_ID=js1_5/decompilation/regress-356083.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation for ({this setter: function () { } }) reason: Expected value ' function ( ) { return { this setter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' this ' setter : function ( ) { } } ; } ' +TEST_ID=js1_5/decompilation/regress-356248.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of object literal with named getter reason: Expected value ' function ( ) { return { set p y ( ) { } } ; } ', Actual value ' function ( ) { return { set py ( ) { } } ; } ' +TEST_ID=js1_5/decompilation/regress-371692.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keep extra parentheses in conditional tests reason: Expected value ' function ( ) { if ( ( i = 1 ) ) { a = 2 ; } } ', Actual value ' function ( ) { if ( i = 1 ) { a = 2 ; } } ' +TEST_ID=js1_5/decompilation/regress-375882.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of switch with case 0/0 reason: Expected value ' function ( ) { switch ( a ) { case 0 / 0 : a ; case 1 / 0 : b ; case 1 / - 0 : c ; case - 0 : d ; default : ; } } ', Actual value ' function ( ) { switch ( a ) { case NaN : a ; case Infinity : b ; case - Infinity : c ; case 0 : d ; default : ; } } ' +TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( eval ( ) ) ; } ', Actual value ' function ( ) { new eval ; } ' +TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( g ( ) ) ; } ', Actual value ' function ( ) { new g ; } ' +TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: toString reason: Expected value ' function ( ) { return "\ t "; } ', Actual value ' function ( ) { return " "; } ' +TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: uneval reason: Expected value ' ( function ( ) { return "\ t "; } ) ', Actual value ' ( function ( ) { return " "; } ) ' +TEST_ID=js1_5/Error/regress-354246.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Error/regress-354246.js:`.``*`: x is not defined +TEST_ID=js1_5/Error/regress-354246.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Error/regress-354246.js:`.``*`: x is not defined +TEST_ID=js1_5/Expressions/regress-394673.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Expressions/regress-394673.js:`.``*`: too much recursion +TEST_ID=js1_5/Expressions/regress-394673.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Expressions/regress-394673.js:`.``*`: InternalError: too much recursion +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") reason: Expected value '"\t"', Actual value '" "' +TEST_ID=js1_5/extensions/regress-322957.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=TryMethod should not eat getter exceptions reason: Type mismatch, expected type boolean, actual type number Expected value 'true', Actual value '-1' +TEST_ID=js1_5/extensions/regress-330569.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-342960.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-350531.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-351448.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\s]+)/.exec("a0- z") reason: Expected value '0- ,0- ', Actual value 'SyntaxError: invalid range in character class' +TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\S]+)/.exec("a0- z") reason: Expected value 'a0-,a0-', Actual value 'SyntaxError: invalid range in character class' +TEST_ID=js1_5/extensions/regress-352455.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Eval object with non-function getters/setters reason: Expected value 'SyntaxError: invalid getter usage', Actual value '' +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !OBJ_GET_PROTO(cx, ctor) reason: Expected value 'function f() {NL}', Actual value 'function () {NL}' +TEST_ID=js1_5/extensions/regress-353214.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of |function() { (function ([x]) { })(); eval("return 3;") }| reason: Expected value ' function ( ) { ( function ( [ x ] ) { } ( ) ) ; eval ( " return 3 ;" ) ; } ', Actual value ' function ( ) { ( function ( [ x ] ) { } ) ( ) ; eval ( " return 3 ;" ) ; } ' +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1 reason: Expected value ' function ( ) { [ super ] = q ; } ', Actual value ' function ( ) { [ " super " ] = q ; } ' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 2 reason: Expected value ' function ( ) { return { super getter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' super ' getter : function ( ) { } } ; } ' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3 reason: Expected value ' function ( ) { [ goto ] = a ; } ', Actual value ' function ( ) { [ " goto " ] = a ; } ' +TEST_ID=js1_5/extensions/regress-355820.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Remove non-standard Script object reason: Expected value 'undefined', Actual value 'function' +TEST_ID=js1_5/extensions/regress-356085.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=js_obj_toString for getter/setter reason: Expected value ' ( { set p y ( ) { } } ) ', Actual value ' ( { set p ( ) { } } ) ' +TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property 1', Actual value 'No warning' +TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property a', Actual value 'No warning' +TEST_ID=js1_5/extensions/regress-367923.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for variable redeclares argument reason: Expected value 'TypeError: variable v redeclares argument', Actual value 'TypeError: variable v hides argument' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-375801.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval should use "(void 0)" instead of "undefined": uneval reason: Expected value ' ( { a : ( void 0 ) } ) ', Actual value ' ( { a : undefined } ) ' +TEST_ID=js1_5/extensions/regress-376052.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=javascript.options.anonfunfix to allow function (){} expressions: 3 reason: Expected value 'SyntaxError: syntax error', Actual value 'No Error' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid property id' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = [ a ] ; } ) ', Actual value ' ( function ( ) { return # 1 = [ , a ] ; } ) ' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = { a : b } ; } ) ', Actual value ' ( function ( ) { return # 1 = { , a : b } ; } ) ' +TEST_ID=js1_5/extensions/regress-380831.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval trying to output a getter function that is a sharp definition reason: Expected value ' ( { b getter : # 1 = ( function ( ) { } ) , c getter : # 1 # } ) ', Actual value ' ( { b getter : # 1 = ( ) { } , c getter : # 1 # } ) ' +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-381205.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval with special getter functions: global reason: Expected value '({get x p() {print(4);}})', Actual value '({get x () {print(4);})' +TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: missing : after property id +TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: SyntaxError: missing : after property id:; `.``*`/js1_5/extensions/regress-381304.js:`.``*`: set in(value) {this.for = value;},; `.``*`/js1_5/extensions/regress-381304.js:`.``*`: +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-394967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-407019.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !JS_IsExceptionPending(cx) - Browser only reason: Expected match to '/Illegal operation on WrappedNative prototype object/', Actual value 'TypeError: window.Option is not a function' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '-001 -1' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '-051 -51' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sat Jan 01 -0051 00:00:00 `.``*`', Actual value 'xxxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Mon Jan 01 -9999 00:00:00 `.``*`', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-100 00', Actual value '0/00 00' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1851 51', Actual value '1851 ,'' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1899 99', Actual value '1899 0/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '000/ 0/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '00+/ +/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value '2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value '05', Actual value '2005' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value 'Sat Jun 04 2005 20:00:00 `.``*`', Actual value '2005' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%b") == Date.toLocaleFormat("%h") reason: Expected value 'Jun', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C") reason: Expected value '20', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%e") reason: Expected value ' 4', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%g") reason: Expected value '05', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%G") reason: Expected value '2005', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%D") reason: Expected value '06/04/05', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%n") == "NL" reason: Expected value 'NL', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value ' ', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%u") reason: Expected value '6', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y-%m-%d") == Date.toLocaleFormat("%F") reason: Expected value '2005-06-04', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/Function/regress-338001.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory; SyntaxError: malformed formal parameter +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory; SyntaxError: malformed formal parameter +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; SyntaxError: malformed formal parameter +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory; SyntaxError: malformed formal parameter +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory; SyntaxError: malformed formal parameter +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-03.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-203278-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-203278-2.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-311497.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-319980-01.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-348532.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-348532.js:`.``*`: too much recursion +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Unknown reason: :`.``*`: uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/Regress/regress-203278-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-203278-1.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-319384.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-319384.js:`.``*`: can't convert "foo" to an integer +TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arguments no longer shared reason: Expected value 'false', Actual value 'true' +TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arity no longer shared reason: Expected value 'false', Actual value 'true' +TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: caller no longer shared reason: Expected value 'false', Actual value 'true' +TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: name no longer shared reason: Expected value 'false', Actual value 'true' +TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Unknown reason: :0: uncaught exception: Permission denied to get property UnnamedClass.classes +TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=JS_ReportPendingException should reason: Expected value 'Error', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Unknown reason: javascript:Components.classes:0: Script error. +TEST_ID=js1_5/Regress/regress-329530.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-330352.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: alert(6); } alert(5); reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: } { reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: } reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: }}}}} reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags), at `.``*`jsscript.c: +TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags), at `.``*`jsscript.c: +TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 1 reason: Expected value 'toString called', Actual value 'toString not called' +TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 2 reason: Expected value 'toString called', Actual value 'toString not called' +TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-422348.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-422348.js:`.``*`: out of memory +TEST_ID=js1_6/Array/regress-320887.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=var x should not throw a ReferenceError reason: Expected value 'No error', Actual value 'ReferenceError: x is not defined' +TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.reduce should ignore holes: 1 reason: Expected value 'PASS', Actual value 'FAIL, reduce' +TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.reduce should ignore holes: 2 reason: Expected value 'PASS', Actual value 'FAIL, reduceRight' +TEST_ID=js1_6/Regress/regress-353078.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert with bogus toString, map, split reason: Expected value 'TypeError: can't convert global to string', Actual value 'No Crash' +TEST_ID=js1_7/block/regress-352422.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block reason: Expected value 'SyntaxError', Actual value '' +TEST_ID=js1_7/block/regress-352609.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=p = {}; (p.z = [let (x = 3, y = 4) x])() reason: Expected match to '/TypeError: (p.z = \[let \(x = 3, y = 4\) x\]|.*Array.*) is not a function/', Actual value 'TypeError: p.z = [(let (x = 3, y = 4) x)] is not a function' +TEST_ID=js1_7/block/regress-352786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block reason: Expected value 'SyntaxError', Actual value '' +TEST_ID=js1_7/block/regress-352907.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block reason: Expected value 'SyntaxError', Actual value '' +TEST_ID=js1_7/block/regress-376410.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=let declaration must be direct child of block, top-level implicit block, or switch body block reason: Expected value 'SyntaxError', Actual value '' +TEST_ID=js1_7/decompilation/regress-346642-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 14 reason: Expected value ' function ( ) { while ( [ ] = e ) { } } ', Actual value ' function ( ) { while ( ( [ ] = e ) ) { } } ' +TEST_ID=js1_7/decompilation/regress-346642-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 15 reason: Expected value ' function ( ) { while ( [ ] = a ( b ) ) { } } ', Actual value ' function ( ) { while ( ( [ ] = a ( b ) ) ) { } } ' +TEST_ID=js1_7/decompilation/regress-350704.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of let nested in for reason: Expected value ' function ( ) { try { } catch ( y ) { for ( z ( let ( y = 3 ) 4 ) ;; ) { } } } ', Actual value ' function ( ) { try { } catch ( y ) { for ( z ( ( let ( y = 3 ) 4 ) ) ;; ) { } } } ' +TEST_ID=js1_7/decompilation/regress-352026.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of yield in argument lists reason: Expected value ' function f ( ) { g ( ( ( let ( a = b ) c ) , d ) , e ) ; } ', Actual value ' function f ( ) { g ( ( let ( a = b ) c , d ) , e ) ; } ' +TEST_ID=js1_7/decompilation/regress-352079.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of various operators reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' +TEST_ID=js1_7/decompilation/regress-352272.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of |let| in arg to lvalue returning function reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' +TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { }: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; after for-loop initializer' +TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { } reason: Expected value ' function ( ) { for ( a [ b , this ] in [ ] ) { } } ', Actual value ' function ( ) { for ( let a [ ( b , this ) ] in [ ] ) { } } ' +TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { for(let x in []) let {} = [1]; }) reason: Expected value ' function ( ) { for ( let x in [ ] ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { for ( let x in [ ] ) { let [ ] = [ 1 ] ; } } ' +TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { while(0) let {} = [1]; }) reason: Expected value ' function ( ) { while ( 0 ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { while ( 0 ) { let [ ] = [ 1 ] ; } } ' +TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid for/in left-hand side' +TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard reason: Expected value ' function ( ) { try { } catch ( a if [ b for each ( c in [ ] ) ] ) { } } ', Actual value ' function ( ) { try { } catch ( a if [ b for each ( [ ] in [ ] ) ] ) { } } ' +TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions reason: Expected value ' function ( ) { return [ i * i for ( i in [ 0 ] ) if ( i % 2 ) ] ; } ', Actual value ' function ( ) { return [ i * i for ( i in [ 0 ] ) ] ; } ' +TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions reason: Expected value ' function ( ) { return [ i * j for ( i in [ 0 ] ) for ( j in [ 1 ] ) ] ; } ', Actual value ' function ( ) { return [ i * j for ( i in [ 0 ] ) ] ; } ' +TEST_ID=js1_7/decompilation/regress-381108.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of object literal should have space following : reason: Expected value 'true', Actual value 'false' +TEST_ID=js1_7/decompilation/regress-429252.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=trap should not change decompilation of { let x }: after trap reason: Expected value ' function f ( ) { { let x ; } } ', Actual value ' function f ( ) { { let x ; } let x ; } ' +TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/expressions/regress-421806.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/extensions/regress-351102-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-367629.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of result with native function as getter reason: Expected value '({get h encodeURI() {[native code]}})', Actual value '({get h () {[native code]})' +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=; messages: +TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keywords after get|set: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; before statement' +TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keywords after get|set reason: Expected value ' ( { in getter : ( function ( ) { return this . for ; } ) , in setter : ( function ( value ) { this . for = value ; } ) } ) ', Actual value ' SyntaxError : missing : after property id ' +TEST_ID=js1_7/extensions/regress-380933.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert with uneval object with setter with modified proto reason: Expected match to '/TypeError: Array.prototype.toSource called on incompatible Function/', Actual value 'No Error' +TEST_ID=js1_7/extensions/regress-381301.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval of object with native-function getter reason: Expected value ' ( { get x decodeURI ( ) { [ native code ] } } ) ', Actual value ' ( { get x ( ) { [ native code ] } ) ' +TEST_ID=js1_7/extensions/regress-381303.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=object toSource when a property has both a getter and a setter reason: Expected value ' ( { get inn ( ) { return this . for ; } , set inn ( value ) { this . for = value ; } } ) ', Actual value ' ( { get inn ( ) { return this [ ' for ' ] ; } , set inn ( value ) { this [ ' for ' ] = value ; } } ) ' +TEST_ID=js1_7/geniter/regress-347739.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=generator_instance.close readonly and immune: 2 reason: Expected value 'Inside finally: 1 Inside finally: 2 ', Actual value 'Inside finally: 2 ' +TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/geniter/regress-349012-01.js:`.``*`: yield from closing generator function gen() {try {try {yield 1;} finally {actual += "Inner finally";yield 2;}} finally {actual += ",Outer finally";}} +TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=closing a generator fails to report error if yield during close is ignored reason: Expected value 'Inner finally,Outer finally', Actual value '' +TEST_ID=js1_7/geniter/regress-349331.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=test GC-invoke close reason: Expected value 'true', Actual value 'false' +TEST_ID=js1_7/iterable/regress-340526-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Iterators: cross-referenced objects with close handler can delay close handler execution reason: Expected value '2', Actual value '0' +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-415922.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Support exception from withing JSNewEnumerateOp on JSENUMERATE_NEXT reason: Expected value 'Error: its enumeration failed', Actual value 'No exception r: color' +TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 2 reason: Expected match to '/TypeError: x.t (has no properties|is undefined)/', Actual value 'TypeError: e1.t has no properties' +TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 2 reason: Expected match to '/TypeError: x.t (has no properties|is undefined)/', Actual value 'TypeError: e1.t is undefined' +TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 8 reason: Expected value 'TypeError: ++x is not a function', Actual value 'TypeError: ++e1 is not a function' +TEST_ID=js1_7/lexical/regress-351515.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Invalid uses of yield, let keywords in js17: global: yield = 1 reason: Expected value 'SyntaxError: syntax error', Actual value 'SyntaxError: yield not in function' +TEST_ID=js1_7/regexp/yflag.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regexp/yflag.js:`.``*`: invalid flag after regular expression +TEST_ID=js1_7/regexp/yflag.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_7/regexp/yflag.js:`.``*`: SyntaxError: invalid flag after regular expression +TEST_ID=js1_7/regress/regress-350387.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-350387.js:`.``*`: x is not defined +TEST_ID=js1_7/regress/regress-350387.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-350387.js:`.``*`: ReferenceError: x is not defined +TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-01.js:`.``*`: arr0elms.reduce is not a function +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function'; +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Test reduce of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduce is not a function' +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function' +TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-02.js:`.``*`: arr.reduce is not a function +TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-02.js:`.``*`: TypeError: arr.reduce is not a function +TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: for-in binds name to early +TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*` uncaught exception: for-in binds name to early +TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373827-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: OBJ_GET_CLASS(cx, obj) == &js_BlockClass, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373827-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LEAVEBLOCKEXPR ? fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp - 1 : fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LEAVEBLOCKEXPR ? fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp - 1 : fp->spbase + OBJ_BLOCK_DEPTH(cx, obj) == sp, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-373828.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: +TEST_ID=js1_7/regress/regress-375695.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-385133-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/regress/regress-406477.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=eval of function x() in a function with an argument "x" and "let x" reason: Expected value '', Actual value 'Unexpected test_param_result value: 1NLUnexpected test_var_result value: 1NL' +TEST_ID=js1_7/regress/regress-410649.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=type for destructuring parameter case reason: Expected value 'function', Actual value 'number' diff --git a/js/tests/remove-fixed-failures.sh b/js/tests/remove-fixed-failures.sh new file mode 100644 index 000000000000..8d3bf9f2478b --- /dev/null +++ b/js/tests/remove-fixed-failures.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla JavaScript Testing Utilities +# +# The Initial Developer of the Original Code is +# Mozilla Corporation. +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): Bob Clary +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +if [[ ! -e "$1" || ! -e "$2" ]]; then + cat < ${workfailures}.temp + +mv $workfailures.temp $workfailures + +mv $workfailures $failures + diff --git a/js/tests/runtests.sh b/js/tests/runtests.sh index d174465c5419..e3fad28c55b5 100755 --- a/js/tests/runtests.sh +++ b/js/tests/runtests.sh @@ -38,13 +38,13 @@ # ***** END LICENSE BLOCK ***** if [[ -z "$TEST_DIR" ]]; then - cat <\n" echo -e "\nTinderboxPrint:js tests
$branch $buildtype $testtype
$npass/$nfail
F:$nfixes R:$nregressions" echo -e "\nTinderboxPrint:
\n" - fi + done diff --git a/js/tests/shell.js b/js/tests/shell.js index 37fc24222eba..0de24e164722 100644 --- a/js/tests/shell.js +++ b/js/tests/shell.js @@ -160,8 +160,8 @@ TestCase.prototype.dump = function () { 'result: ' + (this.passed ? 'PASSED':'FAILED') + ' ' + 'type: ' + this.type + ' ' + 'description: ' + toPrinted(this.description) + ' ' + - 'expected: ' + toPrinted(this.expect) + ' ' + - 'actual: ' + toPrinted(this.actual) + ' ' + +// 'expected: ' + toPrinted(this.expect) + ' ' + +// 'actual: ' + toPrinted(this.actual) + ' ' + 'reason: ' + toPrinted(this.reason) + '\n'); }; diff --git a/js/tests/sisyphus-javascript.patch b/js/tests/sisyphus-javascript.patch new file mode 100644 index 000000000000..bfb7ca1e13c7 --- /dev/null +++ b/js/tests/sisyphus-javascript.patch @@ -0,0 +1,4577 @@ +Index: Makefile +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/Makefile,v +retrieving revision 1.16 +diff -p -U 8 -r1.16 Makefile +--- Makefile 6 Feb 2008 20:06:39 -0000 1.16 ++++ Makefile 25 Jun 2008 17:31:15 -0000 +@@ -17,21 +17,19 @@ spidermonkey-extensions-n.tests: $(TEST_ + find . -name '*.js' | grep -v shell.js | grep -v browser.js | grep '/extensions/' | sed 's|\.\/||' | sort > $@ + + menu-list.txt: + echo "http://$(TEST_HTTP)/tests/mozilla.org/$(JSDIR)/menu.html" > menu-list.txt + + confidential-failures.txt: + touch confidential-failures.txt + +-failures.txt: public-failures.txt confidential-failures.txt +- cp public-failures.txt public-failures.txt.save +- cp confidential-failures.txt confidential-failures.txt.save +- sort < public-failures.txt | uniq | ./create-patterns.pl > public-failures.$$ +- mv public-failures.$$ public-failures.txt +- sort < confidential-failures.txt | uniq | ./create-patterns.pl > confidential-failures.$$ +- mv confidential-failures.$$ confidential-failures.txt +- cat public-failures.txt confidential-failures.txt | sort | uniq > failures.txt ++public-failures.txt.expanded: public-failures.txt universe.data ++ pattern-expander.pl public-failures.txt > public-failures.txt.expanded + +-clean: +- rm -f menubody.html menu.html menu-list.txt failures.txt excluded-*.tests included-*.tests urllist*.html urllist*.tests ++confidential-failures.txt.expanded: confidential-failures.txt universe.data ++ pattern-expander.pl confidential-failures.txt > confidential-failures.txt.expanded + ++failures.txt: public-failures.txt.expanded confidential-failures.txt.expanded ++ sort -u public-failures.txt.expanded confidential-failures.txt.expanded > failures.txt + ++clean: ++ rm -f menubody.html menu.html menu-list.txt failures.txt *failures.txt.expanded excluded-*.tests included-*.tests urllist*.html urllist*.tests +Index: Patterns.pm +=================================================================== +RCS file: Patterns.pm +diff -N Patterns.pm +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ Patterns.pm 25 Jun 2008 17:31:15 -0000 +@@ -0,0 +1,223 @@ ++# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- ++# ***** BEGIN LICENSE BLOCK ***** ++# Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Original Code is Mozilla JavaScript Testing Utilities ++# ++# The Initial Developer of the Original Code is ++# Mozilla Corporation. ++# Portions created by the Initial Developer are Copyright (C) 2008 ++# the Initial Developer. All Rights Reserved. ++# ++# Contributor(s): Bob Clary ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++package Patterns; ++ ++sub getuniversekey ++{ ++ my ($machinerecord, $excludeduniversefield) = @_; ++ my $i; ++ my $key = ''; ++ ++# dbg("getuniversekey: \$machinerecord=" . recordtostring($machinerecord) . ", \$excludeduniversefield=$excludeduniversefield"); ++ ++ for ($i = 0; $i < @universefields; $i++) ++ { ++# dbg("getuniversekey: \$universefields[$i]=$universefields[$i]"); ++ ++ if ($universefields[$i] ne $excludeduniversefield) ++ { ++ $key .= $machinerecord->{$universefields[$i]} ++ } ++ } ++ ++# dbg("getuniversekey=$key"); ++ ++ return $key; ++} ++ ++sub getuniverse ++{ ++ my ($universekey, $excludeduniversefield) = @_; ++ my $i; ++ my $value; ++ my $testrun; ++ my @universe = (); ++ my %universehash = (); ++ ++ dbg("getuniverse: \$universekey=$universekey, \$excludeduniversefield=$excludeduniversefield"); ++ ++ for ($i = 0; $i < @testruns; $i++) ++ { ++ $testrun = $testruns[$i]; ++# dbg("getuniverse: \$testruns[$i]=" . recordtostring($testrun)); ++ $testrununiversekey = getuniversekey($testrun, $excludeduniversefield); ++# dbg("getuniverse: \$testrununiversekey=$testrununiversekey"); ++ if ($testrununiversekey =~ /$universekey/) ++ { ++# dbg("getuniverse: matched \$testrununiversekey=$testrununiversekey to \$universekey=$universekey"); ++ $value = $testrun->{$excludeduniversefield}; ++ ++# dbg("getuniverse: \$testrun->{$excludeduniversefield}=$value"); ++ ++ if (! $universehash{$value} ) ++ { ++# dbg("getuniverse: pushing $value"); ++ push @universe, ($value); ++ $universehash{$value} = 1; ++ } ++ } ++ } ++ @universe = sort @universe; ++ dbg("getuniverse=" . join(',', @universe)); ++ return @universe; ++} ++ ++sub recordtostring ++{ ++ my ($record) = @_; ++ my $j; ++ my $line = ''; ++ my $field; ++ ++ for ($j = 0; $j < @recordfields - 1; $j++) ++ { ++ $field = $recordfields[$j]; ++# dbg("recordtostring: \$field=$field, \$record->{$field}=$record->{$field}"); ++ $line .= "$field=$record->{$field}, "; ++ } ++ $field = $recordfields[$#recordfields]; ++# dbg("recordtodtring: \$field=$field, \$record->{$field}= $record->{$field}"); ++ $line .= "$field=$record->{$field}"; ++ ++ return $line; ++} ++ ++sub dumprecords ++{ ++ my $record; ++ my $line; ++ my $prevline = ''; ++ my $i; ++ ++ dbg("dumping records"); ++ ++# @records = sort sortrecords @records; ++ ++ for ($i = 0; $i < @records; $i++) ++ { ++ $record = $records[$i]; ++ $line = recordtostring($record); ++ if ($line eq $prevline) ++ { ++# dbg("DUPLICATE $line") if ($DEBUG); ++ } ++ else ++ { ++ print "$line\n"; ++ $prevline = $line; ++ } ++ } ++} ++ ++sub sortrecords ++{ ++ return recordtostring($a) cmp recordtostring($b); ++} ++ ++sub dbg ++{ ++ if ($DEBUG) ++ { ++ print STDERR "DEBUG: " . join(" ", @_) . "\n"; ++ } ++} ++ ++sub copyreference ++{ ++ my ($fromreference) = @_; ++ my $toreference = {}; ++ my $key; ++ ++ foreach $key (keys %{$fromreference}) ++ { ++ $toreference->{$key} = $fromreference->{$key}; ++ } ++ return $toreference; ++} ++ ++#my @recordfields; ++#my @universefields; ++#my %machines; ++#my @testruns; ++ ++ ++BEGIN ++{ ++ dbg("begin"); ++ ++ my $test_dir = $ENV{TEST_DIR} || "/work/mozilla/mozilla.com/test.mozilla.com/www"; ++ ++ $DEBUG = $ENV{DEBUG}; ++ ++ @recordfields = ('TEST_ID', 'TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE', 'TEST_RESULT', 'TEST_EXITSTATUS', 'TEST_DESCRIPTION'); ++ @sortkeyfields = ('TEST_ID', 'TEST_RESULT', 'TEST_EXITSTATUS', 'TEST_DESCRIPTION', 'TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE', ); ++ @universefields = ('TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_KERNEL', 'TEST_PROCESSORTYPE', 'TEST_MEMORY', 'TEST_CPUSPEED', 'TEST_TIMEZONE'); ++ ++ @records = (); ++ ++ @testruns = (); ++ ++ open TESTRUNS, "<$test_dir/tests/mozilla.org/js/universe.data" or die "$?"; ++ ++ while () { ++ ++ chomp; ++ ++ my $record = {}; ++ ++ my ($test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_branch, $test_buildtype, $test_type) = $_ =~ ++ /^TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*)/; ++ ++ $record->{TEST_BRANCH} = $test_branch; ++ $record->{TEST_BUILDTYPE} = $test_buildtype; ++ $record->{TEST_TYPE} = $test_type; ++ $record->{TEST_OS} = $test_os; ++ $record->{TEST_KERNEL} = $test_kernel; ++ $record->{TEST_PROCESSORTYPE} = $test_processortype; ++ $record->{TEST_MEMORY} = $test_memory; ++ $record->{TEST_CPUSPEED} = $test_cpuspeed; ++ $record->{TEST_TIMEZONE} = $test_timezone; ++ ++ push @testruns, ($record); ++ } ++ ++ close TESTRUNS; ++ ++} ++ ++1; +Index: changes.sh +=================================================================== +RCS file: changes.sh +diff -N changes.sh +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ changes.sh 25 Jun 2008 17:31:15 -0000 +@@ -0,0 +1,120 @@ ++#!/bin/bash ++# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- ++ ++# ***** BEGIN LICENSE BLOCK ***** ++# Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Original Code is Mozilla JavaScript Testing Utilities ++# ++# The Initial Developer of the Original Code is ++# Mozilla Corporation. ++# Portions created by the Initial Developer are Copyright (C) 2008 ++# the Initial Developer. All Rights Reserved. ++# ++# Contributor(s): Bob Clary ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++# usage: changes.sh [prefix] ++# ++# combines the {prefix}*possible-fixes.log files into {prefix}possible-fixes.log ++# and {prefix}*possible-regressions.log files into ++# possible-regressions.log. ++# ++# This script is useful in cases where log files from different machines, branches ++# and builds are being investigated. ++ ++if cat /dev/null | sed -r 'q' > /dev/null 2>&1; then ++ SED="sed -r" ++elif cat /dev/null | sed -E 'q' > /dev/null 2>&1; then ++ SED="sed -E" ++else ++ echo "Neither sed -r or sed -E is supported" ++ exit 2 ++fi ++ ++workfile=`mktemp work.XXXXXXXX` ++if [ $? -ne 0 ]; then ++ echo "Unable to create working temp file" ++ exit 2 ++fi ++ ++for f in ${1}*results-possible-fixes.log*; do ++ case $f in ++ *.log) ++ CAT=cat ++ ;; ++ *.log.bz2) ++ CAT=bzcat ++ ;; ++ *.log.gz) ++ CAT=zcat ++ ;; ++ *.log.zip) ++ CAT="unzip -c" ++ ;; ++ *) ++ echo "unknown log type: $f" ++ exit 2 ++ ;; ++ esac ++ ++ $CAT $f | $SED "s|$|:$f|" >> $workfile ++ ++done ++ ++sort -u $workfile > ${1}possible-fixes.log ++ ++rm $workfile ++ ++ ++for f in ${1}*results-possible-regressions.log*; do ++ case $f in ++ *.log) ++ CAT=cat ++ ;; ++ *.log.bz2) ++ CAT=bzcat ++ ;; ++ *.log.gz) ++ CAT=zcat ++ ;; ++ *.log.zip) ++ CAT="unzip -c" ++ ;; ++ *) ++ echo "unknown log type: $f" ++ exit 2 ++ ;; ++ esac ++ $CAT $f >> $workfile ++done ++ ++sort -u $workfile > ${1}possible-regressions.log ++ ++rm $workfile ++ ++ ++ +Index: create-patterns.pl +=================================================================== +RCS file: create-patterns.pl +diff -N create-patterns.pl +--- create-patterns.pl 1 Oct 2007 19:10:41 -0000 1.1 ++++ /dev/null 1 Jan 1970 00:00:00 -0000 +@@ -1,264 +0,0 @@ +-#!/usr/bin/perl +-# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- +- +-# ***** BEGIN LICENSE BLOCK ***** +-# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +-# +-# The contents of this file are subject to the Mozilla Public License Version +-# 1.1 (the "License"); you may not use this file except in compliance with +-# the License. You may obtain a copy of the License at +-# http://www.mozilla.org/MPL/ +-# +-# Software distributed under the License is distributed on an "AS IS" basis, +-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-# for the specific language governing rights and limitations under the +-# License. +-# +-# The Original Code is Mozilla JavaScript Testing Utilities +-# +-# The Initial Developer of the Original Code is +-# Mozilla Corporation. +-# Portions created by the Initial Developer are Copyright (C) 2007 +-# the Initial Developer. All Rights Reserved. +-# +-# Contributor(s): Bob Clary +-# +-# Alternatively, the contents of this file may be used under the terms of +-# either the GNU General Public License Version 2 or later (the "GPL"), or +-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +-# in which case the provisions of the GPL or the LGPL are applicable instead +-# of those above. If you wish to allow use of your version of this file only +-# under the terms of either the GPL or the LGPL, and not to allow others to +-# use your version of this file under the terms of the MPL, indicate your +-# decision by deleting the provisions above and replace them with the notice +-# and other provisions required by the GPL or the LGPL. If you do not delete +-# the provisions above, a recipient may use your version of this file under +-# the terms of any one of the MPL, the GPL or the LGPL. +-# +-# ***** END LICENSE BLOCK ***** +- +-# make stderr, stdout unbuffered +- +-select STDERR; $| = 1; +-select STDOUT; $| = 1; +- +-my $regchars = '\[\^\-\]\|\{\}\?\*\+\.\<\>\$\(\)'; +- +-sub escape_patterns; +-sub unescape_patterns; +-sub debug; +- +-my $debug = $ENV{DEBUG}; +-my @outputlines = (); +-my @inputlines = (); +- +-while () { +- chomp; +- +- # remove irrelevant data the caller is required to remove any +- # other data which should not be considered during the +- # consolidation such as TEST_MACHINE, etc. +- +- s/TEST_DATE=[^,]*,/TEST_DATE=.*,/; +- +- push @inputlines, ($_); +- +-} +- +-my @fieldnames = ('TEST_BRANCH', 'TEST_BUILDTYPE', 'TEST_TYPE', 'TEST_OS', 'TEST_PROCESSORTYPE', 'TEST_KERNEL', 'TEST_TIMEZONE'); +- +-my $pass = 0; +-my $changed = 1; +- +-while ($changed) { +- +- # repeated loop until no changes are made. +- +- ++$pass; +- $changed = 0; +- +- debug "pass $pass, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; +- +- foreach $field (@fieldnames) { +- +- debug "pass $pass, processing $field, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; +- +- # process each field across all lines so that later consolidations +- # will match consolidated field values +- +- while ($inputline = shift(@inputlines)) { +- +- debug "inputline $inputline\n"; +- +- # get the current field value from the current input line +- +- ($inputvalue) = $inputline =~ /$field=\(?([^,\)]*)\)?,/; +- +- if ($inputvalue eq '.*') { +- +- # if the current input value is the any wildcard, +- # then there is no need to perform a consolidation +- # on the field. +- +- push @outputlines, ($inputline); +- +- next; +- } +- +- # turn "off" any regular expression characters in the input line +- +- $pattern = escape_pattern($inputline); +- +- # Make the current field in the current pattern an any +- # wildcard so that it will match any value. We are looking +- # for all other lines that only differ from the current line by +- # the current field value +- +- $pattern =~ s/$field=[^,]*,/$field=.*,/; +- +- # find the matches to the current pattern +- +- debug "pattern: $pattern\n"; +- +- @matched = grep /$pattern/, (@inputlines, @outputlines); +- @unmatched = grep !/$pattern/, @inputlines; +- +- debug "" . ($#matched + 1) . " matched, " . ($#unmatched + 1) . " unmatched, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; +- +- if (@matched) { +- +- # the input line matched others +- +- $outputvalue = $inputvalue; +- +- foreach $matchline (@matched) { +- +- ($matchvalue) = $matchline =~ /$field=\(?([^,\)]*)\)?,/; +- +- if ( $inputvalue !~ /$matchvalue/ && $matchvalue !~ /$inputvalue/) { +- +- # the current match value and input value +- # do not overlap so add the match +- # field value as regular expression +- # alternation | to the current field value +- +- debug "adding regexp alternation to $field: inputvalue: $inputvalue, matchvalue: $matchvalue"; +- +- $outputvalue .= "|$matchvalue"; +- } +- } # foreach matchline +- +- # replace the current inputs field value with the +- # consolidated value +- +- if ($outputvalue =~ /\|/) { +- $outputvalue = "(" . join('|', sort(split(/\|/, $outputvalue))) . ")"; +- } +- $inputline =~ s/$field=[^,]*,/$field=$outputvalue,/; +- debug "$inputline\n"; +- +- $changes = 1; +- } +- push @outputlines, ($inputline); +- +- @inputlines = @unmatched; +- +- } # while inputline +- +- @inputlines = @outputlines; +- @outputlines = (); +- +- } # foreach field +-} +- +-@inputlines = sort @inputlines; +- +-my $output = join"\n", @inputlines; +- +-debug "output: " . ($#inputlines + 1) . " lines\n"; +- +-print "$output\n"; +- +-### # look for over specified failures +-### +-### $field = 'TEST_DESCRIPTION'; +-### +-### while ($inputline = shift(@inputlines)) { +-### +-### debug "inputline $inputline\n"; +-### +-### # turn "off" any regular expression characters in the input line +-### +-### $pattern = escape_pattern($inputline); +-### +-### # Make the TEST_DESCRIPTION field in the current pattern an any +-### # wildcard so that it will match any value. We are looking +-### # for all other lines that only differ from the current line by +-### # the TEST_DESCRIPTION. These will be the potentially overspecified +-### # failures. +-### +-### $pattern =~ s/$field=[^,]*,/$field=.*,/; +-### +-### # find the matches to the current pattern +-### +-### debug "pattern: $pattern\n"; +-### +-### @matched = grep /$pattern/, @inputlines; +-### @unmatched = grep !/$pattern/, @inputlines; +-### +-### debug "" . ($#matched + 1) . " matched, " . ($#unmatched + 1) . " unmatched, " . ($#inputlines + 1) . " inputlines, " . ($#outputlines + 1) . " outputlines\n"; +-### +-### if (@matched) { +-### +-### # the inputline overspecifies an error +-### +-### push @matched, ($inputline); +-### +-### foreach $matchline (@matched) { +-### +-### print STDERR "OVERSPECIFIED? : $matchline\n"; +-### +-### } # foreach matchline +-### +-### } +-### +-### @inputlines = @unmatched; +-### +-### } # while inputline +-### +- +- +- +-sub escape_pattern { +- +- # unlike the known-failures.pl, this escape escapes the entire +- # line to make it not contain any active regular expression patterns +- # so that any matched will be literal and not regular +- my $line = shift; +- +- chomp; +- +- # replace unescaped regular expression characters in the +- # description so they are not interpreted as regexp chars +- # when matching descriptions. leave the escaped regexp chars +- # `regexp alone so they can be unescaped later and used in +- # pattern matching. +- +- # see perldoc perlre +- +- $line =~ s/\\/\\\\/g; +- +- # escape regexpchars +- $line =~ s/([$regchars])/\\$1/g; +- +- return "$line"; +- +-} +- +-sub debug { +- my $msg; +- if ($debug) { +- $msg = shift; +- print "DEBUG: $msg\n"; +- } +-} +Index: get-universe.sh +=================================================================== +RCS file: get-universe.sh +diff -N get-universe.sh +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ get-universe.sh 25 Jun 2008 17:31:15 -0000 +@@ -0,0 +1,48 @@ ++#!/bin/bash -e ++# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- ++ ++# ***** BEGIN LICENSE BLOCK ***** ++# Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Original Code is Mozilla JavaScript Testing Utilities ++# ++# The Initial Developer of the Original Code is ++# Mozilla Corporation. ++# Portions created by the Initial Developer are Copyright (C) 2007 ++# the Initial Developer. All Rights Reserved. ++# ++# Contributor(s): Bob Clary ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++# usage: get-universe.sh logfile(s) > universe.data ++# ++# get-universe.sh reads the processed javascript logs and writes to ++# stdout the unique set of fields to be used as the "universe" of test ++# run data. These values are used by pattern-expander.pl and ++# pattern-extracter.pl to encode the known failure files into regular ++# expressions. ++ ++sed 's|.*\(TEST_BRANCH.*\), \(TEST_OS.*\), TEST_RESULT.*|\2, \1|' $@ | sort -u +Index: known-failures.pl +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/known-failures.pl,v +retrieving revision 1.5 +diff -p -U 8 -r1.5 known-failures.pl +--- known-failures.pl 23 Mar 2008 21:42:44 -0000 1.5 ++++ known-failures.pl 25 Jun 2008 17:31:16 -0000 +@@ -44,30 +44,32 @@ use Getopt::Mixed "nextOption"; + sub debug; + sub usage; + sub parse_options; + sub escape_pattern; + sub unescape_pattern; + + # option arguments + +-my $option_desc = "b=s branch>b T=s buildtype>T t=s testtype>t l=s rawlogfile>l f=s failurelogfile>f o=s os>o r=s patterns>r z=s timezone>z O=s outputprefix>O A=s arch>A K=s kernel>K D debug>D"; ++my $option_desc = "b=s branch>b T=s buildtype>T t=s testtype>t o=s os>o K=s kernel>K A=s arch>A M=s memory>M S=s speed>S z=s timezone>z l=s rawlogfile>l f=s failurelogfile>f r=s patterns>r O=s outputprefix>O D debug>D"; + + my $testid; + my $branch; + my $buildtype; + my $testtype; + my $rawlogfile; + my $failurelogfile; + my $os; + my $patterns; + my $timezone; + my $outputprefix; + my $arch; + my $kernel; ++my $memory; ++my $cpuspeed; + my $debug = $ENV{DEBUG}; + + # pattern variables + + my $knownfailurebranchpattern; + my $failurebranchpattern; + my $knownfailureospattern; + my $failureospattern; +@@ -76,16 +78,20 @@ my $failurebuildtypepattern; + my $knownfailuretesttypepattern; + my $failuretesttypepattern; + my $knownfailuretimezonepattern; + my $failuretimezonepattern; + my $knownfailurearchpattern; + my $failurearchpattern; + my $knownfailurekernelpattern; + my $failurekernelpattern; ++my $knownfailurememorypattern; ++my $failurememorypattern; ++my $knownfailurecpuspeedpattern; ++my $failurecpuspeedpattern; + + my @patterns; + my $pattern; + my @failures; + my @fixes; + my @excludedtests; + my $excludedtest; + my $excludedfile; +@@ -139,44 +145,44 @@ foreach $includedfile ( @includedfiles ) + s/\s+$//; + + $includedtests{$_} = 1; + } + close INCLUDED; + } + + debug "loading patterns $patterns"; +-debug "pattern filter: /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_RESULT=[^,]*, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$knownfailuretimezonepattern,/\n"; ++debug "pattern filter: ^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_MEMORY=$knownfailurememorypattern, TEST_CPUSPEED=$knownfailurecpuspeedpattern, TEST_TIMEZONE=$knownfailuretimezonepattern,"; + + open PATTERNS, "<$patterns" or die "Unable to open known failure patterns file $patterns: $!\n"; + while () { + chomp; + + s/\s+$//; + + ($testid) = $_ =~ /^TEST_ID=([^,]*),/; + + if (!$includedtests{$testid}) + { + debug "test $testid was not included during this run"; + } +- elsif ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_RESULT=[^,]*, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$knownfailuretimezonepattern,/) { ++ elsif ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$knownfailurebranchpattern, TEST_BUILDTYPE=$knownfailurebuildtypepattern, TEST_TYPE=$knownfailuretesttypepattern, TEST_OS=$knownfailureospattern, TEST_KERNEL=$knownfailurekernelpattern, TEST_PROCESSORTYPE=$knownfailurearchpattern, TEST_MEMORY=$knownfailurememorypattern, TEST_CPUSPEED=$knownfailurecpuspeedpattern, TEST_TIMEZONE=$knownfailuretimezonepattern,/) { + debug "adding pattern : $_"; + push @patterns, (escape_pattern($_)); + } + else { + debug "skipping pattern: $_"; + } + + } + close PATTERNS; + + # create a working copy of the current failures which match the users selection + +-debug "failure filter: ^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,"; ++debug "failure filter: ^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/"; + + if (defined($rawlogfile)) { + + $failurelogfile = "$outputprefix-results-failures.log"; + my $alllog = "$outputprefix-results-all.log"; + + debug "writing failures $failurelogfile"; + +@@ -184,39 +190,53 @@ if (defined($rawlogfile)) { + open ALLLOG, ">$alllog" or die "Unable to open $alllog $!\n"; + open FAILURELOG, ">$failurelogfile" or die "Unable to open $failurelogfile $!\n"; + + while () { + chomp; + + print ALLLOG "$_\n"; + +- if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,/) { ++ if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/) { + debug "failure: $_"; + push @failures, ($_); + print FAILURELOG "$_\n"; + } + } + close INPUTLOG; + my $inputrc = $?; + close ALLLOG; + close FAILURELOG; + + die "FATAL ERROR in post-process-logs.pl" if $inputrc != 0; +- + } +-else { +- ++else ++{ + debug "loading failures $failurelogfile"; + +- open FAILURES, "<$failurelogfile" or die "Unable to open current failure log $failurelogfile: $!\n"; ++ my $failurelogfilemode; ++ ++ if ($failurelogfile =~ /\.bz2$/) ++ { ++ $failurelogfilemode = "bzcat $failurelogfile|"; ++ } ++ elsif ($failurelogfile =~ /\.gz$/) ++ { ++ $failurelogfilemode = "zcat $failurelogfile|"; ++ } ++ else ++ { ++ $failurelogfilemode = "<$failurelogfile"; ++ } ++ ++ open FAILURES, "$failurelogfilemode" or die "Unable to open current failure log $failurelogfile: $!\n"; + while () { + chomp; + +- if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_RESULT=FAIL[^,]*, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_MACHINE=[^,]*, TEST_PROCESSORTYPE=$failurearchpattern, TEST_KERNEL=$failurekernelpattern, TEST_DATE=[^,]*, TEST_TIMEZONE=$failuretimezonepattern,/) { ++ if ($_ =~ /^TEST_ID=[^,]*, TEST_BRANCH=$failurebranchpattern, TEST_BUILDTYPE=$failurebuildtypepattern, TEST_TYPE=$failuretesttypepattern, TEST_OS=$failureospattern, TEST_KERNEL=$failurekernelpattern, TEST_PROCESSORTYPE=$failurearchpattern, TEST_MEMORY=$failurememorypattern, TEST_CPUSPEED=$failurecpuspeedpattern, TEST_TIMEZONE=$failuretimezonepattern, TEST_RESULT=FAIL[^,]*,/) { + debug "failure: $_"; + push @failures, ($_); + } + } + close FAILURES; + } + + debug "finding fixed bugs"; +@@ -338,35 +358,45 @@ sub debug { + sub usage { + + my $msg = shift; + + print STDERR < ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++# usage: pattern-expander.pl knownfailures > knownfailures.expanded ++# ++# pattern-expander.pl reads the specified knownfailures file and ++# writes to stdout an expanded set of failures where the wildcards ++# ".*" are replaced with the set of possible values specified in the ++# universe.data file. ++ ++use lib "/work/mozilla/mozilla.com/test.mozilla.com/www/tests/mozilla.org/js"; ++ ++use Patterns; ++ ++package Patterns; ++ ++processfile(); ++ ++sub processfile ++{ ++ my ($i, $j); ++ ++ while () { ++ ++ chomp; ++ ++ $record = {}; ++ ++ my ($test_id, $test_branch, $test_buildtype, $test_type, $test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_result, $test_exitstatus, $test_description) = $_ =~ ++ /TEST_ID=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*), TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_RESULT=([^,]*), TEST_EXITSTATUS=([^,]*), TEST_DESCRIPTION=(.*)/; ++ ++ $record->{TEST_ID} = $test_id; ++ $record->{TEST_BRANCH} = $test_branch; ++ $record->{TEST_BUILDTYPE} = $test_buildtype; ++ $record->{TEST_TYPE} = $test_type; ++ $record->{TEST_OS} = $test_os; ++ $record->{TEST_KERNEL} = $test_kernel; ++ $record->{TEST_PROCESSORTYPE} = $test_processortype; ++ $record->{TEST_MEMORY} = $test_memory; ++ $record->{TEST_CPUSPEED} = $test_cpuspeed; ++ $record->{TEST_TIMEZONE} = $test_timezone; ++ $record->{TEST_RESULT} = $test_result; ++ $record->{TEST_EXITSTATUS} = $test_exitstatus; ++ $record->{TEST_DESCRIPTION} = $test_description; ++ ++ dbg("processfile: \$_=$_"); ++ ++ my @list1 = (); ++ my @list2 = (); ++ ++ my $iuniversefield; ++ my $universefield; ++ ++ $item1 = copyreference($record); ++ dbg("processfile: check copyreference"); ++ dbg("processfile: \$record=" . recordtostring($record)); ++ dbg("processfile: \$item1=" . recordtostring($item1)); ++ ++ push @list1, ($item1); ++ ++ for ($iuniversefield = 0; $iuniversefield < @universefields; $iuniversefield++) ++ { ++ $universefield = $universefields[$iuniversefield]; ++ ++ dbg("processfile: \$universefields[$iuniversefield]=$universefield, \$record->{$universefield}=$record->{$universefield}"); ++ ++ for ($j = 0; $j < @list1; $j++) ++ { ++ $item1 = $list1[$j]; ++ dbg("processfile: item1 \$list1[$j]=" . recordtostring($item1)); ++ # create a reference to a copy of the hash referenced by $item1 ++ if ($item1->{$universefield} ne '.*') ++ { ++ dbg("processfile: literal value"); ++ $item2 = copyreference($item1); ++ dbg("processfile: check copyreference"); ++ dbg("processfile: \$item1=" . recordtostring($item1)); ++ dbg("processfile: \$item2=" . recordtostring($item2)); ++ dbg("processfile: pushing existing record to list 2: " . recordtostring($item2)); ++ push @list2, ($item2); ++ } ++ else ++ { ++ dbg("processfile: wildcard value"); ++ $keyfielduniversekey = getuniversekey($item1, $universefield); ++ @keyfielduniverse = getuniverse($keyfielduniversekey, $universefield); ++ ++ dbg("processfile: \$keyfielduniversekey=$keyfielduniversekey, \@keyfielduniverse=" . join(',', @keyfielduniverse)); ++ ++ for ($i = 0; $i < @keyfielduniverse; $i++) ++ { ++ $item2 = copyreference($item1); ++ dbg("processfile: check copyreference"); ++ dbg("processfile: \$item1=" . recordtostring($item1)); ++ dbg("processfile: \$item2=" . recordtostring($item2)); ++ $item2->{$universefield} = $keyfielduniverse[$i]; ++ dbg("processfile: pushing new record to list 2 " . recordtostring($item2)); ++ push @list2, ($item2); ++ } ++ } ++ for ($i = 0; $i < @list1; $i++) ++ { ++ dbg("processfile: \$list1[$i]=" . recordtostring($list1[$i])); ++ } ++ for ($i = 0; $i < @list2; $i++) ++ { ++ dbg("processfile: \$list2[$i]=" . recordtostring($list2[$i])); ++ } ++ } ++ ++ @list1 = @list2; ++ @list2 = (); ++ } ++ for ($j = 0; $j < @list1; $j++) ++ { ++ $item1 = $list1[$j]; ++ push @records, ($item1); ++ } ++ } ++ @records = sort sortrecords @records; ++ ++ dumprecords(); ++} ++ +Index: pattern-extracter.pl +=================================================================== +RCS file: pattern-extracter.pl +diff -N pattern-extracter.pl +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ pattern-extracter.pl 25 Jun 2008 17:31:16 -0000 +@@ -0,0 +1,217 @@ ++#!/usr/bin/perl -w ++# -*- Mode: Perl; tab-width: 4; indent-tabs-mode: nil; -*- ++# ***** BEGIN LICENSE BLOCK ***** ++# Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Original Code is Mozilla JavaScript Testing Utilities ++# ++# The Initial Developer of the Original Code is ++# Mozilla Corporation. ++# Portions created by the Initial Developer are Copyright (C) 2008 ++# the Initial Developer. All Rights Reserved. ++# ++# Contributor(s): Bob Clary ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++# usage: pattern-extracter.pl knownfailures.expanded > knownfailures ++# ++# pattern-extracter.pl reads the specified expanded knownfailures file ++# (see pattern-expander.pl) and writes to stdout a set of knownfailures ++# where repetitions of values found in the universe.data file are ++# replaced with wildcards ".*". ++ ++use lib "/work/mozilla/mozilla.com/test.mozilla.com/www/tests/mozilla.org/js"; ++ ++use Patterns; ++ ++package Patterns; ++ ++ ++my $universefield; ++ ++processfile(); ++ ++sub processfile ++{ ++ my $recordcurr = {}; ++ my $recordprev; ++ ++ my @output; ++ my $keycurr = ''; ++ my $keyprev = ''; ++ my @values = (); ++ my $universefielduniversekey; # universekey for universefield ++ my @universefielduniverse; ++ my $i; ++ my $j; ++ my $v; ++ ++ while () { ++ ++ chomp; ++ ++ $recordcurr = {}; ++ ++ my ($test_id, $test_branch, $test_buildtype, $test_type, $test_os, $test_kernel, $test_processortype, $test_memory, $test_cpuspeed, $test_timezone, $test_result, $test_exitstatus, $test_description) = $_ =~ ++ /TEST_ID=([^,]*), TEST_BRANCH=([^,]*), TEST_BUILDTYPE=([^,]*), TEST_TYPE=([^,]*), TEST_OS=([^,]*), TEST_KERNEL=([^,]*), TEST_PROCESSORTYPE=([^,]*), TEST_MEMORY=([^,]*), TEST_CPUSPEED=([^,]*), TEST_TIMEZONE=([^,]*), TEST_RESULT=([^,]*), TEST_EXITSTATUS=([^,]*), TEST_DESCRIPTION=(.*)/; ++ ++ $recordcurr->{TEST_ID} = $test_id; ++ $recordcurr->{TEST_BRANCH} = $test_branch; ++ $recordcurr->{TEST_BUILDTYPE} = $test_buildtype; ++ $recordcurr->{TEST_TYPE} = $test_type; ++ $recordcurr->{TEST_OS} = $test_os; ++ $recordcurr->{TEST_KERNEL} = $test_kernel; ++ $recordcurr->{TEST_PROCESSORTYPE} = $test_processortype; ++ $recordcurr->{TEST_MEMORY} = $test_memory; ++ $recordcurr->{TEST_CPUSPEED} = $test_cpuspeed; ++ $recordcurr->{TEST_TIMEZONE} = $test_timezone; ++ $recordcurr->{TEST_RESULT} = $test_result; ++ $recordcurr->{TEST_EXITSTATUS} = $test_exitstatus; ++ $recordcurr->{TEST_DESCRIPTION} = $test_description; ++ ++ push @records, ($recordcurr); ++ } ++ ++ for ($j = $#universefields; $j >= 0; $j--) ++ { ++ $universefield = $universefields[$j]; ++ ++ @records = sort {getkey($a, $universefield) cmp getkey($b, $universefield);} @records; ++ ++ $recordprev = $records[0]; ++ $keyprev = getkey($recordprev, $universefield); ++ @values = (); ++ ++ my $recordtemp; ++ my $keytemp; ++ ++ dbg("processfile: begin processing records for \$universefields[$j]=$universefield"); ++ ++ for ($i = 0; $i < @records; $i++) ++ { ++ $recordcurr = $records[$i]; ++ $keycurr = getkey($recordcurr, $universefield); ++ ++ dbg("processfile: processing record[$i]"); ++ dbg("processfile: recordprev: " . recordtostring($recordprev)); ++ dbg("processfile: recordcurr: " . recordtostring($recordcurr)); ++ dbg("processfile: \$keyprev=$keyprev"); ++ dbg("processfile: \$keycurr=$keycurr"); ++ ++ if ($keycurr ne $keyprev) ++ { ++ # key changed, must output previous record ++ dbg("processfile: new key"); ++ $universefielduniversekey = getuniversekey($recordprev, $universefield); ++ @universefielduniverse = getuniverse($universefielduniversekey, $universefield); ++ dbg("processfile: \@values: ". join(',', @values)); ++ dbg("processfile: \$universefielduniversekey=$universefielduniversekey, \@universefielduniverse=" . join(',', @universefielduniverse)); ++ @values = ('.*') if (arraysequal(\@values, \@universefielduniverse)); ++ dbg("processfile: \@values=" . join(',', @values)); ++ ++ for ($v = 0; $v < @values; $v++) ++ { ++ dbg("processfile: stuffing $values[$v]"); ++ $recordtemp = copyreference($recordprev); ++ $recordtemp->{$universefield} = $values[$v]; ++ dbg("processfile: stuffed $recordtemp->{$universefield}"); ++ dbg("processfile: recordprev: " . recordtostring($recordprev)); ++ dbg("processfile: output: " . recordtostring($recordtemp)); ++ push @output, ($recordtemp); ++ } ++ @values = (); ++ } ++ dbg("processfile: collecting \$recordcurr->{$universefield}=$recordcurr->{$universefield}"); ++ push @values, ($recordcurr->{$universefield}); ++ $keyprev = $keycurr; ++ $recordprev = $recordcurr; ++ } ++ dbg("processfile: finish processing records for \$universefields[$j]=$universefield"); ++ if (@values) ++ { ++ dbg("processfile: last record for \$universefields[$j]=$universefield has pending values"); ++ $universefielduniversekey = getuniversekey($recordprev, $universefield); ++ @universefielduniverse = getuniverse($universefielduniversekey, $universefield); ++ dbg("processfile: \@values: ". join(',', @values)); ++ dbg("processfile: \$universefielduniversekey=$universefielduniversekey, \@universefielduniverse=" . join(',', @universefielduniverse)); ++ @values = ('.*') if (arraysequal(\@values, \@universefielduniverse)); ++ dbg("processfile: \@values=" . join(',', @values)); ++ ++ for ($v = 0; $v < @values; $v++) ++ { ++ dbg("processfile: stuffing $values[$v]"); ++ $recordtemp = copyreference($recordprev); ++ $recordtemp->{$universefield} = $values[$v]; ++ dbg("processfile: stuffed $recordprev->{$universefield}"); ++ dbg("processfile: recordprev: " . recordtostring($recordprev)); ++ dbg("processfile: output: " . recordtostring($recordtemp)); ++ push @output, ($recordtemp); ++ } ++ @values = (); ++ } ++ @records = @output; ++ @output = (); ++ } ++ ++ @records = sort sortrecords @records; ++ dumprecords(); ++} ++ ++ ++sub getkey ++{ ++ my ($record, $universefield) = @_; ++ ++ my $i; ++ ++ my $key = ''; ++ ++ for ($i = 0; $i < @sortkeyfields; $i++) ++ { ++ if ($sortkeyfields[$i] ne $universefield) ++ { ++ $key .= $record->{$sortkeyfields[$i]} ++ } ++ } ++ return $key; ++} ++ ++sub arraysequal ++{ ++ my ($larrayref, $rarrayref) = @_; ++ my $i; ++ ++ dbg("arraysequal: checking if " . (join ',', @{$larrayref}) . " is equal to " . (join ',', @{$rarrayref})); ++ return 0 if (@{$larrayref} != @{$rarrayref}); ++ ++ for ($i = 0; $i < @{$larrayref}; $i++) ++ { ++ return 0 if ($rarrayref->[$i] ne $larrayref->[$i]); ++ } ++ dbg("arraysequal: equal"); ++ return 1; ++} ++ +Index: post-process-logs.pl +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/post-process-logs.pl,v +retrieving revision 1.10 +diff -p -U 8 -r1.10 post-process-logs.pl +--- post-process-logs.pl 3 Apr 2008 16:25:01 -0000 1.10 ++++ post-process-logs.pl 25 Jun 2008 17:31:16 -0000 +@@ -57,33 +57,36 @@ $ENV{LC_ALL} = 'C'; + + (undef, $temp) = tempfile(); + + open TEMP, ">$temp" or + die "FATAL ERROR: Unable to open temporary file $temp for writing: $!\n"; + + local ($test_id, + $tmp_test_id, ++ $tmp_test_exit_status, + %test_id, + %test_reported, + $test_result, + $test_type, + $tmp_test_type, + $test_description, + @messages, + $test_processortype, + $test_kernel, + $test_suite, +- $exit_status, +- $page_status, ++ $test_exit_status, ++ @expected_exit_code_list, ++ $expected_exit_code, ++ $exit_code, + $state); + +-local ($actual_exit, $actual_signal); +- +-local %test_reported = (); ++local $test_memory = 0; ++local $test_cpuspeed = 0; ++local %test_reported = (); + + while ($file = shift @ARGV) + { + @messages = (); + + dbg "file: $file"; + + my $filename = basename $file; +@@ -95,776 +98,491 @@ while ($file = shift @ARGV) + $test_machine,$test_global_target) = split /,/, $filename; + + $test_branchid =~ s/[^0-9.]//g; + $test_global_target =~ s/.log$//; + + local ($test_timezone) = $test_date; + $test_timezone =~ s/.*([-+]\d{4,4})/$1/; + +- open FILE, "$file" or die "FATAL ERROR: unable to open $file for reading: $!\n"; ++ my $filemode; ++ ++ if ($file =~ /\.bz2$/) ++ { ++ $filemode = "bzcat $file|"; ++ } ++ elsif ($file =~ /\.gz$/) ++ { ++ $filemode = "zcat $file|"; ++ } ++ else ++ { ++ $filemode = "<$file"; ++ } ++ ++ open FILE, "$filemode" or die "FATAL ERROR: unable to open $file for reading: $!\n"; + + dbg "process header with environment variables used in test"; + + while () + { + $state = 'failure'; + + chomp; + + # remove carriage returns, bels and other annoyances. + $_ =~ s/[\r]$//; + $_ =~ s/[\r]/CR/g; + $_ =~ s/[\x01-\x08]//g; + $_ =~ s/\s+$//; + +- dbg "INPUT: $_"; ++ if ($debug) ++ { ++ dbg "\nINPUT: $_"; ++ } + +- last if ( $_ =~ /^environment: EOF/); ++ last if ( $_ =~ /^arguments:/); + + if (($envvar, $envval) = $_ =~ /^environment: (TEST_[A-Z0-9_]*)=(.*)/ ) + { + dbg "envvar=$envvar, envval=$envval"; ++ if ($envvar =~ /TEST_KERNEL/) ++ { ++ $envval =~ s/([0-9]+)\.([0-9]+)\.([0-9]+).*/$1.$2.$3/; ++ dbg "found TEST_KERNEL"; ++ } + $envvar =~ tr/A-Z/a-z/; + $$envvar = $envval; + dbg $envvar . "=" . $$envvar; + } + elsif (($envval) = $_ =~ /^environment: OSID=(.*)/ ) + { + $test_os = $envval; + } + } + ++ if ($test_cpuspeed < 4) ++ { ++ $test_cpuspeed = 'slow'; ++ } ++ elsif ($test_cpuspeed < 9) ++ { ++ $test_cpuspeed = 'medium'; ++ } ++ else ++ { ++ $test_cpuspeed = 'fast'; ++ } ++ + if ($test_product eq "js") + { +- while () +- { +- chomp; ++ $test_type = "shell"; ++ } ++ elsif ($test_product eq "firefox" || $test_product eq "thunderbird") ++ { ++ $test_buildtype = "nightly" unless $test_buildtype; ++ $test_type = "browser"; ++ } + +- dbg "INPUT: $_"; ++# Expected sequence if all output written to the log. ++# ++# Input ++# ----------------------------- ++# JavaScriptTest: Begin Run ++# JavaScriptTest: Begin Test t; ++# jstest: t ++# t:.*EXIT STATUS: ++# JavaScriptTest: End Test t ++# JavaScriptTest: End Run ++# EOF ++# ++ %test_id = (); ++ @messages = (); ++ $test_exit_status = ''; ++ $state = 'idle'; + +- if (/Wrote results to/) +- { +- $state = 'success'; +- last; +- } ++ while () ++ { ++ chomp; + +- $_ =~ s/[\r]$//; +- $_ =~ s/[\r]/CR/g; +- $_ =~ s/[\x01-\x08]//g; +- $_ =~ s/\s+$//; ++ if ($debug) ++ { ++ dbg "\nINPUT: '$_'"; ++ } + +- next if ( $_ !~ /^jstest: /); ++ $_ =~ s/[\r]$//; ++ $_ =~ s/[\r]/CR/g; ++ $_ =~ s/[\x01-\x08]//g; ++ $_ =~ s/\s+$//; + +- ($test_id) = $_ =~ /^jstest: (.*?) *bug:/; +- ($test_result) = $_ =~ /result: (.*?) *type:/; +- ($test_type) = $_ =~ /type: (.*?) *description:/; +- ($test_description) = $_ =~ /description: (.*)/; ++ if ( /^JavaScriptTest: Begin Run/) ++ { ++ dbg "Begin Run"; + +- if (!$test_description) ++ if ($state eq 'idle') + { +- $test_description = ""; ++ $state = 'beginrun'; + } + else + { +- ($actual_exit, $actual_signal) = $test_description =~ /expected: Expected exit [03] actual: Actual exit ([0-9]*), signal ([0-9]*)/; +- if (defined($actual_exit) or defined($actual_signal)) +- { +- if ($actual_exit > 3 || $actual_signal > 0) +- { +- $test_description =~ s/ *expected: Expected exit [03] actual: Actual exit ([0-9]*), signal ([0-9]*) /EXIT STATUS: CRASHED $actual_exit signal $actual_signal, /; +- } +- } +- elsif ($test_result eq "FAILED TIMED OUT") +- { +- $test_description = "EXIT STATUS: TIMED OUT, $test_description"; +- $test_result = "FAILED"; +- } ++ warn "WARNING: state: $state, expected: idle, log: $file"; ++ $state = 'beginrun'; + } ++ } ++ elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: Begin Test ([^ ]*)/) ++ { ++ dbg "Begin Test: $tmp_test_id"; + +- if ($test_description =~ /error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || +- /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ ) ++ if ($state eq 'beginrun' || $state eq 'endtest') + { +- dbg "Adding message: /$test_id:0: out of memory"; +- $test_description .= "; /$test_id:0: out of memory"; ++ $state = 'runningtest'; ++ } ++ else ++ { ++ warn "WARNING: state: $state, expected: beginrun, endtest, log: $file"; ++ $state = 'runningtest'; + } + +- dbg "test_id: $test_id"; +- dbg "test_result: $test_result"; +- dbg "test_type: $test_type"; +- dbg "test_description: $test_description"; +- +- outputrecord $test_id, $test_description, $test_result; ++ $test_id{$state} = $tmp_test_id; ++ @messages = (); ++ @expected_exit_code_list = (); ++ $expected_exit_code = (); ++ ++ $test_id = ''; ++ $test_result = ''; ++ $test_exit_status = 'NORMAL'; # default to normal, so subtests will have a NORMAL status ++ $test_description = ''; + +- dbg "-"; ++ push @expected_exit_code_list, (3) if ($tmp_test_id =~ /-n.js$/); ++ + } +- } +- elsif ($test_product eq "firefox") +- { +- %test_id = (); +- @messages = (); +- +- $page_status = ''; +- $exit_status = ''; +- $test_buildtype = "nightly" unless $test_buildtype; +- $test_type = "browser"; ++ elsif ( ($expected_exit_code) = $_ =~ /WE EXPECT EXIT CODE ([0-9]*)/ ) ++ { ++ dbg "Expected Exit Code: $expected_exit_code"; + ++ push @expected_exit_code_list, ($expected_exit_code); ++ } ++ elsif ( ($tmp_test_id) = $_ =~ /^jstest: (.*?) *bug:/) ++ { ++ dbg "jstest: $tmp_test_id"; + +-# non-restart mode. start spider; for each test { load test;} exit spider; +-# restart mode. for each test; { start spider; load test; exit spider; } +-# +-# Expected sequence if all output written to the log. +-# +-# Input Initial State Next State userhook event outputrecord +-# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-# Spider: Start.*start-spider.html idle startrun +-# Spider: Begin loading.*start-spider.html startrun startrun +-# Start Spider: try.*EXIT STATUS: NORMAL startrun initialized +-# Start Spider: try.*EXIT STATUS: (TIMED OUT|CRASHED) startrun startrun +-# Spider: Start.*urllist initialized initialized (non restart mode) +-# Spider: Begin loading.*urllist initialized initialized (non restart mode) +-# Spider: Finish loading.*urllist initialized initialized (non restart mode) +-# Spider: Current Url:.*urllist initialized initialized (non restart mode) +-# Spider: Start.*test=t; initialized starttest (has test id) +-# JavaScriptTest: Begin Run starttest starttest onStart +-# Spider: Begin loading.*test=t; starttest loadingtest (has test id) +-# JavaScriptTest: Begin Test t; loadingtest runningtest onBeforePage (has test id) +-# jstest: t runningtest reportingtest (has test id) yes. +-# Spider: Finish loading.*t=t; reportingtest loadedtest (has test id) +-# Spider: Finish loading.*t=t; runningtest pendingtest (has test id) +-# Spider: Current Url:.*test=t; loadedtest loadedtest (has test id) +-# http://.*test=t;.*PAGE STATUS: NORMAL loadedtest loadedtest onAfterPage (has test id) +-# http://.*test=t;.*PAGE STATUS: TIMED OUT loadedtest endrun onPageTimeout (has test id) yes. +-# JavaScriptTest: t Elapsed time loadedtest completedtest checkTestCompleted (has test id) +-# JavaScriptTest: End Test t completedtest completedtest checkTestCompleted (has test id) +-# JavaScriptTest: End Test t endrun endrun onPageTimeout (has test id) +-# Spider: Start.*test=t; completedtest starttest (non restart mode) (has test id) +-# JavaScriptTest: End Run completedtest endrun onStop +-# JavaScriptTest: End Run loadedtest endrun onStop +-# Spider: Start.*test=t; endrun starttest (restart mode) (has test id) +-# http://.*test=t;.*EXIT STATUS: NORMAL endrun endrun (has test id) maybe. +-# http://.*test=t;.*EXIT STATUS: TIMED OUT endrun endrun (has test id) yes. +-# http://.*test=t;.*EXIT STATUS: CRASHED endrun endrun (has test id) yes. +-# /work/mozilla/mozilla.com/test.mozilla.com/www$ endrun success +-# EOF success success +-# EOF endrun failure +-# +-# States has test id +-# ------------------------- +-# idle +-# startrun +-# initialized +-# starttest has test id +-# loadingtest has test id +-# runningtest has test id +-# pendingtest has test id +-# reportingtest has test id +-# loadedtest has test id +-# endrun has test id +-# completedtest has test id +-# success +-# failure ++# if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) ++# { ++# warn "WARNING: state: $state, expected runningtest, reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; ++# } + +- dbg "Assuming starting in restart mode"; ++ if ($state eq 'runningtest') ++ { ++ $state = 'reportingtest'; ++ } ++ elsif ($state eq 'reportingtest') ++ { ++ $state = 'reportingtest'; ++ } ++ else ++ { ++ warn "WARNING: test_id: $test_id{$state}, state: $state, expected: runningtest, reportingtest, log: $file"; ++ $state = 'reportingtest'; ++ } + +- $mode = 'restart'; +- $state = 'idle'; ++ ($test_result) = $_ =~ /result: (.*?) *type:/; ++ ($tmp_test_type) = $_ =~ /type: (.*?) *description:/; + +- while () +- { +- chomp; ++ die "FATAL ERROR: test_id: $test_id{$state}, jstest test type mismatch: start test_type: $test_type, current test_type: $tmp_test_type, test state: $state, log: $file" ++ if ($test_type ne $tmp_test_type); + +- # remove carriage returns, bels and other annoyances. +- $_ =~ s/[\r]$//; +- $_ =~ s/[\r]/CR/g; +- $_ =~ s/[\x01-\x08]//g; +- $_ =~ s/\s+$//; ++ ($test_description) = $_ =~ /description: (.*)/; + +- if ($debug) ++ if (!$test_description) + { +- dbg "\nINPUT: $_"; ++ $test_description = ""; + } ++ $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + +- # massage the input to make more uniform across test types and platforms +- s/\.js, line ([0-9]*): out of memory/.js:$1: out of memory/g; ++ outputrecord $tmp_test_id, $test_description, $test_result; + ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( $state ne 'idle' && (($tmp_test_id) = $_ =~ /^([^:]*):.* EXIT STATUS: NORMAL/)) ++ { ++ $test_exit_status = 'NORMAL'; ++ dbg "Exit Status Normal: $tmp_test_id, $test_exit_status"; + +- if (/^Spider: Start.*start-spider.html/) ++ if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { +- if ($state eq 'idle') +- { +- $state = 'startrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: idle, log: $file"; +- $state = 'startrun'; +- } ++ warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } +- elsif (/^Spider: Begin loading.*start-spider.html/) ++ ++ if ($state eq 'reportingtest' || $state eq 'runningtest') + { +- if ($state eq 'startrun') +- { +- $state = 'startrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: startrun, log: $file"; +- $state = 'startrun'; +- } ++ $state = 'exitedtest'; + } +- elsif (/^Start Spider: try.*EXIT STATUS: NORMAL/) ++ else + { +- if ($state eq 'startrun') +- { +- $state = 'initialized'; +- } +- else +- { +- warn "WARNING: state: $state, expected: startrun, log: $file"; +- $state = 'initialized'; +- } ++ warn "WARNING: state: $state, expected: reportingtest, runningtest, log: $file"; ++ $state = 'exitedtest'; + } +- elsif (/^Start Spider: try.*EXIT STATUS: (TIMED OUT|CRASHED)/) ++ ++ if (! $test_reported{$tmp_test_id}) + { +- if ($state eq 'startrun') +- { +- $state = 'startrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: startrun, log: $file"; +- $state = 'startrun'; +- } ++ dbg "No test results reported: $tmp_test_id"; ++ ++ $test_result = 'FAILED'; ++ $test_description = 'No test results reported; messages: ' . (join '; ', @messages) . ';'; ++ ++ outputrecord $tmp_test_id, $test_description, $test_result; + } +- elsif ( /^Spider: Start: -url .*test.mozilla.com.tests.mozilla.org.js.urllist-/) +- { +- dbg "Setting mode to nonrestart"; + +- $mode = 'nonrestart'; ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( $state ne 'idle' && (($tmp_test_id) = $_ =~ /^([^:]*):.* EXIT STATUS: TIMED OUT/)) ++ { ++ $test_exit_status = 'TIMED OUT'; ++ dbg "Exit Status Timed Out: $tmp_test_id, $test_exit_status"; + +- if ($state eq 'initialized') +- { +- $state = 'initialized'; +- } +- elsif ($state eq 'starttest') +- { +- $state = 'initialized'; +- } +- else +- { +- warn "WARNING: state: $state, expected: initialized, starttest, log: $file"; +- $state = 'initialized'; +- } +- } +- elsif ( ($tmp_test_id) = $_ =~ /^Spider: Start.*http.*test=([^;]*);/) ++ if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { +- if ($state eq 'initialized') +- { +- $state = 'starttest'; +- } +- elsif ($state eq 'completedtest') +- { +- $state = 'starttest'; +- } +- elsif ($state eq 'endrun') +- { +- $state = 'starttest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: initialized, completedtest, endrun, log: $file"; +- $state = 'starttest'; +- } +- +- $test_id{$state} = $tmp_test_id; +- $test_id{'loadingtest'} = $test_id{'runningtest'} = $test_id{'reportingtest'} = $test_id{'loadedtest'} = $test_id{'endrun'} = $test_id {'completedtest'} = $test_id{'loadedtest'} = ''; +- @messages = (); ++ warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } +- elsif ( /^JavaScriptTest: Begin Run/) ++ ++ if ($state eq 'reportingtest' || $state eq 'runningtest') + { +- if ($state eq 'starttest') +- { +- $state = 'starttest'; +- } +- elsif ($state eq 'initialized' && $mode eq 'nonrestart') +- { +- $state = 'starttest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: starttest or initialized in non restart mode, mode $mode, log: $file"; +- $state = 'starttest'; +- } ++ $state = 'exitedtest'; + } +- elsif ( ($tmp_test_id) = $_ =~ /^Spider: Begin loading http.*test=([^;]*);/) ++ else + { +- if ($mode eq 'restart' && $test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected starttest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } ++ dbg "state: $state, expected: reportingtest, runningtest"; ++ $state = 'exitedtest'; ++ } + +- if ($state eq 'starttest') +- { +- $state = 'loadingtest'; +- } +- elsif ($state eq 'initialized' && $mode eq 'nonrestart') +- { +- $state = 'loadingtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: starttest or initialized in non restart mode, log: $file"; +- $state = 'loadingtest'; +- } ++ $test_result = 'FAILED'; ++ $test_description .= '; messages: ' . (join '; ', @messages) . ';'; ++ ++ outputrecord $tmp_test_id, $test_description, $test_result; + +- $test_id{$state} = $tmp_test_id; +- } +- elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: Begin Test ([^ ]*)/) +- { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected loadingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( $state ne 'idle' && (($tmp_test_id, $tmp_test_exit_status) = $_ =~ /^([^:]*):.* EXIT STATUS: (CRASHED signal [0-9]+ [A-Z]+) \([0-9.]+ seconds\)/)) ++ { ++ $test_exit_status = $tmp_test_exit_status; ++ dbg "Exit Status Crashed: $tmp_test_id, $test_exit_status"; + +- if ($state eq 'loadingtest') +- { +- $state = 'runningtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: loadingtest, log: $file"; +- $state = 'runningtest'; +- } ++ if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) ++ { ++ warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; ++ } + +- $test_id{$state} = $tmp_test_id; ++ if ($state eq 'reportingtest' || $state eq 'runningtest') ++ { ++ $state = 'exitedtest'; + } +- elsif ( ($tmp_test_id) = $_ =~ /^jstest: (.*?) *bug:/) ++ else + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected runningtest, reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'runningtest') +- { +- $state = 'reportingtest'; +- } +- elsif ($state eq 'reportingtest') +- { +- $state = 'reportingtest'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'reportingtest'; +- } +- else +- { +- warn "WARNING: test_id: $test_id{$state}, state: $state, expected: runningtest, reportingtest, pendingtest, log: $file"; +- $state = 'reportingtest'; +- } +- +- ($test_result) = $_ =~ /result: (.*?) *type:/; +- ($tmp_test_type) = $_ =~ /type: (.*?) *description:/; +- +- die "FATAL ERROR: test_id: $test_id{$state}, jstest test type mismatch: start test_type: $test_type, current test_type: $tmp_test_type, test state: $state, log: $file" +- if ($test_type ne $tmp_test_type); +- +- ($test_description) = $_ =~ /description: (.*)/; ++ dbg "state: $state, expected: reportingtest, runningtest"; ++ $state = 'exitedtest'; ++ } + +- if (!$test_description) +- { +- $test_description = ""; +- } +- $test_description .= ' ' . join '; ', @messages; ++ $test_result = 'FAILED'; ++ $test_description .= '; messages: ' . (join '; ', @messages) . ';'; ++ ++ outputrecord $tmp_test_id, $test_description, $test_result; + +- outputrecord $tmp_test_id, $test_description, $test_result; ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( $state ne 'idle' && (($tmp_test_id, $tmp_test_exit_status) = $_ =~ /^([^:]*):.* EXIT STATUS: (ABNORMAL [0-9]+) \([0-9.]+ seconds\)/)) ++ { ++ $test_exit_status = $tmp_test_exit_status; ++ dbg "Exit Status Abnormal: $tmp_test_id, $test_exit_status"; + +- $test_id{$state} = $tmp_test_id; +- } +- elsif ( ($tmp_test_id) = $_ =~ /^Spider: Finish loading http.*test=([^;]*);/) ++ if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected reportingtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'reportingtest') +- { +- $state = 'loadedtest'; +- } +- else +- { +- # probably an out of memory error or a browser only delayed execution test. +- dbg "state: $state, expected: reportingtest. assuming test result is pending"; +- $state = 'pendingtest'; +- } +- +- $test_id{$state} = $tmp_test_id; ++ warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } +- elsif ( ($tmp_test_id) = $_ =~ /^Spider: Current Url:.*test=([^;]*);/) +- { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'loadedtest') +- { +- $state = 'loadedtest'; +- } +- elsif ($state eq 'reportingtest') +- { +- $state = 'loadedtest'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'pendingtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: loadedtest, reportingtest, pendingtest, log: $file"; +- $state = 'loadedtest'; +- } + +- $test_id{$state} = $tmp_test_id; +- } +- elsif ( ($tmp_test_id, $page_status) = $_ =~ /^http:.*test=([^;]*);.* (PAGE STATUS: NORMAL.*)/) ++ if ($state eq 'reportingtest' || $state eq 'runningtest') + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'loadedtest') +- { +- $state = 'loadedtest'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'pendingtest'; +- } +- elsif ($state eq 'reportingtest') +- { +- # test was pending, but output a result. +- $state = 'loadedtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: loadedtest, pendingtest, reportingtest, log: $file"; +- $state = 'loadedtest'; +- } +- +- $test_id{$state} = $tmp_test_id; ++ $state = 'exitedtest'; + } +- elsif ( ($tmp_test_id, $page_status) = $_ =~ /^http:.*test=([^;]*);.* (PAGE STATUS: TIMED OUT.*)/) ++ else + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'loadedtest') +- { +- $state = 'endrun'; +- } +- elsif ($state eq 'runningtest') +- { +- $state = 'completedtest'; +- } +- elsif ($state eq 'reportingtest') +- { +- $state = 'completedtest'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'completedtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: loadedtest, runningtest, reportingtest, pendingtest, log: $file"; +- $state = 'endrun'; +- } ++ dbg "state: $state, expected: reportingtest, runningtest"; ++ $state = 'exitedtest'; ++ } + +- $test_result = 'FAILED'; +- $test_description = $page_status . ' ' . join '; ', @messages;; +- +- outputrecord $tmp_test_id, $test_description, $test_result; ++ ($exit_code) = $test_exit_status =~ /ABNORMAL ([0-9]+)/; + +- $test_id{$state} = $tmp_test_id; ++ if (grep /$exit_code/, @expected_exit_code_list) ++ { ++ $test_result = 'PASSED'; + } +- elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: ([^ ]*) Elapsed time/) ++ else + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected loadedtest. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } ++ $test_result = 'FAILED'; ++ } + +- if ($state eq 'loadedtest') +- { +- $state = 'completedtest'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'pendingtest'; +- } +- elsif ($state eq 'reportingtest') +- { +- # test was pending, but has been reported. +- $state = 'completedtest'; +- } +- else +- { +- warn "WARNING: state: $state, expected: loadedtest, loadedtest, pendingtest, reportingtest, log: $file"; +- $state = 'completedtest'; +- } ++ $test_description .= '; messages: ' . (join '; ', @messages) . ';'; + +- $test_id{$state} = $tmp_test_id; +- } +- elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: End Test ([^ ]*)/) +- { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected completedtest, endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } ++ dbg "Exit Code: $exit_code, Test Result: $test_result, Expected Exit Codes: " . (join '; ', @expected_exit_code_list); + +- if ($state eq 'completedtest') +- { +- if ($mode eq 'restart') +- { +- $state = 'completedtest'; +- } +- else +- { +- $state = 'starttest'; +- } +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'completedtest'; ++ outputrecord $tmp_test_id, $test_description, $test_result; + +- $test_result = 'UNKNOWN'; +- $test_description = 'No test results reported. ' . join '; ', @messages; +- +- outputrecord $tmp_test_id, $test_description, $test_result; +- } +- elsif ($state eq 'endrun') +- { +- $state = 'endrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: completedtest, pendingtest, endrun, log: $file"; +- $state = 'completedtest'; +- } ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( ($tmp_test_id) = $_ =~ /^JavaScriptTest: End Test ([^ ]*)/) ++ { ++ dbg "End Test: $tmp_test_id"; + +- $test_id{$state} = $tmp_test_id; ++ if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) ++ { ++ warn "WARNING: state: $state, mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; + } +- elsif ( /^JavaScriptTest: End Run/) ++ ++ if ($state eq 'exitedtest' || $state eq 'runningtest' || $state eq 'reportingtest') + { +- if ($state eq 'completedtest') +- { +- $state = 'endrun'; +- } +- elsif ($state eq 'loadedtest') +- { +- $state = 'endrun'; +- } +- elsif ($state eq 'pendingtest') +- { +- $state = 'pendingtest'; +- } +- elsif ($state eq 'starttest' && $mode eq 'nonrestart') +- { +- # non restart mode, at last test. +- $state = 'endrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: completedtest, loadedtest, pendingtest or starttest in non restart mode, log: $file"; +- $state = 'endrun'; +- } ++ $state = 'endtest'; + } +- elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: NORMAL.*)/) ++ else + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'endrun') +- { +- $state = 'endrun'; +- } +- elsif ($state eq 'completedtest') +- { +- dbg "previously pending test $test_id{$state} completed and is now endrun"; +- $state = 'endrun'; +- } +- else +- { +- warn "WARNING: state: $state, expected: endrun, log: $file"; +- $state = 'endrun'; +- } ++ warn "WARNING: state: $state, expected: runningtest, reportingtest, exitedtest, log: $file"; ++ $state = 'endtest'; ++ } + +- if (! $test_reported{$tmp_test_id}) +- { +- $test_result = 'UNKNOWN'; +- $test_description = $exit_status . ' No test results reported. ' . join '; ', @messages; +- +- outputrecord $tmp_test_id, $test_description, $test_result; +- } ++ $test_id{$state} = $tmp_test_id; ++ } ++ elsif ( /^JavaScriptTest: End Run/) ++ { ++ dbg "End Run"; + +- $test_id{$state} = $tmp_test_id; ++ if ($state eq 'endtest') ++ { ++ $state = 'endrun'; + } +- elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: TIMED OUT.*)/) ++ else + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } +- +- if ($state eq 'endrun') +- { +- $state = 'endrun'; +- } +- else +- { +- dbg "state: $state, expected: endrun"; +- $state = 'endrun'; +- } +- +- $test_result = 'FAILED'; +- $test_description = $exit_status . ' ' . join '; ', @messages; +- +- outputrecord $tmp_test_id, $test_description, $test_result; +- +- $test_id{$state} = $tmp_test_id; ++ warn "WARNING: state: $state, expected: endtest, log: $file"; ++ $state = 'endrun'; + } +- elsif ( ($tmp_test_id, $exit_status) = $_ =~ /^http:.*test=([^;]*);.* (EXIT STATUS: CRASHED.*)/) ++ } ++ elsif ($_ && ++ !/^\s+$/ && ++ !/^(STATUS:| *PASSED!| *FAILED!)/ && ++ !/^JavaScriptTest:/ && ++ !/^[*][*][*]/ && ++ !/^[-+]{2,2}(WEBSHELL|DOMWINDOW)/ && ++ !/^Spider:/ && ++ !/real.*user.*sys.*$/ && ++ !/user.*system.*elapsed/) ++ { ++ if ('runningtest, reportingtest' =~ /$state/) + { +- if ($test_id{$state} && $tmp_test_id ne $test_id{$state}) +- { +- warn "WARNING: state: $state, expected endrun. mismatched test_id: expected: $tmp_test_id, actual: $test_id{$state}, log: $file"; +- } + +- if ($state eq 'endrun') +- { +- $state = 'endrun'; +- } +- else ++ if (/error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || ++ /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ || ++ /terminate called after throwing an instance of 'std::bad_alloc'/) + { +- dbg "state: $state, expected: endrun"; +- $state = 'endrun'; ++ dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; ++ push @messages, ('/' . $test_id{$state} . ':0: out of memory'); + } +- +- $test_result = 'FAILED'; +- $test_description = $exit_status . ' ' . join '; ', @messages;; +- +- outputrecord $tmp_test_id, $test_description, $test_result; +- +- $test_id{$state} = $tmp_test_id; +- } +- elsif ( m@^(\/cygdrive\/.|\/.)?$test_dir$@) +- { +- if ($state eq 'endrun') ++ elsif (/\.js, line [0-9]+: out of memory/ ) + { +- $state = 'success'; ++ s/\.js, line ([0-9]+): out of memory/\.js:$1:/; ++ dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; ++ push @messages, ('/' . $test_id{$state} . ':0: out of memory'); + } + else + { +- warn "WARNING: state: $state, expected: endrun, log: $file"; +- $state = 'success'; ++ dbg "Adding message: $_"; ++ push @messages, ($_); + } +- +- $test_id{$state} = $tmp_test_id; + } +- elsif (!/^ \=\>/ && !/^\s+$/ && !/^[*][*][*]/ && !/^[-+]{2,2}(WEBSHELL|DOMWINDOW)/ && !/^Spider:/ && +- !/^JavaScriptTest:/ && !/real.*user.*sys.*$/ && !/user.*system.*elapsed/) +- { +- if ('starttest, loadingtest, runningtest, reportingtest, pendingtest, loadedtest, endrun, completedtest' =~ /$state/) +- { ++ } ++ elsif ($debug) ++ { ++ dbg "Skipping: $_"; ++ } + +- if (/error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || +- /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ ) +- { +- dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; +- push @messages, ('/' . $test_id{$state} . ':0: out of memory'); +- } +- else +- { +- dbg "Adding message: $_"; +- push @messages, ($_); +- } +- } ++ if ($debug) ++ { ++ if ($test_id{$state}) ++ { ++ dbg "test_id{$state}=$test_id{$state}, " . (join '; ', @messages); + } +- +- if ($debug) ++ else + { +- if ($test_id{$state}) +- { +- dbg "test_id{$state}=$test_id{$state}, " . join '; ', @messages; +- } +- else +- { +- dbg "state=$state, " . join '; ', @messages; +- } ++ dbg "state=$state, " . (join '; ', @messages); + } + } + } +- close FILE; +- +- undef $test_branchid; +- undef $test_date; +- undef $test_buildtype; +- undef $test_machine; +- undef $test_product; +- undef $test_suite; +- ++ if ($state eq 'endrun') ++ { ++ $state = 'success'; ++ } + die "FATAL ERROR: Test run terminated prematurely. state: $state, log: $file" if ($state ne 'success'); +-} + ++} ++close FILE; + close TEMP; + ++undef $test_branchid; ++undef $test_date; ++undef $test_buildtype; ++undef $test_machine; ++undef $test_product; ++undef $test_suite; ++ + outresults; + + unlink $temp; + + sub dbg { + if ($debug) + { + my $msg = shift; + print STDERR "DEBUG: $msg\n"; + } + } + + sub outresults + { ++ dbg "sorting temp file $temp"; + system("sort < $temp | uniq"); ++ dbg "finished sorting"; + } + + sub outputrecord + { + my ($test_id, $test_description, $test_result) = @_; + + # cut off the extra jstest: summaries as they duplicate the other + # output and follow it. + $test_description =~ s/jstest:.*//; + +- if (length($test_description) > 6000) +- { +- $test_description = substr($test_description, 0, 6000); +- } ++# if (length($test_description) > 6000) ++# { ++# $test_description = substr($test_description, 0, 6000); ++# } ++# + + my $output = +- "TEST_ID=$test_id, TEST_BRANCH=$test_branchid, TEST_RESULT=$test_result, " . +- "TEST_BUILDTYPE=$test_buildtype, TEST_TYPE=$test_type, TEST_OS=$test_os, " . +- "TEST_MACHINE=$test_machine, TEST_PROCESSORTYPE=$test_processortype, " . +- "TEST_KERNEL=$test_kernel, TEST_DATE=$test_date, TEST_TIMEZONE=$test_timezone, " . +- "TEST_DESCRIPTION=$test_description\n"; ++ "TEST_ID=$test_id, " . ++ "TEST_BRANCH=$test_branchid, " . ++ "TEST_BUILDTYPE=$test_buildtype, " . ++ "TEST_TYPE=$test_type, " . ++ "TEST_OS=$test_os, " . ++ "TEST_KERNEL=$test_kernel, " . ++ "TEST_PROCESSORTYPE=$test_processortype, " . ++ "TEST_MEMORY=$test_memory, " . ++ "TEST_CPUSPEED=$test_cpuspeed, " . ++ "TEST_TIMEZONE=$test_timezone, " . ++ "TEST_RESULT=$test_result, " . ++ "TEST_EXITSTATUS=$test_exit_status, " . ++ "TEST_DESCRIPTION=$test_description, " . ++ "TEST_MACHINE=$test_machine, " . ++ "TEST_DATE=$test_date" . ++ "\n"; + + if ($debug) + { + dbg "RECORD: $output"; + } + print TEMP $output; + + $test_reported{$test_id} = 1; +Index: process-logs.sh +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/process-logs.sh,v +retrieving revision 1.3 +diff -p -U 8 -r1.3 process-logs.sh +--- process-logs.sh 3 Apr 2008 16:25:02 -0000 1.3 ++++ process-logs.sh 25 Jun 2008 17:31:16 -0000 +@@ -33,23 +33,23 @@ + # decision by deleting the provisions above and replace them with the notice + # and other provisions required by the GPL or the LGPL. If you do not delete + # the provisions above, a recipient may use your version of this file under + # the terms of any one of the MPL, the GPL or the LGPL. + # + # ***** END LICENSE BLOCK ***** + + if [[ -z "$TEST_DIR" ]]; then +- cat < 2.6.23.*fc7 + arch optional. The machine architecture as specified by uname -p + If not specified, the script will attempt to determine the + value from the TEST_PROCESSORTYPE line in each log. + 'all' - do not filter on machine architecture. Use this + for Windows. + 'i686' - Linux distros such as Fedora Core or RHEL or CentOS. + 'i386' - Mac Intel + 'powerpc' - Mac PowerPC + +-kernel optional. The machine kernel as specified by uname -r +- If not specified, the script will attempt to determine the +- value from the TEST_KERNEL line in the log. +- 'all' - do not filter on machine kernel. Use this for +- Windows. +- For Linux distros, use the value of uname -r +- and replace the minor version numbers with .* as in +- 2.6.23.1-21.fc7 -> 2.6.23.*fc7 + EOF + exit 2 + } + + while getopts "l:A:K:" optname; +- do +- case $optname in +- l) testlogfiles=$OPTARG;; +- A) optarch=$OPTARG;; +- K) optkernel=$OPTARG;; +- esac ++do ++ case $optname in ++ l) testlogfiles=$OPTARG;; ++ A) optarch=$OPTARG;; ++ K) optkernel=$OPTARG;; ++ esac + done + + if [[ -z "$testlogfiles" ]]; then + usage + fi + + for testlogfile in `ls $testlogfiles`; do + + debug "testlogfile=$testlogfile" + ++ case $testlogfile in ++ *.log) ++ worktestlogfile=$testlogfile ++ ;; ++ *.log.bz2) ++ worktestlogfile=`mktemp $testlogfile.XXXXXX` ++ bunzip2 -c $testlogfile > $worktestlogfile ++ ;; ++ *.log.gz) ++ worktestlogfile=`mktemp $testlogfile.XXXXXX` ++ gunzip -c $testlogfile > $worktestlogfile ++ ;; ++ *) ++ echo "unknown log type: $f" ++ exit 2 ++ ;; ++ esac ++ + case "$testlogfile" in + *,js,*) testtype=shell;; + *,firefox,*) testtype=browser;; + *) error "unknown testtype in logfile $testlogfile" $LINENO;; + esac + + debug "testtype=$testtype" + +@@ -128,72 +146,86 @@ for testlogfile in `ls $testlogfiles`; d + esac + + debug "buildtype=$buildtype" + + case "$testlogfile" in + *,1.8.0*) branch=1.8.0;; + *,1.8.1*) branch=1.8.1;; + *,1.9.0*) branch=1.9.0;; ++ *,1.9.1*) branch=1.9.1;; + *) +- branch=`grep '^environment: TEST_BRANCH=' $testlogfile | sed 's|.*TEST_BRANCH=\(.*\)|\1|'` ++ branch=`grep -m 1 '^environment: TEST_BRANCH=' $worktestlogfile | sed 's|.*TEST_BRANCH=\(.*\)|\1|'` + if [[ -z "$branch" ]]; then + error "unknown branch in logfile $testlogfile" $LINENO + fi + ;; + esac + + debug "branch=$branch" + + case "$testlogfile" in +- *,win32,*) OSID=win32;; ++ *,nt,*) OSID=nt;; + *,linux,*) OSID=linux;; +- *,mac,*) OSID=mac;; ++ *,darwin,*) OSID=darwin;; + *) +- OSID=`grep '^environment: OSID=' $testlogfile | sed 's|.*OSID=\(.*\)|\1|'` ++ OSID=`grep -m 1 '^environment: OSID=' $worktestlogfile | sed 's|.*OSID=\(.*\)|\1|'` + if [[ -z "$OSID" ]]; then + error "unknown OS in logfile $testlogfile" $LINENO + fi + ;; + esac + + debug "OSID=$OSID" + + if [[ -n "$optkernel" ]]; then + kernel="$optkernel" + else +- if [[ "$OSID" == "win32" ]]; then +- kernel=all +- else +- kernel=`grep '^environment: TEST_KERNEL=' $testlogfile | sed 's|.*TEST_KERNEL=\(.*\)|\1|'` +- kernel=`echo $kernel | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'` ++ kernel=`grep -m 1 '^environment: TEST_KERNEL=' $worktestlogfile | sed 's|.*TEST_KERNEL=\(.*\)|\1|'` ++ if [[ "$OSID" == "linux" ]]; then ++ kernel=`echo $kernel | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*|\1.\2.\3|'` + fi + fi + + debug "kernel=$kernel" + + if [[ -n "$optarch" ]]; then + arch="$optarch" + else +- if [[ "$OSID" == "win32" ]]; then +- arch=all +- else +- arch=`grep '^environment: TEST_PROCESSORTYPE=' $testlogfile | sed 's|.*TEST_PROCESSORTYPE=\(.*\)|\1|'` +- fi ++ arch=`grep -m 1 '^environment: TEST_PROCESSORTYPE=' $worktestlogfile | sed 's|.*TEST_PROCESSORTYPE=\(.*\)|\1|'` + fi + + debug "arch=$arch" + ++ memory=`grep -m 1 '^environment: TEST_MEMORY=' $worktestlogfile | sed 's|.*TEST_MEMORY=\(.*\)|\1|'` ++ speed=`grep -m 1 '^environment: TEST_CPUSPEED=' $worktestlogfile | sed 's|.*TEST_CPUSPEED=\(.*\)|\1|'` ++ + timezone=`basename $testlogfile | sed 's|^[-0-9]*\([-+]\)\([0-9]\{4,4\}\),.*|\1\2|'` + + debug "timezone=$timezone" + + outputprefix=$testlogfile + + includetests="included-$branch-$testtype-$buildtype.tests" + excludetests="excluded-$branch-$testtype-$buildtype.tests" + +- grep '^include: ' $testlogfile | sed 's|include: ||' > $TEST_DIR/tests/mozilla.org/js/$includetests +- grep '^exclude: ' $testlogfile | sed 's|exclude: ||' > $TEST_DIR/tests/mozilla.org/js/$excludetests +- +- $TEST_DIR/tests/mozilla.org/js/known-failures.pl -b "$branch" -T "$buildtype" -t "$testtype" -o "$OSID" -z "$timezone" -l "$testlogfile" -A "$arch" -K "$kernel" -r "$TEST_JSDIR/failures.txt" -O "$outputprefix" ++ grep '^include: ' $worktestlogfile | sed 's|include: ||' > $TEST_DIR/tests/mozilla.org/js/$includetests ++ grep '^exclude: ' $worktestlogfile | sed 's|exclude: ||' > $TEST_DIR/tests/mozilla.org/js/$excludetests + ++ $TEST_DIR/tests/mozilla.org/js/known-failures.pl \ ++ -b "$branch" \ ++ -T "$buildtype" \ ++ -t "$testtype" \ ++ -o "$OSID" \ ++ -K "$kernel" \ ++ -A "$arch" \ ++ -M "$memory" \ ++ -S "$speed" \ ++ -z "$timezone" \ ++ -r "$TEST_JSDIR/failures.txt" \ ++ -l "$worktestlogfile" \ ++ -O "$outputprefix" ++ ++ if [[ "$testlogfile" != "$worktestlogfile" ]]; then ++ rm $worktestlogfile ++ unset worktestlogfile ++ fi + done +Index: remove-fixed-failures.sh +=================================================================== +RCS file: remove-fixed-failures.sh +diff -N remove-fixed-failures.sh +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ remove-fixed-failures.sh 25 Jun 2008 17:31:17 -0000 +@@ -0,0 +1,82 @@ ++#!/bin/bash ++# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- ++ ++# ***** BEGIN LICENSE BLOCK ***** ++# Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Original Code is Mozilla JavaScript Testing Utilities ++# ++# The Initial Developer of the Original Code is ++# Mozilla Corporation. ++# Portions created by the Initial Developer are Copyright (C) 2008 ++# the Initial Developer. All Rights Reserved. ++# ++# Contributor(s): Bob Clary ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 2 or later (the "GPL"), or ++# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++# in which case the provisions of the GPL or the LGPL are applicable instead ++# of those above. If you wish to allow use of your version of this file only ++# under the terms of either the GPL or the LGPL, and not to allow others to ++# use your version of this file under the terms of the MPL, indicate your ++# decision by deleting the provisions above and replace them with the notice ++# and other provisions required by the GPL or the LGPL. If you do not delete ++# the provisions above, a recipient may use your version of this file under ++# the terms of any one of the MPL, the GPL or the LGPL. ++# ++# ***** END LICENSE BLOCK ***** ++ ++if [[ ! -e "$1" || ! -e "$2" ]]; then ++ cat < ${workfailures}.temp ++ ++mv $workfailures.temp $workfailures ++ ++mv $workfailures $failures ++ +Index: runtests.sh +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/runtests.sh,v +retrieving revision 1.14 +diff -p -U 8 -r1.14 runtests.sh +--- runtests.sh 1 May 2008 23:38:29 -0000 1.14 ++++ runtests.sh 25 Jun 2008 17:31:17 -0000 +@@ -33,23 +33,23 @@ + # decision by deleting the provisions above and replace them with the notice + # and other provisions required by the GPL or the LGPL. If you do not delete + # the provisions above, a recipient may use your version of this file under + # the terms of any one of the MPL, the GPL or the LGPL. + # + # ***** END LICENSE BLOCK ***** + + if [[ -z "$TEST_DIR" ]]; then +- cat <\n" + echo -e "\nTinderboxPrint:js tests
$branch $buildtype $testtype
$npass/$nfail
F:$nfixes R:$nregressions" + echo -e "\nTinderboxPrint:
\n" +- + fi ++ + done +Index: shell.js +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/shell.js,v +retrieving revision 1.6 +diff -p -U 8 -r1.6 shell.js +--- shell.js 25 Apr 2008 17:52:13 -0000 1.6 ++++ shell.js 25 Jun 2008 17:31:17 -0000 +@@ -155,18 +155,18 @@ function TestCase(n, d, e, a) + } + + TestCase.prototype.dump = function () { + dump('\njstest: ' + this.path + ' ' + + 'bug: ' + this.bugnumber + ' ' + + 'result: ' + (this.passed ? 'PASSED':'FAILED') + ' ' + + 'type: ' + this.type + ' ' + + 'description: ' + toPrinted(this.description) + ' ' + +- 'expected: ' + toPrinted(this.expect) + ' ' + +- 'actual: ' + toPrinted(this.actual) + ' ' + ++// 'expected: ' + toPrinted(this.expect) + ' ' + ++// 'actual: ' + toPrinted(this.actual) + ' ' + + 'reason: ' + toPrinted(this.reason) + '\n'); + }; + + /* + * The test driver searches for such a phrase in the test output. + * If such phrase exists, it will set n as the expected exit code. + */ + function expectExitCode(n) +Index: test-browser.sh +=================================================================== +RCS file: test-browser.sh +diff -N test-browser.sh +--- test-browser.sh 1 May 2008 23:38:30 -0000 1.12 ++++ /dev/null 1 Jan 1970 00:00:00 -0000 +@@ -1,336 +0,0 @@ +-#!/bin/bash -e +-# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- +- +-# ***** BEGIN LICENSE BLOCK ***** +-# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +-# +-# The contents of this file are subject to the Mozilla Public License Version +-# 1.1 (the "License"); you may not use this file except in compliance with +-# the License. You may obtain a copy of the License at +-# http://www.mozilla.org/MPL/ +-# +-# Software distributed under the License is distributed on an "AS IS" basis, +-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-# for the specific language governing rights and limitations under the +-# License. +-# +-# The Original Code is Mozilla JavaScript Testing Utilities +-# +-# The Initial Developer of the Original Code is +-# Mozilla Corporation. +-# Portions created by the Initial Developer are Copyright (C) 2007 +-# the Initial Developer. All Rights Reserved. +-# +-# Contributor(s): Bob Clary +-# +-# Alternatively, the contents of this file may be used under the terms of +-# either the GNU General Public License Version 2 or later (the "GPL"), or +-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +-# in which case the provisions of the GPL or the LGPL are applicable instead +-# of those above. If you wish to allow use of your version of this file only +-# under the terms of either the GPL or the LGPL, and not to allow others to +-# use your version of this file under the terms of the MPL, indicate your +-# decision by deleting the provisions above and replace them with the notice +-# and other provisions required by the GPL or the LGPL. If you do not delete +-# the provisions above, a recipient may use your version of this file under +-# the terms of any one of the MPL, the GPL or the LGPL. +-# +-# ***** END LICENSE BLOCK ***** +- +-if [[ -z "$TEST_DIR" ]]; then +- cat <> $includetestsfile +- if echo $i | grep -q '\.js$'; then +- echo $i >> $includetestsfile +- else +- cat $i >> $includetestsfile +- fi +- elif [[ -d "$i" ]]; then +- find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile +- fi +-done +- +-excludetestsfile="excluded-$branch-browser-$buildtype.tests" +-rm -f $excludetestsfile +-touch $excludetestsfile +- +-if [[ -z "$excludetests" ]]; then +- excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" +-fi +- +-for e in $excludetests; do +- if [[ -f "$e" ]]; then +- echo "# excluding $e" >> $excludetestsfile +- if echo $e | grep -q '\.js$'; then +- echo $e >> $excludetestsfile +- else +- cat $e >> $excludetestsfile +- fi +- elif [[ -d "$e" ]]; then +- find $e -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $excludetestsfile +- fi +-done +- +-case "$OSID" in +- win32) +- arch='.*' +- kernel='.*' +- ;; +- linux) +- arch="`uname -p`" +- kernel="`uname -r | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'`" +- ;; +- mac) +- arch="`uname -p`" +- kernel='[^,]*' +- ;; +- *) +- error "$OSID not supported" $LINENO +- ;; +-esac +- +-if [[ -z "$timeouts" ]]; then +- echo "# exclude tests that time out" >> $excludetestsfile +- egrep "TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*browser[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*EXIT STATUS: TIMED OUT" \ +- failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile +-fi +- +-if [[ -z "$crashes" ]]; then +- echo "# exclude tests that crash" >> $excludetestsfile +- pattern="TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*browser[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*" +- case "$buildtype" in +- opt) +- pattern="${pattern}EXIT STATUS: CRASHED" +- ;; +- debug) +- pattern="${pattern}(EXIT STATUS: CRASHED|Assertion failure:)" +- ;; +- esac +- egrep "$pattern" failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile +- +-fi +- +-urllist="urllist-$branch-browser-$buildtype.tests" +-urlhtml="urllist-$branch-browser-$buildtype.html" +- +-rm -f $urllist $urlhtml +- +-cat > $urlhtml < +- +-JavaScript Tests +- +- +-
    +-EOF +- +-cat $includetestsfile | while read jsfile +-do +- if echo $jsfile | grep -q '^#'; then +- continue +- fi +- +- if ! grep -q $jsfile $excludetestsfile; then +- +- result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` +- +- case $result in +- 1.5) version=";version=1.5";; +- 1.6) version=";version=1.6";; +- 1.7) version=";version=1.7";; +- 1.8) version=";version=1.8";; +- 1.9) version=";version=1.9";; +- 2.0) version=";version=2.0";; +- *) version="";; +- esac +- +- echo "http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=$jsfile;language=type;text/javascript$version$gczeal" >> $urllist +- echo "
  • $jsfile
  • " >> $urlhtml +- fi +-done +- +-cat >> $urlhtml < +- +- +-EOF +- +-chmod a+r $urlhtml +- +-cat $includetestsfile | sed 's|^|include: |' +-cat $excludetestsfile | sed 's|^|exclude: |' +- +-if [[ -z "$filesonly" ]]; then +- if [[ "$restart" == "1" ]]; then +- cat "$urllist" | while read url; +- do +- edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "$url" +- if time timed_run.py $TEST_JSEACH_TIMEOUT "$url" \ +- "$executable" -P "$profilename" \ +- -spider -start -quit \ +- -uri "$url" \ +- -depth 0 -timeout "$TEST_JSEACH_PAGE_TIMEOUT" \ +- -hook "http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js"; then +- true; +- fi +- +- done +- else +- edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" +- if ! time timed_run.py $TEST_JSALL_TIMEOUT "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" \ +- "$executable" -P "$profilename" \ +- -spider -start -quit \ +- -uri "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" \ +- -depth 1 -timeout "$TEST_JSEACH_PAGE_TIMEOUT" \ +- -hook "http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js"; then +- error "timed_run.py ended abnormally: $?" $LINENO +- fi +- fi +-fi +- +-popd +Index: test-shell.sh +=================================================================== +RCS file: test-shell.sh +diff -N test-shell.sh +--- test-shell.sh 1 May 2008 23:38:30 -0000 1.11 ++++ /dev/null 1 Jan 1970 00:00:00 -0000 +@@ -1,261 +0,0 @@ +-#!/bin/bash -e +-# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- +- +-# ***** BEGIN LICENSE BLOCK ***** +-# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +-# +-# The contents of this file are subject to the Mozilla Public License Version +-# 1.1 (the "License"); you may not use this file except in compliance with +-# the License. You may obtain a copy of the License at +-# http://www.mozilla.org/MPL/ +-# +-# Software distributed under the License is distributed on an "AS IS" basis, +-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-# for the specific language governing rights and limitations under the +-# License. +-# +-# The Original Code is Mozilla JavaScript Testing Utilities +-# +-# The Initial Developer of the Original Code is +-# Mozilla Corporation. +-# Portions created by the Initial Developer are Copyright (C) 2007 +-# the Initial Developer. All Rights Reserved. +-# +-# Contributor(s): Bob Clary +-# +-# Alternatively, the contents of this file may be used under the terms of +-# either the GNU General Public License Version 2 or later (the "GPL"), or +-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +-# in which case the provisions of the GPL or the LGPL are applicable instead +-# of those above. If you wish to allow use of your version of this file only +-# under the terms of either the GPL or the LGPL, and not to allow others to +-# use your version of this file under the terms of the MPL, indicate your +-# decision by deleting the provisions above and replace them with the notice +-# and other provisions required by the GPL or the LGPL. If you do not delete +-# the provisions above, a recipient may use your version of this file under +-# the terms of any one of the MPL, the GPL or the LGPL. +-# +-# ***** END LICENSE BLOCK ***** +- +-if [[ -z "$TEST_DIR" ]]; then +- cat <> $includetestsfile +- if echo $i | grep -q '\.js$'; then +- echo $i >> $includetestsfile +- else +- cat $i >> $includetestsfile +- fi +- elif [[ -d "$i" ]]; then +- find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile +- fi +-done +- +-#excludetestsfile=`mktemp excludetestsfile.XXXXX` +-excludetestsfile="excluded-$branch-shell-$buildtype.tests" +-rm -f $excludetestsfile +-touch $excludetestsfile +- +-if [[ -z "$excludetests" ]]; then +- excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" +-fi +- +-for e in $excludetests; do +- if [[ -f "$e" ]]; then +- echo "# excluding $e" >> $excludetestsfile +- if echo $e | grep -q '\.js$'; then +- echo $e >> $excludetestsfile +- else +- cat $e >> $excludetestsfile +- fi +- elif [[ -d "$e" ]]; then +- find $e -name '*.js' -print | egrep -v '(shell|browser|template|userhook.*|\.#.*).js' | sed 's/^\.\///' | sort >> $excludetestsfile +- fi +-done +- +-case "$OSID" in +- win32) +- arch='.*' +- kernel='.*' +- ;; +- linux) +- arch="`uname -p`" +- kernel="`uname -r | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'`" +- ;; +- mac) +- arch="`uname -p`" +- kernel='[^,]*' +- ;; +- *) +- error "$product-$branch-$buildtype: $OSID not supported" $LINENO +- ;; +-esac +- +-if [[ -z "$timeouts" ]]; then +- echo "# exclude tests that time out" >> $excludetestsfile +- egrep "TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*shell[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*EXIT STATUS: TIMED OUT" \ +- failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile +-fi +- +-if [[ -z "$crashes" ]]; then +- echo "# exclude tests that crash" >> $excludetestsfile +- pattern="TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*shell[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*" +- case "$buildtype" in +- opt) +- pattern="${pattern}EXIT STATUS: CRASHED" +- ;; +- debug) +- pattern="${pattern}(EXIT STATUS: CRASHED|Assertion failure:)" +- ;; +- esac +- egrep "$pattern" failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile +- +-fi +- +-cat $includetestsfile | sed 's|^|include: |' +-cat $excludetestsfile | sed 's|^|exclude: |' +- +-if ! time perl jsDriver.pl \ +- -l $includetestsfile \ +- -L $excludetestsfile \ +- -s $executable \ +- -e sm$buildtype \ +- -o "-S 524288 $gczeal" \ +- -R \ +- -T $TEST_JSSHELL_TIMEOUT \ +- -f /dev/null \ +- -Q; then +- error "$product-$branch-$buildtype-$OSID: jsDriver.pl" $LINENO +-fi +- +-popd +Index: test.sh +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/test.sh,v +retrieving revision 1.8 +diff -p -U 8 -r1.8 test.sh +--- test.sh 10 Apr 2008 20:35:58 -0000 1.8 ++++ test.sh 25 Jun 2008 17:31:17 -0000 +@@ -33,23 +33,23 @@ + # decision by deleting the provisions above and replace them with the notice + # and other provisions required by the GPL or the LGPL. If you do not delete + # the provisions above, a recipient may use your version of this file under + # the terms of any one of the MPL, the GPL or the LGPL. + # + # ***** END LICENSE BLOCK ***** + + if [[ -z "$TEST_DIR" ]]; then +- cat <> $includetestsfile ++ if echo $i | grep -q '\.js$'; then ++ echo $i >> $includetestsfile ++ else ++ cat $i >> $includetestsfile ++ fi ++ elif [[ -d "$i" ]]; then ++ find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile ++ fi ++done ++ ++excludetestsfile="excluded-$branch-$testtype-$buildtype.tests" ++rm -f $excludetestsfile ++touch $excludetestsfile ++ ++if [[ -z "$excludetests" ]]; then ++ excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" + fi + +-for data in $datafiles; do +- source $data ++for e in $excludetests; do ++ if [[ -f "$e" ]]; then ++ echo "# excluding $e" >> $excludetestsfile ++ if echo $e | grep -q '\.js$'; then ++ echo $e >> $excludetestsfile ++ else ++ cat $e >> $excludetestsfile ++ fi ++ elif [[ -d "$e" ]]; then ++ find $e -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $excludetestsfile ++ fi + done + +-case "$product" in +- firefox) testscript=$TEST_JSDIR/test-browser.sh;; +- js) testscript=$TEST_JSDIR/test-shell.sh;; +- *) echo "unknown product [$product]" +- exit 2 ++# convert the numeric speed rating to a prose value ++if [[ $TEST_CPUSPEED -lt 4 ]]; then ++ TEST_CPUSPEED=slow ++elif [[ $TEST_CPUSPEED -lt 9 ]]; then ++ TEST_CPUSPEED=medium ++else ++ TEST_CPUSPEED=fast ++fi ++ ++pattern="TEST_BRANCH=($branch|[.][*]), TEST_BUILDTYPE=($buildtype|[.][*]), TEST_TYPE=($testtype|[.][*]), TEST_OS=($OSID|[.][*]), TEST_KERNEL=($TEST_KERNEL|[.][*]), TEST_PROCESSORTYPE=($TEST_PROCESSORTYPE|[.][*]), TEST_MEMORY=($TEST_MEMORY|[.][*]), TEST_CPUSPEED=($TEST_CPUSPEED|[.][*])," ++ ++if [[ -z "$timeouts" ]]; then ++ echo "# exclude tests that time out" >> $excludetestsfile ++ echo "$pattern .*TEST_EXITSTATUS=TIMED OUT," >> $excludetestsfile ++ egrep "$pattern .*TEST_EXITSTATUS=TIMED OUT," failures.txt | \ ++ sed 's/.*TEST_ID=\([^,]*\),.*/\1/' | sort -u >> $excludetestsfile ++fi ++ ++if [[ -z "$crashes" ]]; then ++ echo "# exclude tests that crash" >> $excludetestsfile ++ echo "$pattern .*TEST_EXITSTATUS=(CRASHED|ABNORMAL)" >> $excludetestsfile ++ egrep "$pattern .*TEST_EXITSTATUS=(CRASHED|ABNORMAL)" failures.txt | \ ++ sed 's/.*TEST_ID=\([^,]*\),.*/\1/' | sort -u >> $excludetestsfile ++ ++fi ++ ++cat $includetestsfile | sed 's|^|include: |' ++cat $excludetestsfile | sed 's|^|exclude: |' ++ ++case $testtype in ++ shell) ++ echo "JavaScriptTest: Begin Run" ++ cat $includetestsfile | while read jsfile ++ do ++ if echo $jsfile | grep -q '^#'; then ++ continue ++ fi ++ ++ if ! grep -q $jsfile $excludetestsfile; then ++ ++ result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` ++ ++ case $result in ++ 1.5) version="150";; ++ 1.6) version="160";; ++ 1.7) version="170";; ++ 1.8) version="180";; ++ 1.9) version="190";; ++ 2.0) version="200";; ++ *) version="150";; ++ esac ++ ++ subsuitetestdir=`dirname $jsfile` ++ suitetestdir=`dirname $subsuitetestdir` ++ echo "JavaScriptTest: Begin Test $jsfile" ++ if eval $TIMECOMMAND timed_run.py $TEST_JSEACH_TIMEOUT \"$jsfile\" \ ++ $EXECUTABLE_DRIVER \ ++ $executable -v $version \ ++ -S 524288 \ ++ $gczealshell \ ++ -f ./shell.js \ ++ -f $suitetestdir/shell.js \ ++ -f $subsuitetestdir/shell.js \ ++ -f ./$jsfile \ ++ -f ./js-test-driver-end.js; then ++ true ++ else ++ rc=$? ++ fi ++ if [[ $rc == 99 ]]; then ++ error "User Interrupt" ++ fi ++ echo "JavaScriptTest: End Test $jsfile" ++ fi ++ done ++ echo "JavaScriptTest: End Run" ++ ;; ++ ++ browser) ++ urllist="urllist-$branch-$testtype-$buildtype.tests" ++ urlhtml="urllist-$branch-$testtype-$buildtype.html" ++ ++ rm -f $urllist $urlhtml ++ ++ cat > $urlhtml < ++ ++JavaScript Tests ++ ++ ++
      ++EOF ++ ++ cat $includetestsfile | while read jsfile ++ do ++ if echo $jsfile | grep -q '^#'; then ++ continue ++ fi ++ ++ if ! grep -q $jsfile $excludetestsfile; then ++ ++ result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` ++ ++ case $result in ++ 1.5) version=";version=1.5";; ++ 1.6) version=";version=1.6";; ++ 1.7) version=";version=1.7";; ++ 1.8) version=";version=1.8";; ++ 1.9) version=";version=1.9";; ++ 2.0) version=";version=2.0";; ++ *) version="";; ++ esac ++ ++ echo "http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=$jsfile;language=type;text/javascript$version$gczealbrowser" >> $urllist ++ echo "
    • $jsfile
    • " >> $urlhtml ++ fi ++ done ++ ++ cat >> $urlhtml < ++ ++ ++EOF ++ ++ chmod a+r $urlhtml ++ ++ if [[ -z "$filesonly" ]]; then ++ echo "JavaScriptTest: Begin Run" ++ cat "$urllist" | while read url; ++ do ++ edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "$url" ++ jsfile=`echo $url | sed "s|http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=\([^;]*\);.*|\1|"` ++ echo "JavaScriptTest: Begin Test $jsfile" ++ if eval $TIMECOMMAND timed_run.py $TEST_JSEACH_TIMEOUT \"$jsfile\" \ ++ $EXECUTABLE_DRIVER \ ++ \"$executable\" -P \"$profilename\" \ ++ -spider -start -quit \ ++ -uri \"$url\" \ ++ -depth 0 -timeout \"$TEST_JSEACH_PAGE_TIMEOUT\" \ ++ -hook \"http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js\"; then ++ true ++ else ++ rc=$? ++ fi ++ if [[ $rc == 99 ]]; then ++ error "User Interrupt" ++ fi ++ echo "JavaScriptTest: End Test $jsfile" ++ done ++ echo "JavaScriptTest: End Run" ++ fi ++ ;; ++ *) + ;; + esac + +-$testscript -d "$datafiles" $gczeal ++popd +Index: universe.data +=================================================================== +RCS file: universe.data +diff -N universe.data +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ universe.data 25 Jun 2008 17:31:17 -0000 +@@ -0,0 +1,100 @@ ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser ++TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +Index: userhookeach.js +=================================================================== +RCS file: /cvsroot/mozilla/js/tests/userhookeach.js,v +retrieving revision 1.4 +diff -p -U 8 -r1.4 userhookeach.js +--- userhookeach.js 10 Apr 2008 20:54:08 -0000 1.4 ++++ userhookeach.js 25 Jun 2008 17:31:18 -0000 +@@ -49,17 +49,16 @@ var gCurrentTestValid; + var gPageStart; + var gPageStop; + + function userOnStart() + { + try + { + dlog('userOnStart'); +- cdump('JavaScriptTest: Begin Run'); + registerDialogCloser(); + } + catch(ex) + { + cdump('Spider: FATAL ERROR: userOnStart: ' + ex); + } + } + +@@ -67,17 +66,16 @@ function userOnBeforePage() + { + try + { + dlog('userOnBeforePage'); + gPageStart = new Date(); + + gCurrentTestId = /test=(.*);language/.exec(gSpider.mCurrentUrl.mUrl)[1]; + gCurrentTestValid = true; +- cdump('JavaScriptTest: Begin Test ' + gCurrentTestId); + gCurrentTestStart = new Date(); + } + catch(ex) + { + cdump('Spider: WARNING ERROR: userOnBeforePage: ' + ex); + gCurrentTestValid = false; + gPageCompleted = true; + } +@@ -85,46 +83,43 @@ function userOnBeforePage() + + function userOnAfterPage() + { + try + { + dlog('userOnAfterPage'); + gPageStop = new Date(); + +- cdump(gSpider.mCurrentUrl.mUrl + ': PAGE STATUS: NORMAL (' + ((gPageStop - gPageStart)/1000).toFixed(0) + ' seconds)'); + checkTestCompleted(); + } + catch(ex) + { + cdump('Spider: WARNING ERROR: userOnAfterPage: ' + ex); + gCurrentTestValid = false; + gPageCompleted = true; + } + } + + function userOnStop() + { + try + { + // close any pending dialogs +- cdump('JavaScriptTest: End Run'); + closeDialog(); + unregisterDialogCloser(); + } + catch(ex) + { + cdump('Spider: WARNING ERROR: userOnStop: ' + ex); + } + } + + function userOnPageTimeout() + { + gPageStop = new Date(); +- cdump(gSpider.mCurrentUrl.mUrl + ': PAGE STATUS: TIMED OUT (' + ((gPageStop - gPageStart)/1000).toFixed(0) + ' seconds)'); + if (typeof gSpider.mDocument != 'undefined') + { + try + { + var win = gSpider.mDocument.defaultView; + if (win.wrappedJSObject) + { + win = win.wrappedJSObject; +@@ -132,17 +127,16 @@ function userOnPageTimeout() + gPageCompleted = win.gPageCompleted = true; + checkTestCompleted(); + } + catch(ex) + { + cdump('Spider: WARNING ERROR: userOnPageTimeout: ' + ex); + } + } +- cdump('JavaScriptTest: End Test ' + gCurrentTestId); + } + + function checkTestCompleted() + { + try + { + dlog('checkTestCompleted()'); + +@@ -176,17 +170,16 @@ function checkTestCompleted() + cdump('JavaScriptTest: ' + gCurrentTestId + + ' gTestcases array is empty. Tests not run.'); + new win.TestCase(win.gTestFile, win.summary, 'Unknown', 'gTestcases array is empty. Tests not run..'); + } + else + { + } + cdump('JavaScriptTest: ' + gCurrentTestId + ' Elapsed time ' + ((gCurrentTestStop - gCurrentTestStart)/1000).toFixed(2) + ' seconds'); +- cdump('JavaScriptTest: End Test ' + gCurrentTestId); + + gPageCompleted = true; + } + else + { + dlog('page not completed, recheck'); + setTimeout(checkTestCompleted, gCheckInterval); + } diff --git a/js/tests/test-browser.sh b/js/tests/test-browser.sh deleted file mode 100755 index f3ef465f937b..000000000000 --- a/js/tests/test-browser.sh +++ /dev/null @@ -1,336 +0,0 @@ -#!/bin/bash -e -# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is Mozilla JavaScript Testing Utilities -# -# The Initial Developer of the Original Code is -# Mozilla Corporation. -# Portions created by the Initial Developer are Copyright (C) 2007 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): Bob Clary -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -if [[ -z "$TEST_DIR" ]]; then - cat <> $includetestsfile - if echo $i | grep -q '\.js$'; then - echo $i >> $includetestsfile - else - cat $i >> $includetestsfile - fi - elif [[ -d "$i" ]]; then - find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile - fi -done - -excludetestsfile="excluded-$branch-browser-$buildtype.tests" -rm -f $excludetestsfile -touch $excludetestsfile - -if [[ -z "$excludetests" ]]; then - excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" -fi - -for e in $excludetests; do - if [[ -f "$e" ]]; then - echo "# excluding $e" >> $excludetestsfile - if echo $e | grep -q '\.js$'; then - echo $e >> $excludetestsfile - else - cat $e >> $excludetestsfile - fi - elif [[ -d "$e" ]]; then - find $e -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $excludetestsfile - fi -done - -case "$OSID" in - win32) - arch='.*' - kernel='.*' - ;; - linux) - arch="`uname -p`" - kernel="`uname -r | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'`" - ;; - mac) - arch="`uname -p`" - kernel='[^,]*' - ;; - *) - error "$OSID not supported" $LINENO - ;; -esac - -if [[ -z "$timeouts" ]]; then - echo "# exclude tests that time out" >> $excludetestsfile - egrep "TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*browser[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*EXIT STATUS: TIMED OUT" \ - failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile -fi - -if [[ -z "$crashes" ]]; then - echo "# exclude tests that crash" >> $excludetestsfile - pattern="TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*browser[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*" - case "$buildtype" in - opt) - pattern="${pattern}EXIT STATUS: CRASHED" - ;; - debug) - pattern="${pattern}(EXIT STATUS: CRASHED|Assertion failure:)" - ;; - esac - egrep "$pattern" failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile - -fi - -urllist="urllist-$branch-browser-$buildtype.tests" -urlhtml="urllist-$branch-browser-$buildtype.html" - -rm -f $urllist $urlhtml - -cat > $urlhtml < - -JavaScript Tests - - -
        -EOF - -cat $includetestsfile | while read jsfile -do - if echo $jsfile | grep -q '^#'; then - continue - fi - - if ! grep -q $jsfile $excludetestsfile; then - - result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` - - case $result in - 1.5) version=";version=1.5";; - 1.6) version=";version=1.6";; - 1.7) version=";version=1.7";; - 1.8) version=";version=1.8";; - 1.9) version=";version=1.9";; - 2.0) version=";version=2.0";; - *) version="";; - esac - - echo "http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=$jsfile;language=type;text/javascript$version$gczeal" >> $urllist - echo "
      • $jsfile
      • " >> $urlhtml - fi -done - -cat >> $urlhtml < - - -EOF - -chmod a+r $urlhtml - -cat $includetestsfile | sed 's|^|include: |' -cat $excludetestsfile | sed 's|^|exclude: |' - -if [[ -z "$filesonly" ]]; then - if [[ "$restart" == "1" ]]; then - cat "$urllist" | while read url; - do - edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "$url" - if time timed_run.py $TEST_JSEACH_TIMEOUT "$url" \ - "$executable" -P "$profilename" \ - -spider -start -quit \ - -uri "$url" \ - -depth 0 -timeout "$TEST_JSEACH_PAGE_TIMEOUT" \ - -hook "http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js"; then - true; - fi - - done - else - edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" - if ! time timed_run.py $TEST_JSALL_TIMEOUT "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" \ - "$executable" -P "$profilename" \ - -spider -start -quit \ - -uri "http://$TEST_HTTP/$TEST_WWW_JS/$urlhtml" \ - -depth 1 -timeout "$TEST_JSEACH_PAGE_TIMEOUT" \ - -hook "http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js"; then - error "timed_run.py ended abnormally: $?" $LINENO - fi - fi -fi - -popd diff --git a/js/tests/test-shell.sh b/js/tests/test-shell.sh deleted file mode 100755 index 83b605b87269..000000000000 --- a/js/tests/test-shell.sh +++ /dev/null @@ -1,261 +0,0 @@ -#!/bin/bash -e -# -*- Mode: Shell-script; tab-width: 4; indent-tabs-mode: nil; -*- - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is Mozilla JavaScript Testing Utilities -# -# The Initial Developer of the Original Code is -# Mozilla Corporation. -# Portions created by the Initial Developer are Copyright (C) 2007 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): Bob Clary -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -if [[ -z "$TEST_DIR" ]]; then - cat <> $includetestsfile - if echo $i | grep -q '\.js$'; then - echo $i >> $includetestsfile - else - cat $i >> $includetestsfile - fi - elif [[ -d "$i" ]]; then - find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile - fi -done - -#excludetestsfile=`mktemp excludetestsfile.XXXXX` -excludetestsfile="excluded-$branch-shell-$buildtype.tests" -rm -f $excludetestsfile -touch $excludetestsfile - -if [[ -z "$excludetests" ]]; then - excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" -fi - -for e in $excludetests; do - if [[ -f "$e" ]]; then - echo "# excluding $e" >> $excludetestsfile - if echo $e | grep -q '\.js$'; then - echo $e >> $excludetestsfile - else - cat $e >> $excludetestsfile - fi - elif [[ -d "$e" ]]; then - find $e -name '*.js' -print | egrep -v '(shell|browser|template|userhook.*|\.#.*).js' | sed 's/^\.\///' | sort >> $excludetestsfile - fi -done - -case "$OSID" in - win32) - arch='.*' - kernel='.*' - ;; - linux) - arch="`uname -p`" - kernel="`uname -r | sed 's|\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[-.0-9]*\.\([a-zA-Z0-9]*\)|\1.\2.\3.*\4|'`" - ;; - mac) - arch="`uname -p`" - kernel='[^,]*' - ;; - *) - error "$product-$branch-$buildtype: $OSID not supported" $LINENO - ;; -esac - -if [[ -z "$timeouts" ]]; then - echo "# exclude tests that time out" >> $excludetestsfile - egrep "TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*shell[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*EXIT STATUS: TIMED OUT" \ - failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile -fi - -if [[ -z "$crashes" ]]; then - echo "# exclude tests that crash" >> $excludetestsfile - pattern="TEST_BRANCH=([^,]*$branch[^,]*|[.][*]), TEST_RESULT=FAILED, TEST_BUILDTYPE=([^,]*$buildtype[^,]*|[.][*]), TEST_TYPE=([^,]*shell[^,]*|[.][*]), TEST_OS=([^,]*$OSID[^,]*|[.][*]), .*, TEST_PROCESSORTYPE=([^,]*$arch[^,]*|[.][*]), TEST_KERNEL=([^,]*$kernel[^,]*|[.][*]), .*, TEST_DESCRIPTION=.*" - case "$buildtype" in - opt) - pattern="${pattern}EXIT STATUS: CRASHED" - ;; - debug) - pattern="${pattern}(EXIT STATUS: CRASHED|Assertion failure:)" - ;; - esac - egrep "$pattern" failures.txt | sed 's/TEST_ID=\([^,]*\),.*/\1/' | sort | uniq >> $excludetestsfile - -fi - -cat $includetestsfile | sed 's|^|include: |' -cat $excludetestsfile | sed 's|^|exclude: |' - -if ! time perl jsDriver.pl \ - -l $includetestsfile \ - -L $excludetestsfile \ - -s $executable \ - -e sm$buildtype \ - -o "-S 524288 $gczeal" \ - -R \ - -T $TEST_JSSHELL_TIMEOUT \ - -f /dev/null \ - -Q; then - error "$product-$branch-$buildtype-$OSID: jsDriver.pl" $LINENO -fi - -popd diff --git a/js/tests/test.sh b/js/tests/test.sh index 19418a6f9d1d..cc071caaf397 100755 --- a/js/tests/test.sh +++ b/js/tests/test.sh @@ -38,13 +38,13 @@ # ***** END LICENSE BLOCK ***** if [[ -z "$TEST_DIR" ]]; then - cat <> $includetestsfile + if echo $i | grep -q '\.js$'; then + echo $i >> $includetestsfile + else + cat $i >> $includetestsfile + fi + elif [[ -d "$i" ]]; then + find $i -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $includetestsfile + fi +done + +excludetestsfile="excluded-$branch-$testtype-$buildtype.tests" +rm -f $excludetestsfile +touch $excludetestsfile + +if [[ -z "$excludetests" ]]; then + excludetests="spidermonkey-n-$branch.tests performance-$branch.tests" +fi + +for e in $excludetests; do + if [[ -f "$e" ]]; then + echo "# excluding $e" >> $excludetestsfile + if echo $e | grep -q '\.js$'; then + echo $e >> $excludetestsfile + else + cat $e >> $excludetestsfile + fi + elif [[ -d "$e" ]]; then + find $e -name '*.js' -print | egrep -v '(shell|browser|template|jsref|userhook.*|\.#.*)\.js' | sed 's/^\.\///' | sort >> $excludetestsfile + fi +done + +# convert the numeric speed rating to a prose value +if [[ $TEST_CPUSPEED -lt 4 ]]; then + TEST_CPUSPEED=slow +elif [[ $TEST_CPUSPEED -lt 9 ]]; then + TEST_CPUSPEED=medium +else + TEST_CPUSPEED=fast +fi + +pattern="TEST_BRANCH=($branch|[.][*]), TEST_BUILDTYPE=($buildtype|[.][*]), TEST_TYPE=($testtype|[.][*]), TEST_OS=($OSID|[.][*]), TEST_KERNEL=($TEST_KERNEL|[.][*]), TEST_PROCESSORTYPE=($TEST_PROCESSORTYPE|[.][*]), TEST_MEMORY=($TEST_MEMORY|[.][*]), TEST_CPUSPEED=($TEST_CPUSPEED|[.][*])," + +if [[ -z "$timeouts" ]]; then + echo "# exclude tests that time out" >> $excludetestsfile + echo "$pattern .*TEST_EXITSTATUS=TIMED OUT," >> $excludetestsfile + egrep "$pattern .*TEST_EXITSTATUS=TIMED OUT," failures.txt | \ + sed 's/.*TEST_ID=\([^,]*\),.*/\1/' | sort -u >> $excludetestsfile +fi + +if [[ -z "$crashes" ]]; then + echo "# exclude tests that crash" >> $excludetestsfile + echo "$pattern .*TEST_EXITSTATUS=(CRASHED|ABNORMAL)" >> $excludetestsfile + egrep "$pattern .*TEST_EXITSTATUS=(CRASHED|ABNORMAL)" failures.txt | \ + sed 's/.*TEST_ID=\([^,]*\),.*/\1/' | sort -u >> $excludetestsfile + +fi + +cat $includetestsfile | sed 's|^|include: |' +cat $excludetestsfile | sed 's|^|exclude: |' + +case $testtype in + shell) + echo "JavaScriptTest: Begin Run" + cat $includetestsfile | while read jsfile + do + if echo $jsfile | grep -q '^#'; then + continue + fi + + if ! grep -q $jsfile $excludetestsfile; then + + result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` + + case $result in + 1.5) version="150";; + 1.6) version="160";; + 1.7) version="170";; + 1.8) version="180";; + 1.9) version="190";; + 2.0) version="200";; + *) version="150";; + esac + + subsuitetestdir=`dirname $jsfile` + suitetestdir=`dirname $subsuitetestdir` + echo "JavaScriptTest: Begin Test $jsfile" + if eval $TIMECOMMAND timed_run.py $TEST_JSEACH_TIMEOUT \"$jsfile\" \ + $EXECUTABLE_DRIVER \ + $executable -v $version \ + -S 524288 \ + $gczealshell \ + -f ./shell.js \ + -f $suitetestdir/shell.js \ + -f $subsuitetestdir/shell.js \ + -f ./$jsfile \ + -f ./js-test-driver-end.js; then + true + else + rc=$? + fi + if [[ $rc == 99 ]]; then + error "User Interrupt" + fi + echo "JavaScriptTest: End Test $jsfile" + fi + done + echo "JavaScriptTest: End Run" + ;; + + browser) + urllist="urllist-$branch-$testtype-$buildtype.tests" + urlhtml="urllist-$branch-$testtype-$buildtype.html" + + rm -f $urllist $urlhtml + + cat > $urlhtml < + +JavaScript Tests + + +
          +EOF + + cat $includetestsfile | while read jsfile + do + if echo $jsfile | grep -q '^#'; then + continue + fi + + if ! grep -q $jsfile $excludetestsfile; then + + result=`echo $jsfile | sed 's/.*js\([0-9]\)_\([0-9]\).*/\1.\2/'` + + case $result in + 1.5) version=";version=1.5";; + 1.6) version=";version=1.6";; + 1.7) version=";version=1.7";; + 1.8) version=";version=1.8";; + 1.9) version=";version=1.9";; + 2.0) version=";version=2.0";; + *) version="";; + esac + + echo "http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=$jsfile;language=type;text/javascript$version$gczealbrowser" >> $urllist + echo "
        • $jsfile
        • " >> $urlhtml + fi + done + + cat >> $urlhtml < + + +EOF + + chmod a+r $urlhtml + + if [[ -z "$filesonly" ]]; then + echo "JavaScriptTest: Begin Run" + cat "$urllist" | while read url; + do + edit-talkback.sh -p "$product" -b "$branch" -x "$executablepath" -i "$url" + jsfile=`echo $url | sed "s|http://$TEST_HTTP/$TEST_WWW_JS/js-test-driver-standards.html?test=\([^;]*\);.*|\1|"` + echo "JavaScriptTest: Begin Test $jsfile" + if eval $TIMECOMMAND timed_run.py $TEST_JSEACH_TIMEOUT \"$jsfile\" \ + $EXECUTABLE_DRIVER \ + \"$executable\" -P \"$profilename\" \ + -spider -start -quit \ + -uri \"$url\" \ + -depth 0 -timeout \"$TEST_JSEACH_PAGE_TIMEOUT\" \ + -hook \"http://$TEST_HTTP/$TEST_WWW_JS/userhookeach.js\"; then + true + else + rc=$? + fi + if [[ $rc == 99 ]]; then + error "User Interrupt" + fi + echo "JavaScriptTest: End Test $jsfile" + done + echo "JavaScriptTest: End Run" + fi + ;; + *) + ;; +esac + +popd diff --git a/js/tests/universe.data b/js/tests/universe.data new file mode 100644 index 000000000000..cb903bdf212f --- /dev/null +++ b/js/tests/universe.data @@ -0,0 +1,100 @@ +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell diff --git a/js/tests/userhookeach.js b/js/tests/userhookeach.js index fb1aa0790675..a400d8686cdb 100755 --- a/js/tests/userhookeach.js +++ b/js/tests/userhookeach.js @@ -54,7 +54,6 @@ function userOnStart() try { dlog('userOnStart'); - cdump('JavaScriptTest: Begin Run'); registerDialogCloser(); } catch(ex) @@ -72,7 +71,6 @@ function userOnBeforePage() gCurrentTestId = /test=(.*);language/.exec(gSpider.mCurrentUrl.mUrl)[1]; gCurrentTestValid = true; - cdump('JavaScriptTest: Begin Test ' + gCurrentTestId); gCurrentTestStart = new Date(); } catch(ex) @@ -90,7 +88,6 @@ function userOnAfterPage() dlog('userOnAfterPage'); gPageStop = new Date(); - cdump(gSpider.mCurrentUrl.mUrl + ': PAGE STATUS: NORMAL (' + ((gPageStop - gPageStart)/1000).toFixed(0) + ' seconds)'); checkTestCompleted(); } catch(ex) @@ -106,7 +103,6 @@ function userOnStop() try { // close any pending dialogs - cdump('JavaScriptTest: End Run'); closeDialog(); unregisterDialogCloser(); } @@ -119,7 +115,6 @@ function userOnStop() function userOnPageTimeout() { gPageStop = new Date(); - cdump(gSpider.mCurrentUrl.mUrl + ': PAGE STATUS: TIMED OUT (' + ((gPageStop - gPageStart)/1000).toFixed(0) + ' seconds)'); if (typeof gSpider.mDocument != 'undefined') { try @@ -137,7 +132,6 @@ function userOnPageTimeout() cdump('Spider: WARNING ERROR: userOnPageTimeout: ' + ex); } } - cdump('JavaScriptTest: End Test ' + gCurrentTestId); } function checkTestCompleted() @@ -181,7 +175,6 @@ function checkTestCompleted() { } cdump('JavaScriptTest: ' + gCurrentTestId + ' Elapsed time ' + ((gCurrentTestStop - gCurrentTestStart)/1000).toFixed(2) + ' seconds'); - cdump('JavaScriptTest: End Test ' + gCurrentTestId); gPageCompleted = true; } From a9937e532bd74e4a07e6f2fbfd62fc5f8b804366 Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Tue, 1 Jul 2008 12:47:09 -0700 Subject: [PATCH 70/98] Bug 435345 - Cannot accurately watch the 'length' property of arrays, r=shaver --- js/src/jsarray.cpp | 15 ++++++--------- js/src/jsarray.h | 3 +++ js/src/jsobj.cpp | 3 +++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index 12fb17ab92af..aa11fcf295aa 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -116,11 +116,8 @@ JS_STATIC_ASSERT(sizeof(JSScopeProperty) > 4 * sizeof(jsval)); -static JSBool -MakeArraySlow(JSContext *cx, JSObject *obj); - #define ENSURE_SLOW_ARRAY(cx, obj) \ - (OBJ_GET_CLASS(cx, obj) == &js_SlowArrayClass || MakeArraySlow(cx, obj)) + (OBJ_GET_CLASS(cx, obj) == &js_SlowArrayClass || js_MakeArraySlow(cx, obj)) /* * Determine if the id represents an array index or an XML property index. @@ -417,7 +414,7 @@ SetArrayElement(JSContext *cx, JSObject *obj, jsuint index, jsval v) if (OBJ_IS_DENSE_ARRAY(cx, obj)) { if (INDEX_TOO_SPARSE(obj, index)) { - if (!MakeArraySlow(cx, obj)) + if (!js_MakeArraySlow(cx, obj)) return JS_FALSE; } else { @@ -779,7 +776,7 @@ array_setProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp) return js_SetProperty(cx, obj, id, vp); if (!js_IdIsIndex(id, &i) || INDEX_TOO_SPARSE(obj, i)) { - if (!MakeArraySlow(cx, obj)) + if (!js_MakeArraySlow(cx, obj)) return JS_FALSE; return js_SetProperty(cx, obj, id, vp); } @@ -1125,8 +1122,8 @@ JSClass js_SlowArrayClass = { /* * Convert an array object from fast-and-dense to slow-and-flexible. */ -static JSBool -MakeArraySlow(JSContext *cx, JSObject *obj) +JSBool +js_MakeArraySlow(JSContext *cx, JSObject *obj) { JSObjectMap *map, *oldmap; uint32 i, length; @@ -2075,7 +2072,7 @@ array_push(JSContext *cx, uintN argc, jsval *vp) length = obj->fslots[JSSLOT_ARRAY_LENGTH]; if (INDEX_TOO_SPARSE(obj, length)) { - if (!MakeArraySlow(cx, obj)) + if (!js_MakeArraySlow(cx, obj)) return JS_FALSE; return array_push_slowly(cx, obj, argc, vp); } diff --git a/js/src/jsarray.h b/js/src/jsarray.h index faa307f1e964..bec5569d4a54 100644 --- a/js/src/jsarray.h +++ b/js/src/jsarray.h @@ -71,6 +71,9 @@ js_NewArrayObject(JSContext *cx, jsuint length, jsval *vector, extern JSObject * js_NewSlowArrayObject(JSContext *cx); +extern JSBool +js_MakeArraySlow(JSContext *cx, JSObject *obj); + #define JSSLOT_ARRAY_LENGTH JSSLOT_PRIVATE #define JSSLOT_ARRAY_COUNT (JSSLOT_ARRAY_LENGTH + 1) #define JSSLOT_ARRAY_LOOKUP_HOLDER (JSSLOT_ARRAY_COUNT + 1) diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 46f4b2225cca..79cdb8a9c0e0 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -1434,6 +1434,9 @@ obj_watch(JSContext *cx, uintN argc, jsval *vp) if (attrs & JSPROP_READONLY) return JS_TRUE; *vp = JSVAL_VOID; + + if (OBJ_IS_DENSE_ARRAY(cx, obj) && !js_MakeArraySlow(cx, obj)) + return JS_FALSE; return JS_SetWatchPoint(cx, obj, userid, obj_watch_handler, callable); } From b332b7e04a00a271d521f8b014b0ebf2efd34ddc Mon Sep 17 00:00:00 2001 From: "bcrowder@mozilla.com" Date: Tue, 1 Jul 2008 12:47:09 -0700 Subject: [PATCH 71/98] Bug 438415 - Assertion failure: *vp != JSVAL_HOLE, r=shaver, r=brendan --- js/src/jsarray.cpp | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index aa11fcf295aa..9890be0ae42c 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -2098,23 +2098,16 @@ array_pop(JSContext *cx, uintN argc, jsval *vp) if (!obj) return JS_FALSE; if (OBJ_IS_DENSE_ARRAY(cx, obj)) { - *vp = JSVAL_VOID; index = obj->fslots[JSSLOT_ARRAY_LENGTH]; - if (index == 0) + if (index == 0) { + *vp = JSVAL_VOID; return JS_TRUE; - index--; - if (index < ARRAY_DENSE_LENGTH(obj)) { - *vp = obj->dslots[index]; - JS_ASSERT(*vp != JSVAL_HOLE); - if (index == 0) { - JS_free(cx, obj->dslots - 1); - obj->dslots = NULL; - } else { - ARRAY_SET_DENSE_LENGTH(obj, index); - } - obj->fslots[JSSLOT_ARRAY_COUNT]--; } - + index--; + if (!GetArrayElement(cx, obj, index, &hole, vp)) + return JS_FALSE; + if (!hole && !DeleteArrayElement(cx, obj, index)) + return JS_FALSE; obj->fslots[JSSLOT_ARRAY_LENGTH] = index; return JS_TRUE; } From e3111e2152d4e0a37dd6af5a6d5b287110eaec15 Mon Sep 17 00:00:00 2001 From: Brendan Eich Date: Tue, 1 Jul 2008 13:05:11 -0700 Subject: [PATCH 72/98] Eliminate useless genexp for(;;) conditions (442342, r=jorendorff). --- js/src/jsemit.cpp | 6 ------ js/src/jsopcode.cpp | 3 --- js/src/jsopcode.tbl | 4 ++-- js/src/jsparse.cpp | 16 ++++++++++++++++ js/tests/js1_8/genexps/regress-380237-04.js | 16 +++++++++------- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/js/src/jsemit.cpp b/js/src/jsemit.cpp index 200784e1cf42..e7fa5b46a2a8 100644 --- a/js/src/jsemit.cpp +++ b/js/src/jsemit.cpp @@ -4627,12 +4627,6 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) } if (pn2->pn_kid2) { - if (pn2->pn_kid2->pn_type == TOK_LP && - pn2->pn_kid2->pn_head->pn_type == TOK_FUNCTION && - (pn2->pn_kid2->pn_head->pn_flags & TCF_GENEXP_LAMBDA) && - js_NewSrcNote(cx, cg, SRC_GENEXP) < 0) { - return JS_FALSE; - } beq = EmitJump(cx, cg, JSOP_IFNE, top - CG_OFFSET(cg)); if (beq < 0) return JS_FALSE; diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp index f4eeb229c5f9..2d6f467353b6 100644 --- a/js/src/jsopcode.cpp +++ b/js/src/jsopcode.cpp @@ -3868,9 +3868,6 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop) } else { op = (JSOp) *pc2; op = ((js_CodeSpec[op].format & JOF_PARENHEAD) || - ((op == JSOP_IFNE || op == JSOP_IFNEX) && - (!(sn2 = js_GetSrcNote(outer, pc2)) || - SN_TYPE(sn2) != SRC_GENEXP)) || ((js_CodeSpec[op].format & JOF_INVOKE) && GET_ARGC(pc2) == 1) || ((op == JSOP_IFEQ || op == JSOP_IFEQX) && diff --git a/js/src/jsopcode.tbl b/js/src/jsopcode.tbl index 00f6f0495896..f9ea46a03a5d 100644 --- a/js/src/jsopcode.tbl +++ b/js/src/jsopcode.tbl @@ -105,7 +105,7 @@ OPDEF(JSOP_LEAVEWITH, 4, "leavewith", NULL, 1, 1, 0, 0, JOF_BYTE) OPDEF(JSOP_RETURN, 5, "return", NULL, 1, 1, 0, 2, JOF_BYTE) OPDEF(JSOP_GOTO, 6, "goto", NULL, 3, 0, 0, 0, JOF_JUMP) OPDEF(JSOP_IFEQ, 7, "ifeq", NULL, 3, 1, 0, 4, JOF_JUMP|JOF_DETECTING) -OPDEF(JSOP_IFNE, 8, "ifne", NULL, 3, 1, 0, 0, JOF_JUMP) +OPDEF(JSOP_IFNE, 8, "ifne", NULL, 3, 1, 0, 0, JOF_JUMP|JOF_PARENHEAD) /* Get the arguments object for the current, lightweight function activation. */ OPDEF(JSOP_ARGUMENTS, 9, js_arguments_str, js_arguments_str, 1, 0, 1, 18, JOF_BYTE) @@ -353,7 +353,7 @@ OPDEF(JSOP_DEFLOCALFUN, 138,"deflocalfun",NULL, 5, 0, 0, 0, JOF_SLOTOB /* Extended jumps. */ OPDEF(JSOP_GOTOX, 139,"gotox", NULL, 5, 0, 0, 0, JOF_JUMPX) OPDEF(JSOP_IFEQX, 140,"ifeqx", NULL, 5, 1, 0, 4, JOF_JUMPX|JOF_DETECTING) -OPDEF(JSOP_IFNEX, 141,"ifnex", NULL, 5, 1, 0, 0, JOF_JUMPX) +OPDEF(JSOP_IFNEX, 141,"ifnex", NULL, 5, 1, 0, 0, JOF_JUMPX|JOF_PARENHEAD) OPDEF(JSOP_ORX, 142,"orx", NULL, 5, 1, 0, 5, JOF_JUMPX|JOF_DETECTING) OPDEF(JSOP_ANDX, 143,"andx", NULL, 5, 1, 0, 6, JOF_JUMPX|JOF_DETECTING) OPDEF(JSOP_GOSUBX, 144,"gosubx", NULL, 5, 0, 0, 0, JOF_JUMPX) diff --git a/js/src/jsparse.cpp b/js/src/jsparse.cpp index 54185147906b..a9de36ecbfbc 100644 --- a/js/src/jsparse.cpp +++ b/js/src/jsparse.cpp @@ -2860,6 +2860,22 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) pn2 = Expr(cx, ts, tc); if (!pn2) return NULL; + + if (pn2->pn_type == TOK_LP && + pn2->pn_head->pn_type == TOK_FUNCTION && + (pn2->pn_head->pn_flags & TCF_GENEXP_LAMBDA)) { + /* + * A generator expression as loop condition is useless. + * It won't be called, and as an object it evaluates to + * true in boolean contexts without any conversion hook + * being called. + * + * This useless condition elimination is mandatory, to + * help the decompiler. See bug 442342. + */ + RecycleTree(pn2, tc); + pn2 = NULL; + } } /* Parse the update expression or null into pn3. */ diff --git a/js/tests/js1_8/genexps/regress-380237-04.js b/js/tests/js1_8/genexps/regress-380237-04.js index 6c9994e2e736..a4e3a39a8b10 100644 --- a/js/tests/js1_8/genexps/regress-380237-04.js +++ b/js/tests/js1_8/genexps/regress-380237-04.js @@ -78,7 +78,7 @@ needParens("switch (x) { case xx: }"); needParens("return xx;"); needParens("yield xx;"); needParens("for (xx;;) { }"); -needParens("for (;xx;) { }"); +needParens("for (;xx;) { }", "function anonymous() {\n for (;;) {\n }\n}"); needParens("for (;;xx) { }"); needParens("for (i in xx) { }"); needParens("throw xx"); @@ -211,7 +211,7 @@ function doesNotNeedParens(pat) // print("Skipping the over-parenthesization test, because I don't know how to test for over-parenthesization when the pattern doesn't have parens snugly around it.") } -function needParens(pat) +function needParens(pat, exp) { print("Testing " + pat); @@ -242,8 +242,8 @@ function needParens(pat) } reportCompare(expect, actual, summary + ': needParens ' + ft); - roundTripTest(f); - overParenTest(f); + roundTripTest(f, exp); + overParenTest(f, exp); } function rejectLHS(pat) @@ -268,9 +268,11 @@ function rejectLHS(pat) } -function overParenTest(f) +function overParenTest(f, exp) { var uf = "" + f; + if (uf == exp) + return; reportCompare(false, uf.indexOf(genexpParened) == -1, summary + ': overParenTest genexp snugly in parentheses: ' + uf); @@ -301,7 +303,7 @@ function sanityCheck(pat) reportCompare(expect, actual, summary + ': sanityCheck ' + pat); } -function roundTripTest(f) +function roundTripTest(f, exp) { // Decompile var uf = "" + f; @@ -321,7 +323,7 @@ function roundTripTest(f) } // Decompile again and make sure the decompilations match exactly. - expect = uf; + expect = exp || uf; actual = "" + euf; reportCompare(expect, actual, summary + ': roundTripTest no round-trip change'); } From 4a7e00102fa5562c62bd45053a05b685dfe75ec3 Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Tue, 1 Jul 2008 16:38:02 -0400 Subject: [PATCH 73/98] Bug 442769 - Annotate nsMorkReader as a stack-only class, r=dietrich --- db/morkreader/nsMorkReader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/morkreader/nsMorkReader.h b/db/morkreader/nsMorkReader.h index 130011be90ae..1c5c3735aed6 100644 --- a/db/morkreader/nsMorkReader.h +++ b/db/morkreader/nsMorkReader.h @@ -53,7 +53,7 @@ // http://www.mozilla.org/mailnews/arch/mork/grammar.txt // http://www.jwz.org/hacks/mork.pl -class nsMorkReader +class NS_STACK_CLASS nsMorkReader { public: // This string type has built-in storage for the hex string representation From 7266d7e76eafd1cd87acc357f008c3b77fc7bb0c Mon Sep 17 00:00:00 2001 From: David Mandelin Date: Tue, 1 Jul 2008 14:22:49 -0700 Subject: [PATCH 74/98] Bug 442829: outparams.js handling nsresults returned as &rv, r=bsmedberg --- xpcom/analysis/outparams.js | 15 ++++++++++++++- xpcom/tests/static-checker/Makefile.in | 1 + xpcom/tests/static-checker/o14.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 xpcom/tests/static-checker/o14.cpp diff --git a/xpcom/analysis/outparams.js b/xpcom/analysis/outparams.js index 29c015ecd5c7..ecbefbacd417 100644 --- a/xpcom/analysis/outparams.js +++ b/xpcom/analysis/outparams.js @@ -145,6 +145,9 @@ function OutparamCheck(cfg, psem_list, outparam_list, retvar, retvar_set, finall this.outparam_list = outparam_list this.outparams = create_decl_set(outparam_list); this.psvar_list = outparam_list.slice(0); + // We need to save the retvars so we can detect assignments through + // their addresses passed as arguments. + this.retvar_set = retvar_set; for (let v in retvar_set.items()) { this.psvar_list.push(v); } @@ -430,6 +433,15 @@ OutparamCheck.prototype.processCall = function(dest, expr, blame, state) { let updates = []; for (let i = 0; i < psem.length; ++i) { let arg = args[i]; + // The arg could be the address of a return-value variable. + // This means it's really the nsresult code for the call, + // so we treat it the same as the target of an rv assignment. + if (TREE_CODE(arg) == ADDR_EXPR) { + let v = arg.operands()[0]; + if (DECL_P(v) && this.retvar_set.has(v)) { + dest = v; + } + } // The arg could be a copy of an outparam. We'll unwrap to the // outparam if it is. The following is cheating a bit because // we munge states together, but it should be OK in practice. @@ -437,7 +449,8 @@ OutparamCheck.prototype.processCall = function(dest, expr, blame, state) { let sem = psem[i]; if (sem == ps.CONST) continue; // At this point, we know the call can write thru this param. - // Invalidate any vars whose addresses are passed here. + // Invalidate any vars whose addresses are passed here. This + // is distinct from the rv handling above. if (TREE_CODE(arg) == ADDR_EXPR) { let v = arg.operands()[0]; if (DECL_P(v)) { diff --git a/xpcom/tests/static-checker/Makefile.in b/xpcom/tests/static-checker/Makefile.in index 2264211a47ff..ba888226c4f0 100644 --- a/xpcom/tests/static-checker/Makefile.in +++ b/xpcom/tests/static-checker/Makefile.in @@ -93,6 +93,7 @@ OUTPARAMS_PASS_TESTCASES = \ o11.cpp \ o12.cpp \ o13.cpp \ + o14.cpp \ $(NULL) STATIC_FAILURE_TESTCASES = \ diff --git a/xpcom/tests/static-checker/o14.cpp b/xpcom/tests/static-checker/o14.cpp new file mode 100644 index 000000000000..f93a6979a0a0 --- /dev/null +++ b/xpcom/tests/static-checker/o14.cpp @@ -0,0 +1,24 @@ +typedef int PRUint32; +typedef int PRInt32; + +typedef PRUint32 nsresult; + +inline int NS_FAILED(nsresult _nsresult) { + return _nsresult & 0x80000000; +} + +inline int NS_SUCCEEDED(nsresult _nsresult) { + return !(_nsresult & 0x80000000); +} + +int SomeFunc(nsresult *rv); + +nsresult foo(__attribute__((user("NS_outparam"))) int *a) { + nsresult rv; + int i = SomeFunc(&rv); + if (NS_FAILED(rv)) + return rv; + + *a = i; + return 0; +} From 07ce05b16160551f73d3e067e4577fb0fc334498 Mon Sep 17 00:00:00 2001 From: David Mandelin Date: Tue, 1 Jul 2008 14:24:58 -0700 Subject: [PATCH 75/98] Bug 442982: outparams.js now understands func ptr typedef attributes, r=bsmedberg --- xpcom/analysis/outparams.js | 125 +++++++++++++------------ xpcom/tests/static-checker/Makefile.in | 1 + xpcom/tests/static-checker/o15.cpp | 20 ++++ 3 files changed, 87 insertions(+), 59 deletions(-) create mode 100644 xpcom/tests/static-checker/o15.cpp diff --git a/xpcom/analysis/outparams.js b/xpcom/analysis/outparams.js index ecbefbacd417..68d2c6c43268 100644 --- a/xpcom/analysis/outparams.js +++ b/xpcom/analysis/outparams.js @@ -416,7 +416,6 @@ OutparamCheck.prototype.processCall = function(dest, expr, blame, state) { let ct = TREE_TYPE(callable); if (TREE_CODE(ct) == POINTER_TYPE) ct = TREE_TYPE(ct); if (args.length < psem.length || !stdarg_p(ct)) { - //print("TTT " + type_string(ct)); let name = function_decl_name(callable); // TODO Can __builtin_memcpy write to an outparam? Probably not. if (name != 'operator new' && name != 'operator delete' && @@ -683,15 +682,18 @@ OutparamCheck.prototype.func_param_semantics = function(callable) { // Special case: string mutator receiver is an no-fail outparams sem = ps.OUTNOFAIL; } else { - if (params) sem = param_semantics(params[i]); + if (params) sem = decode_attr(DECL_ATTRIBUTES(params[i])); if (TRACE_CALL_SEM >= 2) print("param " + i + ": annotated " + sem); if (sem == undefined) { - if (guess) { - sem = param_semantics_by_type(types[i]); - // Params other than last are guessed as MAYBE - if (i < types.length - 1 && sem == ps.OUT) sem = ps.MAYBE; - } else { - sem = ps.CONST; + sem = decode_attr(TYPE_ATTRIBUTES(types[i])); + if (TRACE_CALL_SEM >= 2) print("type " + i + ": annotated " + sem); + if (sem == undefined) { + if (guess && type_is_outparam(types[i])) { + // Params other than last are guessed as MAYBE + sem = i < types.length - 1 ? ps.MAYBE : ps.OUT; + } else { + sem = ps.CONST; + } } } if (sem == ps.OUT && nofail) sem = ps.OUTNOFAIL; @@ -702,10 +704,15 @@ OutparamCheck.prototype.func_param_semantics = function(callable) { return ans; } -// Return the param semantics as indicated by the attributes, or -// undefined if no param attribute is present. -function param_semantics(decl) { - for each (let attr in rectify_attributes(DECL_ATTRIBUTES(decl))) { +/* Decode parameter semantics GCC attributes. + * @param attrs GCC attributes of a parameter. E.g., TYPE_ATTRIBUTES + * or DECL_ATTRIBUTES of an item + * @return The parameter semantics value defined by the attributes, + * or undefined if no such attributes were present. */ +function decode_attr(attrs) { + // Note: we're not checking for conflicts, we just take the first + // one we find. + for each (let attr in rectify_attributes(attrs)) { if (attr.name == 'user') { for each (let arg in attr.args) { if (arg == 'NS_outparam') { @@ -721,58 +728,58 @@ function param_semantics(decl) { return undefined; } -// Return param semantics as guessed from types. Never returns undefined. -function param_semantics_by_type(type) { +/* @return true if the given type appears to be an outparam + * type based on the type alone (i.e., not considering + * attributes. */ +function type_is_outparam(type) { switch (TREE_CODE(type)) { case POINTER_TYPE: - let pt = TREE_TYPE(type); - if (TYPE_READONLY(pt)) return ps.CONST; - switch (TREE_CODE(pt)) { - case RECORD_TYPE: - // TODO: should we consider field writes? - return ps.CONST; - case POINTER_TYPE: - case ARRAY_TYPE: - // Outparam if nsIFoo** or void ** - let ppt = TREE_TYPE(pt); - let tname = TYPE_NAME(ppt); - if (tname == undefined) return ps.CONST; - let name = decl_name_string(tname); - return name == 'void' || name == 'char' || name == 'PRUnichar' || - name.substr(0, 3) == 'nsI' ? - ps.OUT : ps.CONST; - case INTEGER_TYPE: { - let name = decl_name_string(TYPE_NAME(pt)); - return name != 'char' && name != 'PRUnichar' ? ps.OUT : ps.CONST; - } - case ENUMERAL_TYPE: - case REAL_TYPE: - case UNION_TYPE: - return TYPE_READONLY(pt) ? ps.CONST : ps.OUT; - case FUNCTION_TYPE: - case VOID_TYPE: - return ps.CONST; - default: - print("Y " + TREE_CODE(pt)); - print('Y ' + type_string(pt)); - throw new Error("ni"); - } - break; + return pointer_type_is_outparam(TREE_TYPE(type)); case REFERENCE_TYPE: let rt = TREE_TYPE(type); - return !TYPE_READONLY(rt) && is_string_type(rt) ? ps.OUT : ps.CONST; - case BOOLEAN_TYPE: - case INTEGER_TYPE: - case REAL_TYPE: - case ENUMERAL_TYPE: - case RECORD_TYPE: - case UNION_TYPE: // unsafe, c/b pointer - case ARRAY_TYPE: - return ps.CONST; + return !TYPE_READONLY(rt) && is_string_type(rt); default: - print("Z " + TREE_CODE(type)); - print('Z ' + type_string(type)); - throw new Error("ni"); + // Note: This is unsound for UNION_TYPE, because the union could + // contain a pointer. + return false; + } +} + +/* Helper for type_is_outparam. + * @return true if 'pt *' looks like an outparam type. */ +function pointer_type_is_outparam(pt) { + if (TYPE_READONLY(pt)) return false; + + switch (TREE_CODE(pt)) { + case POINTER_TYPE: + case ARRAY_TYPE: { + // Look for void **, nsIFoo **, char **, PRUnichar ** + let ppt = TREE_TYPE(pt); + let tname = TYPE_NAME(ppt); + if (tname == undefined) return false; + let name = decl_name_string(tname); + return name == 'void' || name == 'char' || name == 'PRUnichar' || + name.substr(0, 3) == 'nsI'; + } + case INTEGER_TYPE: { + // char * and PRUnichar * are probably strings, otherwise guess + // it is an integer outparam. + let name = decl_name_string(TYPE_NAME(pt)); + return name != 'char' && name != 'PRUnichar'; + } + case ENUMERAL_TYPE: + case REAL_TYPE: + case UNION_TYPE: + return true; + case RECORD_TYPE: + // TODO: should we consider field writes? + return false; + case FUNCTION_TYPE: + case VOID_TYPE: + return false; + default: + throw new Error("can't guess if a pointer to this type is an outparam: " + + TREE_CODE(pt) + ': ' + type_string(pt)); } } diff --git a/xpcom/tests/static-checker/Makefile.in b/xpcom/tests/static-checker/Makefile.in index ba888226c4f0..2e370a56f1c6 100644 --- a/xpcom/tests/static-checker/Makefile.in +++ b/xpcom/tests/static-checker/Makefile.in @@ -94,6 +94,7 @@ OUTPARAMS_PASS_TESTCASES = \ o12.cpp \ o13.cpp \ o14.cpp \ + o15.cpp \ $(NULL) STATIC_FAILURE_TESTCASES = \ diff --git a/xpcom/tests/static-checker/o15.cpp b/xpcom/tests/static-checker/o15.cpp new file mode 100644 index 000000000000..58707eb776e6 --- /dev/null +++ b/xpcom/tests/static-checker/o15.cpp @@ -0,0 +1,20 @@ +typedef int PRUint32; +typedef int PRInt32; +typedef PRUint32 nsresult; + +typedef nsresult (*xpcomFunc)(PRInt32 * __attribute__((user("NS_outparam"))) a, + PRInt32 ** __attribute__((user("NS_outparam"))) b); + +struct A { + virtual nsresult TestMethod(PRInt32 *a __attribute__((user("NS_outparam"))), + PRInt32 **b __attribute__((user("NS_outparam")))); + + struct FuncTable { + xpcomFunc mFunc; + } *mTable; +}; + +nsresult A::TestMethod(PRInt32 *a, PRInt32 **b) +{ + return mTable->mFunc(a, b); +} From 8ba557db917cce0b3f95a5fac530f2d7d2c6ab4c Mon Sep 17 00:00:00 2001 From: David Mandelin Date: Tue, 1 Jul 2008 15:31:10 -0700 Subject: [PATCH 76/98] Bug 442968: fix small bug with void returns in outparams.js, r=bsmedberg --- xpcom/analysis/outparams.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/xpcom/analysis/outparams.js b/xpcom/analysis/outparams.js index 68d2c6c43268..0b90d412624f 100644 --- a/xpcom/analysis/outparams.js +++ b/xpcom/analysis/outparams.js @@ -563,6 +563,28 @@ OutparamCheck.prototype.checkSubstate = function(isvoid, fndecl, ss) { } } +/* @return The return statement in the function + * that writes the return value in the given substate. + * If the function returns void, then the substate doesn't + * matter and we just look for the return. */ +OutparamCheck.prototype.findReturnStmt = function(ss) { + if (this.retvar != undefined) + return ss.getBlame(this.retvar); + + if (this.cfg._cached_return) + return this.cfg._cached_return; + + for (let bb in cfg_bb_iterator(this.cfg)) { + for (let isn in bb_isn_iterator(bb)) { + if (TREE_CODE(isn) == RETURN_EXPR) { + return this.cfg._cached_return = isn; + } + } + } + + return undefined; +} + OutparamCheck.prototype.checkSubstateSuccess = function(ss) { for (let i = 0; i < this.psem_list.length; ++i) { let [v, psem] = [ this.outparam_list[i], this.psem_list[i] ]; @@ -570,7 +592,7 @@ OutparamCheck.prototype.checkSubstateSuccess = function(ss) { let val = ss.get(v); if (val == av.NOT_WRITTEN) { this.logResult('succ', 'not_written', 'error'); - this.warn([ss.getBlame(this.retvar), "outparam '" + expr_display(v) + "' not written on NS_SUCCEEDED(return value)"], + this.warn([this.findReturnStmt(ss), "outparam '" + expr_display(v) + "' not written on NS_SUCCEEDED(return value)"], [v, "outparam declared here"]); } else if (val == av.MAYBE_WRITTEN) { this.logResult('succ', 'maybe_written', 'error'); @@ -604,7 +626,7 @@ OutparamCheck.prototype.checkSubstateFailure = function(ss) { let val = ss.get(v); if (val == av.WRITTEN) { this.logResult('fail', 'written', 'error'); - this.warn([ss.getBlame(this.retvar), "outparam '" + expr_display(v) + "' written on NS_FAILED(return value)"], + this.warn([this.findReturnStmt(ss), "outparam '" + expr_display(v) + "' written on NS_FAILED(return value)"], [v, "outparam declared here"], [ss.getBlame(v), "written here"]); } else if (val == av.WROTE_NULL) { From 7e227fb003a91e0bbfcb5fa8a5a20a841d1f6938 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Tue, 1 Jul 2008 15:41:14 -0700 Subject: [PATCH 77/98] Bug 427109: Add memory reserve and xmalloc() API, r=benjamin This re-commmit adds locking that was missing in changeset c14ab4f6cec6. --- memory/jemalloc/Makefile.in | 5 +- memory/jemalloc/jemalloc.c | 1746 ++++++++++++++++++++++------------- memory/jemalloc/jemalloc.h | 124 ++- 3 files changed, 1247 insertions(+), 628 deletions(-) diff --git a/memory/jemalloc/Makefile.in b/memory/jemalloc/Makefile.in index 47ee60392a8d..71d03d92ef8c 100644 --- a/memory/jemalloc/Makefile.in +++ b/memory/jemalloc/Makefile.in @@ -73,8 +73,9 @@ $(CRT_OBJ_DIR)/jemalloc.c: $(srcdir)/crtsp1.diff $(CRT_OBJ_DIR)/build/intel/mozcrt19.dll: \ $(CRT_OBJ_DIR)/jemalloc.c $(srcdir)/jemalloc.c $(srcdir)/jemalloc.h \ - $(srcdir)/rb.h - cp $(srcdir)/jemalloc.c $(srcdir)/jemalloc.h $(srcdir)/rb.h $(CRT_OBJ_DIR) + $(srcdir)/ql.h $(srcdir)/qr.h $(srcdir)/rb.h + cp $(srcdir)/jemalloc.c $(srcdir)/jemalloc.h $(srcdir)/ql.h \ + $(srcdir)/qr.h $(srcdir)/rb.h $(CRT_OBJ_DIR) # this pretty much sucks, but nmake and make don't play well together $(PYTHON) $(srcdir)/build-crt.py $(CRT_OBJ_DIR) #XXX: these don't link right for some reason diff --git a/memory/jemalloc/jemalloc.c b/memory/jemalloc/jemalloc.c index 178dc8f3d3db..494f0ad59a1d 100644 --- a/memory/jemalloc/jemalloc.c +++ b/memory/jemalloc/jemalloc.c @@ -1,4 +1,5 @@ -/* -*- Mode: C; tab-width: 4; c-basic-offset: 4 -*- */ +/* -*- Mode: C; tab-width: 8; c-basic-offset: 8 -*- */ +/* vim:set softtabstop=8 shiftwidth=8: */ /*- * Copyright (C) 2006-2008 Jason Evans . * All rights reserved. @@ -162,31 +163,22 @@ */ /* #define MALLOC_BALANCE */ -/* - * MALLOC_DSS enables use of sbrk(2) to allocate chunks from the data storage - * segment (DSS). In an ideal world, this functionality would be completely - * unnecessary, but we are burdened by history and the lack of resource limits - * for anonymous mapped memory. - */ -/* - * Uniformly disable sbrk(2) use in Mozilla, since it has various problems - * across platforms: - * - * Linux: sbrk() fails to detect error conditions when using large amounts of - * memory, resulting in memory corruption. - * - * Darwin: sbrk() is severely limited in how much memory it can allocate, and - * its use is strongly discouraged. - * - * Solaris: sbrk() does not necessarily discard pages when the DSS is shrunk, - * which makes it possible to get non-zeroed pages when re-expanding - * the DSS. This is incompatible with jemalloc's assumptions, and a - * fix would require chunk_alloc_dss() to optionally zero memory as - * chunk_recycle_dss() does (though the cost could be reduced by - * keeping track of the DSS high water mark and zeroing only when - * below that mark). - */ -/* #define MALLOC_DSS */ +#if (!defined(MOZ_MEMORY_WINDOWS) && !defined(MOZ_MEMORY_DARWIN)) + /* + * MALLOC_PAGEFILE causes all mmap()ed memory to be backed by temporary + * files, so that if a chunk is mapped, it is guaranteed to be swappable. + * This avoids asynchronous OOM failures that are due to VM over-commit. + * + * XXX OS X over-commits, so we should probably use mmap() instead of + * vm_allocate(), so that MALLOC_PAGEFILE works. + */ +# define MALLOC_PAGEFILE +#endif + +#ifdef MALLOC_PAGEFILE +/* Write size when initializing a page file. */ +# define MALLOC_PAGEFILE_WRITE_SIZE 512 +#endif #ifdef MOZ_MEMORY_LINUX #define _GNU_SOURCE /* For mremap(2). */ @@ -285,6 +277,9 @@ __FBSDID("$FreeBSD: head/lib/libc/stdlib/malloc.c 179704 2008-06-10 15:46:18Z ja #ifndef MADV_FREE # define MADV_FREE MADV_DONTNEED #endif +#ifndef MAP_NOSYNC +# define MAP_NOSYNC 0 +#endif #include #ifndef MOZ_MEMORY #include @@ -363,6 +358,8 @@ static const bool __isthreaded = true; #include #endif +#include "qr.h" +#include "ql.h" #ifdef MOZ_MEMORY_WINDOWS /* MSVC++ does not support C99 variable-length arrays. */ # define RB_NO_C99_VARARRAYS @@ -458,6 +455,18 @@ static const bool __isthreaded = true; /* Maximum number of dirty pages per arena. */ #define DIRTY_MAX_DEFAULT (1U << 10) +/* Default reserve chunks. */ +#define RESERVE_MIN_2POW_DEFAULT 1 +/* + * Default range (in chunks) between reserve_min and reserve_max, in addition + * to the mandatory one chunk per arena. + */ +#ifdef MALLOC_PAGEFILE +# define RESERVE_RANGE_2POW_DEFAULT 5 +#else +# define RESERVE_RANGE_2POW_DEFAULT 0 +#endif + /* * Maximum size of L1 cache line. This is used to avoid cache line aliasing, * so over-estimates are okay (up to a point), but under-estimates will @@ -699,6 +708,30 @@ struct extent_node_s { }; typedef rb_tree(extent_node_t) extent_tree_t; +/******************************************************************************/ +/* + * Reserve data structures. + */ + +/* Callback registration. */ +typedef struct reserve_reg_s reserve_reg_t; +struct reserve_reg_s { + /* Linkage for list of all registered callbacks. */ + ql_elm(reserve_reg_t) link; + + /* Callback function pointer. */ + reserve_cb_t *cb; + + /* Opaque application data pointer. */ + void *ctx; + + /* + * Sequence number of condition notification most recently sent to this + * callback. + */ + uint64_t seq; +}; + /******************************************************************************/ /* * Arena data structures. @@ -837,6 +870,12 @@ struct arena_s { arena_stats_t stats; #endif + /* + * Chunk allocation sequence number, used to detect races with other + * threads during chunk allocation, and then discard unnecessary chunks. + */ + uint64_t chunk_seq; + /* Tree of all chunks this arena manages. */ arena_chunk_tree_t chunks_all; @@ -852,18 +891,6 @@ struct arena_s { */ arena_chunk_tree_t chunks_dirty; - /* - * In order to avoid rapid chunk allocation/deallocation when an arena - * oscillates right on the cusp of needing a new chunk, cache the most - * recently freed chunk. The spare is left in the arena's chunk trees - * until it is deleted. - * - * There is one spare chunk per arena, rather than one spare total, in - * order to avoid interactions between multiple threads that could make - * a single spare inadequate. - */ - arena_chunk_t *spare; - /* * Current count of pages within unused runs that are potentially * dirty, and for which madvise(... MADV_FREE) has not been called. By @@ -960,29 +987,6 @@ static malloc_mutex_t huge_mtx; /* Tree of chunks that are stand-alone huge allocations. */ static extent_tree_t huge; -#ifdef MALLOC_DSS -/* - * Protects sbrk() calls. This avoids malloc races among threads, though it - * does not protect against races with threads that call sbrk() directly. - */ -static malloc_mutex_t dss_mtx; -/* Base address of the DSS. */ -static void *dss_base; -/* Current end of the DSS, or ((void *)-1) if the DSS is exhausted. */ -static void *dss_prev; -/* Current upper limit on DSS addresses. */ -static void *dss_max; - -/* - * Trees of chunks that were previously allocated (trees differ only in node - * ordering). These are used when allocating chunks, in an attempt to re-use - * address space. Depending on function, different tree orderings are needed, - * which is why there are two trees with the same contents. - */ -static extent_tree_t dss_chunks_szad; -static extent_tree_t dss_chunks_ad; -#endif - #ifdef MALLOC_STATS /* Huge allocation statistics. */ static uint64_t huge_nmalloc; @@ -990,6 +994,43 @@ static uint64_t huge_ndalloc; static size_t huge_allocated; #endif +/****************/ +/* + * Memory reserve. + */ + +#ifdef MALLOC_PAGEFILE +static char pagefile_templ[PATH_MAX]; +#endif + +/* Protects reserve-related data structures. */ +static malloc_mutex_t reserve_mtx; + +/* + * Bounds on acceptable reserve size, and current reserve size. Reserve + * depletion may cause (reserve_cur < reserve_min). + */ +static size_t reserve_min; +static size_t reserve_cur; +static size_t reserve_max; + +/* List of registered callbacks. */ +static ql_head(reserve_reg_t) reserve_regs; + +/* + * Condition notification sequence number, used to determine whether all + * registered callbacks have been notified of the most current condition. + */ +static uint64_t reserve_seq; + +/* + * Trees of chunks currently in the memory reserve. Depending on function, + * different tree orderings are needed, which is why there are two trees with + * the same contents. + */ +static extent_tree_t reserve_chunks_szad; +static extent_tree_t reserve_chunks_ad; + /****************************/ /* * base (internal allocation). @@ -1007,6 +1048,7 @@ static void *base_next_decommitted; #endif static void *base_past_addr; /* Addr immediately past base_pages. */ static extent_node_t *base_nodes; +static reserve_reg_t *base_reserve_regs; static malloc_mutex_t base_mtx; #ifdef MALLOC_STATS static size_t base_mapped; @@ -1023,6 +1065,7 @@ static size_t base_mapped; */ static arena_t **arenas; static unsigned narenas; +static unsigned narenas_2pow; #ifndef NO_TLS # ifdef MALLOC_BALANCE static unsigned narenas_2pow; @@ -1068,10 +1111,6 @@ static bool opt_abort = false; static bool opt_junk = false; #endif #endif -#ifdef MALLOC_DSS -static bool opt_dss = true; -static bool opt_mmap = true; -#endif static size_t opt_dirty_max = DIRTY_MAX_DEFAULT; #ifdef MALLOC_BALANCE static uint64_t opt_balance_threshold = BALANCE_THRESHOLD_DEFAULT; @@ -1080,6 +1119,11 @@ static bool opt_print_stats = false; static size_t opt_quantum_2pow = QUANTUM_2POW_MIN; static size_t opt_small_max_2pow = SMALL_MAX_2POW_DEFAULT; static size_t opt_chunk_2pow = CHUNK_2POW_DEFAULT; +static int opt_reserve_min_lshift = 0; +static int opt_reserve_range_lshift = 0; +#ifdef MALLOC_PAGEFILE +static bool opt_pagefile = true; +#endif #ifdef MALLOC_UTRACE static bool opt_utrace = false; #endif @@ -1130,30 +1174,27 @@ static void wrtmessage(const char *p1, const char *p2, const char *p3, static void malloc_printf(const char *format, ...); #endif static char *umax2s(uintmax_t x, char *s); -#ifdef MALLOC_DSS -static bool base_pages_alloc_dss(size_t minsize); -#endif static bool base_pages_alloc_mmap(size_t minsize); static bool base_pages_alloc(size_t minsize); static void *base_alloc(size_t size); static void *base_calloc(size_t number, size_t size); static extent_node_t *base_node_alloc(void); static void base_node_dealloc(extent_node_t *node); +static reserve_reg_t *base_reserve_reg_alloc(void); +static void base_reserve_reg_dealloc(reserve_reg_t *reg); #ifdef MALLOC_STATS static void stats_print(arena_t *arena); #endif -static void *pages_map(void *addr, size_t size); +static void *pages_map(void *addr, size_t size, int pfd); static void pages_unmap(void *addr, size_t size); -#ifdef MALLOC_DSS -static void *chunk_alloc_dss(size_t size); -static void *chunk_recycle_dss(size_t size, bool zero); -#endif -static void *chunk_alloc_mmap(size_t size); -static void *chunk_alloc(size_t size, bool zero); -#ifdef MALLOC_DSS -static extent_node_t *chunk_dealloc_dss_record(void *chunk, size_t size); -static bool chunk_dealloc_dss(void *chunk, size_t size); +static void *chunk_alloc_mmap(size_t size, bool pagefile); +#ifdef MALLOC_PAGEFILE +static int pagefile_init(size_t size); +static void pagefile_close(int pfd); #endif +static void *chunk_recycle_reserve(size_t size, bool zero); +static void *chunk_alloc(size_t size, bool zero, bool pagefile); +static extent_node_t *chunk_dealloc_reserve(void *chunk, size_t size); static void chunk_dealloc_mmap(void *chunk, size_t size); static void chunk_dealloc(void *chunk, size_t size); #ifndef NO_TLS @@ -1164,10 +1205,10 @@ static void arena_chunk_node_dealloc(arena_chunk_t *chunk, extent_node_t *node); static void arena_run_split(arena_t *arena, arena_run_t *run, size_t size, bool small, bool zero); -static arena_chunk_t *arena_chunk_alloc(arena_t *arena); +static void arena_chunk_init(arena_t *arena, arena_chunk_t *chunk); static void arena_chunk_dealloc(arena_t *arena, arena_chunk_t *chunk); -static arena_run_t *arena_run_alloc(arena_t *arena, size_t size, bool small, - bool zero); +static arena_run_t *arena_run_alloc(arena_t *arena, arena_bin_t *bin, + size_t size, bool small, bool zero); static void arena_purge(arena_t *arena); static void arena_run_dalloc(arena_t *arena, arena_run_t *run, bool dirty); static void arena_run_trim_head(arena_t *arena, arena_chunk_t *chunk, @@ -1204,6 +1245,10 @@ static void malloc_print_stats(void); static #endif bool malloc_init_hard(void); +static void reserve_shrink(void); +static uint64_t reserve_notify(reserve_cnd_t cnd, size_t size, uint64_t seq); +static uint64_t reserve_crit(size_t size, const char *fname, uint64_t seq); +static void reserve_fail(size_t size, const char *fname); /* * End function prototypes. @@ -1650,69 +1695,31 @@ pages_commit(void *addr, size_t size) } #endif -#ifdef MALLOC_DSS -static bool -base_pages_alloc_dss(size_t minsize) -{ - - /* - * Do special DSS allocation here, since base allocations don't need to - * be chunk-aligned. - */ - malloc_mutex_lock(&dss_mtx); - if (dss_prev != (void *)-1) { - intptr_t incr; - size_t csize = CHUNK_CEILING(minsize); - - do { - /* Get the current end of the DSS. */ - dss_max = sbrk(0); - - /* - * Calculate how much padding is necessary to - * chunk-align the end of the DSS. Don't worry about - * dss_max not being chunk-aligned though. - */ - incr = (intptr_t)chunksize - - (intptr_t)CHUNK_ADDR2OFFSET(dss_max); - assert(incr >= 0); - if ((size_t)incr < minsize) - incr += csize; - - dss_prev = sbrk(incr); - if (dss_prev == dss_max) { - /* Success. */ - dss_max = (void *)((intptr_t)dss_prev + incr); - base_pages = dss_prev; - base_next_addr = base_pages; - base_past_addr = dss_max; -#ifdef MALLOC_STATS - base_mapped += incr; -#endif - malloc_mutex_unlock(&dss_mtx); - return (false); - } - } while (dss_prev != (void *)-1); - } - malloc_mutex_unlock(&dss_mtx); - - return (true); -} -#endif - static bool base_pages_alloc_mmap(size_t minsize) { + bool ret; size_t csize; #ifdef MALLOC_DECOMMIT size_t pminsize; #endif + int pfd; assert(minsize != 0); - csize = PAGE_CEILING(minsize); - base_pages = pages_map(NULL, csize); - if (base_pages == NULL) - return (true); + csize = CHUNK_CEILING(minsize); +#ifdef MALLOC_PAGEFILE + if (opt_pagefile) { + pfd = pagefile_init(csize); + if (pfd == -1) + return (true); + } else +#endif + pfd = -1; + base_pages = pages_map(NULL, csize, pfd); + if (base_pages == NULL) { + ret = true; + goto RETURN; + } base_next_addr = base_pages; base_past_addr = (void *)((uintptr_t)base_pages + csize); #ifdef MALLOC_DECOMMIT @@ -1729,6 +1736,12 @@ base_pages_alloc_mmap(size_t minsize) base_mapped += csize; #endif + ret = false; +RETURN: +#ifdef MALLOC_PAGEFILE + if (pfd != -1) + pagefile_close(pfd); +#endif return (false); } @@ -1736,18 +1749,8 @@ static bool base_pages_alloc(size_t minsize) { -#ifdef MALLOC_DSS - if (opt_dss) { - if (base_pages_alloc_dss(minsize) == false) - return (false); - } - - if (opt_mmap && minsize != 0) -#endif - { - if (base_pages_alloc_mmap(minsize) == false) - return (false); - } + if (base_pages_alloc_mmap(minsize) == false) + return (false); return (true); } @@ -1838,6 +1841,38 @@ base_node_dealloc(extent_node_t *node) malloc_mutex_unlock(&base_mtx); } +static reserve_reg_t * +base_reserve_reg_alloc(void) +{ + reserve_reg_t *ret; + + malloc_mutex_lock(&base_mtx); + if (base_reserve_regs != NULL) { + ret = base_reserve_regs; + base_reserve_regs = *(reserve_reg_t **)ret; + VALGRIND_FREELIKE_BLOCK(ret, 0); + VALGRIND_MALLOCLIKE_BLOCK(ret, sizeof(reserve_reg_t), 0, false); + malloc_mutex_unlock(&base_mtx); + } else { + malloc_mutex_unlock(&base_mtx); + ret = (reserve_reg_t *)base_alloc(sizeof(reserve_reg_t)); + } + + return (ret); +} + +static void +base_reserve_reg_dealloc(reserve_reg_t *reg) +{ + + malloc_mutex_lock(&base_mtx); + VALGRIND_FREELIKE_BLOCK(reg, 0); + VALGRIND_MALLOCLIKE_BLOCK(reg, sizeof(reserve_reg_t *), 0, false); + *(reserve_reg_t **)reg = base_reserve_regs; + base_reserve_regs = reg; + malloc_mutex_unlock(&base_mtx); +} + /******************************************************************************/ #ifdef MALLOC_STATS @@ -2006,7 +2041,7 @@ rb_wrap(static, extent_tree_ad_, extent_tree_t, extent_node_t, link_ad, #ifdef MOZ_MEMORY_WINDOWS static void * -pages_map(void *addr, size_t size) +pages_map(void *addr, size_t size, int pfd) { void *ret; @@ -2029,7 +2064,7 @@ pages_unmap(void *addr, size_t size) } #elif (defined(MOZ_MEMORY_DARWIN)) static void * -pages_map(void *addr, size_t size) +pages_map(void *addr, size_t size, int pfd) { void *ret; kern_return_t err; @@ -2081,7 +2116,7 @@ pages_copy(void *dest, const void *src, size_t n) } #else /* MOZ_MEMORY_DARWIN */ static void * -pages_map(void *addr, size_t size) +pages_map(void *addr, size_t size, int pfd) { void *ret; @@ -2089,8 +2124,16 @@ pages_map(void *addr, size_t size) * We don't use MAP_FIXED here, because it can cause the *replacement* * of existing mappings, and we only want to create new mappings. */ - ret = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, - -1, 0); +#ifdef MALLOC_PAGEFILE + if (pfd != -1) { + ret = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | + MAP_NOSYNC, pfd, 0); + } else +#endif + { + ret = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | + MAP_ANON, -1, 0); + } assert(ret != NULL); if (ret == MAP_FAILED) @@ -2132,131 +2175,50 @@ pages_unmap(void *addr, size_t size) } #endif -#ifdef MALLOC_DSS -static void * -chunk_alloc_dss(size_t size) -{ - - /* - * sbrk() uses a signed increment argument, so take care not to - * interpret a huge allocation request as a negative increment. - */ - if ((intptr_t)size < 0) - return (NULL); - - malloc_mutex_lock(&dss_mtx); - if (dss_prev != (void *)-1) { - intptr_t incr; - - /* - * The loop is necessary to recover from races with other - * threads that are using the DSS for something other than - * malloc. - */ - do { - void *ret; - - /* Get the current end of the DSS. */ - dss_max = sbrk(0); - - /* - * Calculate how much padding is necessary to - * chunk-align the end of the DSS. - */ - incr = (intptr_t)size - - (intptr_t)CHUNK_ADDR2OFFSET(dss_max); - if (incr == (intptr_t)size) - ret = dss_max; - else { - ret = (void *)((intptr_t)dss_max + incr); - incr += size; - } - - dss_prev = sbrk(incr); - if (dss_prev == dss_max) { - /* Success. */ - dss_max = (void *)((intptr_t)dss_prev + incr); - malloc_mutex_unlock(&dss_mtx); - return (ret); - } - } while (dss_prev != (void *)-1); - } - malloc_mutex_unlock(&dss_mtx); - - return (NULL); -} - -static void * -chunk_recycle_dss(size_t size, bool zero) -{ - extent_node_t *node, key; - - key.addr = NULL; - key.size = size; - malloc_mutex_lock(&dss_mtx); - node = extent_tree_szad_nsearch(&dss_chunks_szad, &key); - if (node != NULL) { - void *ret = node->addr; - - /* Remove node from the tree. */ - extent_tree_szad_remove(&dss_chunks_szad, node); - if (node->size == size) { - extent_tree_ad_remove(&dss_chunks_ad, node); - base_node_dealloc(node); - } else { - /* - * Insert the remainder of node's address range as a - * smaller chunk. Its position within dss_chunks_ad - * does not change. - */ - assert(node->size > size); - node->addr = (void *)((uintptr_t)node->addr + size); - node->size -= size; - extent_tree_szad_insert(&dss_chunks_szad, node); - } - malloc_mutex_unlock(&dss_mtx); - - if (zero) - memset(ret, 0, size); - return (ret); - } - malloc_mutex_unlock(&dss_mtx); - - return (NULL); -} -#endif - -#ifdef MOZ_MEMORY_WINDOWS static inline void * -chunk_alloc_mmap(size_t size) +chunk_alloc_mmap(size_t size, bool pagefile) { void *ret; size_t offset; + int pfd; + +#ifdef MALLOC_PAGEFILE + if (opt_pagefile && pagefile) { + pfd = pagefile_init(size); + if (pfd == -1) + return (NULL); + } else +#endif + pfd = -1; /* * Windows requires that there be a 1:1 mapping between VM * allocation/deallocation operations. Therefore, take care here to * acquire the final result via one mapping operation. This means * unmapping any preliminary result that is not correctly aligned. + * + * The MALLOC_PAGEFILE code also benefits from this mapping algorithm, + * since it reduces the number of page files. */ - ret = pages_map(NULL, size); + ret = pages_map(NULL, size, pfd); if (ret == NULL) - return (NULL); + goto RETURN; offset = CHUNK_ADDR2OFFSET(ret); if (offset != 0) { /* Deallocate, then try to allocate at (ret + size - offset). */ pages_unmap(ret, size); - ret = pages_map((void *)((uintptr_t)ret + size - offset), size); + ret = pages_map((void *)((uintptr_t)ret + size - offset), size, + pfd); while (ret == NULL) { /* * Over-allocate in order to map a memory region that * is definitely large enough. */ - ret = pages_map(NULL, size + chunksize); + ret = pages_map(NULL, size + chunksize, -1); if (ret == NULL) - return (NULL); + goto RETURN; /* * Deallocate, then allocate the correct size, within * the over-sized mapping. @@ -2264,10 +2226,10 @@ chunk_alloc_mmap(size_t size) offset = CHUNK_ADDR2OFFSET(ret); pages_unmap(ret, size + chunksize); if (offset == 0) - ret = pages_map(ret, size); + ret = pages_map(ret, size, pfd); else { ret = pages_map((void *)((uintptr_t)ret + - chunksize - offset), size); + chunksize - offset), size, pfd); } /* * Failure here indicates a race with another thread, so @@ -2276,121 +2238,204 @@ chunk_alloc_mmap(size_t size) } } +RETURN: +#ifdef MALLOC_PAGEFILE + if (pfd != -1) + pagefile_close(pfd); +#endif return (ret); } -#else -static inline void * -chunk_alloc_mmap(size_t size) + +#ifdef MALLOC_PAGEFILE +static int +pagefile_init(size_t size) { - void *ret; - size_t offset; + int ret; + size_t i; + char pagefile_path[PATH_MAX]; + char zbuf[MALLOC_PAGEFILE_WRITE_SIZE]; /* - * Ideally, there would be a way to specify alignment to mmap() (like - * NetBSD has), but in the absence of such a feature, we have to work - * hard to efficiently create aligned mappings. The reliable, but - * expensive method is to create a mapping that is over-sized, then - * trim the excess. However, that always results in at least one call - * to pages_unmap(). - * - * A more optimistic approach is to try mapping precisely the right - * amount, then try to append another mapping if alignment is off. In - * practice, this works out well as long as the application is not - * interleaving mappings via direct mmap() calls. If we do run into a - * situation where there is an interleaved mapping and we are unable to - * extend an unaligned mapping, our best option is to momentarily - * revert to the reliable-but-expensive method. This will tend to - * leave a gap in the memory map that is too small to cause later - * problems for the optimistic method. + * Create a temporary file, then immediately unlink it so that it will + * not persist. */ + strcpy(pagefile_path, pagefile_templ); + ret = mkstemp(pagefile_path); + if (ret == -1) + return (ret); + if (unlink(pagefile_path)) { + char buf[STRERROR_BUF]; - ret = pages_map(NULL, size); - if (ret == NULL) - return (NULL); + strerror_r(errno, buf, sizeof(buf)); + _malloc_message(_getprogname(), ": (malloc) Error in unlink(\"", + pagefile_path, "\"):"); + _malloc_message(buf, "\n", "", ""); + if (opt_abort) + abort(); + } - offset = CHUNK_ADDR2OFFSET(ret); - if (offset != 0) { - /* Try to extend chunk boundary. */ - if (pages_map((void *)((uintptr_t)ret + size), - chunksize - offset) == NULL) { - /* - * Extension failed. Clean up, then revert to the - * reliable-but-expensive method. - */ - pages_unmap(ret, size); + /* + * Write sequential zeroes to the file in order to assure that disk + * space is committed, with minimal fragmentation. It would be + * sufficient to write one zero per disk block, but that potentially + * results in more system calls, for no real gain. + */ + memset(zbuf, 0, sizeof(zbuf)); + for (i = 0; i < size; i += sizeof(zbuf)) { + if (write(ret, zbuf, sizeof(zbuf)) != sizeof(zbuf)) { + if (errno != ENOSPC) { + char buf[STRERROR_BUF]; - /* Beware size_t wrap-around. */ - if (size + chunksize <= size) - return NULL; - - ret = pages_map(NULL, size + chunksize); - if (ret == NULL) - return (NULL); - - /* Clean up unneeded leading/trailing space. */ - offset = CHUNK_ADDR2OFFSET(ret); - if (offset != 0) { - /* Leading space. */ - pages_unmap(ret, chunksize - offset); - - ret = (void *)((uintptr_t)ret + - (chunksize - offset)); - - /* Trailing space. */ - pages_unmap((void *)((uintptr_t)ret + size), - offset); - } else { - /* Trailing space only. */ - pages_unmap((void *)((uintptr_t)ret + size), - chunksize); + strerror_r(errno, buf, sizeof(buf)); + _malloc_message(_getprogname(), + ": (malloc) Error in write(): ", buf, "\n"); + if (opt_abort) + abort(); } - } else { - /* Clean up unneeded leading space. */ - pages_unmap(ret, chunksize - offset); - ret = (void *)((uintptr_t)ret + (chunksize - offset)); + pagefile_close(ret); + return (-1); } } return (ret); } + +static void +pagefile_close(int pfd) +{ + + if (close(pfd)) { + char buf[STRERROR_BUF]; + + strerror_r(errno, buf, sizeof(buf)); + _malloc_message(_getprogname(), + ": (malloc) Error in close(): ", buf, "\n"); + if (opt_abort) + abort(); + } +} #endif static void * -chunk_alloc(size_t size, bool zero) +chunk_recycle_reserve(size_t size, bool zero) +{ + extent_node_t *node, key; + +#ifdef MALLOC_DECOMMIT + if (size != chunksize) + return (NULL); +#endif + + key.addr = NULL; + key.size = size; + malloc_mutex_lock(&reserve_mtx); + node = extent_tree_szad_nsearch(&reserve_chunks_szad, &key); + if (node != NULL) { + void *ret = node->addr; + + /* Remove node from the tree. */ + extent_tree_szad_remove(&reserve_chunks_szad, node); +#ifndef MALLOC_DECOMMIT + if (node->size == size) { +#else + assert(node->size == size); +#endif + extent_tree_ad_remove(&reserve_chunks_ad, node); + base_node_dealloc(node); +#ifndef MALLOC_DECOMMIT + } else { + /* + * Insert the remainder of node's address range as a + * smaller chunk. Its position within reserve_chunks_ad + * does not change. + */ + assert(node->size > size); + node->addr = (void *)((uintptr_t)node->addr + size); + node->size -= size; + extent_tree_szad_insert(&reserve_chunks_szad, node); + } +#endif + reserve_cur -= size; + /* + * Try to replenish the reserve if this allocation depleted it. + */ +#ifndef MALLOC_DECOMMIT + if (reserve_cur < reserve_min) { + size_t diff = reserve_min - reserve_cur; +#else + while (reserve_cur < reserve_min) { +# define diff chunksize +#endif + void *chunk; + + malloc_mutex_unlock(&reserve_mtx); + chunk = chunk_alloc_mmap(diff, true); + malloc_mutex_lock(&reserve_mtx); + if (chunk == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_notify(RESERVE_CND_LOW, + size, seq); + } while (reserve_cur < reserve_min && seq != 0); + } else { + extent_node_t *node; + + node = chunk_dealloc_reserve(chunk, diff); + if (node == NULL) { + uint64_t seq = 0; + + pages_unmap(chunk, diff); + do { + seq = reserve_notify( + RESERVE_CND_LOW, size, seq); + } while (reserve_cur < reserve_min && + seq != 0); + } + } + } + malloc_mutex_unlock(&reserve_mtx); + +#ifdef MALLOC_DECOMMIT + pages_commit(ret, size); +# undef diff +#else + if (zero) + memset(ret, 0, size); +#endif + return (ret); + } + malloc_mutex_unlock(&reserve_mtx); + + return (NULL); +} + +static void * +chunk_alloc(size_t size, bool zero, bool pagefile) { void *ret; assert(size != 0); assert((size & chunksize_mask) == 0); -#ifdef MALLOC_DSS - if (opt_dss) { - ret = chunk_recycle_dss(size, zero); - if (ret != NULL) { - goto RETURN; - } + ret = chunk_recycle_reserve(size, zero); + if (ret != NULL) + goto RETURN; - ret = chunk_alloc_dss(size); - if (ret != NULL) - goto RETURN; - } - - if (opt_mmap) + ret = chunk_alloc_mmap(size, pagefile); + if (ret != NULL) { +#ifdef MALLOC_STATS + stats_chunks.nchunks += (size / chunksize); #endif - { - ret = chunk_alloc_mmap(size); - if (ret != NULL) - goto RETURN; + goto RETURN; } /* All strategies for allocation failed. */ ret = NULL; RETURN: #ifdef MALLOC_STATS - if (ret != NULL) { - stats_chunks.nchunks += (size / chunksize); + if (ret != NULL) stats_chunks.curchunks += (size / chunksize); - } if (stats_chunks.curchunks > stats_chunks.highchunks) stats_chunks.highchunks = stats_chunks.curchunks; #endif @@ -2399,122 +2444,77 @@ RETURN: return (ret); } -#ifdef MALLOC_DSS static extent_node_t * -chunk_dealloc_dss_record(void *chunk, size_t size) +chunk_dealloc_reserve(void *chunk, size_t size) { - extent_node_t *node, *prev, key; + extent_node_t *node; + +#ifdef MALLOC_DECOMMIT + if (size != chunksize) + return (NULL); +#else + extent_node_t *prev, key; key.addr = (void *)((uintptr_t)chunk + size); - node = extent_tree_ad_nsearch(&dss_chunks_ad, &key); + node = extent_tree_ad_nsearch(&reserve_chunks_ad, &key); /* Try to coalesce forward. */ if (node != NULL && node->addr == key.addr) { /* * Coalesce chunk with the following address range. This does - * not change the position within dss_chunks_ad, so only - * remove/insert from/into dss_chunks_szad. + * not change the position within reserve_chunks_ad, so only + * remove/insert from/into reserve_chunks_szad. */ - extent_tree_szad_remove(&dss_chunks_szad, node); + extent_tree_szad_remove(&reserve_chunks_szad, node); node->addr = chunk; node->size += size; - extent_tree_szad_insert(&dss_chunks_szad, node); + extent_tree_szad_insert(&reserve_chunks_szad, node); } else { - /* - * Coalescing forward failed, so insert a new node. Drop - * dss_mtx during node allocation, since it is possible that a - * new base chunk will be allocated. - */ - malloc_mutex_unlock(&dss_mtx); +#endif + /* Coalescing forward failed, so insert a new node. */ node = base_node_alloc(); - malloc_mutex_lock(&dss_mtx); if (node == NULL) return (NULL); node->addr = chunk; node->size = size; - extent_tree_ad_insert(&dss_chunks_ad, node); - extent_tree_szad_insert(&dss_chunks_szad, node); + extent_tree_ad_insert(&reserve_chunks_ad, node); + extent_tree_szad_insert(&reserve_chunks_szad, node); +#ifndef MALLOC_DECOMMIT } /* Try to coalesce backward. */ - prev = extent_tree_ad_prev(&dss_chunks_ad, node); + prev = extent_tree_ad_prev(&reserve_chunks_ad, node); if (prev != NULL && (void *)((uintptr_t)prev->addr + prev->size) == chunk) { /* * Coalesce chunk with the previous address range. This does - * not change the position within dss_chunks_ad, so only - * remove/insert node from/into dss_chunks_szad. + * not change the position within reserve_chunks_ad, so only + * remove/insert node from/into reserve_chunks_szad. */ - extent_tree_szad_remove(&dss_chunks_szad, prev); - extent_tree_ad_remove(&dss_chunks_ad, prev); + extent_tree_szad_remove(&reserve_chunks_szad, prev); + extent_tree_ad_remove(&reserve_chunks_ad, prev); - extent_tree_szad_remove(&dss_chunks_szad, node); + extent_tree_szad_remove(&reserve_chunks_szad, node); node->addr = prev->addr; node->size += prev->size; - extent_tree_szad_insert(&dss_chunks_szad, node); + extent_tree_szad_insert(&reserve_chunks_szad, node); base_node_dealloc(prev); } +#endif + +#ifdef MALLOC_DECOMMIT + pages_decommit(chunk, size); +#else + madvise(chunk, size, MADV_FREE); +#endif + + reserve_cur += size; + if (reserve_cur > reserve_max) + reserve_shrink(); return (node); } -static bool -chunk_dealloc_dss(void *chunk, size_t size) -{ - - malloc_mutex_lock(&dss_mtx); - if ((uintptr_t)chunk >= (uintptr_t)dss_base - && (uintptr_t)chunk < (uintptr_t)dss_max) { - extent_node_t *node; - - /* Try to coalesce with other unused chunks. */ - node = chunk_dealloc_dss_record(chunk, size); - if (node != NULL) { - chunk = node->addr; - size = node->size; - } - - /* Get the current end of the DSS. */ - dss_max = sbrk(0); - - /* - * Try to shrink the DSS if this chunk is at the end of the - * DSS. The sbrk() call here is subject to a race condition - * with threads that use brk(2) or sbrk(2) directly, but the - * alternative would be to leak memory for the sake of poorly - * designed multi-threaded programs. - */ - if ((void *)((uintptr_t)chunk + size) == dss_max - && (dss_prev = sbrk(-(intptr_t)size)) == dss_max) { - /* Success. */ - dss_max = (void *)((intptr_t)dss_prev - (intptr_t)size); - - if (node != NULL) { - extent_tree_szad_remove(&dss_chunks_szad, node); - extent_tree_ad_remove(&dss_chunks_ad, node); - base_node_dealloc(node); - } - malloc_mutex_unlock(&dss_mtx); - } else { - malloc_mutex_unlock(&dss_mtx); -#ifdef MOZ_MEMORY_WINDOWS - VirtualAlloc(chunk, size, MEM_RESET, PAGE_READWRITE); -#elif (defined(MOZ_MEMORY_DARWIN)) - mmap(chunk, size, PROT_READ | PROT_WRITE, MAP_PRIVATE - | MAP_ANON | MAP_FIXED, -1, 0); -#else - madvise(chunk, size, MADV_FREE); -#endif - } - - return (false); - } - malloc_mutex_unlock(&dss_mtx); - - return (true); -} -#endif - static void chunk_dealloc_mmap(void *chunk, size_t size) { @@ -2525,6 +2525,7 @@ chunk_dealloc_mmap(void *chunk, size_t size) static void chunk_dealloc(void *chunk, size_t size) { + extent_node_t *node; assert(chunk != NULL); assert(CHUNK_ADDR2BASE(chunk) == chunk); @@ -2535,14 +2536,11 @@ chunk_dealloc(void *chunk, size_t size) stats_chunks.curchunks -= (size / chunksize); #endif -#ifdef MALLOC_DSS - if (opt_dss) { - if (chunk_dealloc_dss(chunk, size) == false) - return; - } - - if (opt_mmap) -#endif + /* Try to merge chunk into the reserve. */ + malloc_mutex_lock(&reserve_mtx); + node = chunk_dealloc_reserve(chunk, size); + malloc_mutex_unlock(&reserve_mtx); + if (node == NULL) chunk_dealloc_mmap(chunk, size); } @@ -2961,7 +2959,7 @@ arena_run_split(arena_t *arena, arena_run_t *run, size_t size, bool small, # ifdef MALLOC_STATS arena->stats.ncommit++; # endif - } + } else /* No need to zero since commit zeros. */ #endif /* Zero if necessary. */ @@ -3014,72 +3012,56 @@ arena_run_split(arena_t *arena, arena_run_t *run, size_t size, bool small, arena_chunk_tree_dirty_remove(&arena->chunks_dirty, chunk); } -static arena_chunk_t * -arena_chunk_alloc(arena_t *arena) +static void +arena_chunk_init(arena_t *arena, arena_chunk_t *chunk) { - arena_chunk_t *chunk; extent_node_t *node; - if (arena->spare != NULL) { - chunk = arena->spare; - arena->spare = NULL; - } else { - chunk = (arena_chunk_t *)chunk_alloc(chunksize, true); - if (chunk == NULL) - return (NULL); - VALGRIND_MALLOCLIKE_BLOCK(chunk, (arena_chunk_header_npages << - pagesize_2pow), 0, false); + VALGRIND_MALLOCLIKE_BLOCK(chunk, (arena_chunk_header_npages << + pagesize_2pow), 0, false); #ifdef MALLOC_STATS - arena->stats.mapped += chunksize; + arena->stats.mapped += chunksize; #endif - chunk->arena = arena; + chunk->arena = arena; - arena_chunk_tree_all_insert(&arena->chunks_all, chunk); + arena_chunk_tree_all_insert(&arena->chunks_all, chunk); - /* - * Claim that no pages are in use, since the header is merely - * overhead. - */ - chunk->pages_used = 0; - chunk->ndirty = 0; + /* + * Claim that no pages are in use, since the header is merely overhead. + */ + chunk->pages_used = 0; + chunk->ndirty = 0; - /* - * Initialize the map to contain one maximal free untouched - * run. - */ - memset(chunk->map, (CHUNK_MAP_LARGE | CHUNK_MAP_POS_MASK), - arena_chunk_header_npages); - memset(&chunk->map[arena_chunk_header_npages], - (CHUNK_MAP_UNTOUCHED + /* Initialize the map to contain one maximal free untouched run. */ + memset(chunk->map, (CHUNK_MAP_LARGE | CHUNK_MAP_POS_MASK), + arena_chunk_header_npages); + memset(&chunk->map[arena_chunk_header_npages], (CHUNK_MAP_UNTOUCHED #ifdef MALLOC_DECOMMIT - | CHUNK_MAP_DECOMMITTED + | CHUNK_MAP_DECOMMITTED #endif - ), (chunk_npages - - arena_chunk_header_npages)); + ), (chunk_npages - + arena_chunk_header_npages)); - /* Initialize the tree of unused extent nodes. */ - extent_tree_ad_new(&chunk->nodes); - chunk->nodes_past = (extent_node_t *)QUANTUM_CEILING( - (uintptr_t)&chunk->map[chunk_npages]); + /* Initialize the tree of unused extent nodes. */ + extent_tree_ad_new(&chunk->nodes); + chunk->nodes_past = (extent_node_t *)QUANTUM_CEILING( + (uintptr_t)&chunk->map[chunk_npages]); #ifdef MALLOC_DECOMMIT - /* - * Start out decommitted, in order to force a closer - * correspondence between dirty pages and committed untouched - * pages. - */ - pages_decommit((void *)((uintptr_t)chunk + - (arena_chunk_header_npages << pagesize_2pow)), - ((chunk_npages - arena_chunk_header_npages) << - pagesize_2pow)); + /* + * Start out decommitted, in order to force a closer correspondence + * between dirty pages and committed untouched pages. + */ + pages_decommit((void *)((uintptr_t)chunk + + (arena_chunk_header_npages << pagesize_2pow)), + ((chunk_npages - arena_chunk_header_npages) << + pagesize_2pow)); # ifdef MALLOC_STATS - arena->stats.ndecommit++; - arena->stats.decommitted += (chunk_npages - - arena_chunk_header_npages); + arena->stats.ndecommit++; + arena->stats.decommitted += (chunk_npages - arena_chunk_header_npages); # endif #endif - } /* Insert the run into the runs_avail_* red-black trees. */ node = arena_chunk_node_alloc(chunk); @@ -3088,8 +3070,6 @@ arena_chunk_alloc(arena_t *arena) node->size = chunksize - (arena_chunk_header_npages << pagesize_2pow); extent_tree_szad_insert(&arena->runs_avail_szad, node); extent_tree_ad_insert(&arena->runs_avail_ad, node); - - return (chunk); } static void @@ -3097,21 +3077,6 @@ arena_chunk_dealloc(arena_t *arena, arena_chunk_t *chunk) { extent_node_t *node, key; - if (arena->spare != NULL) { - arena_chunk_tree_all_remove(&chunk->arena->chunks_all, - arena->spare); - if (arena->spare->ndirty > 0) { - arena_chunk_tree_dirty_remove( - &chunk->arena->chunks_dirty, arena->spare); - arena->ndirty -= arena->spare->ndirty; - } - VALGRIND_FREELIKE_BLOCK(arena->spare, 0); - chunk_dealloc((void *)arena->spare, chunksize); -#ifdef MALLOC_STATS - arena->stats.mapped -= chunksize; -#endif - } - /* * Remove run from the runs trees, regardless of whether this chunk * will be cached, so that the arena does not use it. Dirty page @@ -3126,11 +3091,23 @@ arena_chunk_dealloc(arena_t *arena, arena_chunk_t *chunk) extent_tree_ad_remove(&arena->runs_avail_ad, node); arena_chunk_node_dealloc(chunk, node); - arena->spare = chunk; + arena_chunk_tree_all_remove(&chunk->arena->chunks_all, + chunk); + if (chunk->ndirty > 0) { + arena_chunk_tree_dirty_remove( + &chunk->arena->chunks_dirty, chunk); + arena->ndirty -= chunk->ndirty; + } + VALGRIND_FREELIKE_BLOCK(chunk, 0); + chunk_dealloc((void *)chunk, chunksize); +#ifdef MALLOC_STATS + arena->stats.mapped -= chunksize; +#endif } static arena_run_t * -arena_run_alloc(arena_t *arena, size_t size, bool small, bool zero) +arena_run_alloc(arena_t *arena, arena_bin_t *bin, size_t size, bool small, + bool zero) { arena_chunk_t *chunk; arena_run_t *run; @@ -3140,27 +3117,79 @@ arena_run_alloc(arena_t *arena, size_t size, bool small, bool zero) pagesize_2pow))); assert((size & pagesize_mask) == 0); - /* Search the arena's chunks for the lowest best fit. */ - key.addr = NULL; - key.size = size; - node = extent_tree_szad_nsearch(&arena->runs_avail_szad, &key); - if (node != NULL) { - run = (arena_run_t *)node->addr; + chunk = NULL; + while (true) { + /* Search the arena's chunks for the lowest best fit. */ + key.addr = NULL; + key.size = size; + node = extent_tree_szad_nsearch(&arena->runs_avail_szad, &key); + if (node != NULL) { + if (chunk != NULL) + chunk_dealloc(chunk, chunksize); + run = (arena_run_t *)node->addr; + arena_run_split(arena, run, size, small, zero); + return (run); + } + + /* + * No usable runs. Create a new chunk from which to allocate + * the run. + */ + if (chunk == NULL) { + uint64_t chunk_seq; + + /* + * Record the chunk allocation sequence number in order + * to detect races. + */ + arena->chunk_seq++; + chunk_seq = arena->chunk_seq; + + /* + * Drop the arena lock while allocating a chunk, since + * reserve notifications may cause recursive + * allocation. Dropping the lock here opens an + * allocataion race, but we recover. + */ + malloc_mutex_unlock(&arena->lock); + chunk = (arena_chunk_t *)chunk_alloc(chunksize, true, + true); + malloc_mutex_lock(&arena->lock); + + /* + * Check whether a race allowed a usable run to appear. + */ + if (bin != NULL && (run = bin->runcur) != NULL && + run->nfree > 0) { + if (chunk != NULL) + chunk_dealloc(chunk, chunksize); + return (run); + } + + /* + * If this thread raced with another such that multiple + * chunks were allocated, make sure that there is still + * inadequate space before using this chunk. + */ + if (chunk_seq != arena->chunk_seq) + continue; + + /* + * Check for an error *after* checking for a race, + * since a race could also cause a transient OOM + * condition. + */ + if (chunk == NULL) + return (NULL); + } + + arena_chunk_init(arena, chunk); + run = (arena_run_t *)((uintptr_t)chunk + + (arena_chunk_header_npages << pagesize_2pow)); + /* Update page map. */ arena_run_split(arena, run, size, small, zero); return (run); } - - /* - * No usable runs. Create a new chunk from which to allocate the run. - */ - chunk = arena_chunk_alloc(arena); - if (chunk == NULL) - return (NULL); - run = (arena_run_t *)((uintptr_t)chunk + (arena_chunk_header_npages << - pagesize_2pow)); - /* Update page map. */ - arena_run_split(arena, run, size, small, zero); - return (run); } static void @@ -3433,9 +3462,15 @@ arena_bin_nonfull_run_get(arena_t *arena, arena_bin_t *bin) /* No existing runs have any space available. */ /* Allocate a new run. */ - run = arena_run_alloc(arena, bin->run_size, true, false); + run = arena_run_alloc(arena, bin, bin->run_size, true, false); if (run == NULL) return (NULL); + /* + * Don't initialize if a race in arena_run_alloc() allowed an existing + * run to become usable. + */ + if (run == bin->runcur) + return (run); VALGRIND_MALLOCLIKE_BLOCK(run, sizeof(arena_run_t) + (sizeof(unsigned) * (bin->regs_mask_nelms - 1)), 0, false); @@ -3722,7 +3757,7 @@ arena_malloc_large(arena_t *arena, size_t size, bool zero) #else malloc_spin_lock(&arena->lock); #endif - ret = (void *)arena_run_alloc(arena, size, false, zero); + ret = (void *)arena_run_alloc(arena, NULL, size, false, zero); if (ret == NULL) { malloc_spin_unlock(&arena->lock); return (NULL); @@ -3800,7 +3835,7 @@ arena_palloc(arena_t *arena, size_t alignment, size_t size, size_t alloc_size) #else malloc_spin_lock(&arena->lock); #endif - ret = (void *)arena_run_alloc(arena, alloc_size, false, false); + ret = (void *)arena_run_alloc(arena, NULL, alloc_size, false, false); if (ret == NULL) { malloc_spin_unlock(&arena->lock); return (NULL); @@ -4150,6 +4185,7 @@ arena_dalloc_small(arena_t *arena, arena_chunk_t *chunk, void *ptr, * run only contains one region, then it never gets * inserted into the non-full runs tree. */ + assert(arena_run_tree_search(&bin->runs, run) == run); arena_run_tree_remove(&bin->runs, run); } #ifdef MALLOC_DEBUG @@ -4171,11 +4207,15 @@ arena_dalloc_small(arena_t *arena, arena_chunk_t *chunk, void *ptr, /* Switch runcur. */ if (bin->runcur->nfree > 0) { /* Insert runcur. */ + assert(arena_run_tree_search(&bin->runs, + bin->runcur) == NULL); arena_run_tree_insert(&bin->runs, bin->runcur); } bin->runcur = run; - } else + } else { + assert(arena_run_tree_search(&bin->runs, run) == NULL); arena_run_tree_insert(&bin->runs, run); + } } #ifdef MALLOC_STATS arena->stats.allocated_small -= size; @@ -4496,10 +4536,11 @@ arena_new(arena_t *arena) memset(&arena->stats, 0, sizeof(arena_stats_t)); #endif + arena->chunk_seq = 0; + /* Initialize chunks. */ arena_chunk_tree_all_new(&arena->chunks_all); arena_chunk_tree_dirty_new(&arena->chunks_dirty); - arena->spare = NULL; arena->ndirty = 0; @@ -4627,7 +4668,7 @@ huge_malloc(size_t size, bool zero) if (node == NULL) return (NULL); - ret = chunk_alloc(csize, zero); + ret = chunk_alloc(csize, zero, true); if (ret == NULL) { base_node_dealloc(node); return (NULL); @@ -4695,6 +4736,7 @@ huge_palloc(size_t alignment, size_t size) size_t psize; #endif extent_node_t *node; + int pfd; /* * This allocation requires alignment that is even larger than chunk @@ -4718,19 +4760,30 @@ huge_palloc(size_t alignment, size_t size) if (node == NULL) return (NULL); -#ifdef MOZ_MEMORY_WINDOWS /* * Windows requires that there be a 1:1 mapping between VM * allocation/deallocation operations. Therefore, take care here to * acquire the final result via one mapping operation. + * + * The MALLOC_PAGEFILE code also benefits from this mapping algorithm, + * since it reduces the number of page files. */ +#ifdef MALLOC_PAGEFILE + if (opt_pagefile) { + pfd = pagefile_init(size); + if (pfd == -1) + return (NULL); + } else +#endif + pfd = -1; do { void *over; - over = chunk_alloc(alloc_size, false); + over = chunk_alloc(alloc_size, false, false); if (over == NULL) { base_node_dealloc(node); - return (NULL); + ret = NULL; + goto RETURN; } offset = (uintptr_t)over & (alignment - 1); @@ -4738,43 +4791,12 @@ huge_palloc(size_t alignment, size_t size) assert(offset < alloc_size); ret = (void *)((uintptr_t)over + offset); chunk_dealloc(over, alloc_size); - ret = pages_map(ret, chunk_size); + ret = pages_map(ret, chunk_size, pfd); /* * Failure here indicates a race with another thread, so try * again. */ } while (ret == NULL); -#else - ret = chunk_alloc(alloc_size, false); - if (ret == NULL) { - base_node_dealloc(node); - return (NULL); - } - - offset = (uintptr_t)ret & (alignment - 1); - assert((offset & chunksize_mask) == 0); - assert(offset < alloc_size); - if (offset == 0) { - /* Trim trailing space. */ - chunk_dealloc((void *)((uintptr_t)ret + chunk_size), alloc_size - - chunk_size); - } else { - size_t trailsize; - - /* Trim leading space. */ - chunk_dealloc(ret, alignment - offset); - - ret = (void *)((uintptr_t)ret + (alignment - offset)); - - trailsize = alloc_size - (alignment - offset) - chunk_size; - if (trailsize != 0) { - /* Trim trailing space. */ - assert(trailsize < alloc_size); - chunk_dealloc((void *)((uintptr_t)ret + chunk_size), - trailsize); - } - } -#endif /* Insert node into huge. */ node->addr = ret; @@ -4825,6 +4847,11 @@ huge_palloc(size_t alignment, size_t size) # endif #endif +RETURN: +#ifdef MALLOC_PAGEFILE + if (pfd != -1) + pagefile_close(pfd); +#endif return (ret); } @@ -4935,12 +4962,10 @@ huge_dalloc(void *ptr) malloc_mutex_unlock(&huge_mtx); /* Unmap chunk. */ -#ifdef MALLOC_DSS #ifdef MALLOC_FILL - if (opt_dss && opt_junk) + if (opt_junk) memset(node->addr, 0x5a, node->size); #endif -#endif #ifdef MALLOC_DECOMMIT chunk_dealloc(node->addr, CHUNK_CEILING(node->size)); #else @@ -5074,14 +5099,11 @@ malloc_print_stats(void) "\n", ""); _malloc_message("Boolean MALLOC_OPTIONS: ", opt_abort ? "A" : "a", "", ""); -#ifdef MALLOC_DSS - _malloc_message(opt_dss ? "D" : "d", "", "", ""); -#endif #ifdef MALLOC_FILL _malloc_message(opt_junk ? "J" : "j", "", "", ""); #endif -#ifdef MALLOC_DSS - _malloc_message(opt_mmap ? "M" : "m", "", "", ""); +#ifdef MALLOC_PAGEFILE + _malloc_message(opt_pagefile ? "o" : "O", "", "", ""); #endif _malloc_message("P", "", "", ""); #ifdef MALLOC_UTRACE @@ -5159,6 +5181,22 @@ malloc_print_stats(void) allocated, mapped); #endif + malloc_mutex_lock(&reserve_mtx); + malloc_printf("Reserve: min " + "cur max\n"); +#ifdef MOZ_MEMORY_WINDOWS + malloc_printf(" %12lu %12lu %12lu\n", + CHUNK_CEILING(reserve_min) >> opt_chunk_2pow, + reserve_cur >> opt_chunk_2pow, + reserve_max >> opt_chunk_2pow); +#else + malloc_printf(" %12zu %12zu %12zu\n", + CHUNK_CEILING(reserve_min) >> opt_chunk_2pow, + reserve_cur >> opt_chunk_2pow, + reserve_max >> opt_chunk_2pow); +#endif + malloc_mutex_unlock(&reserve_mtx); + #ifdef MALLOC_BALANCE malloc_printf("Arena balance reassignments: %llu\n", nbalance); @@ -5289,6 +5327,37 @@ malloc_init_hard(void) pagesize_mask = result - 1; pagesize_2pow = ffs((int)result) - 1; +#ifdef MALLOC_PAGEFILE + /* + * Determine where to create page files. It is insufficient to + * unconditionally use P_tmpdir (typically "/tmp"), since for some + * operating systems /tmp is a separate filesystem that is rather small. + * Therefore prefer, in order, the following locations: + * + * 1) MALLOC_TMPDIR + * 2) TMPDIR + * 3) P_tmpdir + */ + { + char *s; + size_t slen; + static const char suffix[] = "/jemalloc.XXXXXX"; + + if ((s = getenv("MALLOC_TMPDIR")) == NULL && (s = + getenv("TMPDIR")) == NULL) + s = P_tmpdir; + slen = strlen(s); + if (slen + sizeof(suffix) > sizeof(pagefile_templ)) { + _malloc_message(_getprogname(), + ": (malloc) Page file path too long\n", + "", ""); + abort(); + } + memcpy(pagefile_templ, s, slen); + memcpy(&pagefile_templ[slen], suffix, sizeof(suffix)); + } +#endif + for (i = 0; i < 3; i++) { unsigned j; @@ -5387,16 +5456,6 @@ MALLOC_OUT: else if ((opt_balance_threshold << 1) > opt_balance_threshold) opt_balance_threshold <<= 1; -#endif - break; - case 'd': -#ifdef MALLOC_DSS - opt_dss = false; -#endif - break; - case 'D': -#ifdef MALLOC_DSS - opt_dss = true; #endif break; case 'f': @@ -5408,6 +5467,12 @@ MALLOC_OUT: else if ((opt_dirty_max << 1) != 0) opt_dirty_max <<= 1; break; + case 'g': + opt_reserve_range_lshift--; + break; + case 'G': + opt_reserve_range_lshift++; + break; #ifdef MALLOC_FILL case 'j': opt_junk = false; @@ -5430,22 +5495,22 @@ MALLOC_OUT: (sizeof(size_t) << 3)) opt_chunk_2pow++; break; - case 'm': -#ifdef MALLOC_DSS - opt_mmap = false; -#endif - break; - case 'M': -#ifdef MALLOC_DSS - opt_mmap = true; -#endif - break; case 'n': opt_narenas_lshift--; break; case 'N': opt_narenas_lshift++; break; +#ifdef MALLOC_PAGEFILE + case 'o': + /* Do not over-commit. */ + opt_pagefile = true; + break; + case 'O': + /* Allow over-commit. */ + opt_pagefile = false; + break; +#endif case 'p': opt_print_stats = false; break; @@ -5461,6 +5526,12 @@ MALLOC_OUT: 1) opt_quantum_2pow++; break; + case 'r': + opt_reserve_min_lshift--; + break; + case 'R': + opt_reserve_min_lshift++; + break; case 's': if (opt_small_max_2pow > QUANTUM_2POW_MIN) @@ -5518,12 +5589,6 @@ MALLOC_OUT: } } -#ifdef MALLOC_DSS - /* Make sure that there is some method for acquiring memory. */ - if (opt_dss == false && opt_mmap == false) - opt_mmap = true; -#endif - /* Take care to call atexit() only once. */ if (opt_print_stats) { #ifndef MOZ_MEMORY_WINDOWS @@ -5592,14 +5657,6 @@ MALLOC_OUT: /* Initialize chunks data. */ malloc_mutex_init(&huge_mtx); extent_tree_ad_new(&huge); -#ifdef MALLOC_DSS - malloc_mutex_init(&dss_mtx); - dss_base = sbrk(0); - dss_prev = dss_base; - dss_max = dss_base; - extent_tree_szad_new(&dss_chunks_szad); - extent_tree_ad_new(&dss_chunks_ad); -#endif #ifdef MALLOC_STATS huge_nmalloc = 0; huge_ndalloc = 0; @@ -5609,17 +5666,9 @@ MALLOC_OUT: /* Initialize base allocation data structures. */ #ifdef MALLOC_STATS base_mapped = 0; -#endif -#ifdef MALLOC_DSS - /* - * Allocate a base chunk here, since it doesn't actually have to be - * chunk-aligned. Doing this before allocating any other chunks allows - * the use of space that would otherwise be wasted. - */ - if (opt_dss) - base_pages_alloc(0); #endif base_nodes = NULL; + base_reserve_regs = NULL; malloc_mutex_init(&base_mtx); #ifdef MOZ_MEMORY_NARENAS_DEFAULT_ONE @@ -5740,6 +5789,27 @@ MALLOC_OUT: malloc_spin_init(&arenas_lock); + /* + * Configure and initialize the memory reserve. This needs to happen + * late during initialization, since chunks are allocated. + */ + malloc_mutex_init(&reserve_mtx); + reserve_min = 0; + reserve_cur = 0; + reserve_max = chunksize * narenas; + if (RESERVE_RANGE_2POW_DEFAULT + opt_reserve_range_lshift >= 0) { + reserve_max += chunksize << (RESERVE_RANGE_2POW_DEFAULT + + opt_reserve_range_lshift); + } + ql_new(&reserve_regs); + reserve_seq = 0; + extent_tree_szad_new(&reserve_chunks_szad); + extent_tree_ad_new(&reserve_chunks_ad); + if (RESERVE_MIN_2POW_DEFAULT + opt_reserve_min_lshift >= 0) { + reserve_min_set(chunksize << (RESERVE_MIN_2POW_DEFAULT + + opt_reserve_min_lshift)); + } + malloc_initialized = true; #ifndef MOZ_MEMORY_WINDOWS malloc_mutex_unlock(&init_lock); @@ -6071,21 +6141,11 @@ jemalloc_stats(jemalloc_stats_t *stats) * Gather runtime settings. */ stats->opt_abort = opt_abort; - stats->opt_dss = -#ifdef MALLOC_DSS - opt_dss ? true : -#endif - false; stats->opt_junk = #ifdef MALLOC_FILL opt_junk ? true : #endif false; - stats->opt_mmap = -#ifdef MALLOC_DSS - opt_mmap == false ? false : -#endif - true; stats->opt_utrace = #ifdef MALLOC_UTRACE opt_utrace ? true : @@ -6120,6 +6180,12 @@ jemalloc_stats(jemalloc_stats_t *stats) stats->chunksize = chunksize; stats->dirty_max = opt_dirty_max; + malloc_mutex_lock(&reserve_mtx); + stats->reserve_min = reserve_min; + stats->reserve_max = reserve_max; + stats->reserve_cur = reserve_cur; + malloc_mutex_unlock(&reserve_mtx); + /* * Gather current memory usage statistics. */ @@ -6177,6 +6243,447 @@ jemalloc_stats(jemalloc_stats_t *stats) #endif } +void * +xmalloc(size_t size) +{ + void *ret; + + if (malloc_init()) + reserve_fail(size, "xmalloc"); + + if (size == 0) { +#ifdef MALLOC_SYSV + if (opt_sysv == false) +#endif + size = 1; +#ifdef MALLOC_SYSV + else { + _malloc_message(_getprogname(), + ": (malloc) Error in xmalloc(): ", + "invalid size 0", "\n"); + abort(); + } +#endif + } + + ret = imalloc(size); + if (ret == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_crit(size, "xmalloc", seq); + ret = imalloc(size); + } while (ret == NULL); + } + + UTRACE(0, size, ret); + return (ret); +} + +void * +xcalloc(size_t num, size_t size) +{ + void *ret; + size_t num_size; + + num_size = num * size; + if (malloc_init()) + reserve_fail(num_size, "xcalloc"); + + if (num_size == 0) { +#ifdef MALLOC_SYSV + if ((opt_sysv == false) && ((num == 0) || (size == 0))) +#endif + num_size = 1; +#ifdef MALLOC_SYSV + else { + _malloc_message(_getprogname(), + ": (malloc) Error in xcalloc(): ", + "invalid size 0", "\n"); + abort(); + } +#endif + /* + * Try to avoid division here. We know that it isn't possible to + * overflow during multiplication if neither operand uses any of the + * most significant half of the bits in a size_t. + */ + } else if (((num | size) & (SIZE_T_MAX << (sizeof(size_t) << 2))) + && (num_size / size != num)) { + /* size_t overflow. */ + _malloc_message(_getprogname(), + ": (malloc) Error in xcalloc(): ", + "size overflow", "\n"); + abort(); + } + + ret = icalloc(num_size); + if (ret == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_crit(num_size, "xcalloc", seq); + ret = icalloc(num_size); + } while (ret == NULL); + } + + UTRACE(0, num_size, ret); + return (ret); +} + +void * +xrealloc(void *ptr, size_t size) +{ + void *ret; + + if (size == 0) { +#ifdef MALLOC_SYSV + if (opt_sysv == false) +#endif + size = 1; +#ifdef MALLOC_SYSV + else { + if (ptr != NULL) + idalloc(ptr); + _malloc_message(_getprogname(), + ": (malloc) Error in xrealloc(): ", + "invalid size 0", "\n"); + abort(); + } +#endif + } + + if (ptr != NULL) { + assert(malloc_initialized); + + ret = iralloc(ptr, size); + if (ret == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_crit(size, "xrealloc", seq); + ret = iralloc(ptr, size); + } while (ret == NULL); + } + } else { + if (malloc_init()) + reserve_fail(size, "xrealloc"); + + ret = imalloc(size); + if (ret == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_crit(size, "xrealloc", seq); + ret = imalloc(size); + } while (ret == NULL); + } + } + + UTRACE(ptr, size, ret); + return (ret); +} + +void * +xmemalign(size_t alignment, size_t size) +{ + void *ret; + + assert(((alignment - 1) & alignment) == 0 && alignment >= + sizeof(void *)); + + if (malloc_init()) + reserve_fail(size, "xmemalign"); + + ret = ipalloc(alignment, size); + if (ret == NULL) { + uint64_t seq = 0; + + do { + seq = reserve_crit(size, "xmemalign", seq); + ret = ipalloc(alignment, size); + } while (ret == NULL); + } + + UTRACE(0, size, ret); + return (ret); +} + +static void +reserve_shrink(void) +{ + extent_node_t *node; + + assert(reserve_cur > reserve_max); +#ifdef MALLOC_DEBUG + { + extent_node_t *node; + size_t reserve_size; + + reserve_size = 0; + rb_foreach_begin(extent_node_t, link_szad, &reserve_chunks_szad, + node) { + reserve_size += node->size; + } rb_foreach_end(extent_node_t, link_szad, &reserve_chunks_szad, + node) + assert(reserve_size == reserve_cur); + + reserve_size = 0; + rb_foreach_begin(extent_node_t, link_ad, &reserve_chunks_ad, + node) { + reserve_size += node->size; + } rb_foreach_end(extent_node_t, link_ad, &reserve_chunks_ad, + node) + assert(reserve_size == reserve_cur); + } +#endif + + /* Discard chunks until the the reserve is below the size limit. */ + rb_foreach_reverse_begin(extent_node_t, link_ad, &reserve_chunks_ad, + node) { +#ifndef MALLOC_DECOMMIT + if (node->size <= reserve_cur - reserve_max) { +#endif + extent_node_t *tnode = extent_tree_ad_prev( + &reserve_chunks_ad, node); + +#ifdef MALLOC_DECOMMIT + assert(node->size <= reserve_cur - reserve_max); +#endif + + /* Discard the entire [multi-]chunk. */ + extent_tree_szad_remove(&reserve_chunks_szad, node); + extent_tree_ad_remove(&reserve_chunks_ad, node); + reserve_cur -= node->size; + pages_unmap(node->addr, node->size); + base_node_dealloc(node); + if (reserve_cur == reserve_max) + break; + + rb_foreach_reverse_prev(extent_node_t, link_ad, + extent_ad_comp, &reserve_chunks_ad, tnode); +#ifndef MALLOC_DECOMMIT + } else { + /* Discard the end of the multi-chunk. */ + extent_tree_szad_remove(&reserve_chunks_szad, node); + node->size -= reserve_cur - reserve_max; + extent_tree_szad_insert(&reserve_chunks_szad, node); + pages_unmap((void *)((uintptr_t)node->addr + + node->size), reserve_cur - reserve_max); + reserve_cur = reserve_max; + break; + } +#endif + assert(reserve_cur > reserve_max); + } rb_foreach_reverse_end(extent_node_t, link_ad, &reserve_chunks_ad, + node) +} + +/* Send a condition notification. */ +static uint64_t +reserve_notify(reserve_cnd_t cnd, size_t size, uint64_t seq) +{ + reserve_reg_t *reg; + + /* seq is used to keep track of distinct condition-causing events. */ + if (seq == 0) { + /* Allocate new sequence number. */ + reserve_seq++; + seq = reserve_seq; + } + + /* + * Advance to the next callback registration and send a notification, + * unless one has already been sent for this condition-causing event. + */ + reg = ql_first(&reserve_regs); + if (reg == NULL) + return (0); + ql_first(&reserve_regs) = ql_next(&reserve_regs, reg, link); + if (reg->seq == seq) + return (0); + reg->seq = seq; + malloc_mutex_unlock(&reserve_mtx); + reg->cb(reg->ctx, cnd, size); + malloc_mutex_lock(&reserve_mtx); + + return (seq); +} + +/* Allocation failure due to OOM. Try to free some memory via callbacks. */ +static uint64_t +reserve_crit(size_t size, const char *fname, uint64_t seq) +{ + + /* + * Send one condition notification. Iteration is handled by the + * caller of this function. + */ + malloc_mutex_lock(&reserve_mtx); + seq = reserve_notify(RESERVE_CND_CRIT, size, seq); + malloc_mutex_unlock(&reserve_mtx); + + /* If no notification could be sent, then no further recourse exists. */ + if (seq == 0) + reserve_fail(size, fname); + + return (seq); +} + +/* Permanent allocation failure due to OOM. */ +static void +reserve_fail(size_t size, const char *fname) +{ + uint64_t seq = 0; + + /* Send fail notifications. */ + malloc_mutex_lock(&reserve_mtx); + do { + seq = reserve_notify(RESERVE_CND_FAIL, size, seq); + } while (seq != 0); + malloc_mutex_unlock(&reserve_mtx); + + /* Terminate the application. */ + _malloc_message(_getprogname(), + ": (malloc) Error in ", fname, "(): out of memory\n"); + abort(); +} + +bool +reserve_cb_register(reserve_cb_t *cb, void *ctx) +{ + reserve_reg_t *reg = base_reserve_reg_alloc(); + if (reg == NULL) + return (true); + + ql_elm_new(reg, link); + reg->cb = cb; + reg->ctx = ctx; + reg->seq = 0; + + malloc_mutex_lock(&reserve_mtx); + ql_head_insert(&reserve_regs, reg, link); + malloc_mutex_unlock(&reserve_mtx); + + return (false); +} + +bool +reserve_cb_unregister(reserve_cb_t *cb, void *ctx) +{ + reserve_reg_t *reg = NULL; + + malloc_mutex_lock(&reserve_mtx); + ql_foreach(reg, &reserve_regs, link) { + if (reg->cb == cb && reg->ctx == ctx) { + ql_remove(&reserve_regs, reg, link); + break; + } + } + malloc_mutex_unlock(&reserve_mtx); + + if (reg != NULL) + base_reserve_reg_dealloc(reg); + return (false); + return (true); +} + +size_t +reserve_cur_get(void) +{ + size_t ret; + + malloc_mutex_lock(&reserve_mtx); + ret = reserve_cur; + malloc_mutex_unlock(&reserve_mtx); + + return (ret); +} + +size_t +reserve_min_get(void) +{ + size_t ret; + + malloc_mutex_lock(&reserve_mtx); + ret = reserve_min; + malloc_mutex_unlock(&reserve_mtx); + + return (ret); +} + +bool +reserve_min_set(size_t min) +{ + + min = CHUNK_CEILING(min); + + malloc_mutex_lock(&reserve_mtx); + /* Keep |reserve_max - reserve_min| the same. */ + if (min < reserve_min) { + reserve_max -= reserve_min - min; + reserve_min = min; + } else { + /* Protect against wrap-around. */ + if (reserve_max + min - reserve_min < reserve_max) { + reserve_min = SIZE_T_MAX - (reserve_max - reserve_min) + - chunksize + 1; + reserve_max = SIZE_T_MAX - chunksize + 1; + } else { + reserve_max += min - reserve_min; + reserve_min = min; + } + } + + /* Resize the reserve if necessary. */ + if (reserve_cur < reserve_min) { + size_t size = reserve_min - reserve_cur; + + /* Force the reserve to grow by allocating/deallocating. */ + malloc_mutex_unlock(&reserve_mtx); +#ifdef MALLOC_DECOMMIT + { + void **chunks; + size_t i, n; + + n = size >> opt_chunk_2pow; + chunks = imalloc(n * sizeof(void *)); + if (chunks == NULL) + return (true); + for (i = 0; i < n; i++) { + chunks[i] = huge_malloc(chunksize, false); + if (chunks[i] == NULL) { + size_t j; + + for (j = 0; j < i; j++) { + huge_dalloc(chunks[j]); + } + idalloc(chunks); + return (true); + } + } + for (i = 0; i < n; i++) + huge_dalloc(chunks[i]); + idalloc(chunks); + } +#else + { + void *x = huge_malloc(size, false); + if (x == NULL) { + return (true); + } + huge_dalloc(x); + } +#endif + } else if (reserve_cur > reserve_max) { + reserve_shrink(); + malloc_mutex_unlock(&reserve_mtx); + } else + malloc_mutex_unlock(&reserve_mtx); + + return (false); +} + #ifdef MOZ_MEMORY_WINDOWS void* _recalloc(void *ptr, size_t count, size_t size) @@ -6222,7 +6729,6 @@ _msize(const void *ptr) } #endif - /* * End non-standard functions. */ @@ -6251,10 +6757,6 @@ _malloc_prefork(void) malloc_mutex_lock(&base_mtx); malloc_mutex_lock(&huge_mtx); - -#ifdef MALLOC_DSS - malloc_mutex_lock(&dss_mtx); -#endif } void @@ -6264,10 +6766,6 @@ _malloc_postfork(void) /* Release all mutexes, now that fork() has completed. */ -#ifdef MALLOC_DSS - malloc_mutex_unlock(&dss_mtx); -#endif - malloc_mutex_unlock(&huge_mtx); malloc_mutex_unlock(&base_mtx); diff --git a/memory/jemalloc/jemalloc.h b/memory/jemalloc/jemalloc.h index da92f2fbd981..0c5b7c541442 100644 --- a/memory/jemalloc/jemalloc.h +++ b/memory/jemalloc/jemalloc.h @@ -19,9 +19,7 @@ typedef struct { * Run-time configuration settings. */ bool opt_abort; /* abort(3) on error? */ - bool opt_dss; /* Use sbrk(2) to map memory? */ bool opt_junk; /* Fill allocated/free memory with 0xa5/0x5a? */ - bool opt_mmap; /* Use mmap(2) to map memory? */ bool opt_utrace; /* Trace all allocation events? */ bool opt_sysv; /* SysV semantics? */ bool opt_xmalloc; /* abort(3) on OOM? */ @@ -33,6 +31,8 @@ typedef struct { size_t large_max; /* Max sub-chunksize allocation size. */ size_t chunksize; /* Size of each virtual memory mapping. */ size_t dirty_max; /* Max dirty pages per arena. */ + size_t reserve_min; /* reserve_low callback threshold. */ + size_t reserve_max; /* Maximum reserve size before unmapping. */ /* * Current memory usage statistics. @@ -41,6 +41,7 @@ typedef struct { size_t committed; /* Bytes committed (readable/writable). */ size_t allocated; /* Bytes allocted (in use by application). */ size_t dirty; /* Bytes dirty (committed unused pages). */ + size_t reserve_cur; /* Current memory reserve. */ } jemalloc_stats_t; #ifndef MOZ_MEMORY_DARWIN @@ -55,3 +56,122 @@ int posix_memalign(void **memptr, size_t alignment, size_t size); void *memalign(size_t alignment, size_t size); size_t malloc_usable_size(const void *ptr); void jemalloc_stats(jemalloc_stats_t *stats); + +/* The x*() functions never return NULL. */ +void *xmalloc(size_t size); +void *xcalloc(size_t num, size_t size); +void *xrealloc(void *ptr, size_t size); +void *xmemalign(size_t alignment, size_t size); + +/* + * The allocator maintains a memory reserve that is used to satisfy allocation + * requests when no additional memory can be acquired from the operating + * system. Under normal operating conditions, the reserve size is at least + * reserve_min bytes. If the reserve is depleted or insufficient to satisfy an + * allocation request, then condition notifications are sent to one or more of + * the registered callback functions: + * + * RESERVE_CND_LOW: The reserve had to be used to satisfy an allocation + * request, which dropped the reserve size below the + * minimum. The callee should try to free memory in order + * to restore the reserve. + * + * RESERVE_CND_CRIT: The reserve was not large enough to satisfy a pending + * allocation request. Some callee must free adequate + * memory in order to prevent application failure (unless + * the condition spontaneously desists due to concurrent + * deallocation). + * + * RESERVE_CND_FAIL: An allocation request could not be satisfied, despite all + * attempts. The allocator is about to terminate the + * application. + * + * The order in which the callback functions are called is only loosely + * specified: in the absence of interposing callback + * registrations/unregistrations, enabled callbacks will be called in an + * arbitrary round-robin order. + * + * Condition notifications are sent to callbacks only while conditions exist. + * For example, just before the allocator sends a RESERVE_CND_LOW condition + * notification to a callback, the reserve is in fact depleted. However, due + * to allocator concurrency, the reserve may have been restored by the time the + * callback function executes. Furthermore, if the reserve is restored at some + * point during the delivery of condition notifications to callbacks, no + * further deliveries will occur, since the condition no longer exists. + * + * Callback functions can freely call back into the allocator (i.e. the + * allocator releases all internal resources before calling each callback + * function), though allocation is discouraged, since recursive callbacks are + * likely to result, which places extra burden on the application to avoid + * deadlock. + * + * Callback functions must be thread-safe, since it is possible that multiple + * threads will call into the same callback function concurrently. + */ + +/* Memory reserve condition types. */ +typedef enum { + RESERVE_CND_LOW, + RESERVE_CND_CRIT, + RESERVE_CND_FAIL +} reserve_cnd_t; + +/* + * Reserve condition notification callback function type definition. + * + * Inputs: + * ctx: Opaque application data, as passed to reserve_cb_register(). + * cnd: Condition type being delivered. + * size: Allocation request size for the allocation that caused the condition. + */ +typedef void reserve_cb_t(void *ctx, reserve_cnd_t cnd, size_t size); + +/* + * Register a callback function. + * + * Inputs: + * cb: Callback function pointer. + * ctx: Opaque application data, passed to cb(). + * + * Output: + * ret: If true, failure due to OOM; success otherwise. + */ +bool reserve_cb_register(reserve_cb_t *cb, void *ctx); + +/* + * Unregister a callback function. + * + * Inputs: + * cb: Callback function pointer. + * ctx: Opaque application data, same as that passed to reserve_cb_register(). + * + * Output: + * ret: False upon success, true if the {cb,ctx} registration could not be + * found. + */ +bool reserve_cb_unregister(reserve_cb_t *cb, void *ctx); + +/* + * Get the current reserve size. + * + * ret: Current reserve size. + */ +size_t reserve_cur_get(void); + +/* + * Get the minimum acceptable reserve size. If the reserve drops below this + * value, the RESERVE_CND_LOW condition notification is sent to the callbacks. + * + * ret: Minimum acceptable reserve size. + */ +size_t reserve_min_get(void); + +/* + * Set the minimum acceptable reserve size. + * + * min: Reserve threshold. This value may be internally rounded up. + * ret: False if the reserve was successfully resized; true otherwise. Note + * that failure to resize the reserve also results in a RESERVE_CND_LOW + * condition. + */ +bool reserve_min_set(size_t min); From a2b4d665f6541cd045867935b5571e8c5eb44937 Mon Sep 17 00:00:00 2001 From: Johnny Stenback Date: Tue, 1 Jul 2008 15:46:12 -0700 Subject: [PATCH 78/98] Better handling of overflowing integer values. r+sr=roc@ocallahan.org, a=beltzner@mozilla.com --- layout/style/nsCSSValue.h | 8 ++++++++ rdf/base/src/nsInMemoryDataSource.cpp | 17 ++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/layout/style/nsCSSValue.h b/layout/style/nsCSSValue.h index 09fb7bdb25d0..cc53a25b49c4 100644 --- a/layout/style/nsCSSValue.h +++ b/layout/style/nsCSSValue.h @@ -319,10 +319,18 @@ public: } void AddRef() { + if (mRefCnt == PR_UINT16_MAX) { + NS_WARNING("refcount overflow, leaking nsCSSValue::Array"); + return; + } ++mRefCnt; NS_LOG_ADDREF(this, mRefCnt, "nsCSSValue::Array", sizeof(*this)); } void Release() { + if (mRefCnt == PR_UINT16_MAX) { + NS_WARNING("refcount overflow, leaking nsCSSValue::Array"); + return; + } --mRefCnt; NS_LOG_RELEASE(this, mRefCnt, "nsCSSValue::Array"); if (mRefCnt == 0) diff --git a/rdf/base/src/nsInMemoryDataSource.cpp b/rdf/base/src/nsInMemoryDataSource.cpp index 6680eea5c23b..b34d2040e1a9 100644 --- a/rdf/base/src/nsInMemoryDataSource.cpp +++ b/rdf/base/src/nsInMemoryDataSource.cpp @@ -157,11 +157,22 @@ public: ~Assertion(); - void AddRef() { ++mRefCnt; } + void AddRef() { + if (mRefCnt == PR_UINT16_MAX) { + NS_WARNING("refcount overflow, leaking Assertion"); + return; + } + ++mRefCnt; + } void Release(nsFixedSizeAllocator& aAllocator) { + if (mRefCnt == PR_UINT16_MAX) { + NS_WARNING("refcount overflow, leaking Assertion"); + return; + } if (--mRefCnt == 0) - Destroy(aAllocator, this); } + Destroy(aAllocator, this); + } // For nsIRDFPurgeableDataSource inline void Mark() { u.as.mMarked = PR_TRUE; } @@ -194,7 +205,7 @@ public: // also shared between hash/as (see the union above) // but placed after union definition to ensure that // all 32-bit entries are long aligned - PRInt16 mRefCnt; + PRUint16 mRefCnt; PRPackedBool mHashEntry; private: From 39c795c502a34b5769e4a2011687dbbe43c87a13 Mon Sep 17 00:00:00 2001 From: Brian Crowder Date: Tue, 1 Jul 2008 16:44:44 -0700 Subject: [PATCH 79/98] Bug 442333 - remove eval's optional second argument, r=brendan --- js/src/js.msg | 1 + js/src/jsobj.cpp | 14 ++++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/js/src/js.msg b/js/src/js.msg index 68cd5a6f0c0d..3f5332827ed8 100644 --- a/js/src/js.msg +++ b/js/src/js.msg @@ -305,3 +305,4 @@ MSG_DEF(JSMSG_NULL_OR_UNDEFINED, 222, 2, JSEXN_TYPEERR, "{0} is {1}") MSG_DEF(JSMSG_LET_DECL_NOT_IN_BLOCK, 223, 0, JSEXN_SYNTAXERR, "let declaration not directly within block") MSG_DEF(JSMSG_BAD_OBJECT_INIT, 224, 0, JSEXN_SYNTAXERR, "invalid object initializer") MSG_DEF(JSMSG_CANT_SET_ARRAY_ATTRS, 225, 0, JSEXN_INTERNALERR, "can't set attributes on indexed array properties") +MSG_DEF(JSMSG_EVAL_ARITY, 226, 0, JSEXN_TYPEERR, "eval accepts only one parameter") diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 79cdb8a9c0e0..7f0c5533a42e 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -1215,14 +1215,12 @@ obj_eval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) if (caller && !caller->varobj && !js_GetCallObject(cx, caller, NULL)) return JS_FALSE; - /* - * Script.prototype.compile/exec and Object.prototype.eval all take an - * optional trailing argument that overrides the scope object. - */ - if (argc >= 2) { - if (!js_ValueToObject(cx, argv[1], &scopeobj)) - return JS_FALSE; - argv[1] = OBJECT_TO_JSVAL(scopeobj); + /* eval no longer takes an optional trailing argument. */ + if (argc >= 2 && + !JS_ReportErrorFlagsAndNumber(cx, JSREPORT_WARNING | JSREPORT_STRICT, + js_GetErrorMessage, NULL, + JSMSG_EVAL_ARITY)) { + return JS_FALSE; } /* From here on, control must exit through label out with ok set. */ From b697b4515b61ce753adcfffbb755ba488a2d58d5 Mon Sep 17 00:00:00 2001 From: Brendan Eich Date: Tue, 1 Jul 2008 18:59:18 -0700 Subject: [PATCH 80/98] Clean up for-in ops and naming nit (443039, r=igor). --- js/src/jscntxt.h | 13 +++++++++---- js/src/jsemit.cpp | 10 ++-------- js/src/jsgc.cpp | 2 +- js/src/jsinterp.cpp | 34 +++++++--------------------------- js/src/jsiter.h | 5 +++++ js/src/jsobj.cpp | 29 ++++++++++------------------- js/src/jsobj.h | 2 +- js/src/jsopcode.cpp | 7 ++++--- js/src/jsopcode.tbl | 9 +++++---- js/src/jsparse.cpp | 33 +++++++++++++++++++++------------ js/src/jsparse.h | 2 ++ js/src/jsprvtd.h | 1 + js/src/jsxdrapi.h | 2 +- 13 files changed, 69 insertions(+), 80 deletions(-) diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index cac949d9d865..9b55e445d633 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -165,9 +165,14 @@ typedef struct JSPropertyTreeEntry { } JSPropertyTreeEntry; /* - * Forward declaration for opaque JSRuntime.nativeIteratorStates. + * Private type used to enumerate properties of a native JS object. */ -typedef struct JSNativeIteratorState JSNativeIteratorState; +struct JSNativeEnumerator { + jsint next_index; /* index into jsid array */ + JSIdArray *ida; /* all property ids in enumeration */ + JSNativeEnumerator *next; /* double-linked list support */ + JSNativeEnumerator **prevp; +}; typedef struct JSSetSlotRequest JSSetSlotRequest; @@ -380,9 +385,9 @@ struct JSRuntime { /* * A helper list for the GC, so it can mark native iterator states. See - * js_TraceNativeIteratorStates for details. + * js_TraceNativeEnumerators for details. */ - JSNativeIteratorState *nativeIteratorStates; + JSNativeEnumerator *nativeEnumerators; #ifndef JS_THREADSAFE /* diff --git a/js/src/jsemit.cpp b/js/src/jsemit.cpp index e7fa5b46a2a8..329dc7ec9830 100644 --- a/js/src/jsemit.cpp +++ b/js/src/jsemit.cpp @@ -4303,14 +4303,8 @@ js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) * object depending on the loop variant (for-in, for-each-in, or * destructuring for-in). */ -#if JS_HAS_DESTRUCTURING - JS_ASSERT(pn->pn_op == JSOP_FORIN || - pn->pn_op == JSOP_FOREACHKEYVAL || - pn->pn_op == JSOP_FOREACH); -#else - JS_ASSERT(pn->pn_op == JSOP_FORIN || pn->pn_op == JSOP_FOREACH); -#endif - if (js_Emit1(cx, cg, PN_OP(pn)) < 0) + JS_ASSERT(pn->pn_op == JSOP_ITER); + if (js_Emit2(cx, cg, PN_OP(pn), (uint8) pn->pn_iflags) < 0) return JS_FALSE; top = CG_OFFSET(cg); diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 373f24b4a7e9..c706ebb487df 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -2865,7 +2865,7 @@ js_TraceRuntime(JSTracer *trc, JSBool allAtoms) if (rt->gcLocksHash) JS_DHashTableEnumerate(rt->gcLocksHash, gc_lock_traversal, trc); js_TraceAtomState(trc, allAtoms); - js_TraceNativeIteratorStates(trc); + js_TraceNativeEnumerators(trc); js_TraceRuntimeNumberState(trc); iter = NULL; diff --git a/js/src/jsinterp.cpp b/js/src/jsinterp.cpp index 7970d6e261e3..4cba3d9ea7a7 100644 --- a/js/src/jsinterp.cpp +++ b/js/src/jsinterp.cpp @@ -2555,7 +2555,6 @@ js_Interpret(JSContext *cx) uint32 slot; jsval *vp, lval, rval, ltmp, rtmp; jsid id; - JSObject *iterobj; JSProperty *prop; JSScopeProperty *sprop; JSString *str, *str2; @@ -3147,32 +3146,13 @@ js_Interpret(JSContext *cx) OBJ_DROP_PROPERTY(cx, obj2, prop); END_CASE(JSOP_IN) - BEGIN_CASE(JSOP_FOREACH) - flags = JSITER_ENUMERATE | JSITER_FOREACH; - goto value_to_iter; - -#if JS_HAS_DESTRUCTURING - BEGIN_CASE(JSOP_FOREACHKEYVAL) - flags = JSITER_ENUMERATE | JSITER_FOREACH | JSITER_KEYVALUE; - goto value_to_iter; -#endif - - BEGIN_CASE(JSOP_FORIN) - /* - * Set JSITER_ENUMERATE to indicate that for-in loop should use - * the enumeration protocol's iterator for compatibility if an - * explicit iterator is not given via the optional __iterator__ - * method. - */ - flags = JSITER_ENUMERATE; - - value_to_iter: + BEGIN_CASE(JSOP_ITER) + flags = regs.pc[1]; JS_ASSERT(regs.sp > fp->spbase); if (!js_ValueToIterator(cx, flags, ®s.sp[-1])) goto error; JS_ASSERT(!JSVAL_IS_PRIMITIVE(regs.sp[-1])); - JS_ASSERT(JSOP_FORIN_LENGTH == js_CodeSpec[op].length); - END_CASE(JSOP_FORIN) + END_CASE(JSOP_ITER) BEGIN_CASE(JSOP_FORPROP) /* @@ -3216,9 +3196,7 @@ js_Interpret(JSContext *cx) * JSObject that contains the iteration state. */ JS_ASSERT(!JSVAL_IS_PRIMITIVE(regs.sp[i])); - iterobj = JSVAL_TO_OBJECT(regs.sp[i]); - - if (!js_CallIteratorNext(cx, iterobj, &rval)) + if (!js_CallIteratorNext(cx, JSVAL_TO_OBJECT(regs.sp[i]), &rval)) goto error; if (rval == JSVAL_HOLE) { rval = JSVAL_FALSE; @@ -6806,7 +6784,6 @@ js_Interpret(JSContext *cx) # endif # if !JS_HAS_DESTRUCTURING - L_JSOP_FOREACHKEYVAL: L_JSOP_ENUMCONSTELEM: # endif @@ -6841,6 +6818,9 @@ js_Interpret(JSContext *cx) L_JSOP_DEFXMLNS: # endif + L_JSOP_UNUSED186: + L_JSOP_UNUSED213: + #else /* !JS_THREADED_INTERP */ default: #endif diff --git a/js/src/jsiter.h b/js/src/jsiter.h index fa76a22a3118..391ab6a1c46c 100644 --- a/js/src/jsiter.h +++ b/js/src/jsiter.h @@ -48,6 +48,11 @@ JS_BEGIN_EXTERN_C +/* + * NB: these flag bits are encoded into the bytecode stream in the immediate + * operand of JSOP_ITER, so don't change them without advancing jsxdrapi.h's + * JSXDR_BYTECODE_VERSION. + */ #define JSITER_ENUMERATE 0x1 /* for-in compatible hidden default iterator */ #define JSITER_FOREACH 0x2 /* return [key, value] pair rather than key */ #define JSITER_KEYVALUE 0x4 /* destructuring for-in wants [key, value] */ diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 7f0c5533a42e..882c18be1690 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -4152,14 +4152,6 @@ js_SetIdArrayLength(JSContext *cx, JSIdArray *ida, jsint length) return rida; } -/* Private type used to iterate over all properties of a native JS object */ -struct JSNativeIteratorState { - jsint next_index; /* index into jsid array */ - JSIdArray *ida; /* all property ids in enumeration */ - JSNativeIteratorState *next; /* double-linked list support */ - JSNativeIteratorState **prevp; -}; - /* * This function is used to enumerate the properties of native JSObjects * and those host objects that do not define a JSNewEnumerateOp-style iterator @@ -4177,7 +4169,7 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, jsint i, length; JSScope *scope; JSIdArray *ida; - JSNativeIteratorState *state; + JSNativeEnumerator *state; rt = cx->runtime; clasp = OBJ_GET_CLASS(cx, obj); @@ -4242,8 +4234,7 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, } JS_UNLOCK_OBJ(cx, obj); - state = (JSNativeIteratorState *) - JS_malloc(cx, sizeof(JSNativeIteratorState)); + state = (JSNativeEnumerator *)JS_malloc(cx, sizeof(JSNativeEnumerator)); if (!state) { JS_DestroyIdArray(cx, ida); return JS_FALSE; @@ -4252,10 +4243,10 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, state->next_index = 0; JS_LOCK_RUNTIME(rt); - state->next = rt->nativeIteratorStates; + state->next = rt->nativeEnumerators; if (state->next) state->next->prevp = &state->next; - state->prevp = &rt->nativeIteratorStates; + state->prevp = &rt->nativeEnumerators; *state->prevp = state; JS_UNLOCK_RUNTIME(rt); @@ -4265,7 +4256,7 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, break; case JSENUMERATE_NEXT: - state = (JSNativeIteratorState *) JSVAL_TO_PRIVATE(*statep); + state = (JSNativeEnumerator *) JSVAL_TO_PRIVATE(*statep); ida = state->ida; length = ida->length; if (state->next_index != length) { @@ -4275,10 +4266,10 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, /* FALL THROUGH */ case JSENUMERATE_DESTROY: - state = (JSNativeIteratorState *) JSVAL_TO_PRIVATE(*statep); + state = (JSNativeEnumerator *) JSVAL_TO_PRIVATE(*statep); JS_LOCK_RUNTIME(rt); - JS_ASSERT(rt->nativeIteratorStates); + JS_ASSERT(rt->nativeEnumerators); JS_ASSERT(*state->prevp == state); if (state->next) { JS_ASSERT(state->next->prevp == &state->next); @@ -4296,12 +4287,12 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, } void -js_TraceNativeIteratorStates(JSTracer *trc) +js_TraceNativeEnumerators(JSTracer *trc) { - JSNativeIteratorState *state; + JSNativeEnumerator *state; jsid *cursor, *end, id; - state = trc->context->runtime->nativeIteratorStates; + state = trc->context->runtime->nativeEnumerators; if (!state) return; diff --git a/js/src/jsobj.h b/js/src/jsobj.h index 03ff7de70226..6f3749fc512a 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -621,7 +621,7 @@ js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, jsval *statep, jsid *idp); extern void -js_TraceNativeIteratorStates(JSTracer *trc); +js_TraceNativeEnumerators(JSTracer *trc); extern JSBool js_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode, diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp index 2d6f467353b6..f62646842161 100644 --- a/js/src/jsopcode.cpp +++ b/js/src/jsopcode.cpp @@ -62,7 +62,7 @@ #include "jsdbgapi.h" #include "jsemit.h" #include "jsfun.h" -#include "jslock.h" +#include "jsiter.h" #include "jsobj.h" #include "jsopcode.h" #include "jsregexp.h" @@ -4528,8 +4528,9 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop) inXML = JS_FALSE; break; - case JSOP_FOREACH: - foreach = JS_TRUE; + case JSOP_ITER: + foreach = (pc[1] & (JSITER_FOREACH | JSITER_KEYVALUE)) == + JSITER_FOREACH; todo = -2; break; diff --git a/js/src/jsopcode.tbl b/js/src/jsopcode.tbl index f9ea46a03a5d..7ecccc898653 100644 --- a/js/src/jsopcode.tbl +++ b/js/src/jsopcode.tbl @@ -234,9 +234,10 @@ OPDEF(JSOP_ARGDEC, 101,"argdec", NULL, 3, 0, 1, 15, JOF_QARG | OPDEF(JSOP_VARDEC, 102,"vardec", NULL, 3, 0, 1, 15, JOF_QVAR |JOF_NAME|JOF_DEC|JOF_POST) /* - * Initialize for-in iterator. See also JSOP_FOREACH and JSOP_FOREACHKEYVAL. + * Initialize for-in iterator using the JSITER_* flag bits in this op's uint8 + * immediate operand. See also JSOP_ENDITER. */ -OPDEF(JSOP_FORIN, 103,"forin", NULL, 1, 1, 1, 0, JOF_BYTE) +OPDEF(JSOP_ITER, 103,"iter", NULL, 2, 1, 1, 0, JOF_2BYTE) /* ECMA-compliant for/in ops. */ OPDEF(JSOP_FORNAME, 104,"forname", NULL, 3, 0, 1, 19, JOF_ATOM|JOF_NAME|JOF_FOR) @@ -410,7 +411,7 @@ OPDEF(JSOP_XMLCOMMENT, 182,"xmlcomment", NULL, 3, 0, 1, 19, JOF_ATOM) OPDEF(JSOP_XMLPI, 183,"xmlpi", NULL, 3, 1, 1, 19, JOF_ATOM) OPDEF(JSOP_CALLPROP, 184,"callprop", NULL, 3, 1, 2, 18, JOF_ATOM|JOF_PROP|JOF_CALLOP) OPDEF(JSOP_GETFUNNS, 185,"getfunns", NULL, 1, 0, 1, 19, JOF_BYTE) -OPDEF(JSOP_FOREACH, 186,"foreach", NULL, 1, 1, 1, 0, JOF_BYTE) +OPDEF(JSOP_UNUSED186, 186,"unused186", NULL, 1, 0, 0, 0, JOF_BYTE) OPDEF(JSOP_DELDESC, 187,"deldesc", NULL, 1, 2, 1, 17, JOF_BYTE |JOF_ELEM|JOF_DEL) /* @@ -477,7 +478,7 @@ OPDEF(JSOP_GENERATOR, 210,"generator", NULL, 1, 0, 0, 0, JOF_BYTE) OPDEF(JSOP_YIELD, 211,"yield", NULL, 1, 1, 1, 1, JOF_BYTE) OPDEF(JSOP_ARRAYPUSH, 212,"arraypush", NULL, 3, 1, 0, 3, JOF_LOCAL) -OPDEF(JSOP_FOREACHKEYVAL, 213,"foreachkeyval",NULL, 1, 1, 1, 0, JOF_BYTE) +OPDEF(JSOP_UNUSED213, 213,"unused213", NULL, 1, 0, 0, 0, JOF_BYTE) /* * Variant of JSOP_ENUMELEM for destructuring const (const [a, b] = ...). diff --git a/js/src/jsparse.cpp b/js/src/jsparse.cpp index a9de36ecbfbc..bf71aafc2462 100644 --- a/js/src/jsparse.cpp +++ b/js/src/jsparse.cpp @@ -66,6 +66,7 @@ #include "jsemit.h" #include "jsfun.h" #include "jsinterp.h" +#include "jsiter.h" #include "jslock.h" #include "jsnum.h" #include "jsobj.h" @@ -2674,10 +2675,11 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) return NULL; js_PushStatement(tc, &stmtInfo, STMT_FOR_LOOP, -1); - pn->pn_op = JSOP_FORIN; + pn->pn_op = JSOP_ITER; + pn->pn_iflags = 0; if (js_MatchToken(cx, ts, TOK_NAME)) { if (CURRENT_TOKEN(ts).t_atom == cx->runtime->atomState.eachAtom) - pn->pn_op = JSOP_FOREACH; + pn->pn_iflags = JSITER_FOREACH; else js_UngetToken(ts); } @@ -2687,7 +2689,7 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) tt = js_PeekToken(cx, ts); ts->flags &= ~TSF_OPERAND; if (tt == TOK_SEMI) { - if (pn->pn_op == JSOP_FOREACH) + if (pn->pn_iflags & JSITER_FOREACH) goto bad_for_each; /* No initializer -- set first kid of left sub-node to null. */ @@ -2743,6 +2745,7 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) * the TCF_IN_FOR_INIT flag in our JSTreeContext. */ if (pn1 && js_MatchToken(cx, ts, TOK_IN)) { + pn->pn_iflags |= JSITER_ENUMERATE; stmtInfo.type = STMT_FOR_IN_LOOP; /* Check that the left side of the 'in' is valid. */ @@ -2751,7 +2754,8 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) ? (pn1->pn_count > 1 || pn1->pn_op == JSOP_DEFCONST #if JS_HAS_DESTRUCTURING || (JSVERSION_NUMBER(cx) == JSVERSION_1_7 && - pn->pn_op == JSOP_FORIN && + pn->pn_op == JSOP_ITER && + !(pn->pn_iflags & JSITER_FOREACH) && (pn1->pn_head->pn_type == TOK_RC || (pn1->pn_head->pn_type == TOK_RB && pn1->pn_head->pn_count != 2) || @@ -2764,7 +2768,8 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) pn1->pn_type != TOK_DOT && #if JS_HAS_DESTRUCTURING ((JSVERSION_NUMBER(cx) == JSVERSION_1_7 && - pn->pn_op == JSOP_FORIN) + pn->pn_op == JSOP_ITER && + !(pn->pn_iflags & JSITER_FOREACH)) ? (pn1->pn_type != TOK_RB || pn1->pn_count != 2) : (pn1->pn_type != TOK_RB && pn1->pn_type != TOK_RC)) && #endif @@ -2830,8 +2835,9 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) * Destructuring for-in requires [key, value] enumeration * in JS1.7. */ - if (pn->pn_op != JSOP_FOREACH) - pn->pn_op = JSOP_FOREACHKEYVAL; + JS_ASSERT(pn->pn_op == JSOP_ITER); + if (!(pn->pn_iflags & JSITER_FOREACH)) + pn->pn_iflags |= JSITER_FOREACH | JSITER_KEYVALUE; } break; #endif @@ -2845,7 +2851,7 @@ Statement(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc) return NULL; pn->pn_left = pn2; } else { - if (pn->pn_op == JSOP_FOREACH) + if (pn->pn_iflags & JSITER_FOREACH) goto bad_for_each; pn->pn_op = JSOP_NOP; @@ -4185,10 +4191,11 @@ ComprehensionTail(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc, if (!pn2) return NULL; - pn2->pn_op = JSOP_FORIN; + pn2->pn_op = JSOP_ITER; + pn2->pn_iflags = JSITER_ENUMERATE; if (js_MatchToken(cx, ts, TOK_NAME)) { if (CURRENT_TOKEN(ts).t_atom == rt->atomState.eachAtom) - pn2->pn_op = JSOP_FOREACH; + pn2->pn_iflags |= JSITER_FOREACH; else js_UngetToken(ts); } @@ -4211,8 +4218,10 @@ ComprehensionTail(JSContext *cx, JSTokenStream *ts, JSTreeContext *tc, if (JSVERSION_NUMBER(cx) == JSVERSION_1_7) { /* Destructuring requires [key, value] enumeration in JS1.7. */ - if (pn2->pn_op != JSOP_FOREACH) - pn2->pn_op = JSOP_FOREACHKEYVAL; + JS_ASSERT(pn2->pn_op == JSOP_ITER); + JS_ASSERT(pn2->pn_iflags & JSITER_ENUMERATE); + if (!(pn2->pn_iflags & JSITER_FOREACH)) + pn2->pn_iflags |= JSITER_FOREACH | JSITER_KEYVALUE; } break; #endif diff --git a/js/src/jsparse.h b/js/src/jsparse.h index 9b40abefa428..3b50c1a7a75d 100644 --- a/js/src/jsparse.h +++ b/js/src/jsparse.h @@ -302,6 +302,7 @@ struct JSParseNode { JSParseNode *left; JSParseNode *right; jsval val; /* switch case value */ + uintN iflags; /* JSITER_* flags for TOK_FOR node */ } binary; struct { /* one kid if unary */ JSParseNode *kid; @@ -346,6 +347,7 @@ struct JSParseNode { #define pn_left pn_u.binary.left #define pn_right pn_u.binary.right #define pn_val pn_u.binary.val +#define pn_iflags pn_u.binary.iflags #define pn_kid pn_u.unary.kid #define pn_num pn_u.unary.num #define pn_hidden pn_u.unary.hidden diff --git a/js/src/jsprvtd.h b/js/src/jsprvtd.h index b8cbfa9d381d..7859f084ec8a 100644 --- a/js/src/jsprvtd.h +++ b/js/src/jsprvtd.h @@ -92,6 +92,7 @@ typedef struct JSArgumentFormatMap JSArgumentFormatMap; typedef struct JSCodeGenerator JSCodeGenerator; typedef struct JSGCThing JSGCThing; typedef struct JSGenerator JSGenerator; +typedef struct JSNativeEnumerator JSNativeEnumerator; typedef struct JSParseContext JSParseContext; typedef struct JSParsedObjectBox JSParsedObjectBox; typedef struct JSParseNode JSParseNode; diff --git a/js/src/jsxdrapi.h b/js/src/jsxdrapi.h index 68a45432af94..93e7bb81ca35 100644 --- a/js/src/jsxdrapi.h +++ b/js/src/jsxdrapi.h @@ -202,7 +202,7 @@ JS_XDRFindClassById(JSXDRState *xdr, uint32 id); * before deserialization of bytecode. If the saved version does not match * the current version, abort deserialization and invalidate the file. */ -#define JSXDR_BYTECODE_VERSION (0xb973c0de - 26) +#define JSXDR_BYTECODE_VERSION (0xb973c0de - 27) /* * Library-private functions. From e1f38a05fec1c63c1bccd047a94ebf298df8606c Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 2 Jul 2008 14:57:43 +1200 Subject: [PATCH 81/98] Adding comments. --- content/base/public/nsReferencedElement.h | 36 ++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/content/base/public/nsReferencedElement.h b/content/base/public/nsReferencedElement.h index c5bb5670e8fd..d613d560abfb 100644 --- a/content/base/public/nsReferencedElement.h +++ b/content/base/public/nsReferencedElement.h @@ -51,10 +51,19 @@ class nsCycleCollectionCallback; /** * Class to track what content is referenced by a given ID. * + * To use it, call Reset() to set it up to watch a given URI. Call get() + * anytime to determine the referenced element (which may be null if + * the element isn't found). When the element changes, ContentChanged + * will be called, so subclass this class if you want to receive that + * notification. ContentChanged runs at safe-for-script time, i.e. outside + * of the content update. Call Unlink() if you want to stop watching + * for changes (get() will then return null). + * * By default this is a single-shot tracker --- i.e., when ContentChanged - * fires, we will automatically stop tracking. Override IsPersistent - * to return PR_TRUE if you want to keep tracking after the content for - * an ID has changed. + * fires, we will automatically stop tracking. get() will continue to return + * the changed-to element. + * Override IsPersistent to return PR_TRUE if you want to keep tracking after + * the first change. */ class nsReferencedElement { public: @@ -65,9 +74,27 @@ public: mPendingNotification->Clear(); } } + + /** + * Find which element, if any, is referenced. + */ nsIContent* get() { return mContent; } + /** + * Set up the reference. This can be called multiple times to + * change which reference is being tracked, but these changes + * do not trigger ContentChanged. + * @param aFrom the source element for context + * @param aURI the URI containing a hash-reference to the element + * @param aWatch if false, then we do not set up the notifications to track + * changes, so ContentChanged won't fire and get() will always return the same + * value, the current element for the ID. + */ void Reset(nsIContent* aFrom, nsIURI* aURI, PRBool aWatch = PR_TRUE); + /** + * Clears the reference. ContentChanged is not triggered. get() will return + * null. + */ void Unlink(); void Traverse(nsCycleCollectionTraversalCallback* aCB); @@ -75,7 +102,8 @@ public: protected: /** * Override this to be notified of content changes. Don't forget - * to call this method to change mContent. + * to call this superclass method to change mContent. This is called + * at script-runnable time. */ virtual void ContentChanged(nsIContent* aFrom, nsIContent* aTo) { mContent = aTo; From 2130f5e95ecb0c7a1ebc3687308c344f69e79375 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Tue, 1 Jul 2008 20:24:36 -0700 Subject: [PATCH 82/98] Remove eStyleUnit_Chars and the special cases for it throughout layout, and make ch units go through the normal eStyleUnit_Coord cases. (Bug 363706) r+sr=dbaron --- layout/base/nsLayoutUtils.cpp | 34 -------------------- layout/base/nsLayoutUtils.h | 24 +++++++------- layout/generic/nsAbsoluteContainingBlock.cpp | 12 +++---- layout/generic/nsFrame.cpp | 5 --- layout/style/nsComputedDOMStyle.cpp | 34 -------------------- layout/style/nsRuleNode.cpp | 15 ++------- layout/style/nsStyleCoord.cpp | 3 -- layout/style/nsStyleCoord.h | 5 +-- layout/style/nsStyleStruct.cpp | 4 --- layout/style/nsStyleStruct.h | 2 +- layout/tables/BasicTableLayoutStrategy.cpp | 8 ++--- layout/tables/FixedTableLayoutStrategy.cpp | 8 ++--- layout/xul/base/src/nsBox.cpp | 3 -- 13 files changed, 25 insertions(+), 132 deletions(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index 70b06930e05c..d5485b5319ea 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -1493,25 +1493,6 @@ static nscoord AddPercents(nsLayoutUtils::IntrinsicWidthType aType, return result; } -/* static */ PRBool -nsLayoutUtils::GetAbsoluteCoord(const nsStyleCoord& aStyle, - nsIRenderingContext* aRenderingContext, - nsStyleContext* aStyleContext, - nscoord& aResult) -{ - nsStyleUnit unit = aStyle.GetUnit(); - if (eStyleUnit_Coord == unit) { - aResult = aStyle.GetCoordValue(); - return PR_TRUE; - } - if (eStyleUnit_Chars == unit) { - aResult = nsLayoutUtils::CharsToCoord(aStyle, aRenderingContext, - aStyleContext); - return PR_TRUE; - } - return PR_FALSE; -} - static PRBool GetPercentHeight(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, @@ -2651,21 +2632,6 @@ nsLayoutUtils::SetFontFromStyle(nsIRenderingContext* aRC, nsStyleContext* aSC) aRC->SetFont(font->mFont, visibility->mLangGroup); } -nscoord -nsLayoutUtils::CharsToCoord(const nsStyleCoord& aStyle, - nsIRenderingContext* aRenderingContext, - nsStyleContext* aStyleContext) -{ - NS_ASSERTION(aStyle.GetUnit() == eStyleUnit_Chars, - "Shouldn't have called this"); - - SetFontFromStyle(aRenderingContext, aStyleContext); - nscoord fontWidth; - aRenderingContext->SetTextRunRTL(PR_FALSE); - aRenderingContext->GetWidth('M', fontWidth); - return aStyle.GetIntValue() * fontWidth; -} - static PRBool NonZeroStyleCoord(const nsStyleCoord& aCoord) { switch (aCoord.GetUnit()) { diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 38f1cdf2a846..2c7d71540ed7 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -589,7 +589,7 @@ public: * @param aRenderingContext the rendering context to use for font measurement * @param aFrame the frame whose style context should be used for font information * @param aResult the nscoord value of the style coord - * @return TRUE if the unit is eStyleUnit_Coord or eStyleUnit_Chars + * @return TRUE if the unit is eStyleUnit_Coord */ static PRBool GetAbsoluteCoord(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, @@ -606,7 +606,16 @@ public: static PRBool GetAbsoluteCoord(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, nsStyleContext* aStyleContext, - nscoord& aResult); + nscoord& aResult) + { + nsStyleUnit unit = aStyle.GetUnit(); + if (eStyleUnit_Coord == unit) { + aResult = aStyle.GetCoordValue(); + return PR_TRUE; + } + return PR_FALSE; + } + /** * Get the contribution of aFrame to its containing block's intrinsic * width. This considers the child's intrinsic width, its 'width', @@ -761,17 +770,6 @@ public: */ static void SetFontFromStyle(nsIRenderingContext* aRC, nsStyleContext* aSC); - /** - * Convert an eStyleUnit_Chars nsStyleCoord to an nscoord. - * - * @param aStyle the style coord - * @param aRenderingContext the rendering context to use for font measurement - * @param aStyleContext the style context to use for font infomation - */ - static nscoord CharsToCoord(const nsStyleCoord& aStyle, - nsIRenderingContext* aRenderingContext, - nsStyleContext* aStyleContext); - /** * Determine if any style coordinate is nonzero * @param aCoord the style sides diff --git a/layout/generic/nsAbsoluteContainingBlock.cpp b/layout/generic/nsAbsoluteContainingBlock.cpp index d0db643577cf..03128314d9cb 100644 --- a/layout/generic/nsAbsoluteContainingBlock.cpp +++ b/layout/generic/nsAbsoluteContainingBlock.cpp @@ -210,26 +210,24 @@ nsAbsoluteContainingBlock::Reflow(nsContainerFrame* aDelegatingFrame, } static inline PRBool IsFixedPaddingSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; + return aUnit == eStyleUnit_Coord; } static inline PRBool IsFixedMarginSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; + return aUnit == eStyleUnit_Coord; } static inline PRBool IsFixedMaxSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_None || aUnit == eStyleUnit_Coord || - aUnit == eStyleUnit_Chars; + return aUnit == eStyleUnit_None || aUnit == eStyleUnit_Coord; } static inline PRBool IsFixedOffset(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; + return aUnit == eStyleUnit_Coord; } static inline PRBool IsFixedHeight(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; + return aUnit == eStyleUnit_Coord; } static inline PRBool IsFixedWidth(const nsStyleCoord& aCoord) { return aCoord.GetUnit() == eStyleUnit_Coord || - aCoord.GetUnit() == eStyleUnit_Chars || (aCoord.GetUnit() == eStyleUnit_Enumerated && (aCoord.GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || aCoord.GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT)); diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 00eb0739f72b..9159306d335a 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -2963,11 +2963,6 @@ AddCoord(const nsStyleCoord& aStyle, case eStyleUnit_Percent: *aPercent += aStyle.GetPercentValue(); break; - case eStyleUnit_Chars: { - *aCoord += nsLayoutUtils::CharsToCoord(aStyle, aRenderingContext, - aFrame->GetStyleContext()); - break; - } default: break; } diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index 8fb5c142777e..def6537e56e2 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -2771,7 +2771,6 @@ nsComputedDOMStyle::GetRelativeOffset(PRUint8 aSide, nsIDOMCSSValue** aValue) NS_ASSERTION(coord.GetUnit() == eStyleUnit_Coord || coord.GetUnit() == eStyleUnit_Percent || - coord.GetUnit() == eStyleUnit_Chars || coord.GetUnit() == eStyleUnit_Auto, "Unexpected unit"); @@ -3058,24 +3057,6 @@ nsComputedDOMStyle::SetValueToCoord(nsROCSSPrimitiveValue* aValue, aTable)); break; - case eStyleUnit_Chars: { - // Get a rendering context - nsCOMPtr cx; - nsIFrame* frame = mPresShell->FrameManager()->GetRootFrame(); - if (frame) { - mPresShell->CreateRenderingContext(frame, getter_AddRefs(cx)); - } - if (cx) { - nscoord val = - nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder); - aValue->SetAppUnits(PR_MAX(aMinAppUnits, PR_MIN(val, aMaxAppUnits))); - } else { - // Oh, well. Give up. - aValue->SetAppUnits(0); - } - break; - } - case eStyleUnit_None: aValue->SetIdent(nsGkAtoms::none); break; @@ -3095,21 +3076,6 @@ nsComputedDOMStyle::StyleCoordToNSCoord(const nsStyleCoord& aCoord, switch (aCoord.GetUnit()) { case eStyleUnit_Coord: return aCoord.GetCoordValue(); - case eStyleUnit_Chars: - { - // Get a rendering context - nsCOMPtr cx; - nsIFrame* frame = mPresShell->FrameManager()->GetRootFrame(); - if (frame) { - mPresShell->CreateRenderingContext(frame, getter_AddRefs(cx)); - } - if (!cx) { - // Return the default value, I guess - break; - } - - return nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder); - } case eStyleUnit_Percent: { nscoord percentageBase; diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 0a5c3ecd09d9..023e9d48ba87 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -320,10 +320,6 @@ static PRBool SetCoord(const nsCSSValue& aValue, nsStyleCoord& aCoord, if (aValue.GetUnit() == eCSSUnit_Null) { result = PR_FALSE; } - else if (((aMask & SETCOORD_LENGTH) != 0) && - (aValue.GetUnit() == eCSSUnit_Char)) { - aCoord.SetIntValue(NSToIntFloor(aValue.GetFloatValue()), eStyleUnit_Chars); - } else if (((aMask & SETCOORD_LENGTH) != 0) && aValue.IsLengthUnit()) { aCoord.SetCoordValue(CalcLength(aValue, aStyleContext, aPresContext, aInherited)); @@ -3733,15 +3729,8 @@ nsRuleNode::ComputeBorderData(void* aStartStruct, // OK to pass bad aParentCoord since we're not passing SETCOORD_INHERIT else if (SetCoord(value, coord, nsStyleCoord(), SETCOORD_LENGTH, aContext, mPresContext, inherited)) { - if (coord.GetUnit() == eStyleUnit_Coord) { - border->SetBorderWidth(side, coord.GetCoordValue()); - } -#ifdef DEBUG - else { - NS_ASSERTION(coord.GetUnit() == eStyleUnit_Chars, "unexpected unit"); - NS_WARNING("Border set in chars; we don't handle that"); - } -#endif + NS_ASSERTION(coord.GetUnit() == eStyleUnit_Coord, "unexpected unit"); + border->SetBorderWidth(side, coord.GetCoordValue()); } else if (eCSSUnit_Inherit == value.GetUnit()) { inherited = PR_TRUE; diff --git a/layout/style/nsStyleCoord.cpp b/layout/style/nsStyleCoord.cpp index 34c66e91b0ae..b4f9d6deb109 100644 --- a/layout/style/nsStyleCoord.cpp +++ b/layout/style/nsStyleCoord.cpp @@ -129,10 +129,8 @@ void nsStyleCoord::SetCoordValue(nscoord aValue) void nsStyleCoord::SetIntValue(PRInt32 aValue, nsStyleUnit aUnit) { NS_ASSERTION((aUnit == eStyleUnit_Enumerated) || - (aUnit == eStyleUnit_Chars) || (aUnit == eStyleUnit_Integer), "not an int value"); if ((aUnit == eStyleUnit_Enumerated) || - (aUnit == eStyleUnit_Chars) || (aUnit == eStyleUnit_Integer)) { mUnit = aUnit; mValue.mInt = aValue; @@ -196,7 +194,6 @@ void nsStyleCoord::AppendToString(nsString& aBuffer) const case eStyleUnit_None: aBuffer.AppendLiteral("None"); break; case eStyleUnit_Enumerated: aBuffer.AppendLiteral("enum"); break; case eStyleUnit_Integer: aBuffer.AppendLiteral("int"); break; - case eStyleUnit_Chars: aBuffer.AppendLiteral("chars"); break; } aBuffer.Append(PRUnichar(' ')); } diff --git a/layout/style/nsStyleCoord.h b/layout/style/nsStyleCoord.h index 56e3fbce1868..9931937f9e27 100644 --- a/layout/style/nsStyleCoord.h +++ b/layout/style/nsStyleCoord.h @@ -55,8 +55,7 @@ enum nsStyleUnit { eStyleUnit_Factor = 11, // (float) a multiplier eStyleUnit_Coord = 20, // (nscoord) value is twips eStyleUnit_Integer = 30, // (int) value is simple integer - eStyleUnit_Enumerated = 32, // (int) value has enumerated meaning - eStyleUnit_Chars = 33 // (int) value is number of characters + eStyleUnit_Enumerated = 32 // (int) value has enumerated meaning }; typedef union { @@ -197,10 +196,8 @@ inline PRInt32 nsStyleCoord::GetCoordValue(void) const inline PRInt32 nsStyleCoord::GetIntValue(void) const { NS_ASSERTION((mUnit == eStyleUnit_Enumerated) || - (mUnit == eStyleUnit_Chars) || (mUnit == eStyleUnit_Integer), "not an int value"); if ((mUnit == eStyleUnit_Enumerated) || - (mUnit == eStyleUnit_Chars) || (mUnit == eStyleUnit_Integer)) { return mValue.mInt; } diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index f234fc8051d3..b9c6becc38d2 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -231,10 +231,6 @@ static nscoord CalcCoord(const nsStyleCoord& aCoord, } } break; - case eStyleUnit_Chars: - // XXX we need a frame and a rendering context to calculate this, bug 281972, bug 282126. - NS_NOTYETIMPLEMENTED("CalcCoord: eStyleUnit_Chars"); - return 0; default: NS_ERROR("bad unit type"); break; diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index be08ccf5376b..174627835b68 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -526,7 +526,7 @@ struct nsStyleOutline { aOffset = NS_ROUND_OFFSET_TO_PIXELS(offset, mTwipsPerPixel); return PR_TRUE; } else { - NS_NOTYETIMPLEMENTED("GetOutlineOffset: eStyleUnit_Chars"); + NS_ERROR("GetOutlineOffset: bad unit type"); aOffset = 0; return PR_FALSE; } diff --git a/layout/tables/BasicTableLayoutStrategy.cpp b/layout/tables/BasicTableLayoutStrategy.cpp index fdbd99ddc061..679f28a1829a 100644 --- a/layout/tables/BasicTableLayoutStrategy.cpp +++ b/layout/tables/BasicTableLayoutStrategy.cpp @@ -121,7 +121,7 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, // XXXldb Should we consider -moz-box-sizing? nsStyleUnit unit = aStylePos->mWidth.GetUnit(); - if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars) { + if (unit == eStyleUnit_Coord) { hasSpecifiedWidth = PR_TRUE; nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, aStylePos->mWidth); @@ -171,8 +171,7 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, unit = maxWidth.GetUnit(); // XXX To really implement 'max-width' well, we'd need to store // it separately on the columns. - if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars || - unit == eStyleUnit_Enumerated) { + if (unit == eStyleUnit_Coord || unit == eStyleUnit_Enumerated) { nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, maxWidth); @@ -197,8 +196,7 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, eStyleUnit_Enumerated); } unit = minWidth.GetUnit(); - if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars || - unit == eStyleUnit_Enumerated) { + if (unit == eStyleUnit_Coord || unit == eStyleUnit_Enumerated) { nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, minWidth); diff --git a/layout/tables/FixedTableLayoutStrategy.cpp b/layout/tables/FixedTableLayoutStrategy.cpp index 236c9d6e1b41..53e8338bd189 100644 --- a/layout/tables/FixedTableLayoutStrategy.cpp +++ b/layout/tables/FixedTableLayoutStrategy.cpp @@ -98,8 +98,7 @@ FixedTableLayoutStrategy::GetMinWidth(nsIRenderingContext* aRenderingContext) } const nsStyleCoord *styleWidth = &colFrame->GetStylePosition()->mWidth; - if (styleWidth->GetUnit() == eStyleUnit_Coord || - styleWidth->GetUnit() == eStyleUnit_Chars) { + if (styleWidth->GetUnit() == eStyleUnit_Coord) { result += nsLayoutUtils::ComputeWidthValue(aRenderingContext, colFrame, 0, 0, 0, *styleWidth); } else if (styleWidth->GetUnit() == eStyleUnit_Percent) { @@ -118,7 +117,6 @@ FixedTableLayoutStrategy::GetMinWidth(nsIRenderingContext* aRenderingContext) if (cellFrame) { styleWidth = &cellFrame->GetStylePosition()->mWidth; if (styleWidth->GetUnit() == eStyleUnit_Coord || - styleWidth->GetUnit() == eStyleUnit_Chars || (styleWidth->GetUnit() == eStyleUnit_Enumerated && (styleWidth->GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || styleWidth->GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT))) { @@ -216,8 +214,7 @@ FixedTableLayoutStrategy::ComputeColumnWidths(const nsHTMLReflowState& aReflowSt const nsStyleCoord *styleWidth = &colFrame->GetStylePosition()->mWidth; nscoord colWidth; - if (styleWidth->GetUnit() == eStyleUnit_Coord || - styleWidth->GetUnit() == eStyleUnit_Chars) { + if (styleWidth->GetUnit() == eStyleUnit_Coord) { colWidth = nsLayoutUtils::ComputeWidthValue( aReflowState.rendContext, colFrame, 0, 0, 0, *styleWidth); @@ -240,7 +237,6 @@ FixedTableLayoutStrategy::ComputeColumnWidths(const nsHTMLReflowState& aReflowSt if (cellFrame) { styleWidth = &cellFrame->GetStylePosition()->mWidth; if (styleWidth->GetUnit() == eStyleUnit_Coord || - styleWidth->GetUnit() == eStyleUnit_Chars || (styleWidth->GetUnit() == eStyleUnit_Enumerated && (styleWidth->GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || styleWidth->GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT))) { diff --git a/layout/xul/base/src/nsBox.cpp b/layout/xul/base/src/nsBox.cpp index d44b71ae1794..f0495fb906cd 100644 --- a/layout/xul/base/src/nsBox.cpp +++ b/layout/xul/base/src/nsBox.cpp @@ -683,7 +683,6 @@ nsIBox::AddCSSPrefSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = position->mHeight.GetCoordValue(); heightSet = PR_TRUE; } - // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); // ignore 'height' and 'width' attributes if the actual element is not XUL @@ -782,7 +781,6 @@ nsIBox::AddCSSMinSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = 0; heightSet = PR_TRUE; } - // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); if (content) { @@ -841,7 +839,6 @@ nsIBox::AddCSSMaxSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = max; heightSet = PR_TRUE; } - // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); if (content) { From 0cb6b35ccee29c3b691d72f82eab7aecfc321fc2 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Tue, 1 Jul 2008 20:24:36 -0700 Subject: [PATCH 83/98] Add .zeroOrAveCharWidth field to gfxFont::Metrics. Initialize it in all font backends. Use it when computing CSS 'ch' units, and make eStyleUnit_Chars and nsLayoutUtils::CharsToCoord unused. (Bug 363706) r=roc sr=dbaron --- gfx/thebes/public/gfxFont.h | 3 +++ gfx/thebes/src/gfxAtsuiFonts.cpp | 4 ++++ gfx/thebes/src/gfxOS2Fonts.cpp | 10 ++++++++++ gfx/thebes/src/gfxPangoFonts.cpp | 6 ++++++ gfx/thebes/src/gfxWindowsFonts.cpp | 9 +++++++++ layout/reftests/bugs/371043-1-ref.html | 2 +- layout/reftests/bugs/reftest.list | 2 +- layout/style/nsRuleNode.cpp | 18 +++++++++++++++--- 8 files changed, 49 insertions(+), 5 deletions(-) diff --git a/gfx/thebes/public/gfxFont.h b/gfx/thebes/public/gfxFont.h index 86344d7e5951..e146718f1ae2 100644 --- a/gfx/thebes/public/gfxFont.h +++ b/gfx/thebes/public/gfxFont.h @@ -415,6 +415,9 @@ public: gfxFloat aveCharWidth; gfxFloat spaceWidth; + gfxFloat zeroOrAveCharWidth; // width of '0', or if there is + // no '0' glyph in this font, + // equal to .aveCharWidth }; virtual const gfxFont::Metrics& GetMetrics() = 0; diff --git a/gfx/thebes/src/gfxAtsuiFonts.cpp b/gfx/thebes/src/gfxAtsuiFonts.cpp index d49252cf4a53..13272e556179 100644 --- a/gfx/thebes/src/gfxAtsuiFonts.cpp +++ b/gfx/thebes/src/gfxAtsuiFonts.cpp @@ -282,6 +282,10 @@ gfxAtsuiFont::InitMetrics(ATSUFontID aFontID, ATSFontRef aFontRef) mMetrics.spaceWidth = GetCharWidth(' ', &glyphID); mSpaceGlyph = glyphID; + mMetrics.zeroOrAveCharWidth = GetCharWidth('0', &glyphID); + if (glyphID == 0) // no zero in this font + mMetrics.zeroOrAveCharWidth = mMetrics.aveCharWidth; + SanitizeMetrics(&mMetrics, mFontEntry->FamilyEntry()->IsBadUnderlineFontFamily()); #if 0 diff --git a/gfx/thebes/src/gfxOS2Fonts.cpp b/gfx/thebes/src/gfxOS2Fonts.cpp index 11a5ae9e48ec..cc7fc67a4bde 100644 --- a/gfx/thebes/src/gfxOS2Fonts.cpp +++ b/gfx/thebes/src/gfxOS2Fonts.cpp @@ -155,6 +155,16 @@ const gfxFont::Metrics& gfxOS2Font::GetMetrics() mMetrics->aveCharWidth = mMetrics->emHeight * 0.5; } + // properties of '0', for 'ch' units + gid = FT_Get_Char_Index(face, '0'); + if (gid) { + FT_Load_Glyph(face, gid, FT_LOAD_NO_SCALE); + mMetrics->zeroOrAveCharWidth = face->glyph->metrics.width * xScale; + } else { + // this font doesn't have a '0' + mMetrics->zeroOrAveCharWidth = mMetrics->aveCharWidth; + } + // compute an adjusted size if we need to if (mAdjustedSize == 0 && GetStyle()->sizeAdjust != 0) { gfxFloat aspect = mMetrics->xHeight / GetStyle()->size; diff --git a/gfx/thebes/src/gfxPangoFonts.cpp b/gfx/thebes/src/gfxPangoFonts.cpp index ad62ad43993e..a68f158d0330 100644 --- a/gfx/thebes/src/gfxPangoFonts.cpp +++ b/gfx/thebes/src/gfxPangoFonts.cpp @@ -963,10 +963,16 @@ gfxPangoFont::GetMetrics() mMetrics.emDescent = mMetrics.emHeight - mMetrics.emAscent; gfxSize isz, lsz; + PRUint32 zeroGlyph; GetCharSize(' ', isz, lsz, &mSpaceGlyph); mMetrics.spaceWidth = lsz.width; GetCharSize('x', isz, lsz); mMetrics.xHeight = isz.height; + GetCharSize('0', isz, lsz, &zeroGlyph); + if (zeroGlyph) + mMetrics.zeroOrAveCharWidth = lsz.width; + else + mMetrics.zeroOrAveCharWidth = mMetrics.aveCharWidth; FT_Face face = NULL; if (pfm && PANGO_IS_FC_FONT(font)) diff --git a/gfx/thebes/src/gfxWindowsFonts.cpp b/gfx/thebes/src/gfxWindowsFonts.cpp index b39aa6a425a6..3dfc8a9c30a0 100644 --- a/gfx/thebes/src/gfxWindowsFonts.cpp +++ b/gfx/thebes/src/gfxWindowsFonts.cpp @@ -631,6 +631,15 @@ gfxWindowsFont::ComputeMetrics() GetTextExtentPoint32(dc, " ", 1, &size); mMetrics->spaceWidth = ROUND(size.cx); + // Cache the width of digit zero. + // XXX MSDN (http://msdn.microsoft.com/en-us/library/ms534223.aspx) + // does not say what the failure modes for GetTextExtentPoint32 are - + // is it safe to assume it will fail iff the font has no '0'? + if (GetTextExtentPoint32(dc, "0", 1, &size)) + mMetrics->zeroOrAveCharWidth = ROUND(size.cx); + else + mMetrics->zeroOrAveCharWidth = mMetrics->aveCharWidth; + mSpaceGlyph = 0; if (metrics.tmPitchAndFamily & TMPF_TRUETYPE) { WORD glyph; diff --git a/layout/reftests/bugs/371043-1-ref.html b/layout/reftests/bugs/371043-1-ref.html index 022d34aa183b..9f3a3447d872 100644 --- a/layout/reftests/bugs/371043-1-ref.html +++ b/layout/reftests/bugs/371043-1-ref.html @@ -3,7 +3,7 @@
          MM + height: 30px; padding: 0 2px">00
          diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index 784de0303046..f227f882866d 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -393,7 +393,7 @@ skip-if(MOZ_WIDGET_TOOLKIT=="windows") == 347496-1.xhtml 347496-1-ref.xhtml # Bu == 363370-1.html 363370-1-ref.html == 363402-1.html 363402-1-ref.html == 363637-1.html 363637-1-ref.html -fails == 363706-1.html 363706-1-ref.html +== 363706-1.html 363706-1-ref.html != 363706-1.html about:blank == 363858-1.html 363858-1-ref.html == 363858-2.html 363858-2-ref.html diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 82d0eadd445e..0a5c3ecd09d9 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -53,7 +53,8 @@ #include "nsIDeviceContext.h" #include "nsILookAndFeel.h" #include "nsIPresShell.h" -#include "nsIFontMetrics.h" +#include "nsIThebesFontMetrics.h" +#include "gfxFont.h" #include "nsStyleUtil.h" #include "nsCSSPseudoElements.h" #include "nsThemeConstants.h" @@ -231,8 +232,7 @@ static nscoord CalcLengthWith(const nsCSSValue& aValue, aFontSize = aStyleFont->mFont.size; } switch (unit) { - case eCSSUnit_EM: - case eCSSUnit_Char: { + case eCSSUnit_EM: { return NSToCoordRound(aValue.GetFloatValue() * float(aFontSize)); // XXX scale against font metrics height instead? } @@ -252,6 +252,18 @@ static nscoord CalcLengthWith(const nsCSSValue& aValue, nscoord capHeight = ((aFontSize / 3) * 2); // XXX HACK! return NSToCoordRound(aValue.GetFloatValue() * float(capHeight)); } + case eCSSUnit_Char: { + nsFont font = aStyleFont->mFont; + font.size = aFontSize; + nsCOMPtr fm = aPresContext->GetMetricsFor(font); + nsCOMPtr tfm(do_QueryInterface(fm)); + gfxFloat zeroWidth = (tfm->GetThebesFontGroup()->GetFontAt(0) + ->GetMetrics().zeroOrAveCharWidth); + + return NSToCoordRound(aValue.GetFloatValue() * + NS_ceil(aPresContext->AppUnitsPerDevPixel() * + zeroWidth)); + } default: NS_NOTREACHED("unexpected unit"); break; From 1a44a5f31a953d9d78814544977d39d11cf54048 Mon Sep 17 00:00:00 2001 From: John Daggett Date: Wed, 2 Jul 2008 13:19:37 +0900 Subject: [PATCH 84/98] Bug 423405. gfxPlatformMac.h causes compile to fail GCC4.2 on Mac OS X. r=jdaggett, sr=vlad --- gfx/thebes/public/gfxPlatformMac.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gfx/thebes/public/gfxPlatformMac.h b/gfx/thebes/public/gfxPlatformMac.h index 6fd61dd7af9e..dd826fa3cb15 100644 --- a/gfx/thebes/public/gfxPlatformMac.h +++ b/gfx/thebes/public/gfxPlatformMac.h @@ -56,8 +56,8 @@ public: already_AddRefed CreateOffscreenSurface(const gfxIntSize& size, gfxASurface::gfxImageFormat imageFormat); - already_AddRefed gfxPlatformMac::OptimizeImage(gfxImageSurface *aSurface, - gfxASurface::gfxImageFormat format); + already_AddRefed OptimizeImage(gfxImageSurface *aSurface, + gfxASurface::gfxImageFormat format); nsresult ResolveFontName(const nsAString& aFontName, FontResolverCallback aCallback, @@ -84,8 +84,8 @@ public: PRUint32 GetAntiAliasingThreshold() { return mFontAntiAliasingThreshold; } private: - void gfxPlatformMac::AppendCJKPrefLangs(eFontPrefLang aPrefLangs[], PRUint32 &aLen, - eFontPrefLang aCharLang, eFontPrefLang aPageLang); + void AppendCJKPrefLangs(eFontPrefLang aPrefLangs[], PRUint32 &aLen, + eFontPrefLang aCharLang, eFontPrefLang aPageLang); virtual cmsHPROFILE GetPlatformCMSOutputProfile(); From 89028e4830229df0a92949bf62f5816063693d17 Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Tue, 1 Jul 2008 22:00:02 -0700 Subject: [PATCH 85/98] Back out 0b57ada5d4b2 due to mochitest failures on at least Windows. (Bug 363706) --- layout/base/nsLayoutUtils.cpp | 34 ++++++++++++++++++++ layout/base/nsLayoutUtils.h | 24 +++++++------- layout/generic/nsAbsoluteContainingBlock.cpp | 12 ++++--- layout/generic/nsFrame.cpp | 5 +++ layout/style/nsComputedDOMStyle.cpp | 34 ++++++++++++++++++++ layout/style/nsRuleNode.cpp | 15 +++++++-- layout/style/nsStyleCoord.cpp | 3 ++ layout/style/nsStyleCoord.h | 5 ++- layout/style/nsStyleStruct.cpp | 4 +++ layout/style/nsStyleStruct.h | 2 +- layout/tables/BasicTableLayoutStrategy.cpp | 8 +++-- layout/tables/FixedTableLayoutStrategy.cpp | 8 +++-- layout/xul/base/src/nsBox.cpp | 3 ++ 13 files changed, 132 insertions(+), 25 deletions(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index d5485b5319ea..70b06930e05c 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -1493,6 +1493,25 @@ static nscoord AddPercents(nsLayoutUtils::IntrinsicWidthType aType, return result; } +/* static */ PRBool +nsLayoutUtils::GetAbsoluteCoord(const nsStyleCoord& aStyle, + nsIRenderingContext* aRenderingContext, + nsStyleContext* aStyleContext, + nscoord& aResult) +{ + nsStyleUnit unit = aStyle.GetUnit(); + if (eStyleUnit_Coord == unit) { + aResult = aStyle.GetCoordValue(); + return PR_TRUE; + } + if (eStyleUnit_Chars == unit) { + aResult = nsLayoutUtils::CharsToCoord(aStyle, aRenderingContext, + aStyleContext); + return PR_TRUE; + } + return PR_FALSE; +} + static PRBool GetPercentHeight(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, @@ -2632,6 +2651,21 @@ nsLayoutUtils::SetFontFromStyle(nsIRenderingContext* aRC, nsStyleContext* aSC) aRC->SetFont(font->mFont, visibility->mLangGroup); } +nscoord +nsLayoutUtils::CharsToCoord(const nsStyleCoord& aStyle, + nsIRenderingContext* aRenderingContext, + nsStyleContext* aStyleContext) +{ + NS_ASSERTION(aStyle.GetUnit() == eStyleUnit_Chars, + "Shouldn't have called this"); + + SetFontFromStyle(aRenderingContext, aStyleContext); + nscoord fontWidth; + aRenderingContext->SetTextRunRTL(PR_FALSE); + aRenderingContext->GetWidth('M', fontWidth); + return aStyle.GetIntValue() * fontWidth; +} + static PRBool NonZeroStyleCoord(const nsStyleCoord& aCoord) { switch (aCoord.GetUnit()) { diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 2c7d71540ed7..38f1cdf2a846 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -589,7 +589,7 @@ public: * @param aRenderingContext the rendering context to use for font measurement * @param aFrame the frame whose style context should be used for font information * @param aResult the nscoord value of the style coord - * @return TRUE if the unit is eStyleUnit_Coord + * @return TRUE if the unit is eStyleUnit_Coord or eStyleUnit_Chars */ static PRBool GetAbsoluteCoord(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, @@ -606,16 +606,7 @@ public: static PRBool GetAbsoluteCoord(const nsStyleCoord& aStyle, nsIRenderingContext* aRenderingContext, nsStyleContext* aStyleContext, - nscoord& aResult) - { - nsStyleUnit unit = aStyle.GetUnit(); - if (eStyleUnit_Coord == unit) { - aResult = aStyle.GetCoordValue(); - return PR_TRUE; - } - return PR_FALSE; - } - + nscoord& aResult); /** * Get the contribution of aFrame to its containing block's intrinsic * width. This considers the child's intrinsic width, its 'width', @@ -770,6 +761,17 @@ public: */ static void SetFontFromStyle(nsIRenderingContext* aRC, nsStyleContext* aSC); + /** + * Convert an eStyleUnit_Chars nsStyleCoord to an nscoord. + * + * @param aStyle the style coord + * @param aRenderingContext the rendering context to use for font measurement + * @param aStyleContext the style context to use for font infomation + */ + static nscoord CharsToCoord(const nsStyleCoord& aStyle, + nsIRenderingContext* aRenderingContext, + nsStyleContext* aStyleContext); + /** * Determine if any style coordinate is nonzero * @param aCoord the style sides diff --git a/layout/generic/nsAbsoluteContainingBlock.cpp b/layout/generic/nsAbsoluteContainingBlock.cpp index 03128314d9cb..d0db643577cf 100644 --- a/layout/generic/nsAbsoluteContainingBlock.cpp +++ b/layout/generic/nsAbsoluteContainingBlock.cpp @@ -210,24 +210,26 @@ nsAbsoluteContainingBlock::Reflow(nsContainerFrame* aDelegatingFrame, } static inline PRBool IsFixedPaddingSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord; + return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; } static inline PRBool IsFixedMarginSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord; + return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; } static inline PRBool IsFixedMaxSize(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_None || aUnit == eStyleUnit_Coord; + return aUnit == eStyleUnit_None || aUnit == eStyleUnit_Coord || + aUnit == eStyleUnit_Chars; } static inline PRBool IsFixedOffset(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord; + return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; } static inline PRBool IsFixedHeight(nsStyleUnit aUnit) { - return aUnit == eStyleUnit_Coord; + return aUnit == eStyleUnit_Coord || aUnit == eStyleUnit_Chars; } static inline PRBool IsFixedWidth(const nsStyleCoord& aCoord) { return aCoord.GetUnit() == eStyleUnit_Coord || + aCoord.GetUnit() == eStyleUnit_Chars || (aCoord.GetUnit() == eStyleUnit_Enumerated && (aCoord.GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || aCoord.GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT)); diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 9159306d335a..00eb0739f72b 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -2963,6 +2963,11 @@ AddCoord(const nsStyleCoord& aStyle, case eStyleUnit_Percent: *aPercent += aStyle.GetPercentValue(); break; + case eStyleUnit_Chars: { + *aCoord += nsLayoutUtils::CharsToCoord(aStyle, aRenderingContext, + aFrame->GetStyleContext()); + break; + } default: break; } diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index def6537e56e2..8fb5c142777e 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -2771,6 +2771,7 @@ nsComputedDOMStyle::GetRelativeOffset(PRUint8 aSide, nsIDOMCSSValue** aValue) NS_ASSERTION(coord.GetUnit() == eStyleUnit_Coord || coord.GetUnit() == eStyleUnit_Percent || + coord.GetUnit() == eStyleUnit_Chars || coord.GetUnit() == eStyleUnit_Auto, "Unexpected unit"); @@ -3057,6 +3058,24 @@ nsComputedDOMStyle::SetValueToCoord(nsROCSSPrimitiveValue* aValue, aTable)); break; + case eStyleUnit_Chars: { + // Get a rendering context + nsCOMPtr cx; + nsIFrame* frame = mPresShell->FrameManager()->GetRootFrame(); + if (frame) { + mPresShell->CreateRenderingContext(frame, getter_AddRefs(cx)); + } + if (cx) { + nscoord val = + nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder); + aValue->SetAppUnits(PR_MAX(aMinAppUnits, PR_MIN(val, aMaxAppUnits))); + } else { + // Oh, well. Give up. + aValue->SetAppUnits(0); + } + break; + } + case eStyleUnit_None: aValue->SetIdent(nsGkAtoms::none); break; @@ -3076,6 +3095,21 @@ nsComputedDOMStyle::StyleCoordToNSCoord(const nsStyleCoord& aCoord, switch (aCoord.GetUnit()) { case eStyleUnit_Coord: return aCoord.GetCoordValue(); + case eStyleUnit_Chars: + { + // Get a rendering context + nsCOMPtr cx; + nsIFrame* frame = mPresShell->FrameManager()->GetRootFrame(); + if (frame) { + mPresShell->CreateRenderingContext(frame, getter_AddRefs(cx)); + } + if (!cx) { + // Return the default value, I guess + break; + } + + return nsLayoutUtils::CharsToCoord(aCoord, cx, mStyleContextHolder); + } case eStyleUnit_Percent: { nscoord percentageBase; diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 023e9d48ba87..0a5c3ecd09d9 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -320,6 +320,10 @@ static PRBool SetCoord(const nsCSSValue& aValue, nsStyleCoord& aCoord, if (aValue.GetUnit() == eCSSUnit_Null) { result = PR_FALSE; } + else if (((aMask & SETCOORD_LENGTH) != 0) && + (aValue.GetUnit() == eCSSUnit_Char)) { + aCoord.SetIntValue(NSToIntFloor(aValue.GetFloatValue()), eStyleUnit_Chars); + } else if (((aMask & SETCOORD_LENGTH) != 0) && aValue.IsLengthUnit()) { aCoord.SetCoordValue(CalcLength(aValue, aStyleContext, aPresContext, aInherited)); @@ -3729,8 +3733,15 @@ nsRuleNode::ComputeBorderData(void* aStartStruct, // OK to pass bad aParentCoord since we're not passing SETCOORD_INHERIT else if (SetCoord(value, coord, nsStyleCoord(), SETCOORD_LENGTH, aContext, mPresContext, inherited)) { - NS_ASSERTION(coord.GetUnit() == eStyleUnit_Coord, "unexpected unit"); - border->SetBorderWidth(side, coord.GetCoordValue()); + if (coord.GetUnit() == eStyleUnit_Coord) { + border->SetBorderWidth(side, coord.GetCoordValue()); + } +#ifdef DEBUG + else { + NS_ASSERTION(coord.GetUnit() == eStyleUnit_Chars, "unexpected unit"); + NS_WARNING("Border set in chars; we don't handle that"); + } +#endif } else if (eCSSUnit_Inherit == value.GetUnit()) { inherited = PR_TRUE; diff --git a/layout/style/nsStyleCoord.cpp b/layout/style/nsStyleCoord.cpp index b4f9d6deb109..34c66e91b0ae 100644 --- a/layout/style/nsStyleCoord.cpp +++ b/layout/style/nsStyleCoord.cpp @@ -129,8 +129,10 @@ void nsStyleCoord::SetCoordValue(nscoord aValue) void nsStyleCoord::SetIntValue(PRInt32 aValue, nsStyleUnit aUnit) { NS_ASSERTION((aUnit == eStyleUnit_Enumerated) || + (aUnit == eStyleUnit_Chars) || (aUnit == eStyleUnit_Integer), "not an int value"); if ((aUnit == eStyleUnit_Enumerated) || + (aUnit == eStyleUnit_Chars) || (aUnit == eStyleUnit_Integer)) { mUnit = aUnit; mValue.mInt = aValue; @@ -194,6 +196,7 @@ void nsStyleCoord::AppendToString(nsString& aBuffer) const case eStyleUnit_None: aBuffer.AppendLiteral("None"); break; case eStyleUnit_Enumerated: aBuffer.AppendLiteral("enum"); break; case eStyleUnit_Integer: aBuffer.AppendLiteral("int"); break; + case eStyleUnit_Chars: aBuffer.AppendLiteral("chars"); break; } aBuffer.Append(PRUnichar(' ')); } diff --git a/layout/style/nsStyleCoord.h b/layout/style/nsStyleCoord.h index 9931937f9e27..56e3fbce1868 100644 --- a/layout/style/nsStyleCoord.h +++ b/layout/style/nsStyleCoord.h @@ -55,7 +55,8 @@ enum nsStyleUnit { eStyleUnit_Factor = 11, // (float) a multiplier eStyleUnit_Coord = 20, // (nscoord) value is twips eStyleUnit_Integer = 30, // (int) value is simple integer - eStyleUnit_Enumerated = 32 // (int) value has enumerated meaning + eStyleUnit_Enumerated = 32, // (int) value has enumerated meaning + eStyleUnit_Chars = 33 // (int) value is number of characters }; typedef union { @@ -196,8 +197,10 @@ inline PRInt32 nsStyleCoord::GetCoordValue(void) const inline PRInt32 nsStyleCoord::GetIntValue(void) const { NS_ASSERTION((mUnit == eStyleUnit_Enumerated) || + (mUnit == eStyleUnit_Chars) || (mUnit == eStyleUnit_Integer), "not an int value"); if ((mUnit == eStyleUnit_Enumerated) || + (mUnit == eStyleUnit_Chars) || (mUnit == eStyleUnit_Integer)) { return mValue.mInt; } diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index b9c6becc38d2..f234fc8051d3 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -231,6 +231,10 @@ static nscoord CalcCoord(const nsStyleCoord& aCoord, } } break; + case eStyleUnit_Chars: + // XXX we need a frame and a rendering context to calculate this, bug 281972, bug 282126. + NS_NOTYETIMPLEMENTED("CalcCoord: eStyleUnit_Chars"); + return 0; default: NS_ERROR("bad unit type"); break; diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index 174627835b68..be08ccf5376b 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -526,7 +526,7 @@ struct nsStyleOutline { aOffset = NS_ROUND_OFFSET_TO_PIXELS(offset, mTwipsPerPixel); return PR_TRUE; } else { - NS_ERROR("GetOutlineOffset: bad unit type"); + NS_NOTYETIMPLEMENTED("GetOutlineOffset: eStyleUnit_Chars"); aOffset = 0; return PR_FALSE; } diff --git a/layout/tables/BasicTableLayoutStrategy.cpp b/layout/tables/BasicTableLayoutStrategy.cpp index 679f28a1829a..fdbd99ddc061 100644 --- a/layout/tables/BasicTableLayoutStrategy.cpp +++ b/layout/tables/BasicTableLayoutStrategy.cpp @@ -121,7 +121,7 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, // XXXldb Should we consider -moz-box-sizing? nsStyleUnit unit = aStylePos->mWidth.GetUnit(); - if (unit == eStyleUnit_Coord) { + if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars) { hasSpecifiedWidth = PR_TRUE; nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, aStylePos->mWidth); @@ -171,7 +171,8 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, unit = maxWidth.GetUnit(); // XXX To really implement 'max-width' well, we'd need to store // it separately on the columns. - if (unit == eStyleUnit_Coord || unit == eStyleUnit_Enumerated) { + if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars || + unit == eStyleUnit_Enumerated) { nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, maxWidth); @@ -196,7 +197,8 @@ GetWidthInfo(nsIRenderingContext *aRenderingContext, eStyleUnit_Enumerated); } unit = minWidth.GetUnit(); - if (unit == eStyleUnit_Coord || unit == eStyleUnit_Enumerated) { + if (unit == eStyleUnit_Coord || unit == eStyleUnit_Chars || + unit == eStyleUnit_Enumerated) { nscoord w = nsLayoutUtils::ComputeWidthValue(aRenderingContext, aFrame, 0, 0, 0, minWidth); diff --git a/layout/tables/FixedTableLayoutStrategy.cpp b/layout/tables/FixedTableLayoutStrategy.cpp index 53e8338bd189..236c9d6e1b41 100644 --- a/layout/tables/FixedTableLayoutStrategy.cpp +++ b/layout/tables/FixedTableLayoutStrategy.cpp @@ -98,7 +98,8 @@ FixedTableLayoutStrategy::GetMinWidth(nsIRenderingContext* aRenderingContext) } const nsStyleCoord *styleWidth = &colFrame->GetStylePosition()->mWidth; - if (styleWidth->GetUnit() == eStyleUnit_Coord) { + if (styleWidth->GetUnit() == eStyleUnit_Coord || + styleWidth->GetUnit() == eStyleUnit_Chars) { result += nsLayoutUtils::ComputeWidthValue(aRenderingContext, colFrame, 0, 0, 0, *styleWidth); } else if (styleWidth->GetUnit() == eStyleUnit_Percent) { @@ -117,6 +118,7 @@ FixedTableLayoutStrategy::GetMinWidth(nsIRenderingContext* aRenderingContext) if (cellFrame) { styleWidth = &cellFrame->GetStylePosition()->mWidth; if (styleWidth->GetUnit() == eStyleUnit_Coord || + styleWidth->GetUnit() == eStyleUnit_Chars || (styleWidth->GetUnit() == eStyleUnit_Enumerated && (styleWidth->GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || styleWidth->GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT))) { @@ -214,7 +216,8 @@ FixedTableLayoutStrategy::ComputeColumnWidths(const nsHTMLReflowState& aReflowSt const nsStyleCoord *styleWidth = &colFrame->GetStylePosition()->mWidth; nscoord colWidth; - if (styleWidth->GetUnit() == eStyleUnit_Coord) { + if (styleWidth->GetUnit() == eStyleUnit_Coord || + styleWidth->GetUnit() == eStyleUnit_Chars) { colWidth = nsLayoutUtils::ComputeWidthValue( aReflowState.rendContext, colFrame, 0, 0, 0, *styleWidth); @@ -237,6 +240,7 @@ FixedTableLayoutStrategy::ComputeColumnWidths(const nsHTMLReflowState& aReflowSt if (cellFrame) { styleWidth = &cellFrame->GetStylePosition()->mWidth; if (styleWidth->GetUnit() == eStyleUnit_Coord || + styleWidth->GetUnit() == eStyleUnit_Chars || (styleWidth->GetUnit() == eStyleUnit_Enumerated && (styleWidth->GetIntValue() == NS_STYLE_WIDTH_MAX_CONTENT || styleWidth->GetIntValue() == NS_STYLE_WIDTH_MIN_CONTENT))) { diff --git a/layout/xul/base/src/nsBox.cpp b/layout/xul/base/src/nsBox.cpp index f0495fb906cd..d44b71ae1794 100644 --- a/layout/xul/base/src/nsBox.cpp +++ b/layout/xul/base/src/nsBox.cpp @@ -683,6 +683,7 @@ nsIBox::AddCSSPrefSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = position->mHeight.GetCoordValue(); heightSet = PR_TRUE; } + // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); // ignore 'height' and 'width' attributes if the actual element is not XUL @@ -781,6 +782,7 @@ nsIBox::AddCSSMinSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = 0; heightSet = PR_TRUE; } + // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); if (content) { @@ -839,6 +841,7 @@ nsIBox::AddCSSMaxSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize) aSize.height = max; heightSet = PR_TRUE; } + // XXX Handle eStyleUnit_Chars? nsIContent* content = aBox->GetContent(); if (content) { From 125a18e0a97f550213a570f26f9e71a471c795da Mon Sep 17 00:00:00 2001 From: "L. David Baron" Date: Tue, 1 Jul 2008 22:01:10 -0700 Subject: [PATCH 86/98] Back out 0b1995eab10f due to mochitest failures on at least Windows. (Bug 363706) --- gfx/thebes/public/gfxFont.h | 3 --- gfx/thebes/src/gfxAtsuiFonts.cpp | 4 ---- gfx/thebes/src/gfxOS2Fonts.cpp | 10 ---------- gfx/thebes/src/gfxPangoFonts.cpp | 6 ------ gfx/thebes/src/gfxWindowsFonts.cpp | 9 --------- layout/reftests/bugs/371043-1-ref.html | 2 +- layout/reftests/bugs/reftest.list | 2 +- layout/style/nsRuleNode.cpp | 18 +++--------------- 8 files changed, 5 insertions(+), 49 deletions(-) diff --git a/gfx/thebes/public/gfxFont.h b/gfx/thebes/public/gfxFont.h index e146718f1ae2..86344d7e5951 100644 --- a/gfx/thebes/public/gfxFont.h +++ b/gfx/thebes/public/gfxFont.h @@ -415,9 +415,6 @@ public: gfxFloat aveCharWidth; gfxFloat spaceWidth; - gfxFloat zeroOrAveCharWidth; // width of '0', or if there is - // no '0' glyph in this font, - // equal to .aveCharWidth }; virtual const gfxFont::Metrics& GetMetrics() = 0; diff --git a/gfx/thebes/src/gfxAtsuiFonts.cpp b/gfx/thebes/src/gfxAtsuiFonts.cpp index 13272e556179..d49252cf4a53 100644 --- a/gfx/thebes/src/gfxAtsuiFonts.cpp +++ b/gfx/thebes/src/gfxAtsuiFonts.cpp @@ -282,10 +282,6 @@ gfxAtsuiFont::InitMetrics(ATSUFontID aFontID, ATSFontRef aFontRef) mMetrics.spaceWidth = GetCharWidth(' ', &glyphID); mSpaceGlyph = glyphID; - mMetrics.zeroOrAveCharWidth = GetCharWidth('0', &glyphID); - if (glyphID == 0) // no zero in this font - mMetrics.zeroOrAveCharWidth = mMetrics.aveCharWidth; - SanitizeMetrics(&mMetrics, mFontEntry->FamilyEntry()->IsBadUnderlineFontFamily()); #if 0 diff --git a/gfx/thebes/src/gfxOS2Fonts.cpp b/gfx/thebes/src/gfxOS2Fonts.cpp index cc7fc67a4bde..11a5ae9e48ec 100644 --- a/gfx/thebes/src/gfxOS2Fonts.cpp +++ b/gfx/thebes/src/gfxOS2Fonts.cpp @@ -155,16 +155,6 @@ const gfxFont::Metrics& gfxOS2Font::GetMetrics() mMetrics->aveCharWidth = mMetrics->emHeight * 0.5; } - // properties of '0', for 'ch' units - gid = FT_Get_Char_Index(face, '0'); - if (gid) { - FT_Load_Glyph(face, gid, FT_LOAD_NO_SCALE); - mMetrics->zeroOrAveCharWidth = face->glyph->metrics.width * xScale; - } else { - // this font doesn't have a '0' - mMetrics->zeroOrAveCharWidth = mMetrics->aveCharWidth; - } - // compute an adjusted size if we need to if (mAdjustedSize == 0 && GetStyle()->sizeAdjust != 0) { gfxFloat aspect = mMetrics->xHeight / GetStyle()->size; diff --git a/gfx/thebes/src/gfxPangoFonts.cpp b/gfx/thebes/src/gfxPangoFonts.cpp index a68f158d0330..ad62ad43993e 100644 --- a/gfx/thebes/src/gfxPangoFonts.cpp +++ b/gfx/thebes/src/gfxPangoFonts.cpp @@ -963,16 +963,10 @@ gfxPangoFont::GetMetrics() mMetrics.emDescent = mMetrics.emHeight - mMetrics.emAscent; gfxSize isz, lsz; - PRUint32 zeroGlyph; GetCharSize(' ', isz, lsz, &mSpaceGlyph); mMetrics.spaceWidth = lsz.width; GetCharSize('x', isz, lsz); mMetrics.xHeight = isz.height; - GetCharSize('0', isz, lsz, &zeroGlyph); - if (zeroGlyph) - mMetrics.zeroOrAveCharWidth = lsz.width; - else - mMetrics.zeroOrAveCharWidth = mMetrics.aveCharWidth; FT_Face face = NULL; if (pfm && PANGO_IS_FC_FONT(font)) diff --git a/gfx/thebes/src/gfxWindowsFonts.cpp b/gfx/thebes/src/gfxWindowsFonts.cpp index 3dfc8a9c30a0..b39aa6a425a6 100644 --- a/gfx/thebes/src/gfxWindowsFonts.cpp +++ b/gfx/thebes/src/gfxWindowsFonts.cpp @@ -631,15 +631,6 @@ gfxWindowsFont::ComputeMetrics() GetTextExtentPoint32(dc, " ", 1, &size); mMetrics->spaceWidth = ROUND(size.cx); - // Cache the width of digit zero. - // XXX MSDN (http://msdn.microsoft.com/en-us/library/ms534223.aspx) - // does not say what the failure modes for GetTextExtentPoint32 are - - // is it safe to assume it will fail iff the font has no '0'? - if (GetTextExtentPoint32(dc, "0", 1, &size)) - mMetrics->zeroOrAveCharWidth = ROUND(size.cx); - else - mMetrics->zeroOrAveCharWidth = mMetrics->aveCharWidth; - mSpaceGlyph = 0; if (metrics.tmPitchAndFamily & TMPF_TRUETYPE) { WORD glyph; diff --git a/layout/reftests/bugs/371043-1-ref.html b/layout/reftests/bugs/371043-1-ref.html index 9f3a3447d872..022d34aa183b 100644 --- a/layout/reftests/bugs/371043-1-ref.html +++ b/layout/reftests/bugs/371043-1-ref.html @@ -3,7 +3,7 @@
          00 + height: 30px; padding: 0 2px">MM
          diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index f227f882866d..784de0303046 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -393,7 +393,7 @@ skip-if(MOZ_WIDGET_TOOLKIT=="windows") == 347496-1.xhtml 347496-1-ref.xhtml # Bu == 363370-1.html 363370-1-ref.html == 363402-1.html 363402-1-ref.html == 363637-1.html 363637-1-ref.html -== 363706-1.html 363706-1-ref.html +fails == 363706-1.html 363706-1-ref.html != 363706-1.html about:blank == 363858-1.html 363858-1-ref.html == 363858-2.html 363858-2-ref.html diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 0a5c3ecd09d9..82d0eadd445e 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -53,8 +53,7 @@ #include "nsIDeviceContext.h" #include "nsILookAndFeel.h" #include "nsIPresShell.h" -#include "nsIThebesFontMetrics.h" -#include "gfxFont.h" +#include "nsIFontMetrics.h" #include "nsStyleUtil.h" #include "nsCSSPseudoElements.h" #include "nsThemeConstants.h" @@ -232,7 +231,8 @@ static nscoord CalcLengthWith(const nsCSSValue& aValue, aFontSize = aStyleFont->mFont.size; } switch (unit) { - case eCSSUnit_EM: { + case eCSSUnit_EM: + case eCSSUnit_Char: { return NSToCoordRound(aValue.GetFloatValue() * float(aFontSize)); // XXX scale against font metrics height instead? } @@ -252,18 +252,6 @@ static nscoord CalcLengthWith(const nsCSSValue& aValue, nscoord capHeight = ((aFontSize / 3) * 2); // XXX HACK! return NSToCoordRound(aValue.GetFloatValue() * float(capHeight)); } - case eCSSUnit_Char: { - nsFont font = aStyleFont->mFont; - font.size = aFontSize; - nsCOMPtr fm = aPresContext->GetMetricsFor(font); - nsCOMPtr tfm(do_QueryInterface(fm)); - gfxFloat zeroWidth = (tfm->GetThebesFontGroup()->GetFontAt(0) - ->GetMetrics().zeroOrAveCharWidth); - - return NSToCoordRound(aValue.GetFloatValue() * - NS_ceil(aPresContext->AppUnitsPerDevPixel() * - zeroWidth)); - } default: NS_NOTREACHED("unexpected unit"); break; From 45e212251956a005fbfbd22c5572aefee9fa0aa3 Mon Sep 17 00:00:00 2001 From: Wolfgang Rosenauer Date: Wed, 2 Jul 2008 12:30:12 +0200 Subject: [PATCH 87/98] =?UTF-8?q?Bug=20424626=20=E2=80=93=20(linux)=20Fire?= =?UTF-8?q?fox=20is=20put=20into=20offline=20mode=20on=20startup=20when=20?= =?UTF-8?q?NetworkManager=20is=20running=20but=20not=20controlling=20the?= =?UTF-8?q?=20active=20network=20interface.=20-=20unhide=20pref=20[r=3Dgav?= =?UTF-8?q?in(irc)]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/libpref/src/init/all.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index 67d31f0f606d..cd2795391a75 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -2250,6 +2250,9 @@ pref("autocomplete.ungrab_during_mode_switch", true); // toggling to use the XUL filepicker pref("ui.allow_platform_file_picker", true); +// should NetworkManager be authoritative for online/offline status? +pref("toolkit.networkmanager.disable", false); + pref("helpers.global_mime_types_file", "/etc/mime.types"); pref("helpers.global_mailcap_file", "/etc/mailcap"); pref("helpers.private_mime_types_file", "~/.mime.types"); From 304a0c77b5387736595a6e62f895af5db8c332b3 Mon Sep 17 00:00:00 2001 From: x0 Date: Wed, 2 Jul 2008 07:00:03 -0400 Subject: [PATCH 88/98] JavaScript Tests - reportCompare doesn't print description on failures, bug 431108, patch by x00000000@freenet.de, r=igor --- js/tests/shell.js | 73 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/js/tests/shell.js b/js/tests/shell.js index 0de24e164722..440e48f4e6e2 100644 --- a/js/tests/shell.js +++ b/js/tests/shell.js @@ -232,10 +232,47 @@ function toPrinted(value) { value = String(value); } - value = value.replace(/\\n/g, 'NL').replace(/\n/g, 'NL').replace(/\\r/g, 'CR'); + value = value.replace(/\\n/g, 'NL') + .replace(/\n/g, 'NL') + .replace(/\\r/g, 'CR') + .replace(/[^\x20-\x7E]+/g, escapeString); return value; } +function escapeString (str) +{ + var a, b, c, d; + var len = str.length; + var result = ""; + var digits = ["0", "1", "2", "3", "4", "5", "6", "7", + "8", "9", "A", "B", "C", "D", "E", "F"]; + + for (var i=0; i>= 4; + b = digits[ch & 0xf]; + ch >>= 4; + + if (ch) + { + c = digits[ch & 0xf]; + ch >>= 4; + d = digits[ch & 0xf]; + + result += "\\u" + d + c + b + a; + } + else + { + result += "\\x" + b + a; + } + } + + return result; +} + /* * Compare expected result to actual result, if they differ (in value and/or * type) report a failure. If description is provided, include it in the @@ -245,9 +282,15 @@ function reportCompare (expected, actual, description) { var expected_t = typeof expected; var actual_t = typeof actual; var output = ""; - - if ((VERBOSE) && (typeof description != "undefined")) + + if (typeof description == "undefined") + { + description = ''; + } + else if (VERBOSE) + { printStatus ("Comparing '" + description + "'"); + } if (expected_t != actual_t) { @@ -271,19 +314,16 @@ function reportCompare (expected, actual, description) { "' matched actual value '" + toPrinted(actual) + "'"); } - if (typeof description == "undefined") - description = ''; - var testcase = new TestCase(gTestfile, description, expected, actual); testcase.reason = output; - + if (testcase.passed) { - print('PASSED! ' + description); + print(PASSED + description); } else { - reportFailure (output); + reportFailure (description + " : " + output); } return testcase.passed; @@ -300,8 +340,14 @@ function reportMatch (expectedRegExp, actual, description) { var actual_t = typeof actual; var output = ""; - if ((VERBOSE) && (typeof description != "undefined")) + if (typeof description == "undefined") + { + description = ''; + } + else if (VERBOSE) + { printStatus ("Comparing '" + description + "'"); + } if (expected_t != actual_t) { @@ -326,19 +372,16 @@ function reportMatch (expectedRegExp, actual, description) { "' matched actual value '" + toPrinted(actual) + "'"); } - if (typeof description == "undefined") - description = ''; - var testcase = new TestCase(gTestfile, description, true, matches); testcase.reason = output; if (testcase.passed) { - print('PASSED! ' + description); + print(PASSED + description); } else { - reportFailure (output); + reportFailure (description + " : " + output); } return testcase.passed; From fab38680f3df4ccf491db7e6a9793d87e060dc94 Mon Sep 17 00:00:00 2001 From: Mats Palmgren Date: Wed, 2 Jul 2008 13:09:15 +0200 Subject: [PATCH 89/98] Clamp window width to twice the X screen width (ditto for height). b=409006 r+sr=roc --- widget/src/gtk2/nsCommonWidget.cpp | 6 ++---- widget/src/gtk2/nsCommonWidget.h | 2 ++ widget/src/gtk2/nsWindow.cpp | 26 ++++++++++++++++++++++++++ widget/src/gtk2/nsWindow.h | 1 + 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/widget/src/gtk2/nsCommonWidget.cpp b/widget/src/gtk2/nsCommonWidget.cpp index e772cf2eec12..a90354ca4b58 100644 --- a/widget/src/gtk2/nsCommonWidget.cpp +++ b/widget/src/gtk2/nsCommonWidget.cpp @@ -204,8 +204,7 @@ nsCommonWidget::Show(PRBool aState) NS_IMETHODIMP nsCommonWidget::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint) { - mBounds.width = aWidth; - mBounds.height = aHeight; + mBounds.SizeTo(GetSafeWindowSize(nsSize(aWidth, aHeight))); if (!mCreated) return NS_OK; @@ -278,8 +277,7 @@ nsCommonWidget::Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight, { mBounds.x = aX; mBounds.y = aY; - mBounds.width = aWidth; - mBounds.height = aHeight; + mBounds.SizeTo(GetSafeWindowSize(nsSize(aWidth, aHeight))); mPlaced = PR_TRUE; diff --git a/widget/src/gtk2/nsCommonWidget.h b/widget/src/gtk2/nsCommonWidget.h index 1652c218ecf6..15a1efb849d7 100644 --- a/widget/src/gtk2/nsCommonWidget.h +++ b/widget/src/gtk2/nsCommonWidget.h @@ -102,6 +102,8 @@ public: virtual void NativeShow (PRBool aAction) = 0; + virtual nsSize GetSafeWindowSize(nsSize aSize) = 0; + // Some of the nsIWidget methods NS_IMETHOD Show (PRBool aState); NS_IMETHOD Resize (PRInt32 aWidth, diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index 34e0278124da..d568ea06999a 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -3572,6 +3572,32 @@ nsWindow::NativeShow (PRBool aAction) } } +nsSize +nsWindow::GetSafeWindowSize(nsSize aSize) +{ + GdkScreen* screen = NULL; + if (mContainer) { + screen = gdk_drawable_get_screen(GTK_WIDGET(mContainer)->window); + } + else if (mDrawingarea) { + screen = gdk_drawable_get_screen(mDrawingarea->inner_window); + } + + if (!screen) + return aSize; + + nsSize result = aSize; + if (aSize.width > 2 * gdk_screen_get_width(screen)) { + NS_WARNING("Clamping huge window width"); + result.width = 2 * gdk_screen_get_width(screen); + } + if (aSize.height > 2 * gdk_screen_get_height(screen)) { + NS_WARNING("Clamping huge window height"); + result.height = 2 * gdk_screen_get_height(screen); + } + return result; +} + void nsWindow::EnsureGrabs(void) { diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h index 2e8ea043f83f..ab8f0a3db165 100644 --- a/widget/src/gtk2/nsWindow.h +++ b/widget/src/gtk2/nsWindow.h @@ -246,6 +246,7 @@ public: PRBool aRepaint); void NativeShow (PRBool aAction); + virtual nsSize GetSafeWindowSize(nsSize aSize); void EnsureGrabs (void); void GrabPointer (void); From 40744e9c97eebfb571ebb47a93067eb2bf780415 Mon Sep 17 00:00:00 2001 From: Mats Palmgren Date: Wed, 2 Jul 2008 13:13:15 +0200 Subject: [PATCH 90/98] Crash test for bug 409006. --- gfx/thebes/crashtests/409006-1.html | 14 ++++++++++++++ gfx/thebes/crashtests/409006-2.html | 10 ++++++++++ gfx/thebes/crashtests/409006-3.html | 10 ++++++++++ gfx/thebes/crashtests/crashtests.list | 3 +++ 4 files changed, 37 insertions(+) create mode 100644 gfx/thebes/crashtests/409006-1.html create mode 100644 gfx/thebes/crashtests/409006-2.html create mode 100644 gfx/thebes/crashtests/409006-3.html diff --git a/gfx/thebes/crashtests/409006-1.html b/gfx/thebes/crashtests/409006-1.html new file mode 100644 index 000000000000..a26d385bf8a9 --- /dev/null +++ b/gfx/thebes/crashtests/409006-1.html @@ -0,0 +1,14 @@ + + diff --git a/gfx/thebes/crashtests/409006-2.html b/gfx/thebes/crashtests/409006-2.html new file mode 100644 index 000000000000..c50b13199950 --- /dev/null +++ b/gfx/thebes/crashtests/409006-2.html @@ -0,0 +1,10 @@ + + diff --git a/gfx/thebes/crashtests/409006-3.html b/gfx/thebes/crashtests/409006-3.html new file mode 100644 index 000000000000..cb20e5d21060 --- /dev/null +++ b/gfx/thebes/crashtests/409006-3.html @@ -0,0 +1,10 @@ + + diff --git a/gfx/thebes/crashtests/crashtests.list b/gfx/thebes/crashtests/crashtests.list index af49fb7077dc..29ea61d1e742 100644 --- a/gfx/thebes/crashtests/crashtests.list +++ b/gfx/thebes/crashtests/crashtests.list @@ -30,6 +30,9 @@ load 404112-2.html load 405268-1.xhtml load 407761-1.html load 407842.html +load 409006-1.html +load 409006-2.html +load 409006-3.html load 410728-1.xml load 416637-1.html load 419095-1.html From 815217143c2640cdac6bc352cff3a2a7b89d12b9 Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Wed, 2 Jul 2008 07:50:29 -0400 Subject: [PATCH 91/98] fix circular dependency on jscpucfg.h --- js/src/Makefile.ref | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/src/Makefile.ref b/js/src/Makefile.ref index 520e801d71ca..fb14d1611fa8 100644 --- a/js/src/Makefile.ref +++ b/js/src/Makefile.ref @@ -329,7 +329,7 @@ $(PROGRAM).pure: $(PROG_OBJS) $(LIBRARY) $(OTHER_LIBS) $(PROG_LIBS) ifndef PREBUILT_CPUCFG -$(HFILES) $(CPPFILES): $(OBJDIR)/jsautocfg.h +$(filter-out jscpucfg.h $(OBJDIR)/jsautocfg.h, $(HFILES)) $(CPPFILES): $(OBJDIR)/jsautocfg.h $(OBJDIR)/jsautocfg.h: $(OBJDIR)/jscpucfg rm -f $@ From 843b88d0a16aafb95852f2b933d0ee32fa47b243 Mon Sep 17 00:00:00 2001 From: Bob Clary Date: Wed, 2 Jul 2008 08:15:13 -0400 Subject: [PATCH 92/98] JavaScript Tests - update public-failures.txt, universe.data bug 399387 --- js/tests/public-failures.txt | 904 ++++++++++++++++++++--------------- js/tests/universe.data | 96 +++- 2 files changed, 611 insertions(+), 389 deletions(-) diff --git a/js/tests/public-failures.txt b/js/tests/public-failures.txt index 77968c43bead..9243cbe8716c 100644 --- a/js/tests/public-failures.txt +++ b/js/tests/public-failures.txt @@ -1,49 +1,30 @@ -TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' -TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 11 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 12 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 14 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 15 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 3 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 5 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 8 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' -TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 9 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' -TEST_ID=e4x/decompilation/regress-352789.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompilation of new and .@ reason: Expected value ' function ( ) { return new ( a ( ) . @ z ) ; } ', Actual value ' function ( ) { return new a . @ z ; } ' -TEST_ID=e4x/decompilation/regress-429249.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=trap should not change decompilation : after trap reason: Expected value ' function g ( ) { return ; } ', Actual value ' function g ( ) { return ""; } ' TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 50 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 51 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 53 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 54 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' TEST_ID=e4x/Expressions/11.1.4-08.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 56 of test - 11.1.4 - XML Initializer - {} Expressions - 08 reason: Expected value 'true', Actual value 'false' -TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=function::globalfunction Section reason: `.``*`/e4x/extensions/regress-337226.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::parseInt -TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-337226.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::parseInt -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-374025.js:`.``*`: out of memory -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=e4x/extensions/regress-410192.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Proper quoting of attribute by uneval/toSource reason: Expected value '"v"', Actual value 'v' -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory -TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory +TEST_ID=e4x/GC/regress-324278.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/e4x/GC/regress-324278.js:`.``*`: out of memory TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 4 of test - 13.1.2.1 - isXMLName() reason: Expected value 'exception', Actual value 'no exception' TEST_ID=e4x/Global/13.1.2.1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - 13.1.2.1 - isXMLName() reason: Expected value '', Actual value '0xAA-0xAA : Invalid char accepted as start : Invalid Char accepted as other NL0xB5-0xB5 : Invalid char accepted as start : Invalid Char accepted as other NL0xB7-0xB7 : Other char not acceptedNL0xBA-0xBA : Invalid char accepted as start : Invalid Char accepted as other NL0x132-0x133 : Invalid char accepted as start : Invalid Char accepted as other NL0x13F-0x140 : Invalid char accepted as start : Invalid Char accepted as other NL0x149-0x149 : Invalid char accepted as start : Invalid Char accepted as other NL0x17F-0x17F : Invalid char accepted as start : Invalid Char accepted as other NL0x1C4-0x1CC : Invalid char accepted as start : Invalid Char accepted as other NL0x1F1-0x1F3 : Invalid char accepted as start : Invalid Char accepted as other NL0x2B0-0x2B8 : Invalid Char accepted as other NL0x2BB-0x2C1 : Start char not acceptedNL0x2E0-0x2E4 : Invalid Char accepted as other NL0x37A-0x37A : Invalid Char accepted as other NL0x387-0x387 : Other char not acceptedNL0x559-0x559 : Start char not acceptedNL0x587-0x587 : Invalid char accepted as start : Invalid Char accepted as other NL0x6E5-0x6E6 : Start char not acceptedNL0xEDC-0xEDD : Invalid char accepted as start : Invalid Char accepted as other NL0x1101-0x1101 : Invalid char accepted as start : Invalid Char accepted as other NL0x1104-0x1104 : Invalid char accepted as start : Invalid Char accepted as other NL0x1108-0x1108 : Invalid char accepted as start : Invalid Char accepted as other NL0x110A-0x110A : Invalid char accepted as start : Invalid Char accepted as other NL0x110D-0x110D : Invalid char accepted as start : Invalid Char accepted as other NL0x1113-0x113B : Invalid char accepted as start : Invalid Char accepted as other NL0x113D-0x113D : Invalid char accepted as start : Invalid Char accepted as other NL0x113F-0x113F : Invalid char accepted as start : Invalid Char accepted as other NL0x1141-0x114B : Invalid char accepted as start : Invalid Char accepted as other NL0x114D-0x114D : Invalid char accepted as start : Invalid Char accepted as other NL0x114F-0x114F : Invalid char accepted as start : Invalid Char accepted as other NL0x1151-0x1153 : Invalid char accepted as start : Invalid Char accepted as other NL0x1156-0x1158 : Invalid char accepted as start : Invalid Char accepted as other NL0x1162-0x1162 : Invalid char accepted as start : Invalid Char accepted as other NL0x1164-0x1164 : Invalid char accepted as start : Invalid Char accepted as other NL0x1166-0x1166 : Invalid char accepted as start : Invalid Char accepted as other NL0x1168-0x1168 : Invalid char accepted as start : Invalid Char accepted as other NL0x116A-0x116C : Invalid char accepted as start : Invalid Char accepted as other NL0x116F-0x1171 : Invalid char accepted as start : Invalid Char accepted as other NL0x1174-0x1174 : Invalid char accepted as start : Invalid Char accepted as other NL0x1176-0x119D : Invalid char accepted as start : Invalid Char accepted as other NL0x119F-0x11A2 : Invalid char accepted as start : Invalid Char accepted as other NL0x11A9-0x11AA : Invalid char accepted as start : Invalid Char accepted as other NL0x11AC-0x11AD : Invalid char accepted as start : Invalid Char accepted as other NL0x11B0-0x11B6 : Invalid char accepted as start : Invalid Char accepted as other NL0x11B9-0x11B9 : Invalid char accepted as start : Invalid Char accepted as other NL0x11BB-0x11BB : Invalid char accepted as start : Invalid Char accepted as other NL0x11C3-0x11EA : Invalid char accepted as start : Invalid Char accepted as other NL0x11EC-0x11EF : Invalid char accepted as start : Invalid Char accepted as other NL0x11F1-0x11F8 : Invalid char accepted as start : Invalid Char accepted as other NL0x207F-0x207F : Invalid char accepted as start : Invalid Char accepted as other NL0x20DD-0x20E0 : Invalid Char accepted as other NL0x2102-0x2102 : Invalid char accepted as start : Invalid Char accepted as other NL0x2107-0x2107 : Invalid char accepted as start : Invalid Char accepted as other NL0x210A-0x2113 : Invalid char accepted as start : Invalid Char accepted as other NL0x2115-0x2115 : Invalid char accepted as start : Invalid Char accepted as other NL0x2118-0x211D : Invalid char accepted as start : Invalid Char accepted as other NL0x2124-0x2124 : Invalid char accepted as start : Invalid Char accepted as other NL0x2128-0x2128 : Invalid char accepted as start : Invalid Char accepted as other NL0x212C-0x212D : Invalid char accepted as start : Invalid Char accepted as other NL0x212F-0x2131 : Invalid char accepted as start : Invalid Char accepted as other NL0x2133-0x2138 : Invalid char accepted as start : Invalid Char accepted as other NL0x2160-0x217F : Invalid char accepted as start : Invalid Char accepted as other NL0x309B-0x309C : Invalid Char accepted as other NL0x3131-0x318E : Invalid char accepted as start : Invalid Char accepted as other NL0xF900-0xFA2D : Invalid char accepted as start : Invalid Char accepted as other NL0xFB00-0xFB06 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB13-0xFB17 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB1E-0xFB1E : Invalid Char accepted as other NL0xFB1F-0xFB28 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB2A-0xFB36 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB38-0xFB3C : Invalid char accepted as start : Invalid Char accepted as other NL0xFB3E-0xFB3E : Invalid char accepted as start : Invalid Char accepted as other NL0xFB40-0xFB41 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB43-0xFB44 : Invalid char accepted as start : Invalid Char accepted as other NL0xFB46-0xFBB1 : Invalid char accepted as start : Invalid Char accepted as other NL0xFBD3-0xFD3D : Invalid char accepted as start : Invalid Char accepted as other NL0xFD50-0xFD8F : Invalid char accepted as start : Invalid Char accepted as other NL0xFD92-0xFDC7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFDF0-0xFDFB : Invalid char accepted as start : Invalid Char accepted as other NL0xFE20-0xFE23 : Invalid Char accepted as other NL0xFE70-0xFE72 : Invalid char accepted as start : Invalid Char accepted as other NL0xFE74-0xFE74 : Invalid char accepted as start : Invalid Char accepted as other NL0xFE76-0xFEFC : Invalid char accepted as start : Invalid Char accepted as other NL0xFF10-0xFF19 : Invalid Char accepted as other NL0xFF21-0xFF3A : Invalid char accepted as start : Invalid Char accepted as other NL0xFF41-0xFF5A : Invalid char accepted as start : Invalid Char accepted as other NL0xFF66-0xFF6F : Invalid char accepted as start : Invalid Char accepted as other NL0xFF70-0xFF70 : Invalid Char accepted as other NL0xFF71-0xFF9D : Invalid char accepted as start : Invalid Char accepted as other NL0xFF9E-0xFF9F : Invalid Char accepted as other NL0xFFA0-0xFFBE : Invalid char accepted as start : Invalid Char accepted as other NL0xFFC2-0xFFC7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFFCA-0xFFCF : Invalid char accepted as start : Invalid Char accepted as other NL0xFFD2-0xFFD7 : Invalid char accepted as start : Invalid Char accepted as other NL0xFFDA-0xFFDC : Invalid char accepted as start : Invalid Char accepted as other NL' TEST_ID=e4x/Namespace/regress-292863.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Undeclaring namespace prefix should cause parse error reason: Expected value 'error', Actual value 'no error' +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-319872.js:`.``*`: out of memory -TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/Regress/regress-319872.js:`.``*`: out of memory +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/Regress/regress-319872.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Reject invalid spaces in tags reason: Expected value 'SyntaxError: invalid XML name', Actual value '' TEST_ID=e4x/Regress/regress-352223.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Reject invalid spaces in tags reason: Expected value 'SyntaxError: invalid XML tag syntax', Actual value '' TEST_ID=e4x/Regress/regress-369032.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: kid2->parent == xml || !kid2->parent, at `.``*`jsxml.c: @@ -69,21 +50,92 @@ TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.* TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 7 of test - 13.4.4.26 - XML normalize() reason: Expected value '1', Actual value '0' TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 8 of test - 13.4.4.26 - XML normalize() reason: Expected value ' fun ', Actual value ' fun ' TEST_ID=e4x/XML/13.4.4.26.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 9 of test - 13.4.4.26 - XML normalize() reason: Expected value '2', Actual value '1' -TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-1.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-1.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory -TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/e4x/XML/regress-324422-2.js:`.``*`: out of memory +TEST_ID=e4x/XML/regress-324422-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=xmlsimple.stringmethod === xmlsimple.function::stringmethod Section 61 reason: `.``*`/e4x/XML/regress-376773.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::charAt TEST_ID=e4x/XML/regress-376773.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Section 61 of test - xmlsimple.stringmethod === xmlsimple.function::stringmethod reason: +TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' +TEST_ID=e4x/decompilation/decompile-xml-escapes.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompiler escapes line breaks/backslashes in E4X literals reason: Type mismatch, expected type boolean, actual type string Expected value 'false', Actual value ''function anonymous() {NL return ;NL}' does not contain ''!' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 11 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 12 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : z ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : z ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 14 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 15 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . n : : [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) . n : : [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 2 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 3 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) [ z ] ) ; } ', Actual value ' function ( ) { new x ( y ) [ z ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 5 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 6 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ a ) ; } ', Actual value ' function ( ) { new x ( y ) . @ a ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 8 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' +TEST_ID=e4x/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 9 of test - Decompilation with new operator redeaux reason: Expected value ' function ( ) { new ( x ( y ) . @ [ n : : a ] ) ; } ', Actual value ' function ( ) { new x ( y ) . @ [ n : : a ] ; } ' +TEST_ID=e4x/decompilation/regress-352789.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Decompilation of new and .@ reason: Expected value ' function ( ) { return new ( a ( ) . @ z ) ; } ', Actual value ' function ( ) { return new a . @ z ; } ' +TEST_ID=e4x/decompilation/regress-429249.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=trap should not change decompilation : after trap reason: Expected value ' function g ( ) { return ; } ', Actual value ' function g ( ) { return ""; } ' +TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=function::globalfunction Section reason: `.``*`/e4x/extensions/regress-337226.js:`.``*`: reference to undefined XML name @mozilla.org/js/function::parseInt +TEST_ID=e4x/extensions/regress-337226.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-337226.js:`.``*`: ReferenceError: reference to undefined XML name @mozilla.org/js/function::parseInt +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/e4x/extensions/regress-374025.js:`.``*`: out of memory +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`received signal 11 +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-374025.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=e4x/extensions/regress-410192.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - Proper quoting of attribute by uneval/toSource reason: Expected value '"v"', Actual value 'v' +TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-0, 1) reason: wrong value +TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-1, Infinity) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-0.9) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-Number.MIN_VALUE) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-0.9) reason: wrong value +TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-Number.MIN_VALUE) reason: wrong value +TEST_ID=ecma/String/15.5.4.6-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=var f = new Object( String.prototype.indexOf ); f('[object Window @ `.``*` (native @ `.``*`)]') reason: wrong value +TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=!(0/0) reason: wrong value +TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=1000 % 0 ? true : false reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=ecma_3/Array/regress-322135-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= @@ -96,8 +148,8 @@ TEST_ID=ecma_3/Array/regress-322135-04.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toLocaleString called on incompatible String', Actual value 'f,o,o' TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toSource called on incompatible String', Actual value '["f", "o", "o"]' TEST_ID=ecma_3/Array/regress-387501.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.prototype.toString|toSource|toLocaleString is not generic reason: Expected value 'TypeError: Array.prototype.toString called on incompatible String', Actual value 'f,o,o' -TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date 0 reason: Expected value '31', Actual value '1' TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date -1 reason: Expected value '30', Actual value '1' +TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date 0 reason: Expected value '31', Actual value '1' TEST_ID=ecma_3/Date/15.9.4.3.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.9.4.3 - Date.UTC edge-case arguments.: date null reason: Expected value '31', Actual value '1' TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.prototype.toLocaleString should not clamp year: check toLocaleString reason: Expected value '-271821', Actual value 'null' TEST_ID=ecma_3/Date/15.9.5.5-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.prototype.toLocaleString should not clamp year: check toLocaleString reason: Expected value '275760', Actual value 'null' @@ -109,10 +161,6 @@ TEST_ID=ecma_3/Expressions/11.10-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TE TEST_ID=ecma_3/Expressions/11.7.1-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.1 - << should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' TEST_ID=ecma_3/Expressions/11.7.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.2 - >> should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' TEST_ID=ecma_3/Expressions/11.7.3-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=11.7.3 - >>> should evaluate operands in order: order reason: Expected value 'o.valueOf, p.valueOf', Actual value ', p.valueOfo.valueOf' -TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 0 reason: Expected value 'SyntaxError: illegal character', Actual value '' -TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 1 reason: Expected value 'SyntaxError: illegal character', Actual value '' -TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 2 reason: Expected value 'SyntaxError: illegal character', Actual value '' -TEST_ID=ecma_3/extensions/regress-368516.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Ignore unicode BOM characters: 0 reason: Expected value 'No Error', Actual value 'SyntaxError: illegal character' TEST_ID=ecma_3/LexicalConventions/7.9.1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Automatic Semicolon insertion in postfix expressions: (xNL)-- y reason: Type mismatch, expected type string, actual type number Expected value 'SyntaxError: missing ; before statement', Actual value '0' TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=3.3.toString.length should be 1 reason: Expected value '1', Actual value '0' TEST_ID=ecma_3/Number/15.7.4.2-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=num.toString(), num.toString(10), and num.toString(undefined) should all be equivalent reason: Type mismatch, expected type boolean, actual type object Expected value 'false', Actual value 'Error: illegal radix 0' @@ -121,55 +169,63 @@ TEST_ID=ecma_3/Operators/11.4.1-002.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TE TEST_ID=ecma_3/RegExp/15.10.2.12.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=15.10.2.12 - CharacterClassEscape d reason: Expected value 'false', Actual value 'true' TEST_ID=ecma_3/RegExp/regress-307456.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=ecma_3/RegExp/regress-330684.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=ecma_3/RegExp/regress-367888.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-367888.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory -TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory +TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=ecma_3/RegExp/regress-375642.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/ecma_3/RegExp/regress-375642.js:`.``*`: out of memory TEST_ID=ecma_3/RegExp/regress-375711.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert with /[Q-b]/i.exec(""): /[Q-b]/i.exec("") reason: Expected value 'No Error', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-01-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at jsregexp.c: TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at jsregexp.c: TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: (c2 <= cs->length) && (c1 <= c2)(new RegExp("[ß-Ç]]", "i")).exec("") reason: Expected value 'SyntaxError: invalid range in character class', Actual value '' -TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: (c2 <= cs->length) && (c1 <= c2)(new RegExp("[ß-Ç]]", "i")).exec("") reason: Expected value 'SyntaxError: invalid range in character class', Actual value '' -TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 7 reason: Expected value '/x/g/x/g/x/g', Actual value 'xnullx' +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375715-04.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: (c2 <= cs->length) && (c1 <= c2)(new RegExp("`.``*`", "i")).exec("") reason: Expected value 'SyntaxError: invalid range in character class', Actual value '' +TEST_ID=ecma_3/RegExp/regress-375876-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375876-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375876-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: +TEST_ID=ecma_3/RegExp/regress-375876-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: (c2 <= cs->length) && (c1 <= c2), at `.``*`jsregexp.c: TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 42 reason: Expected value 'ok', Actual value 'failure' TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 56 reason: Expected value '|x|string|x|string|0|number|xyz|string||y|string||undefined|1|number|xyz|string|z', Actual value '|x|string|x|string|0|number|xyz|string||y|string||string|1|number|xyz|string|z' TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 58 reason: Expected value 'xy|z|string||undefined|2|number|xyz|string|', Actual value 'xy|z|string||string|2|number|xyz|string|' @@ -180,30 +236,17 @@ TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 64 reason: Expected value 'x|y|string|y|string||undefined|1|number|xyyz|string||y|string|y|string||undefined|2|number|xyyz|string|z', Actual value 'x|y|string|y|string||string|1|number|xyyz|string||y|string|y|string||string|2|number|xyyz|string|z' TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 66 reason: Expected value 'xyy|z|string||undefined||string|3|number|xyyz|string|', Actual value 'xyy|z|string||string||string|3|number|xyyz|string|' TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 67 reason: Expected value 'x|y|string|1|number|xyz|string||string||undefined|y|string|z', Actual value 'x|y|string|1|number|xyz|string||string||string|y|string|z' +TEST_ID=ecma_3/String/15.5.4.11.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 7 reason: Expected value '/x/g/x/g/x/g', Actual value 'xnullx' TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) reason: Expected value 'undefined', Actual value '' TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return $1; }) reason: Expected value 'undefined', Actual value '' TEST_ID=ecma_3/String/regress-392378.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Regular Expression Non-participating Capture Groups are inaccurate in edge cases: "y".replace(/(x)?y/, function($0, $1){ return String($1); }) reason: Expected value 'undefined', Actual value '' TEST_ID=ecma_3/Unicode/regress-352044-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=issues with Unicode escape sequences in JavaScript source code reason: Expected value 'SyntaxError: illegal character', Actual value '' TEST_ID=ecma_3/Unicode/regress-352044-02-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=issues with Unicode escape sequences in JavaScript source code reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-0, 1) reason: wrong value -TEST_ID=ecma/Math/15.8.2.5.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.atan2(-1, Infinity) reason: wrong value -TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-0.9) reason: wrong value -TEST_ID=ecma/Math/15.8.2.6.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Infinity/Math.ceil(-Number.MIN_VALUE) reason: wrong value -TEST_ID=ecma/String/15.5.4.6-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=var f = new Object( String.prototype.indexOf ); f('[object Window @ `.``*` (native @ `.``*`)]') reason: wrong value -TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=!(0/0) reason: wrong value -TEST_ID=ecma/TypeConversion/9.2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=1000 % 0 ? true : false reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 reason: wrong value -TEST_ID=ecma/TypeConversion/9.3.1-3.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=-s2 == -Infinity || -s2 == -1.7976931348623157e+308 reason: wrong value +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 0 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 1 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-274152.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not ignore unicode format-control characters: 2 reason: Expected value 'SyntaxError: illegal character', Actual value '' +TEST_ID=ecma_3/extensions/regress-368516.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Ignore unicode BOM characters: 0 reason: Expected value 'No Error', Actual value 'SyntaxError: illegal character' +TEST_ID=ecma_3/extensions/regress-430740.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not strip format-control characters from string literals reason: Expected value 'a%EF%BF%BE,+doevil()%5D)//', Actual value 'a',%20evildone' TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=typeof f(/abc/) reason: wrong value TEST_ID=js1_2/function/regexparg-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=typeof new f(/abc/) reason: wrong value TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Elisons in Array literals should not be enumed Section 1 of test - [,1] reason: Expected value '1', Actual value '01' @@ -212,298 +255,186 @@ TEST_ID=js1_5/Array/11.1.4.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_ID=js1_5/Array/regress-101964.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Section 1 of test - reason: Expected value 'Truncation took less than 50 ms', Actual value 'Truncation took `.``*` ms' TEST_ID=js1_5/Array/regress-157652.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Array/regress-157652.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Array/regress-330812.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-330812.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Array/regress-350256-03.js:`.``*`: out of memory +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN decompile Infinity as 1/0 reason: Expected value ' function ( ) { return 1 / 0 ; } ', Actual value ' function ( ) { return Infinity ; } ' -TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN: decompile NaN as 0/0 reason: Expected value ' function ( ) { var NaN = 0 / 0 ; return NaN ; } ', Actual value ' function ( ) { var NaN = NaN ; return NaN ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) . z ) ; } ', Actual value ' function ( ) { new x ( y ) . z ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) ( z ) ) ; } ', Actual value ' function ( ) { new x ( y ) ( z ) ; } ' -TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( z ) ) ( w ) ; } ', Actual value ' function ( ) { new x ( z ) ( w ) ; } ' -TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0: 8 / eval("" + f)() reason: Expected value '-Infinity', Actual value 'Infinity' -TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0 reason: Expected value ' function ( ) { return - 0 ; } ', Actual value ' function ( ) { return 0 ; } ' -TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: invalid decrement operand -TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: SyntaxError: invalid decrement operand:; `.``*`/js1_5/decompilation/regress-352453.js:`.``*`: var f = function() { (eval)(x)-- };; `.``*`/js1_5/decompilation/regress-352453.js:`.``*`: -TEST_ID=js1_5/decompilation/regress-353146.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new expressions revisited reason: Expected value ' function ( ) { return new ( p ( 2 ) [ 1 ] ) ; } ', Actual value ' function ( ) { return new p ( 2 ) [ 1 ] ; } ' -TEST_ID=js1_5/decompilation/regress-356083.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation for ({this setter: function () { } }) reason: Expected value ' function ( ) { return { this setter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' this ' setter : function ( ) { } } ; } ' -TEST_ID=js1_5/decompilation/regress-356248.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of object literal with named getter reason: Expected value ' function ( ) { return { set p y ( ) { } } ; } ', Actual value ' function ( ) { return { set py ( ) { } } ; } ' -TEST_ID=js1_5/decompilation/regress-371692.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keep extra parentheses in conditional tests reason: Expected value ' function ( ) { if ( ( i = 1 ) ) { a = 2 ; } } ', Actual value ' function ( ) { if ( i = 1 ) { a = 2 ; } } ' -TEST_ID=js1_5/decompilation/regress-375882.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of switch with case 0/0 reason: Expected value ' function ( ) { switch ( a ) { case 0 / 0 : a ; case 1 / 0 : b ; case 1 / - 0 : c ; case - 0 : d ; default : ; } } ', Actual value ' function ( ) { switch ( a ) { case NaN : a ; case Infinity : b ; case - Infinity : c ; case 0 : d ; default : ; } } ' -TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( eval ( ) ) ; } ', Actual value ' function ( ) { new eval ; } ' -TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( g ( ) ) ; } ', Actual value ' function ( ) { new g ; } ' -TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: toString reason: Expected value ' function ( ) { return "\ t "; } ', Actual value ' function ( ) { return " "; } ' -TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: uneval reason: Expected value ' ( function ( ) { return "\ t "; } ) ', Actual value ' ( function ( ) { return " "; } ) ' +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Array/regress-350256-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Error/regress-354246.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Error/regress-354246.js:`.``*`: x is not defined TEST_ID=js1_5/Error/regress-354246.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Error/regress-354246.js:`.``*`: x is not defined TEST_ID=js1_5/Expressions/regress-394673.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Expressions/regress-394673.js:`.``*`: too much recursion TEST_ID=js1_5/Expressions/regress-394673.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Expressions/regress-394673.js:`.``*`: InternalError: too much recursion -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' -TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' -TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") reason: Expected value '"\t"', Actual value '" "' -TEST_ID=js1_5/extensions/regress-322957.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=TryMethod should not eat getter exceptions reason: Type mismatch, expected type boolean, actual type number Expected value 'true', Actual value '-1' -TEST_ID=js1_5/extensions/regress-330569.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336409-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-336410-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-342960.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-350531.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-351448.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\s]+)/.exec("a0- z") reason: Expected value '0- ,0- ', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\S]+)/.exec("a0- z") reason: Expected value 'a0-,a0-', Actual value 'SyntaxError: invalid range in character class' -TEST_ID=js1_5/extensions/regress-352455.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Eval object with non-function getters/setters reason: Expected value 'SyntaxError: invalid getter usage', Actual value '' -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !OBJ_GET_PROTO(cx, ctor) reason: Expected value 'function f() {NL}', Actual value 'function () {NL}' -TEST_ID=js1_5/extensions/regress-353214.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of |function() { (function ([x]) { })(); eval("return 3;") }| reason: Expected value ' function ( ) { ( function ( [ x ] ) { } ( ) ) ; eval ( " return 3 ;" ) ; } ', Actual value ' function ( ) { ( function ( [ x ] ) { } ) ( ) ; eval ( " return 3 ;" ) ; } ' -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: -TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1 reason: Expected value ' function ( ) { [ super ] = q ; } ', Actual value ' function ( ) { [ " super " ] = q ; } ' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 2 reason: Expected value ' function ( ) { return { super getter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' super ' getter : function ( ) { } } ; } ' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' -TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3 reason: Expected value ' function ( ) { [ goto ] = a ; } ', Actual value ' function ( ) { [ " goto " ] = a ; } ' -TEST_ID=js1_5/extensions/regress-355820.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Remove non-standard Script object reason: Expected value 'undefined', Actual value 'function' -TEST_ID=js1_5/extensions/regress-356085.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=js_obj_toString for getter/setter reason: Expected value ' ( { set p y ( ) { } } ) ', Actual value ' ( { set p ( ) { } } ) ' -TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property 1', Actual value 'No warning' -TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property a', Actual value 'No warning' -TEST_ID=js1_5/extensions/regress-367923.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for variable redeclares argument reason: Expected value 'TypeError: variable v redeclares argument', Actual value 'TypeError: variable v hides argument' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory -TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' -TEST_ID=js1_5/extensions/regress-375801.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval should use "(void 0)" instead of "undefined": uneval reason: Expected value ' ( { a : ( void 0 ) } ) ', Actual value ' ( { a : undefined } ) ' -TEST_ID=js1_5/extensions/regress-376052.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=javascript.options.anonfunfix to allow function (){} expressions: 3 reason: Expected value 'SyntaxError: syntax error', Actual value 'No Error' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid property id' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = [ a ] ; } ) ', Actual value ' ( function ( ) { return # 1 = [ , a ] ; } ) ' -TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = { a : b } ; } ) ', Actual value ' ( function ( ) { return # 1 = { , a : b } ; } ) ' -TEST_ID=js1_5/extensions/regress-380831.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval trying to output a getter function that is a sharp definition reason: Expected value ' ( { b getter : # 1 = ( function ( ) { } ) , c getter : # 1 # } ) ', Actual value ' ( { b getter : # 1 = ( ) { } , c getter : # 1 # } ) ' -TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: -TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: -TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-381205.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval with special getter functions: global reason: Expected value '({get x p() {print(4);}})', Actual value '({get x () {print(4);})' -TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: missing : after property id -TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: SyntaxError: missing : after property id:; `.``*`/js1_5/extensions/regress-381304.js:`.``*`: set in(value) {this.for = value;},; `.``*`/js1_5/extensions/regress-381304.js:`.``*`: -TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=js1_5/extensions/regress-394967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/extensions/regress-407019.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !JS_IsExceptionPending(cx) - Browser only reason: Expected match to '/Illegal operation on WrappedNative prototype object/', Actual value 'TypeError: window.Option is not a function' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '-001 -1' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '-051 -51' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sat Jan 01 -0051 00:00:00 `.``*`', Actual value 'xxxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Mon Jan 01 -9999 00:00:00 `.``*`', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-100 00', Actual value '0/00 00' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1851 51', Actual value '1851 ,'' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1899 99', Actual value '1899 0/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '000/ 0/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '00+/ +/' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value '2767276727672767276727672767276727672767276727672767276727672767276727672767' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value '05', Actual value '2005' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value 'Sat Jun 04 2005 20:00:00 `.``*`', Actual value '2005' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%b") == Date.toLocaleFormat("%h") reason: Expected value 'Jun', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C") reason: Expected value '20', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%e") reason: Expected value ' 4', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%g") reason: Expected value '05', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%G") reason: Expected value '2005', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%D") reason: Expected value '06/04/05', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%n") == "NL" reason: Expected value 'NL', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value ' ', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%u") reason: Expected value '6', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' -TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y-%m-%d") == Date.toLocaleFormat("%F") reason: Expected value '2005-06-04', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' TEST_ID=js1_5/Function/regress-338001.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory; SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory; SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory; SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter'; messages: BUGNUMBER: 338121; `.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory; SyntaxError: malformed formal parameter -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-01.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Issues with JS_ARENA_ALLOCATE_CAST reason: Expected value 'InternalError: script stack space quota is exhausted', Actual value 'SyntaxError: malformed formal parameter' +TEST_ID=js1_5/Function/regress-338121-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-02.js:`.``*`: out of memory TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Function/regress-338121-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Function/regress-338121-03.js:`.``*`: out of memory TEST_ID=js1_5/GC/regress-203278-2.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-203278-2.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-311497.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-319980-01.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-319980-01.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-338653.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-338653.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory -TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-346794.js:`.``*`: out of memory +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= TEST_ID=js1_5/GC/regress-346794.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/GC/regress-348532.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/GC/regress-348532.js:`.``*`: too much recursion -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Unknown reason: :`.``*`: uncaught exception: generate_big_object_graph() leaked -TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*` uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`uncaught exception: generate_big_object_graph() leaked +TEST_ID=js1_5/GC/regress-383269-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`: uncaught exception: generate_big_object_graph() leaked TEST_ID=js1_5/Regress/regress-203278-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-203278-1.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-271716-n.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-271716-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-303213.js:`.``*`: out of memory`.``*`received signal 11 +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-303213.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-312588.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-312588.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-319384.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-319384.js:`.``*`: can't convert "foo" to an integer TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arguments no longer shared reason: Expected value 'false', Actual value 'true' TEST_ID=js1_5/Regress/regress-320119.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=delegating objects and arguments, arity, caller, name: arity no longer shared reason: Expected value 'false', Actual value 'true' @@ -513,25 +444,22 @@ TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, T TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=JS_ReportPendingException should reason: Expected value 'Error', Actual value 'No Error' TEST_ID=js1_5/Regress/regress-328897.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Unknown reason: javascript:Components.classes:0: Script error. TEST_ID=js1_5/Regress/regress-329530.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-330352.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-330352.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-330352.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-346237.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-346237.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: alert(6); } alert(5); reason: Expected value 'SyntaxError', Actual value 'No Error' -TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: } { reason: Expected value 'SyntaxError', Actual value 'No Error' TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: } reason: Expected value 'SyntaxError', Actual value 'No Error' +TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: } { reason: Expected value 'SyntaxError', Actual value 'No Error' TEST_ID=js1_5/Regress/regress-350268.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=new Function with unbalanced braces: }}}}} reason: Expected value 'SyntaxError', Actual value 'No Error' TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: TEST_ID=js1_5/Regress/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: @@ -540,14 +468,221 @@ TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags), at `.``*`jsscript.c: TEST_ID=js1_5/Regress/regress-362583.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported -TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/Regress/regress-3649-n.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 1 reason: Expected value 'toString called', Actual value 'toString not called' TEST_ID=js1_5/Regress/regress-383674.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Statement that implicitly calls toString should not be optimized away as a "useless expression": 2 reason: Expected value 'toString called', Actual value 'toString not called' TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-422348.js:`.``*`: out of memory TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported TEST_ID=js1_5/Regress/regress-422348.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/Regress/regress-422348.js:`.``*`: out of memory +TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN decompile Infinity as 1/0 reason: Expected value ' function ( ) { return 1 / 0 ; } ', Actual value ' function ( ) { return Infinity ; } ' +TEST_ID=js1_5/decompilation/regress-351219.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of immutable infinity, NaN: decompile NaN as 0/0 reason: Expected value ' function ( ) { var NaN = 0 / 0 ; return NaN ; } ', Actual value ' function ( ) { var NaN = NaN ; return NaN ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) ( z ) ) ; } ', Actual value ' function ( ) { new x ( y ) ( z ) ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( y ) . z ) ; } ', Actual value ' function ( ) { new x ( y ) . z ; } ' +TEST_ID=js1_5/decompilation/regress-352013.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of new parenthetic expressions reason: Expected value ' function ( ) { new ( x ( z ) ) ( w ) ; } ', Actual value ' function ( ) { new x ( z ) ( w ) ; } ' +TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0 reason: Expected value ' function ( ) { return - 0 ; } ', Actual value ' function ( ) { return 0 ; } ' +TEST_ID=js1_5/decompilation/regress-352360.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of negative 0: 8 / eval("" + f)() reason: Expected value '-Infinity', Actual value 'Infinity' +TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: invalid decrement operand +TEST_ID=js1_5/decompilation/regress-352453.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/decompilation/regress-352453.js:`.``*`: SyntaxError: invalid decrement operand: +TEST_ID=js1_5/decompilation/regress-353146.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new expressions revisited reason: Expected value ' function ( ) { return new ( p ( 2 ) [ 1 ] ) ; } ', Actual value ' function ( ) { return new p ( 2 ) [ 1 ] ; } ' +TEST_ID=js1_5/decompilation/regress-356083.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation for ({this setter: function () { } }) reason: Expected value ' function ( ) { return { this setter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' this ' setter : function ( ) { } } ; } ' +TEST_ID=js1_5/decompilation/regress-356248.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of object literal with named getter reason: Expected value ' function ( ) { return { set p y ( ) { } } ; } ', Actual value ' function ( ) { return { set py ( ) { } } ; } ' +TEST_ID=js1_5/decompilation/regress-371692.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keep extra parentheses in conditional tests reason: Expected value ' function ( ) { if ( ( i = 1 ) ) { a = 2 ; } } ', Actual value ' function ( ) { if ( i = 1 ) { a = 2 ; } } ' +TEST_ID=js1_5/decompilation/regress-375882.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of switch with case 0/0 reason: Expected value ' function ( ) { switch ( a ) { case 0 / 0 : a ; case 1 / 0 : b ; case 1 / - 0 : c ; case - 0 : d ; default : ; } } ', Actual value ' function ( ) { switch ( a ) { case NaN : a ; case Infinity : b ; case - Infinity : c ; case 0 : d ; default : ; } } ' +TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( eval ( ) ) ; } ', Actual value ' function ( ) { new eval ; } ' +TEST_ID=js1_5/decompilation/regress-376564.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of new (eval()) reason: Expected value ' function ( ) { new ( g ( ) ) ; } ', Actual value ' function ( ) { new g ; } ' +TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: toString reason: Expected value ' function ( ) { return "\ t "; } ', Actual value ' function ( ) { return " "; } ' +TEST_ID=js1_5/decompilation/regress-383721.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompiling Tabs: uneval reason: Expected value ' ( function ( ) { return "\ t "; } ) ', Actual value ' ( function ( ) { return " "; } ) ' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-226507.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION= reason: Expected value '', Actual value 'InternalError: too much recursion' +TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") reason: Expected value '"\t"', Actual value '" "' +TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") reason: Expected value '"\t"', Actual value '" "' +TEST_ID=js1_5/extensions/regress-304897.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval("\t"), uneval("\x09") reason: Expected value '"\t"', Actual value '"\x09"' +TEST_ID=js1_5/extensions/regress-322957.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=TryMethod should not eat getter exceptions reason: Type mismatch, expected type boolean, actual type number Expected value 'true', Actual value '-1' +TEST_ID=js1_5/extensions/regress-330569.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336409-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336409-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-336410-1.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-1.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=3, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-336410-2.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-342960.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-342960.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-342960.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=.*, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-345967.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-350531.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-350531.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-351448.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\S]+)/.exec("a0- z") reason: Expected value 'a0-,a0-', Actual value 'SyntaxError: invalid range in character class' +TEST_ID=js1_5/extensions/regress-351463-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Treat hyphens as not special adjacent to CharacterClassEscapes in character classes: /([\d-\s]+)/.exec("a0- z") reason: Expected value '0- ,0- ', Actual value 'SyntaxError: invalid range in character class' +TEST_ID=js1_5/extensions/regress-352455.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Eval object with non-function getters/setters reason: Expected value 'SyntaxError: invalid getter usage', Actual value '' +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !OBJ_GET_PROTO(cx, ctor), at `.``*`jsapi.c: +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-352604.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !OBJ_GET_PROTO(cx, ctor) reason: Expected value 'function f() {NL}', Actual value 'function () {NL}' +TEST_ID=js1_5/extensions/regress-353214.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of |function() { (function ([x]) { })(); eval("return 3;") }| reason: Expected value ' function ( ) { ( function ( [ x ] ) { } ( ) ) ; eval ( " return 3 ;" ) ; } ', Actual value ' function ( ) { ( function ( [ x ] ) { } ) ( ) ; eval ( " return 3 ;" ) ; } ' +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: overwriting, at `.``*`jsscope.c: +TEST_ID=js1_5/extensions/regress-355622.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1 reason: Expected value ' function ( ) { [ super ] = q ; } ', Actual value ' function ( ) { [ " super " ] = q ; } ' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 2 reason: Expected value ' function ( ) { return { super getter : function ( ) { } } ; } ', Actual value ' function ( ) { return { ' super ' getter : function ( ) { } } ; } ' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3 reason: Expected value ' function ( ) { [ goto ] = a ; } ', Actual value ' function ( ) { [ " goto " ] = a ; } ' +TEST_ID=js1_5/extensions/regress-355736.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of "[reserved]" has extra quotes: 3: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid assignment left-hand side' +TEST_ID=js1_5/extensions/regress-355820.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Remove non-standard Script object reason: Expected value 'undefined', Actual value 'function' +TEST_ID=js1_5/extensions/regress-356085.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=js_obj_toString for getter/setter reason: Expected value ' ( { set p y ( ) { } } ) ', Actual value ' ( { set p ( ) { } } ) ' +TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property 1', Actual value 'No warning' +TEST_ID=js1_5/extensions/regress-365869.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for object literal with duplicate propery names reason: Expected value 'TypeError: redeclaration of property a', Actual value 'No warning' +TEST_ID=js1_5/extensions/regress-367923.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=strict warning for variable redeclares argument reason: Expected value 'TypeError: variable v redeclares argument', Actual value 'TypeError: variable v hides argument' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Numeric sort performance reason: Expected value '(tint/tstr < 3)=true', Actual value '(tint/tstr < 3)=false' +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-371636.js:`.``*`: out of memory +TEST_ID=js1_5/extensions/regress-371636.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-375801.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval should use "(void 0)" instead of "undefined": uneval reason: Expected value ' ( { a : ( void 0 ) } ) ', Actual value ' ( { a : undefined } ) ' +TEST_ID=js1_5/extensions/regress-376052.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=javascript.options.anonfunfix to allow function (){} expressions: 3 reason: Expected value 'SyntaxError: syntax error', Actual value 'No Error' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = [ a ] ; } ) ', Actual value ' ( function ( ) { return # 1 = [ , a ] ; } ) ' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1 reason: Expected value ' ( function ( ) { return # 1 = { a : b } ; } ) ', Actual value ' ( function ( ) { return # 1 = { , a : b } ; } ) ' +TEST_ID=js1_5/extensions/regress-379523.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of sharp declaration: 1: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid property id' +TEST_ID=js1_5/extensions/regress-380831.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval trying to output a getter function that is a sharp definition reason: Expected value ' ( { b getter : # 1 = ( function ( ) { } ) , c getter : # 1 # } ) ', Actual value ' ( { b getter : # 1 = ( ) { } , c getter : # 1 # } ) ' +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: op == JSOP_LOOKUPSWITCH, at `.``*`js.c: +TEST_ID=js1_5/extensions/regress-380889.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-381205.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval with special getter functions: global reason: Expected value '({get x p() {print(4);}})', Actual value '({get x () {print(4);})' +TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: missing : after property id +TEST_ID=js1_5/extensions/regress-381304.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_5/extensions/regress-381304.js:`.``*`: SyntaxError: missing : after property id +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-385134.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= +TEST_ID=js1_5/extensions/regress-394967.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=No test results reported +TEST_ID=js1_5/extensions/regress-407019.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert: !JS_IsExceptionPending(cx) - Browser only reason: Expected match to '/Illegal operation on WrappedNative prototype object/', Actual value 'TypeError: window.Option is not a function' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '-001 -1' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '-051 -51' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051-051' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sat Jan 01 -0051 00:00:00 `.``*`', Actual value 'xxxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-1 99', Actual value '000/ 0/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-100 00', Actual value '0/00 00' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '-51 49', Actual value '00+/ +/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1851 51', Actual value '1851 ,'' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y %y") reason: Expected value '1899 99', Actual value '1899 0/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value '2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value '00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51', Actual value 'xxx00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/00+/' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Mon Jan 01 -9999 00:00:00 `.``*`', Actual value 'xxxx''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxx2767276727672767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y") reason: Expected value 'Sun Jan 01 32767 00:00:00 `.``*`', Actual value 'xxxxx2767276727672767276727672767276727672767276727672767276727672767276727672767' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value '\x09', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C") reason: Expected value '20', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%G") reason: Expected value '2005', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%Y-%m-%d") == Date.toLocaleFormat("%F") reason: Expected value '2005-06-04', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%b") == Date.toLocaleFormat("%h") reason: Expected value 'Jun', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%e") reason: Expected value ' 4', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%g") reason: Expected value '05', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%D") reason: Expected value '06/04/05', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%n") == "NL" reason: Expected value 'NL', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%u") reason: Expected value '6', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value ' ', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value ' ', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%t") == "\t" reason: Expected value '\x09', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value '05', Actual value '2005' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '17:00', Actual value 'Sat Jun 04 2005 17:00:00 GMT-0700 (Pacific Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '17:00:00', Actual value 'Sat Jun 04 2005 17:00:00 GMT-0700 (Pacific Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '05:00:00 PM', Actual value 'Sat Jun 04 2005 17:00:00 GMT-0700 (Pacific Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%C%y") == Date.toLocaleFormat("%Y") reason: Expected value 'Sat Jun 04 2005 `.``*`', Actual value '2005' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=fast, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 GMT-0400 (Eastern Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 GMT-0400 (Eastern Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 GMT-0400 (Eastern Daylight Time)' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=medium, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M") == Date.toLocaleFormat("%R") reason: Expected value '20:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%H:%M:%S") == Date.toLocaleFormat("%T") reason: Expected value '20:00:00', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%I:%M:%S %p") == Date.toLocaleFormat("%r") reason: Expected value '08:00:00 PM', Actual value 'Sat Jun 04 2005 20:00:00 `.``*`' +TEST_ID=js1_5/extensions/toLocaleFormat-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Date.toLocaleFormat("%V") reason: Expected value '22', Actual value 'Sat Jun 04 2005 `.``*`' TEST_ID=js1_6/Array/regress-320887.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=var x should not throw a ReferenceError reason: Expected value 'No error', Actual value 'ReferenceError: x is not defined' TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.reduce should ignore holes: 1 reason: Expected value 'PASS', Actual value 'FAIL, reduce' TEST_ID=js1_6/Array/regress-386030.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Array.reduce should ignore holes: 2 reason: Expected value 'PASS', Actual value 'FAIL, reduceRight' @@ -563,12 +698,12 @@ TEST_ID=js1_7/decompilation/regress-350704.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE TEST_ID=js1_7/decompilation/regress-352026.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of yield in argument lists reason: Expected value ' function f ( ) { g ( ( ( let ( a = b ) c ) , d ) , e ) ; } ', Actual value ' function f ( ) { g ( ( let ( a = b ) c , d ) , e ) ; } ' TEST_ID=js1_7/decompilation/regress-352079.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of various operators reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' TEST_ID=js1_7/decompilation/regress-352272.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of |let| in arg to lvalue returning function reason: Expected value ' function ( ) { f ( let ( y = 3 ) 4 ) ++; } ', Actual value ' function ( ) { f ( ( let ( y = 3 ) 4 ) ) ++; } ' -TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { }: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; after for-loop initializer' TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { } reason: Expected value ' function ( ) { for ( a [ b , this ] in [ ] ) { } } ', Actual value ' function ( ) { for ( let a [ ( b , this ) ] in [ ] ) { } } ' +TEST_ID=js1_7/decompilation/regress-355786.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of for (a[b, this] in []) { }: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; after for-loop initializer' TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { for(let x in []) let {} = [1]; }) reason: Expected value ' function ( ) { for ( let x in [ ] ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { for ( let x in [ ] ) { let [ ] = [ 1 ] ; } } ' TEST_ID=js1_7/decompilation/regress-356247.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of let {} = [1] in a loop: g : (function() { while(0) let {} = [1]; }) reason: Expected value ' function ( ) { while ( 0 ) let [ ] = [ 1 ] ; } ', Actual value ' function ( ) { while ( 0 ) { let [ ] = [ 1 ] ; } } ' -TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid for/in left-hand side' TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard reason: Expected value ' function ( ) { try { } catch ( a if [ b for each ( c in [ ] ) ] ) { } } ', Actual value ' function ( ) { try { } catch ( a if [ b for each ( [ ] in [ ] ) ] ) { } } ' +TEST_ID=js1_7/decompilation/regress-375794.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of array comprehension with catch guard: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: invalid for/in left-hand side' TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions reason: Expected value ' function ( ) { return [ i * i for ( i in [ 0 ] ) if ( i % 2 ) ] ; } ', Actual value ' function ( ) { return [ i * i for ( i in [ 0 ] ) ] ; } ' TEST_ID=js1_7/decompilation/regress-380506.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of nested-for and for-if comprehensions reason: Expected value ' function ( ) { return [ i * j for ( i in [ 0 ] ) for ( j in [ 1 ] ) ] ; } ', Actual value ' function ( ) { return [ i * j for ( i in [ 0 ] ) ] ; } ' TEST_ID=js1_7/decompilation/regress-381108.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of object literal should have space following : reason: Expected value 'true', Actual value 'false' @@ -583,14 +718,13 @@ TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: TEST_ID=js1_7/extensions/regress-351102-05.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= TEST_ID=js1_7/extensions/regress-367629.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Decompilation of result with native function as getter reason: Expected value '({get h encodeURI() {[native code]}})', Actual value '({get h () {[native code]})' +TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: pnprop->pn_type == TOK_COLON, at `.``*`jsparse.c: -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION= -TEST_ID=js1_7/extensions/regress-368224.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=; messages: -TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keywords after get|set: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; before statement' TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keywords after get|set reason: Expected value ' ( { in getter : ( function ( ) { return this . for ; } ) , in setter : ( function ( value ) { this . for = value ; } ) } ) ', Actual value ' SyntaxError : missing : after property id ' +TEST_ID=js1_7/extensions/regress-379566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Keywords after get|set: compile actual reason: Expected value 'No Error', Actual value 'SyntaxError: missing ; before statement' TEST_ID=js1_7/extensions/regress-380933.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Do not assert with uneval object with setter with modified proto reason: Expected match to '/TypeError: Array.prototype.toSource called on incompatible Function/', Actual value 'No Error' TEST_ID=js1_7/extensions/regress-381301.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=uneval of object with native-function getter reason: Expected value ' ( { get x decodeURI ( ) { [ native code ] } } ) ', Actual value ' ( { get x ( ) { [ native code ] } ) ' TEST_ID=js1_7/extensions/regress-381303.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=object toSource when a property has both a getter and a setter reason: Expected value ' ( { get inn ( ) { return this . for ; } , set inn ( value ) { this . for = value ; } } ) ', Actual value ' ( { get inn ( ) { return this [ ' for ' ] ; } , set inn ( value ) { this [ ' for ' ] = value ; } } ) ' @@ -599,23 +733,31 @@ TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.* TEST_ID=js1_7/geniter/regress-349012-01.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=closing a generator fails to report error if yield during close is ignored reason: Expected value 'Inner finally,Outer finally', Actual value '' TEST_ID=js1_7/geniter/regress-349331.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=test GC-invoke close reason: Expected value 'true', Actual value 'false' TEST_ID=js1_7/iterable/regress-340526-02.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Iterators: cross-referenced objects with close handler can delay close handler execution reason: Expected value '2', Actual value '0' -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0400, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= -TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341815.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=-0700, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`Assertion failure: queue->handlerThread == PR_GetCurrentThread(), at `.``*`plevent.c: +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=2, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= +TEST_ID=js1_7/iterable/regress-341821.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=TIMED OUT, TEST_DESCRIPTION= TEST_ID=js1_7/iterable/regress-415922.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Support exception from withing JSNewEnumerateOp on JSENUMERATE_NEXT reason: Expected value 'Error: its enumeration failed', Actual value 'No exception r: color' +TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 8 reason: Expected value 'TypeError: ++x is not a function', Actual value 'TypeError: ++e1 is not a function' TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 2 reason: Expected match to '/TypeError: x.t (has no properties|is undefined)/', Actual value 'TypeError: e1.t has no properties' TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 2 reason: Expected match to '/TypeError: x.t (has no properties|is undefined)/', Actual value 'TypeError: e1.t is undefined' -TEST_ID=js1_7/lexical/regress-346642-03.js, TEST_BRANCH=.*, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=decompilation of destructuring assignment: 8 reason: Expected value 'TypeError: ++x is not a function', Actual value 'TypeError: ++e1 is not a function' TEST_ID=js1_7/lexical/regress-351515.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Invalid uses of yield, let keywords in js17: global: yield = 1 reason: Expected value 'SyntaxError: syntax error', Actual value 'SyntaxError: yield not in function' TEST_ID=js1_7/regexp/yflag.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regexp/yflag.js:`.``*`: invalid flag after regular expression TEST_ID=js1_7/regexp/yflag.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_7/regexp/yflag.js:`.``*`: SyntaxError: invalid flag after regular expression @@ -624,10 +766,10 @@ TEST_ID=js1_7/regress/regress-350387.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, T TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=darwin, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=linux, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=CRASHED.*, TEST_DESCRIPTION=`.``*`Assertion failure: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain, at `.``*`jsinterp.c: TEST_ID=js1_7/regress/regress-361566.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=.*, TEST_OS=nt, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION= -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-01.js:`.``*`: arr0elms.reduce is not a function -TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function'; TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Test reduce of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduce is not a function' TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=.*, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function' +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-01.js:`.``*`: arr0elms.reduce is not a function +TEST_ID=js1_7/regress/regress-363040-01.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=Test reduceRight of empty array without initializer. : TypeError: reduce of empty array with no initial value reason: Expected value 'TypeError: reduce of empty array with no initial value', Actual value 'TypeError: arr0elms.reduceRight is not a function'; TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-02.js:`.``*`: arr.reduce is not a function TEST_ID=js1_7/regress/regress-363040-02.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=shell, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=ABNORMAL.*, TEST_DESCRIPTION=`.``*`/js1_7/regress/regress-363040-02.js:`.``*`: TypeError: arr.reduce is not a function TEST_ID=js1_7/regress/regress-372331.js, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=.*, TEST_TYPE=browser, TEST_OS=.*, TEST_KERNEL=.*, TEST_PROCESSORTYPE=.*, TEST_MEMORY=.*, TEST_CPUSPEED=.*, TEST_TIMEZONE=.*, TEST_RESULT=FAILED, TEST_EXITSTATUS=NORMAL, TEST_DESCRIPTION=`.``*` uncaught exception: for-in binds name to early diff --git a/js/tests/universe.data b/js/tests/universe.data index cb903bdf212f..07ea9e6df3fe 100644 --- a/js/tests/universe.data +++ b/js/tests/universe.data @@ -1,11 +1,15 @@ -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser -TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.0, TEST_PROCESSORTYPE=powerpc32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=darwin, TEST_KERNEL=8.11.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser @@ -34,6 +38,38 @@ TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TE TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser TEST_OS=darwin, TEST_KERNEL=9.3.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=darwin, TEST_KERNEL=9.4.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser @@ -50,6 +86,14 @@ TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TE TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=4, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=1, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser @@ -82,6 +126,22 @@ TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TE TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.18, TEST_PROCESSORTYPE=intel64, TEST_MEMORY=4, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0700, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.22, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=1, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser @@ -90,6 +150,14 @@ TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TE TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser TEST_OS=linux, TEST_KERNEL=2.6.25, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=3, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=amd32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0700, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser @@ -98,3 +166,15 @@ TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPU TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=fast, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.8.1, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=5.1, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=medium, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=debug, TEST_TYPE=shell +TEST_OS=nt, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=browser +TEST_OS=nt, TEST_KERNEL=6.0, TEST_PROCESSORTYPE=intel32, TEST_MEMORY=2, TEST_CPUSPEED=slow, TEST_TIMEZONE=-0400, TEST_BRANCH=1.9.0, TEST_BUILDTYPE=opt, TEST_TYPE=shell From ea5ac82c817251d45283c7ef8202ebf1d5427d0e Mon Sep 17 00:00:00 2001 From: Bob Clary Date: Wed, 2 Jul 2008 08:28:20 -0400 Subject: [PATCH 93/98] Javascript Tests - do not require js tests to be on path, bug 443154 --- js/tests/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/tests/Makefile b/js/tests/Makefile index f119e5ee490b..9b2b77814632 100644 --- a/js/tests/Makefile +++ b/js/tests/Makefile @@ -23,10 +23,10 @@ confidential-failures.txt: touch confidential-failures.txt public-failures.txt.expanded: public-failures.txt universe.data - pattern-expander.pl public-failures.txt > public-failures.txt.expanded + ./pattern-expander.pl public-failures.txt > public-failures.txt.expanded confidential-failures.txt.expanded: confidential-failures.txt universe.data - pattern-expander.pl confidential-failures.txt > confidential-failures.txt.expanded + ./pattern-expander.pl confidential-failures.txt > confidential-failures.txt.expanded failures.txt: public-failures.txt.expanded confidential-failures.txt.expanded sort -u public-failures.txt.expanded confidential-failures.txt.expanded > failures.txt From 71635fa7dfb3f0e2ed7cf23846a96273f32fb71e Mon Sep 17 00:00:00 2001 From: Bob Clary Date: Wed, 2 Jul 2008 08:36:07 -0400 Subject: [PATCH 94/98] Sisyphus - JavaScript Tests - generalize std::bad_alloc -> out of memory post processing, bug 443156 --- js/tests/post-process-logs.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/tests/post-process-logs.pl b/js/tests/post-process-logs.pl index 7a7ee87cb099..7a3ce6a37109 100755 --- a/js/tests/post-process-logs.pl +++ b/js/tests/post-process-logs.pl @@ -476,7 +476,7 @@ while ($file = shift @ARGV) if (/error: can.t allocate region/ || /set a breakpoint in malloc_error_break/ || /set a breakpoint in szone_error to debug/ || /malloc:.*mmap/ || /vm_allocate/ || - /terminate called after throwing an instance of 'std::bad_alloc'/) + /terminate called after throwing an instance of .*bad_alloc/) { dbg "Adding message: $_ converted to /$test_id{$state}:0: out of memory"; push @messages, ('/' . $test_id{$state} . ':0: out of memory'); From 4f0e65ad879d1802d1815324619ebeef8574e19c Mon Sep 17 00:00:00 2001 From: Mats Palmgren Date: Wed, 2 Jul 2008 15:50:53 +0200 Subject: [PATCH 95/98] Backout crash tests for bug 409006. --- gfx/thebes/crashtests/409006-1.html | 14 -------------- gfx/thebes/crashtests/409006-2.html | 10 ---------- gfx/thebes/crashtests/409006-3.html | 10 ---------- gfx/thebes/crashtests/crashtests.list | 3 --- 4 files changed, 37 deletions(-) delete mode 100644 gfx/thebes/crashtests/409006-1.html delete mode 100644 gfx/thebes/crashtests/409006-2.html delete mode 100644 gfx/thebes/crashtests/409006-3.html diff --git a/gfx/thebes/crashtests/409006-1.html b/gfx/thebes/crashtests/409006-1.html deleted file mode 100644 index a26d385bf8a9..000000000000 --- a/gfx/thebes/crashtests/409006-1.html +++ /dev/null @@ -1,14 +0,0 @@ - - diff --git a/gfx/thebes/crashtests/409006-2.html b/gfx/thebes/crashtests/409006-2.html deleted file mode 100644 index c50b13199950..000000000000 --- a/gfx/thebes/crashtests/409006-2.html +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/gfx/thebes/crashtests/409006-3.html b/gfx/thebes/crashtests/409006-3.html deleted file mode 100644 index cb20e5d21060..000000000000 --- a/gfx/thebes/crashtests/409006-3.html +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/gfx/thebes/crashtests/crashtests.list b/gfx/thebes/crashtests/crashtests.list index 29ea61d1e742..af49fb7077dc 100644 --- a/gfx/thebes/crashtests/crashtests.list +++ b/gfx/thebes/crashtests/crashtests.list @@ -30,9 +30,6 @@ load 404112-2.html load 405268-1.xhtml load 407761-1.html load 407842.html -load 409006-1.html -load 409006-2.html -load 409006-3.html load 410728-1.xml load 416637-1.html load 419095-1.html From 55b8a43b7350b787a166046b8d0c4447b3e5d67f Mon Sep 17 00:00:00 2001 From: Blake Kaplan Date: Wed, 2 Jul 2008 18:24:46 +0200 Subject: [PATCH 96/98] Attempt to give more documents scope objects. bug 440275, r+sr=jst --- content/base/src/nsDocument.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp index 987d6c93bf5c..2ee25695b080 100644 --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -3057,7 +3057,7 @@ nsDocument::SetScriptHandlingObject(nsIScriptGlobalObject* aScriptObject) "Wrong script object!"); nsCOMPtr win = do_QueryInterface(aScriptObject); NS_ASSERTION(!win || win->IsInnerWindow(), "Should have inner window here!"); - mScriptObject = do_GetWeakReference(aScriptObject); + mScopeObject = mScriptObject = do_GetWeakReference(aScriptObject); if (aScriptObject) { mHasHadScriptHandlingObject = PR_TRUE; } From ea890e880c573317919fbc6536ae33692ec3beed Mon Sep 17 00:00:00 2001 From: Simon Montagu Date: Wed, 2 Jul 2008 19:28:43 +0300 Subject: [PATCH 97/98] Make :first-letter include following punctuation but not first letters that are neither letters nor digits. Bug 399941, r+sr=roc --HG-- rename : layout/generic/punct_marks.ccmap => layout/generic/punct_marks.x-ccmap --- content/base/public/nsContentUtils.h | 20 +- content/base/src/nsContentUtils.cpp | 56 ++- layout/generic/nsTextFrameThebes.cpp | 66 +++- ...{punct_marks.ccmap => punct_marks.x-ccmap} | 336 +++++++++++++++++- .../reftests/first-letter/399941-1-ref.html | 17 + layout/reftests/first-letter/399941-1.html | 17 + .../reftests/first-letter/399941-2-ref.html | 17 + layout/reftests/first-letter/399941-2.html | 17 + .../reftests/first-letter/399941-3-ref.html | 17 + layout/reftests/first-letter/399941-3.html | 17 + .../reftests/first-letter/399941-4-ref.html | 17 + layout/reftests/first-letter/399941-4.html | 17 + .../reftests/first-letter/399941-5-ref.html | 17 + layout/reftests/first-letter/399941-5.html | 17 + .../reftests/first-letter/399941-6-ref.html | 17 + layout/reftests/first-letter/399941-6.html | 17 + .../reftests/first-letter/399941-7-ref.html | 17 + layout/reftests/first-letter/399941-7.html | 17 + .../reftests/first-letter/399941-8-ref.html | 17 + layout/reftests/first-letter/399941-8.html | 17 + .../reftests/first-letter/399941-9-ref.html | 17 + layout/reftests/first-letter/399941-9.html | 17 + layout/reftests/first-letter/nested-1g.html | 14 + layout/reftests/first-letter/reftest.list | 10 + 24 files changed, 768 insertions(+), 40 deletions(-) rename layout/generic/{punct_marks.ccmap => punct_marks.x-ccmap} (61%) create mode 100644 layout/reftests/first-letter/399941-1-ref.html create mode 100644 layout/reftests/first-letter/399941-1.html create mode 100644 layout/reftests/first-letter/399941-2-ref.html create mode 100644 layout/reftests/first-letter/399941-2.html create mode 100644 layout/reftests/first-letter/399941-3-ref.html create mode 100644 layout/reftests/first-letter/399941-3.html create mode 100644 layout/reftests/first-letter/399941-4-ref.html create mode 100644 layout/reftests/first-letter/399941-4.html create mode 100644 layout/reftests/first-letter/399941-5-ref.html create mode 100644 layout/reftests/first-letter/399941-5.html create mode 100644 layout/reftests/first-letter/399941-6-ref.html create mode 100644 layout/reftests/first-letter/399941-6.html create mode 100644 layout/reftests/first-letter/399941-7-ref.html create mode 100644 layout/reftests/first-letter/399941-7.html create mode 100644 layout/reftests/first-letter/399941-8-ref.html create mode 100644 layout/reftests/first-letter/399941-8.html create mode 100644 layout/reftests/first-letter/399941-9-ref.html create mode 100644 layout/reftests/first-letter/399941-9.html create mode 100644 layout/reftests/first-letter/nested-1g.html diff --git a/content/base/public/nsContentUtils.h b/content/base/public/nsContentUtils.h index cb1f4f9ed170..2f204ea0f712 100644 --- a/content/base/public/nsContentUtils.h +++ b/content/base/public/nsContentUtils.h @@ -58,6 +58,7 @@ #include "nsIScriptGlobalObject.h" #include "nsIDOMEvent.h" #include "nsTArray.h" +#include "nsTextFragment.h" struct nsNativeKeyEvent; // Don't include nsINativeKeyBindings.h here: it will force strange compilation error! @@ -98,6 +99,7 @@ class nsIPref; class nsVoidArray; struct JSRuntime; class nsICaseConversion; +class nsIUGenCategory; class nsIWidget; class nsPIDOMWindow; #ifdef MOZ_XTF @@ -364,10 +366,16 @@ public: PRBool aTrimTrailing = PR_TRUE); /** - * Returns true if aChar is of class Ps, Pi, Po, Pf, or Pe. (Does not - * currently handle non-BMP characters.) + * Returns true if aChar is of class Ps, Pi, Po, Pf, or Pe. */ - static PRBool IsPunctuationMark(PRUnichar aChar); + static PRBool IsPunctuationMark(PRUint32 aChar); + static PRBool IsPunctuationMarkAt(const nsTextFragment* aFrag, PRUint32 aOffset); + + /** + * Returns true if aChar is of class Lu, Ll, Lt, Lm, Lo, Nd, Nl or No + */ + static PRBool IsAlphanumeric(PRUint32 aChar); + static PRBool IsAlphanumericAt(const nsTextFragment* aFrag, PRUint32 aOffset); /* * Is the character an HTML whitespace character? @@ -577,6 +585,11 @@ public: return sCaseConv; } + static nsIUGenCategory* GetGenCat() + { + return sGenCat; + } + /** * @return PR_TRUE if aContent has an attribute aName in namespace aNameSpaceID, * and the attribute value is non-empty. @@ -1352,6 +1365,7 @@ private: static nsILineBreaker* sLineBreaker; static nsIWordBreaker* sWordBreaker; static nsICaseConversion* sCaseConv; + static nsIUGenCategory* sGenCat; // Holds pointers to nsISupports* that should be released at shutdown static nsVoidArray* sPtrsToPtrsToRelease; diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index edec95ff3fff..7da1759cac72 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -154,6 +154,7 @@ static NS_DEFINE_CID(kXTFServiceCID, NS_XTFSERVICE_CID); #include "nsGenericHTMLElement.h" #include "nsAttrValue.h" #include "nsReferencedElement.h" +#include "nsIUGenCategory.h" #ifdef IBMBIDI #include "nsIBidiKeyboard.h" @@ -195,6 +196,7 @@ PRBool nsContentUtils::sTriedToGetContentPolicy = PR_FALSE; nsILineBreaker *nsContentUtils::sLineBreaker; nsIWordBreaker *nsContentUtils::sWordBreaker; nsICaseConversion *nsContentUtils::sCaseConv; +nsIUGenCategory *nsContentUtils::sGenCat; nsVoidArray *nsContentUtils::sPtrsToPtrsToRelease; nsIScriptRuntime *nsContentUtils::sScriptRuntimes[NS_STID_ARRAY_UBOUND]; PRInt32 nsContentUtils::sScriptRootCount[NS_STID_ARRAY_UBOUND]; @@ -298,6 +300,9 @@ nsContentUtils::Init() rv = CallGetService(NS_UNICHARUTIL_CONTRACTID, &sCaseConv); NS_ENSURE_SUCCESS(rv, rv); + rv = CallGetService(NS_UNICHARCATEGORY_CONTRACTID, &sGenCat); + NS_ENSURE_SUCCESS(rv, rv); + // Ignore failure and just don't load images rv = CallGetService("@mozilla.org/image/loader;1", &sImgLoader); if (NS_FAILED(rv)) { @@ -676,15 +681,55 @@ nsContentUtils::CopyNewlineNormalizedUnicodeTo(nsReadingIterator& aSr // Updated to fix the regression (bug 263411). The list contains // characters of the following Unicode character classes : Ps, Pi, Po, Pf, Pe. // (ref.: http://www.w3.org/TR/2004/CR-CSS21-20040225/selector.html#first-letter) -// Note that the file does NOT yet include non-BMP characters. -#include "punct_marks.ccmap" -DEFINE_CCMAP(gPuncCharsCCMap, const); +#include "punct_marks.x-ccmap" +DEFINE_X_CCMAP(gPuncCharsCCMapExt, const); // static PRBool -nsContentUtils::IsPunctuationMark(PRUnichar aChar) +nsContentUtils::IsPunctuationMark(PRUint32 aChar) { - return CCMAP_HAS_CHAR(gPuncCharsCCMap, aChar); + return CCMAP_HAS_CHAR_EXT(gPuncCharsCCMapExt, aChar); +} + +// static +PRBool +nsContentUtils::IsPunctuationMarkAt(const nsTextFragment* aFrag, PRUint32 aOffset) +{ + PRUnichar h = aFrag->CharAt(aOffset); + if (!IS_SURROGATE(h)) { + return IsPunctuationMark(h); + } + if (NS_IS_HIGH_SURROGATE(h) && aOffset + 1 < aFrag->GetLength()) { + PRUnichar l = aFrag->CharAt(aOffset + 1); + if (NS_IS_LOW_SURROGATE(l)) { + return IsPunctuationMark(SURROGATE_TO_UCS4(h, l)); + } + } + return PR_FALSE; +} + +// static +PRBool nsContentUtils::IsAlphanumeric(PRUint32 aChar) +{ + nsIUGenCategory::nsUGenCategory cat = sGenCat->Get(aChar); + + return (cat == nsIUGenCategory::kLetter || cat == nsIUGenCategory::kNumber); +} + +// static +PRBool nsContentUtils::IsAlphanumericAt(const nsTextFragment* aFrag, PRUint32 aOffset) +{ + PRUnichar h = aFrag->CharAt(aOffset); + if (!IS_SURROGATE(h)) { + return IsAlphanumeric(h); + } + if (NS_IS_HIGH_SURROGATE(h) && aOffset + 1 < aFrag->GetLength()) { + PRUnichar l = aFrag->CharAt(aOffset + 1); + if (NS_IS_LOW_SURROGATE(l)) { + return IsAlphanumeric(SURROGATE_TO_UCS4(h, l)); + } + } + return PR_FALSE; } /* static */ @@ -802,6 +847,7 @@ nsContentUtils::Shutdown() NS_IF_RELEASE(sLineBreaker); NS_IF_RELEASE(sWordBreaker); NS_IF_RELEASE(sCaseConv); + NS_IF_RELEASE(sGenCat); #ifdef MOZ_XTF NS_IF_RELEASE(sXTFService); #endif diff --git a/layout/generic/nsTextFrameThebes.cpp b/layout/generic/nsTextFrameThebes.cpp index 284246af62b8..ab52cd720c18 100644 --- a/layout/generic/nsTextFrameThebes.cpp +++ b/layout/generic/nsTextFrameThebes.cpp @@ -4993,6 +4993,28 @@ nsTextFrame::GetOffsets(PRInt32 &start, PRInt32 &end) const return NS_OK; } +static PRInt32 +FindEndOfPunctuationRun(const nsTextFragment* aFrag, + gfxTextRun* aTextRun, + gfxSkipCharsIterator* aIter, + PRInt32 aOffset, + PRInt32 aStart, + PRInt32 aEnd) +{ + PRInt32 i; + + for (i = aStart; i < aEnd - aOffset; ++i) { + if (nsContentUtils::IsPunctuationMarkAt(aFrag, aOffset + i)) { + aIter->SetOriginalOffset(aOffset + i); + FindClusterEnd(aTextRun, aEnd, aIter); + i = aIter->GetOriginalOffset() - aOffset; + } else { + break; + } + } + return i; +} + /** * Returns PR_TRUE if this text frame completes the first-letter, PR_FALSE * if it does not contain a true "letter". @@ -5004,7 +5026,7 @@ nsTextFrame::GetOffsets(PRInt32 &start, PRInt32 &end) const * * @param aLength an in/out parameter: on entry contains the maximum length to * return, on exit returns length of the first-letter fragment (which may - * include leading punctuation, for example) + * include leading and trailing punctuation, for example) */ static PRBool FindFirstLetterRange(const nsTextFragment* aFrag, @@ -5012,28 +5034,36 @@ FindFirstLetterRange(const nsTextFragment* aFrag, PRInt32 aOffset, const gfxSkipCharsIterator& aIter, PRInt32* aLength) { - // Find first non-whitespace, non-punctuation cluster, and stop after it PRInt32 i; PRInt32 length = *aLength; - for (i = 0; i < length; ++i) { - if (!IsTrimmableSpace(aFrag, aOffset + i) && - !nsContentUtils::IsPunctuationMark(aFrag->CharAt(aOffset + i))) - break; - } + PRInt32 endOffset = aOffset + length; + gfxSkipCharsIterator iter(aIter); + // skip leading whitespace, then consume clusters that start with punctuation + i = FindEndOfPunctuationRun(aFrag, aTextRun, &iter, aOffset, + GetTrimmableWhitespaceCount(aFrag, aOffset, length, 1), + endOffset); if (i == length) return PR_FALSE; - // Advance to the end of the cluster - gfxSkipCharsIterator iter(aIter); - PRInt32 nextClusterStart; - for (nextClusterStart = i + 1; nextClusterStart < length; ++nextClusterStart) { - iter.SetOriginalOffset(aOffset + nextClusterStart); - if (iter.IsOriginalCharSkipped() || - aTextRun->IsClusterStart(iter.GetSkippedOffset())) - break; + // If the next character is not a letter or number, there is no first-letter. + // Return PR_TRUE so that we don't go on looking, but set aLength to 0. + if (!nsContentUtils::IsAlphanumericAt(aFrag, aOffset + i)) { + *aLength = 0; + return PR_TRUE; } - *aLength = nextClusterStart; + + // consume another cluster (the actual first letter) + iter.SetOriginalOffset(aOffset + i); + FindClusterEnd(aTextRun, endOffset, &iter); + i = iter.GetOriginalOffset() - aOffset; + if (i + 1 == length) + return PR_TRUE; + + // consume clusters that start with punctuation + i = FindEndOfPunctuationRun(aFrag, aTextRun, &iter, aOffset, i + 1, endOffset); + if (i < length) + *aLength = i; return PR_TRUE; } @@ -5521,8 +5551,10 @@ nsTextFrame::Reflow(nsPresContext* aPresContext, // Restrict to just the first-letter if necessary PRBool completedFirstLetter = PR_FALSE; if (lineLayout.GetFirstLetterStyleOK()) { - AddStateBits(TEXT_FIRST_LETTER); completedFirstLetter = FindFirstLetterRange(frag, mTextRun, offset, iter, &length); + if (length) { + AddStateBits(TEXT_FIRST_LETTER); + } } ///////////////////////////////////////////////////////////////////// diff --git a/layout/generic/punct_marks.ccmap b/layout/generic/punct_marks.x-ccmap similarity index 61% rename from layout/generic/punct_marks.ccmap rename to layout/generic/punct_marks.x-ccmap index 394c81d81e29..4affb2debba0 100755 --- a/layout/generic/punct_marks.ccmap +++ b/layout/generic/punct_marks.x-ccmap @@ -52,7 +52,7 @@ In addition, the input file can have the following optional lines that read - VARIABLE::gPuncCharsCCMap + VARIABLE::gPuncCharsCCMapExt CLASS::punct_marks DESCRIPTION:: description of a character class FILE:: mozilla source file to include the output file @@ -60,10 +60,10 @@ Then, run the following in the current directory. - perl ccmapbin.pl input_file [gPuncCharsCCMap [punct_marks]] + perl ccmapbin.pl input_file [gPuncCharsCCMapExt [punct_marks]] which will generate punct_marks.ccmap (or punct_marks.x-ccmap if the ccmap - includes non-BMP characters.). gPuncCharsCCMap is used as the prefix + includes non-BMP characters.). gPuncCharsCCMapExt is used as the prefix in macros for the array initializer and the array size. (see bug 180266, bug 167136, and bug 224337) @@ -73,15 +73,13 @@ (see bug 263411 for details) cut -d ';' -f 1-3 UnicodeData-4.0.1.txt | egrep 'Ps|Pe|Po|Pf|Pi' | cut -d ';' -f 1-2 \ - | egrep -v '[1-9A-F]{5,}' \ | sed -e 's/;/ : /' -e 's/^/ 0X/' */ /* - VARIABLE:: gPuncCharsCCMap + VARIABLE:: gPuncCharsCCMapExt CLASS:: punct_marks DESCRIPTION:: Punctuation Marks (Unicode char. classes: Ps, Pe, Po, Pi, Pf) - FILE:: layout/html/base/src/nsTextFrame.cpp 0X000021 : EXCLAMATION MARK 0X000022 : QUOTATION MARK @@ -494,13 +492,31 @@ 0X00FF63 : HALFWIDTH RIGHT CORNER BRACKET 0X00FF64 : HALFWIDTH IDEOGRAPHIC COMMA 0X00FF65 : HALFWIDTH KATAKANA MIDDLE DOT + 0X010100 : AEGEAN WORD SEPARATOR LINE + 0X010101 : AEGEAN WORD SEPARATOR DOT + 0X01039F : UGARITIC WORD DIVIDER + 0X0103D0 : OLD PERSIAN WORD DIVIDER + 0X01091F : PHOENICIAN WORD SEPARATOR + 0X010A50 : KHAROSHTHI PUNCTUATION DOT + 0X010A51 : KHAROSHTHI PUNCTUATION SMALL CIRCLE + 0X010A52 : KHAROSHTHI PUNCTUATION CIRCLE + 0X010A53 : KHAROSHTHI PUNCTUATION CRESCENT BAR + 0X010A54 : KHAROSHTHI PUNCTUATION MANGALAM + 0X010A55 : KHAROSHTHI PUNCTUATION LOTUS + 0X010A56 : KHAROSHTHI PUNCTUATION DANDA + 0X010A57 : KHAROSHTHI PUNCTUATION DOUBLE DANDA + 0X010A58 : KHAROSHTHI PUNCTUATION LINES + 0X012470 : CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER + 0X012471 : CUNEIFORM PUNCTUATION SIGN VERTICAL COLON + 0X012472 : CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON + 0X012473 : CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON */ -#if (defined(IS_LITTLE_ENDIAN) || ALU_SIZE == 16) -// Precompiled CCMap for Little Endian(16/32/64bit) -// and Big Endian(16bit) -#define gPuncCharsCCMap_SIZE 592 -#define gPuncCharsCCMap_INITIALIZER \ +#if (defined(IS_LITTLE_ENDIAN) && ALU_SIZE == 64) +// Precompiled CCMap for Little Endian(64bit) +#define gPuncCharsCCMapExt_SIZE 804 +#define gPuncCharsCCMapExt_INITIALIZER \ +/* EXTFLG */ 0x0001,0x0000,0x0250,0x0000, \ /* 000000 */ 0x0030,0x00D0,0x0160,0x01D0,0x0010,0x0010,0x0010,0x0010, \ 0x0010,0x0010,0x01F0,0x0010,0x0010,0x0010,0x0010,0x0210, \ /* 000010 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ @@ -574,11 +590,248 @@ /* 000230 */ 0x0000,0x03FF,0x0000,0xFFE1,0x1FFF,0xFEF7,0x0D03,0x0000, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ /* 000240 */ 0xD7EE,0x8C00,0x0001,0x3800,0x0000,0xA800,0x003F,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000250 */ 0x0280,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ + 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ +/* 000260 */ 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ + 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ +/* 000270 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000280 */ 0x0030,0x0010,0x0080,0x0010,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, \ +/* 000290 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002b0 */ 0x0020,0x0040,0x0020,0x0050,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0060,0x0070,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002c0 */ 0x0003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002d0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x8000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000, \ +/* 0002e0 */ 0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x01FF,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000300 */ 0x0020,0x0020,0x0020,0x0020,0x0090,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000310 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x000F, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +#elif defined(IS_LITTLE_ENDIAN) +// Precompiled CCMap for Little Endian(16/32bit) +#define gPuncCharsCCMapExt_SIZE 802 +#define gPuncCharsCCMapExt_INITIALIZER \ +/* EXTFLG */ 0x0001,0x0250, \ +/* 000000 */ 0x0030,0x00D0,0x0160,0x01D0,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x01F0,0x0010,0x0010,0x0010,0x0010,0x0210, \ +/* 000010 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000020 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000030 */ 0x0040,0x0020,0x0020,0x0050,0x0020,0x0060,0x0070,0x0080, \ + 0x0020,0x0090,0x0020,0x0020,0x0020,0x00A0,0x00B0,0x00C0, \ +/* 000040 */ 0x0000,0x0000,0xD7EE,0x8C00,0x0001,0x3800,0x0000,0x2800, \ + 0x0000,0x0000,0x0802,0x8880,0x0000,0x0000,0x0000,0x0000, \ +/* 000050 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4000, \ + 0x0080,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000060 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0xFC00,0x0000,0x0000, \ + 0x0200,0x0000,0x0000,0x4000,0x0049,0x0000,0x0000,0x0018, \ +/* 000070 */ 0x3000,0xC800,0x0000,0x0000,0x0000,0x0000,0x3C00,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0010,0x0000,0x0000, \ +/* 000080 */ 0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0380, \ +/* 000090 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0030,0x0001, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0000a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0010, \ +/* 0000b0 */ 0x0000,0x0000,0x0000,0x0000,0x8000,0x0C00,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0000c0 */ 0xFFF0,0x0007,0x0000,0x3C00,0x0000,0x0000,0x0000,0x0000, \ + 0x0020,0x0000,0x0000,0x0000,0x0000,0x0003,0x0000,0x0000, \ +/* 0000d0 */ 0x00E0,0x0020,0x0020,0x00F0,0x0020,0x0020,0x0100,0x0110, \ + 0x0120,0x0130,0x0140,0x0150,0x0020,0x0020,0x0020,0x0020, \ +/* 0000e0 */ 0x0000,0x0000,0x0000,0x0000,0xFC00,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800, \ +/* 0000f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01FE,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000100 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6000,0x0000, \ + 0x0000,0x1800,0x0000,0x0000,0x0000,0x0000,0x3800,0x0000, \ +/* 000110 */ 0x0000,0x0000,0x0000,0x0060,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0770,0x0000,0x0000, \ +/* 000120 */ 0x07BF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000130 */ 0x0000,0x0000,0x0000,0x0000,0x0030,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,0x0000,0x0000, \ +/* 000140 */ 0x0000,0xC000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000150 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0xFC00,0x0001,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000160 */ 0x0170,0x0020,0x0020,0x0180,0x0020,0x0020,0x0020,0x0190, \ + 0x0020,0x01A0,0x0020,0x0020,0x01B0,0x0020,0x01C0,0x0020, \ +/* 000170 */ 0x0000,0xFFC0,0x00FF,0x7FFF,0xFFEE,0x7FEB,0x0000,0x6000, \ + 0x6000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000180 */ 0x0000,0x0000,0x0600,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000190 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF00,0x003F, \ + 0x0000,0x0000,0x0000,0x0000,0x0060,0x0000,0x0FC0,0x0000, \ +/* 0001a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0xFFF8,0x01FF,0x0000,0x0000,0x0000,0x0F00,0x0000,0x3000, \ +/* 0001b0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDE00, \ +/* 0001c0 */ 0xFFFF,0x307F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0001d0 */ 0x01E0,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0001e0 */ 0xFF0E,0xEFF3,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800, \ +/* 0001f0 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0200,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000200 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F0, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000210 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0220,0x0230,0x0240, \ +/* 000220 */ 0x0000,0x0000,0x0000,0xC000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000230 */ 0x0000,0x03FF,0x0000,0xFFE1,0x1FFF,0xFEF7,0x0D03,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000240 */ 0xD7EE,0x8C00,0x0001,0x3800,0x0000,0xA800,0x003F,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000250 */ 0x0280,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ + 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ +/* 000260 */ 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ + 0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000, \ +/* 000270 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000280 */ 0x0030,0x0010,0x0080,0x0010,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, \ +/* 000290 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002b0 */ 0x0020,0x0040,0x0020,0x0050,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0060,0x0070,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002c0 */ 0x0003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002d0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x8000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000, \ +/* 0002e0 */ 0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x01FF,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000300 */ 0x0020,0x0020,0x0020,0x0020,0x0090,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000310 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x000F, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +#elif (ALU_SIZE == 16) +// Precompiled CCMap for Big Endian(16bit) +#define gPuncCharsCCMapExt_SIZE 802 +#define gPuncCharsCCMapExt_INITIALIZER \ +/* EXTFLG */ 0x0001,0x0250, \ +/* 000000 */ 0x0030,0x00D0,0x0160,0x01D0,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x01F0,0x0010,0x0010,0x0010,0x0010,0x0210, \ +/* 000010 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000020 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000030 */ 0x0040,0x0020,0x0020,0x0050,0x0020,0x0060,0x0070,0x0080, \ + 0x0020,0x0090,0x0020,0x0020,0x0020,0x00A0,0x00B0,0x00C0, \ +/* 000040 */ 0x0000,0x0000,0xD7EE,0x8C00,0x0001,0x3800,0x0000,0x2800, \ + 0x0000,0x0000,0x0802,0x8880,0x0000,0x0000,0x0000,0x0000, \ +/* 000050 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4000, \ + 0x0080,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000060 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0xFC00,0x0000,0x0000, \ + 0x0200,0x0000,0x0000,0x4000,0x0049,0x0000,0x0000,0x0018, \ +/* 000070 */ 0x3000,0xC800,0x0000,0x0000,0x0000,0x0000,0x3C00,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0010,0x0000,0x0000, \ +/* 000080 */ 0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0380, \ +/* 000090 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0030,0x0001, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0000a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0010, \ +/* 0000b0 */ 0x0000,0x0000,0x0000,0x0000,0x8000,0x0C00,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0000c0 */ 0xFFF0,0x0007,0x0000,0x3C00,0x0000,0x0000,0x0000,0x0000, \ + 0x0020,0x0000,0x0000,0x0000,0x0000,0x0003,0x0000,0x0000, \ +/* 0000d0 */ 0x00E0,0x0020,0x0020,0x00F0,0x0020,0x0020,0x0100,0x0110, \ + 0x0120,0x0130,0x0140,0x0150,0x0020,0x0020,0x0020,0x0020, \ +/* 0000e0 */ 0x0000,0x0000,0x0000,0x0000,0xFC00,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800, \ +/* 0000f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01FE,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000100 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6000,0x0000, \ + 0x0000,0x1800,0x0000,0x0000,0x0000,0x0000,0x3800,0x0000, \ +/* 000110 */ 0x0000,0x0000,0x0000,0x0060,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0770,0x0000,0x0000, \ +/* 000120 */ 0x07BF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000130 */ 0x0000,0x0000,0x0000,0x0000,0x0030,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0xC000,0x0000,0x0000, \ +/* 000140 */ 0x0000,0xC000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000150 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0xFC00,0x0001,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000160 */ 0x0170,0x0020,0x0020,0x0180,0x0020,0x0020,0x0020,0x0190, \ + 0x0020,0x01A0,0x0020,0x0020,0x01B0,0x0020,0x01C0,0x0020, \ +/* 000170 */ 0x0000,0xFFC0,0x00FF,0x7FFF,0xFFEE,0x7FEB,0x0000,0x6000, \ + 0x6000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000180 */ 0x0000,0x0000,0x0600,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000190 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF00,0x003F, \ + 0x0000,0x0000,0x0000,0x0000,0x0060,0x0000,0x0FC0,0x0000, \ +/* 0001a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0xFFF8,0x01FF,0x0000,0x0000,0x0000,0x0F00,0x0000,0x3000, \ +/* 0001b0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDE00, \ +/* 0001c0 */ 0xFFFF,0x307F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0001d0 */ 0x01E0,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0001e0 */ 0xFF0E,0xEFF3,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0800, \ +/* 0001f0 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0200,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000200 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F0, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000210 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0220,0x0230,0x0240, \ +/* 000220 */ 0x0000,0x0000,0x0000,0xC000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000230 */ 0x0000,0x03FF,0x0000,0xFFE1,0x1FFF,0xFEF7,0x0D03,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000240 */ 0xD7EE,0x8C00,0x0001,0x3800,0x0000,0xA800,0x003F,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000250 */ 0x0000,0x0280,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000260 */ 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000270 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000280 */ 0x0030,0x0010,0x0080,0x0010,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, \ +/* 000290 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002b0 */ 0x0020,0x0040,0x0020,0x0050,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0060,0x0070,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002c0 */ 0x0003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002d0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x8000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000, \ +/* 0002e0 */ 0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x01FF,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000300 */ 0x0020,0x0020,0x0020,0x0020,0x0090,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000310 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x000F, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, #elif (ALU_SIZE == 32) // Precompiled CCMap for Big Endian(32bit) -#define gPuncCharsCCMap_SIZE 592 -#define gPuncCharsCCMap_INITIALIZER \ +#define gPuncCharsCCMapExt_SIZE 802 +#define gPuncCharsCCMapExt_INITIALIZER \ +/* EXTFLG */ 0x0001,0x0250, \ /* 000000 */ 0x0030,0x00D0,0x0160,0x01D0,0x0010,0x0010,0x0010,0x0010, \ 0x0010,0x0010,0x01F0,0x0010,0x0010,0x0010,0x0010,0x0210, \ /* 000010 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ @@ -652,11 +905,38 @@ /* 000230 */ 0x03FF,0x0000,0xFFE1,0x0000,0xFEF7,0x1FFF,0x0000,0x0D03, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ /* 000240 */ 0x8C00,0xD7EE,0x3800,0x0001,0xA800,0x0000,0x0000,0x003F, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000250 */ 0x0000,0x0280,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000260 */ 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000270 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000280 */ 0x0030,0x0010,0x0080,0x0010,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, \ +/* 000290 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002b0 */ 0x0020,0x0040,0x0020,0x0050,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0060,0x0070,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002c0 */ 0x0000,0x0003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002d0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x8000,0x0000,0x0000,0x0000,0x0001,0x0000,0x0000,0x0000, \ +/* 0002e0 */ 0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002f0 */ 0x0000,0x0000,0x0000,0x0000,0x01FF,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000300 */ 0x0020,0x0020,0x0020,0x0020,0x0090,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000310 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x000F,0x0000, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, #elif (ALU_SIZE == 64) // Precompiled CCMap for Big Endian(64bit) -#define gPuncCharsCCMap_SIZE 592 -#define gPuncCharsCCMap_INITIALIZER \ +#define gPuncCharsCCMapExt_SIZE 804 +#define gPuncCharsCCMapExt_INITIALIZER \ +/* EXTFLG */ 0x0000,0x0001,0x0000,0x0250, \ /* 000000 */ 0x0030,0x00D0,0x0160,0x01D0,0x0010,0x0010,0x0010,0x0010, \ 0x0010,0x0010,0x01F0,0x0010,0x0010,0x0010,0x0010,0x0210, \ /* 000010 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ @@ -730,6 +1010,32 @@ /* 000230 */ 0xFFE1,0x0000,0x03FF,0x0000,0x0000,0x0D03,0xFEF7,0x1FFF, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ /* 000240 */ 0x3800,0x0001,0x8C00,0xD7EE,0x0000,0x003F,0xA800,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000250 */ 0x0000,0x0280,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000260 */ 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ + 0x0000,0x0270,0x0000,0x0270,0x0000,0x0270,0x0000,0x0270, \ +/* 000270 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000280 */ 0x0030,0x0010,0x0080,0x0010,0x0010,0x0010,0x0010,0x0010, \ + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, \ +/* 000290 */ 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002a0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002b0 */ 0x0020,0x0040,0x0020,0x0050,0x0020,0x0020,0x0020,0x0020, \ + 0x0020,0x0060,0x0070,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 0002c0 */ 0x0000,0x0000,0x0000,0x0003,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002d0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0001,0x0000, \ +/* 0002e0 */ 0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 0002f0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01FF,0x0000, \ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, \ +/* 000300 */ 0x0020,0x0020,0x0020,0x0020,0x0090,0x0020,0x0020,0x0020, \ + 0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, \ +/* 000310 */ 0x0000,0x0000,0x0000,0x0000,0x000F,0x0000,0x0000,0x0000, \ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, #else #error "We don't support this architecture." diff --git a/layout/reftests/first-letter/399941-1-ref.html b/layout/reftests/first-letter/399941-1-ref.html new file mode 100644 index 000000000000..586bfd92e133 --- /dev/null +++ b/layout/reftests/first-letter/399941-1-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          "I!," said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-1.html b/layout/reftests/first-letter/399941-1.html new file mode 100644 index 000000000000..c8de114751ad --- /dev/null +++ b/layout/reftests/first-letter/399941-1.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          "I!," said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-2-ref.html b/layout/reftests/first-letter/399941-2-ref.html new file mode 100644 index 000000000000..05d0d4b8d6d2 --- /dev/null +++ b/layout/reftests/first-letter/399941-2-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          _I_, said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-2.html b/layout/reftests/first-letter/399941-2.html new file mode 100644 index 000000000000..ebe376661eb4 --- /dev/null +++ b/layout/reftests/first-letter/399941-2.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          _I_, said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-3-ref.html b/layout/reftests/first-letter/399941-3-ref.html new file mode 100644 index 000000000000..101724ad976c --- /dev/null +++ b/layout/reftests/first-letter/399941-3-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          ¿Cómo está usted?

          + + diff --git a/layout/reftests/first-letter/399941-3.html b/layout/reftests/first-letter/399941-3.html new file mode 100644 index 000000000000..f1df77c2c91e --- /dev/null +++ b/layout/reftests/first-letter/399941-3.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          ¿Cómo está usted?

          + + diff --git a/layout/reftests/first-letter/399941-4-ref.html b/layout/reftests/first-letter/399941-4-ref.html new file mode 100644 index 000000000000..4396fa0a5a0d --- /dev/null +++ b/layout/reftests/first-letter/399941-4-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          “I!,” said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-4.html b/layout/reftests/first-letter/399941-4.html new file mode 100644 index 000000000000..6c7000a3a140 --- /dev/null +++ b/layout/reftests/first-letter/399941-4.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          “I!,” said the Fly,

          + + diff --git a/layout/reftests/first-letter/399941-5-ref.html b/layout/reftests/first-letter/399941-5-ref.html new file mode 100644 index 000000000000..d0e25accc884 --- /dev/null +++ b/layout/reftests/first-letter/399941-5-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          "*" is an asterix

          + + diff --git a/layout/reftests/first-letter/399941-5.html b/layout/reftests/first-letter/399941-5.html new file mode 100644 index 000000000000..b70abd461fd1 --- /dev/null +++ b/layout/reftests/first-letter/399941-5.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          "*" is an asterix

          + + diff --git a/layout/reftests/first-letter/399941-6-ref.html b/layout/reftests/first-letter/399941-6-ref.html new file mode 100644 index 000000000000..691b87ce862c --- /dev/null +++ b/layout/reftests/first-letter/399941-6-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          2,000 miles

          + + diff --git a/layout/reftests/first-letter/399941-6.html b/layout/reftests/first-letter/399941-6.html new file mode 100644 index 000000000000..39cc9ef39fae --- /dev/null +++ b/layout/reftests/first-letter/399941-6.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          2,000 miles

          + + diff --git a/layout/reftests/first-letter/399941-7-ref.html b/layout/reftests/first-letter/399941-7-ref.html new file mode 100644 index 000000000000..60a612a3fc9f --- /dev/null +++ b/layout/reftests/first-letter/399941-7-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          $64,000

          + + diff --git a/layout/reftests/first-letter/399941-7.html b/layout/reftests/first-letter/399941-7.html new file mode 100644 index 000000000000..a5c474ecfa2c --- /dev/null +++ b/layout/reftests/first-letter/399941-7.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          $64,000

          + + diff --git a/layout/reftests/first-letter/399941-8-ref.html b/layout/reftests/first-letter/399941-8-ref.html new file mode 100644 index 000000000000..b476838f6ecf --- /dev/null +++ b/layout/reftests/first-letter/399941-8-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          𐤀𐤁𐤉 is Phoenician

          + + diff --git a/layout/reftests/first-letter/399941-8.html b/layout/reftests/first-letter/399941-8.html new file mode 100644 index 000000000000..e09ab1d3534f --- /dev/null +++ b/layout/reftests/first-letter/399941-8.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          𐤀𐤁𐤉 is Phoenician

          + + diff --git a/layout/reftests/first-letter/399941-9-ref.html b/layout/reftests/first-letter/399941-9-ref.html new file mode 100644 index 000000000000..524afc6f3a90 --- /dev/null +++ b/layout/reftests/first-letter/399941-9-ref.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          𒑰𒀀𒑰𒁁 is cuneiform with punctuation

          + + diff --git a/layout/reftests/first-letter/399941-9.html b/layout/reftests/first-letter/399941-9.html new file mode 100644 index 000000000000..8e18ccd9930a --- /dev/null +++ b/layout/reftests/first-letter/399941-9.html @@ -0,0 +1,17 @@ + + + + + Test case for bug 399941.html + + + + +

          𒑰𒀀𒑰𒁁 is cuneiform with punctuation

          + + diff --git a/layout/reftests/first-letter/nested-1g.html b/layout/reftests/first-letter/nested-1g.html new file mode 100644 index 000000000000..bfe2753b94b5 --- /dev/null +++ b/layout/reftests/first-letter/nested-1g.html @@ -0,0 +1,14 @@ + + + + + + +
          + This is text +
          + + diff --git a/layout/reftests/first-letter/reftest.list b/layout/reftests/first-letter/reftest.list index d7e3cad15f19..ed2345f7e96c 100644 --- a/layout/reftests/first-letter/reftest.list +++ b/layout/reftests/first-letter/reftest.list @@ -12,6 +12,7 @@ == nested-1d.html nested-1-ref.html == nested-1e.html nested-1-ref.html == nested-1f.html nested-1-ref.html +== nested-1g.html nested-1-ref.html == quote-1a.html quote-1-ref.html fails == quote-1b.html quote-1-ref.html fails == quote-1c.html quote-1-ref.html @@ -33,3 +34,12 @@ random-if(MOZ_WIDGET_TOOLKIT=="gtk2") == 329069-1.html 329069-1-ref.html # failu == 229764-2.html 229764-ref.html == 342120-1.xhtml 342120-1-ref.xhtml == 379799-1.html 379799-1-ref.html +== 399941-1.html 399941-1-ref.html +== 399941-2.html 399941-2-ref.html +== 399941-3.html 399941-3-ref.html +== 399941-4.html 399941-4-ref.html +== 399941-5.html 399941-5-ref.html +== 399941-6.html 399941-6-ref.html +== 399941-7.html 399941-7-ref.html +== 399941-8.html 399941-8-ref.html +== 399941-9.html 399941-9-ref.html From 61414a5366c6fe960407c4ed247073b9f95dac0b Mon Sep 17 00:00:00 2001 From: Brad Lassey Date: Wed, 2 Jul 2008 12:35:31 -0400 Subject: [PATCH 98/98] changes to honor the disable printing flag b=362455 r=roc sr=roc --- widget/src/gtk2/Makefile.in | 10 ++++++++-- widget/src/gtk2/nsWidgetFactory.cpp | 23 ++++++++++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/widget/src/gtk2/Makefile.in b/widget/src/gtk2/Makefile.in index 6ae2d2810ba0..f95a6da3bcc4 100644 --- a/widget/src/gtk2/Makefile.in +++ b/widget/src/gtk2/Makefile.in @@ -105,14 +105,20 @@ CPPSRCS = \ nsNativeKeyBindings.cpp \ nsScreenGtk.cpp \ nsScreenManagerGtk.cpp \ - nsDeviceContextSpecG.cpp \ - nsPrintOptionsGTK.cpp \ nsImageToPixbuf.cpp \ nsAccessibilityHelper.cpp \ nsIdleServiceGTK.cpp \ + $(NULL) + + +ifdef NS_PRINTING +CPPSRCS += \ + nsDeviceContextSpecG.cpp \ + nsPrintOptionsGTK.cpp \ nsPrintDialogGTK.cpp \ nsPrintSettingsGTK.cpp \ $(NULL) +endif # build our subdirs, too ifdef ACCESSIBILITY diff --git a/widget/src/gtk2/nsWidgetFactory.cpp b/widget/src/gtk2/nsWidgetFactory.cpp index 71240da8898c..804ceb355fbe 100644 --- a/widget/src/gtk2/nsWidgetFactory.cpp +++ b/widget/src/gtk2/nsWidgetFactory.cpp @@ -53,9 +53,13 @@ #include "nsBidiKeyboard.h" #include "nsNativeKeyBindings.h" #include "nsScreenManagerGtk.h" + +#ifdef NS_PRINTING #include "nsPrintOptionsGTK.h" #include "nsPrintSession.h" #include "nsDeviceContextSpecG.h" +#endif + #include "nsIPrefService.h" #include "nsIPrefBranch.h" #include "nsImageToPixbuf.h" @@ -89,16 +93,19 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsClipboard, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService) NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) NS_GENERIC_FACTORY_CONSTRUCTOR(nsScreenManagerGtk) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecGTK) #ifdef NATIVE_THEME_SUPPORT NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeThemeGTK) #endif +NS_GENERIC_FACTORY_CONSTRUCTOR(nsImageToPixbuf) +NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceGTK) + +#ifdef NS_PRINTING +NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecGTK) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsGTK, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrinterEnumeratorGTK) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsImageToPixbuf) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceGTK) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintDialogServiceGTK, Init) +#endif static NS_IMETHODIMP nsFilePickerConstructor(nsISupports *aOuter, REFNSIID aIID, @@ -250,6 +257,7 @@ static const nsModuleComponentInfo components[] = "@mozilla.org/chrome/chrome-native-theme;1", nsNativeThemeGTKConstructor }, #endif +#ifdef NS_PRINTING { "PrintSettings Service", NS_PRINTSETTINGSSERVICE_CID, "@mozilla.org/gfx/printsettings-service;1", @@ -268,6 +276,11 @@ static const nsModuleComponentInfo components[] = // "@mozilla.org/gfx/device_context_spec/gtk;1", "@mozilla.org/gfx/devicecontextspec;1", nsDeviceContextSpecGTKConstructor }, + { "Native Print Dialog", + NS_PRINTDIALOGSERVICE_CID, + NS_PRINTDIALOGSERVICE_CONTRACTID, + nsPrintDialogServiceGTKConstructor }, +#endif { "Image to gdk-pixbuf converter", NS_IMAGE_TO_PIXBUF_CID, "@mozilla.org/widget/image-to-gdk-pixbuf;1", @@ -276,10 +289,6 @@ static const nsModuleComponentInfo components[] = NS_IDLE_SERVICE_CID, "@mozilla.org/widget/idleservice;1", nsIdleServiceGTKConstructor }, - { "Native Print Dialog", - NS_PRINTDIALOGSERVICE_CID, - NS_PRINTDIALOGSERVICE_CONTRACTID, - nsPrintDialogServiceGTKConstructor }, }; PR_STATIC_CALLBACK(void)