288 lines
9.6 KiB
Diff
288 lines
9.6 KiB
Diff
diff -up xulrunner-14.0.1/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h.691898 xulrunner-14.0.1/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h.691898 2012-07-13 23:42:56.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h 2012-07-16 13:46:03.512655482 +0200
|
|
@@ -468,8 +468,6 @@ public:
|
|
{
|
|
sync_instruction_memory((caddr_t)code, size);
|
|
}
|
|
-#else
|
|
- #error "The cacheFlush support is missing on this platform."
|
|
#endif
|
|
|
|
private:
|
|
diff -up xulrunner-14.0.1/mozilla-release/js/src/Makefile.in.691898 xulrunner-14.0.1/mozilla-release/js/src/Makefile.in
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/Makefile.in.691898 2012-07-13 23:42:56.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/Makefile.in 2012-07-16 13:48:34.039399155 +0200
|
|
@@ -320,20 +320,22 @@ endif
|
|
|
|
endif
|
|
|
|
-# For architectures without YARR JIT, PCRE is faster than the YARR
|
|
-# interpreter (bug 684559).
|
|
-
|
|
ifeq (,$(filter arm% sparc %86 x86_64 mips%,$(TARGET_CPU)))
|
|
|
|
-VPATH += $(srcdir)/yarr/pcre \
|
|
- $(NULL)
|
|
+VPATH += $(srcdir)/assembler \
|
|
+ $(srcdir)/assembler/wtf \
|
|
+ $(srcdir)/assembler/jit \
|
|
+ $(srcdir)/yarr \
|
|
|
|
-CPPSRCS += \
|
|
- pcre_compile.cpp \
|
|
- pcre_exec.cpp \
|
|
- pcre_tables.cpp \
|
|
- pcre_xclass.cpp \
|
|
- pcre_ucp_searchfuncs.cpp \
|
|
+CPPSRCS += ExecutableAllocator.cpp \
|
|
+ ExecutableAllocatorPosix.cpp \
|
|
+ OSAllocatorOS2.cpp \
|
|
+ OSAllocatorPosix.cpp \
|
|
+ OSAllocatorWin.cpp \
|
|
+ PageBlock.cpp \
|
|
+ YarrInterpreter.cpp \
|
|
+ YarrPattern.cpp \
|
|
+ YarrSyntaxChecker.cpp \
|
|
$(NULL)
|
|
else
|
|
|
|
@@ -903,4 +905,3 @@ endif
|
|
#
|
|
# END kludges for the Nitro assembler
|
|
###############################################
|
|
-
|
|
diff -up xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.cpp.691898 xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.cpp
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.cpp.691898 2012-07-13 23:42:59.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.cpp 2012-07-16 13:46:03.897657354 +0200
|
|
@@ -168,7 +168,6 @@ MatchPairs::checkAgainst(size_t inputLen
|
|
|
|
/* detail::RegExpCode */
|
|
|
|
-#if ENABLE_YARR_JIT
|
|
void
|
|
RegExpCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode error)
|
|
{
|
|
@@ -200,46 +199,9 @@ RegExpCode::reportYarrError(JSContext *c
|
|
}
|
|
}
|
|
|
|
-#else /* !ENABLE_YARR_JIT */
|
|
-
|
|
-void
|
|
-RegExpCode::reportPCREError(JSContext *cx, int error)
|
|
-{
|
|
-#define REPORT(msg_) \
|
|
- JS_ReportErrorFlagsAndNumberUC(cx, JSREPORT_ERROR, js_GetErrorMessage, NULL, msg_); \
|
|
- return
|
|
- switch (error) {
|
|
- case -2: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 0: JS_NOT_REACHED("Precondition violation: an error must have occurred.");
|
|
- case 1: REPORT(JSMSG_TRAILING_SLASH);
|
|
- case 2: REPORT(JSMSG_TRAILING_SLASH);
|
|
- case 3: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 4: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
- case 5: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
- case 6: REPORT(JSMSG_BAD_CLASS_RANGE);
|
|
- case 7: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 8: REPORT(JSMSG_BAD_CLASS_RANGE);
|
|
- case 9: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
- case 10: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
|
- case 11: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 12: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
|
- case 13: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 14: REPORT(JSMSG_MISSING_PAREN);
|
|
- case 15: REPORT(JSMSG_BAD_BACKREF);
|
|
- case 16: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- case 17: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
- default:
|
|
- JS_NOT_REACHED("Precondition violation: unknown PCRE error code.");
|
|
- }
|
|
-#undef REPORT
|
|
-}
|
|
-
|
|
-#endif /* ENABLE_YARR_JIT */
|
|
-
|
|
bool
|
|
RegExpCode::compile(JSContext *cx, JSLinearString &pattern, unsigned *parenCount, RegExpFlag flags)
|
|
{
|
|
-#if ENABLE_YARR_JIT
|
|
/* Parse the pattern. */
|
|
ErrorCode yarrError;
|
|
YarrPattern yarrPattern(pattern, bool(flags & IgnoreCaseFlag), bool(flags & MultilineFlag),
|
|
@@ -256,7 +218,7 @@ RegExpCode::compile(JSContext *cx, JSLin
|
|
* case we have to bytecode compile it.
|
|
*/
|
|
|
|
-#ifdef JS_METHODJIT
|
|
+#if ENABLE_YARR_JIT && defined(JS_METHODJIT)
|
|
if (isJITRuntimeEnabled(cx) && !yarrPattern.m_containsBackreferences) {
|
|
JSC::ExecutableAllocator *execAlloc = cx->runtime->getExecutableAllocator(cx);
|
|
if (!execAlloc) {
|
|
@@ -277,21 +239,11 @@ RegExpCode::compile(JSContext *cx, JSLin
|
|
return false;
|
|
}
|
|
|
|
+#if ENABLE_YARR_JIT
|
|
codeBlock.setFallBack(true);
|
|
+#endif
|
|
byteCode = byteCompile(yarrPattern, bumpAlloc).get();
|
|
return true;
|
|
-#else /* !defined(ENABLE_YARR_JIT) */
|
|
- int error = 0;
|
|
- compiled = jsRegExpCompile(pattern.chars(), pattern.length(),
|
|
- ignoreCase() ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase,
|
|
- multiline() ? JSRegExpMultiline : JSRegExpSingleLine,
|
|
- parenCount, &error);
|
|
- if (error) {
|
|
- reportPCREError(cx, error);
|
|
- return false;
|
|
- }
|
|
- return true;
|
|
-#endif
|
|
}
|
|
|
|
RegExpRunStatus
|
|
@@ -306,19 +258,12 @@ RegExpCode::execute(JSContext *cx, const
|
|
else
|
|
result = JSC::Yarr::execute(codeBlock, chars, start, length, output);
|
|
#else
|
|
- result = jsRegExpExecute(cx, compiled, chars, length, start, output, outputCount);
|
|
+ result = JSC::Yarr::interpret(byteCode, chars, start, length, output);
|
|
#endif
|
|
|
|
if (result == -1)
|
|
return RegExpRunStatus_Success_NotFound;
|
|
|
|
-#if !ENABLE_YARR_JIT
|
|
- if (result < 0) {
|
|
- reportPCREError(cx, result);
|
|
- return RegExpRunStatus_Error;
|
|
- }
|
|
-#endif
|
|
-
|
|
JS_ASSERT(result >= 0);
|
|
return RegExpRunStatus_Success;
|
|
}
|
|
diff -up xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.h.691898 xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.h
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.h.691898 2012-07-13 23:42:59.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject.h 2012-07-16 13:46:03.897657354 +0200
|
|
@@ -52,10 +52,8 @@
|
|
#include "yarr/Yarr.h"
|
|
#if ENABLE_YARR_JIT
|
|
#include "yarr/YarrJIT.h"
|
|
-#include "yarr/YarrSyntaxChecker.h"
|
|
-#else
|
|
-#include "yarr/pcre/pcre.h"
|
|
#endif
|
|
+#include "yarr/YarrSyntaxChecker.h"
|
|
|
|
/*
|
|
* JavaScript Regular Expressions
|
|
@@ -113,68 +111,51 @@ namespace detail {
|
|
|
|
class RegExpCode
|
|
{
|
|
-#if ENABLE_YARR_JIT
|
|
typedef JSC::Yarr::BytecodePattern BytecodePattern;
|
|
typedef JSC::Yarr::ErrorCode ErrorCode;
|
|
+ typedef JSC::Yarr::YarrPattern YarrPattern;
|
|
+#if ENABLE_YARR_JIT
|
|
typedef JSC::Yarr::JSGlobalData JSGlobalData;
|
|
typedef JSC::Yarr::YarrCodeBlock YarrCodeBlock;
|
|
- typedef JSC::Yarr::YarrPattern YarrPattern;
|
|
|
|
/* Note: Native code is valid only if |codeBlock.isFallBack() == false|. */
|
|
YarrCodeBlock codeBlock;
|
|
- BytecodePattern *byteCode;
|
|
-#else
|
|
- JSRegExp *compiled;
|
|
#endif
|
|
+ BytecodePattern *byteCode;
|
|
|
|
public:
|
|
RegExpCode()
|
|
:
|
|
#if ENABLE_YARR_JIT
|
|
codeBlock(),
|
|
- byteCode(NULL)
|
|
-#else
|
|
- compiled(NULL)
|
|
#endif
|
|
+ byteCode(NULL)
|
|
{ }
|
|
|
|
~RegExpCode() {
|
|
#if ENABLE_YARR_JIT
|
|
codeBlock.release();
|
|
+#endif
|
|
if (byteCode)
|
|
Foreground::delete_<BytecodePattern>(byteCode);
|
|
-#else
|
|
- if (compiled)
|
|
- jsRegExpFree(compiled);
|
|
-#endif
|
|
}
|
|
|
|
static bool checkSyntax(JSContext *cx, TokenStream *tokenStream, JSLinearString *source) {
|
|
-#if ENABLE_YARR_JIT
|
|
ErrorCode error = JSC::Yarr::checkSyntax(*source);
|
|
if (error == JSC::Yarr::NoError)
|
|
return true;
|
|
|
|
reportYarrError(cx, tokenStream, error);
|
|
return false;
|
|
-#else
|
|
-# error "Syntax checking not implemented for !ENABLE_YARR_JIT"
|
|
-#endif
|
|
}
|
|
|
|
#if ENABLE_YARR_JIT
|
|
static inline bool isJITRuntimeEnabled(JSContext *cx);
|
|
- static void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error);
|
|
-#else
|
|
- static void reportPCREError(JSContext *cx, int error);
|
|
#endif
|
|
+ static void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error);
|
|
|
|
static size_t getOutputSize(size_t pairCount) {
|
|
-#if ENABLE_YARR_JIT
|
|
return pairCount * 2;
|
|
-#else
|
|
- return pairCount * 3; /* Should be x2, but PCRE has... needs. */
|
|
-#endif
|
|
}
|
|
|
|
bool compile(JSContext *cx, JSLinearString &pattern, unsigned *parenCount, RegExpFlag flags);
|
|
diff -up xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject-inl.h.691898 xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject-inl.h
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject-inl.h.691898 2012-07-13 23:42:59.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/vm/RegExpObject-inl.h 2012-07-16 13:46:03.898657360 +0200
|
|
@@ -137,6 +137,7 @@ RegExpObject::setSticky(bool enabled)
|
|
setSlot(STICKY_FLAG_SLOT, BooleanValue(enabled));
|
|
}
|
|
|
|
+#if ENABLE_YARR_JIT
|
|
/* This function should be deleted once bad Android platforms phase out. See bug 604774. */
|
|
inline bool
|
|
detail::RegExpCode::isJITRuntimeEnabled(JSContext *cx)
|
|
@@ -147,6 +148,7 @@ detail::RegExpCode::isJITRuntimeEnabled(
|
|
return true;
|
|
#endif
|
|
}
|
|
+#endif
|
|
|
|
inline bool
|
|
RegExpToShared(JSContext *cx, JSObject &obj, RegExpGuard *g)
|
|
diff -up xulrunner-14.0.1/mozilla-release/js/src/yarr/wtfbridge.h.691898 xulrunner-14.0.1/mozilla-release/js/src/yarr/wtfbridge.h
|
|
--- xulrunner-14.0.1/mozilla-release/js/src/yarr/wtfbridge.h.691898 2012-07-13 23:42:59.000000000 +0200
|
|
+++ xulrunner-14.0.1/mozilla-release/js/src/yarr/wtfbridge.h 2012-07-16 13:46:03.898657360 +0200
|
|
@@ -49,9 +49,7 @@
|
|
#include "jsprvtd.h"
|
|
#include "vm/String.h"
|
|
#include "assembler/wtf/Platform.h"
|
|
-#if ENABLE_YARR_JIT
|
|
#include "assembler/jit/ExecutableAllocator.h"
|
|
-#endif
|
|
|
|
namespace JSC { namespace Yarr {
|
|
|