378
|
1 |
diff --git a/js/src/Makefile.in b/js/src/Makefile.in
|
|
2 |
--- a/js/src/Makefile.in
|
|
3 |
+++ b/js/src/Makefile.in
|
445
|
4 |
@@ -332,30 +332,33 @@ CPPSRCS += checks.cc \
|
|
5 |
platform.cc \
|
|
6 |
utils.cc \
|
|
7 |
$(NONE)
|
|
8 |
|
|
9 |
#
|
386
|
10 |
# END enclude sources for V8 dtoa
|
|
11 |
#############################################
|
|
12 |
|
445
|
13 |
-# For architectures without YARR JIT, PCRE is faster than the YARR
|
|
14 |
-# interpreter (bug 684559).
|
|
15 |
-
|
401
|
16 |
ifeq (,$(filter arm% sparc %86 x86_64 mips%,$(TARGET_CPU)))
|
378
|
17 |
|
|
18 |
-VPATH += $(srcdir)/yarr/pcre \
|
445
|
19 |
+VPATH += $(srcdir)/assembler \
|
|
20 |
+ $(srcdir)/assembler/wtf \
|
|
21 |
+ $(srcdir)/assembler/jit \
|
|
22 |
+ $(srcdir)/yarr \
|
378
|
23 |
$(NULL)
|
|
24 |
|
445
|
25 |
-CPPSRCS += \
|
378
|
26 |
- pcre_compile.cpp \
|
|
27 |
- pcre_exec.cpp \
|
|
28 |
- pcre_tables.cpp \
|
|
29 |
- pcre_xclass.cpp \
|
|
30 |
- pcre_ucp_searchfuncs.cpp \
|
445
|
31 |
+CPPSRCS += ExecutableAllocator.cpp \
|
|
32 |
+ ExecutableAllocatorPosix.cpp \
|
|
33 |
+ OSAllocatorOS2.cpp \
|
|
34 |
+ OSAllocatorPosix.cpp \
|
|
35 |
+ OSAllocatorWin.cpp \
|
|
36 |
+ PageBlock.cpp \
|
|
37 |
+ YarrInterpreter.cpp \
|
|
38 |
+ YarrPattern.cpp \
|
|
39 |
+ YarrSyntaxChecker.cpp \
|
378
|
40 |
$(NULL)
|
|
41 |
else
|
|
42 |
|
386
|
43 |
###############################################
|
|
44 |
# BEGIN include sources for the Nitro assembler
|
|
45 |
#
|
|
46 |
|
|
47 |
ENABLE_YARR_JIT = 1
|
445
|
48 |
diff --git a/js/src/assembler/jit/ExecutableAllocator.h b/js/src/assembler/jit/ExecutableAllocator.h
|
|
49 |
--- a/js/src/assembler/jit/ExecutableAllocator.h
|
|
50 |
+++ b/js/src/assembler/jit/ExecutableAllocator.h
|
|
51 |
@@ -462,18 +462,16 @@ public:
|
|
52 |
: "r" (code), "r" (reinterpret_cast<char*>(code) + size)
|
|
53 |
: "r0", "r1", "r2");
|
|
54 |
}
|
|
55 |
#elif WTF_CPU_SPARC
|
|
56 |
static void cacheFlush(void* code, size_t size)
|
|
57 |
{
|
|
58 |
sync_instruction_memory((caddr_t)code, size);
|
|
59 |
}
|
|
60 |
-#else
|
|
61 |
- #error "The cacheFlush support is missing on this platform."
|
401
|
62 |
#endif
|
|
63 |
|
445
|
64 |
private:
|
401
|
65 |
|
445
|
66 |
#if ENABLE_ASSEMBLER_WX_EXCLUSIVE
|
|
67 |
static void reprotectRegion(void*, size_t, ProtectionSetting);
|
|
68 |
#endif
|
401
|
69 |
|
|
70 |
diff --git a/js/src/vm/RegExpObject-inl.h b/js/src/vm/RegExpObject-inl.h
|
|
71 |
--- a/js/src/vm/RegExpObject-inl.h
|
|
72 |
+++ b/js/src/vm/RegExpObject-inl.h
|
445
|
73 |
@@ -132,16 +132,17 @@ RegExpObject::setMultiline(bool enabled)
|
401
|
74 |
}
|
|
75 |
|
|
76 |
inline void
|
|
77 |
RegExpObject::setSticky(bool enabled)
|
|
78 |
{
|
|
79 |
setSlot(STICKY_FLAG_SLOT, BooleanValue(enabled));
|
|
80 |
}
|
|
81 |
|
|
82 |
+#if ENABLE_YARR_JIT
|
|
83 |
/* This function should be deleted once bad Android platforms phase out. See bug 604774. */
|
|
84 |
inline bool
|
|
85 |
detail::RegExpCode::isJITRuntimeEnabled(JSContext *cx)
|
|
86 |
{
|
|
87 |
#if defined(ANDROID) && defined(JS_METHODJIT)
|
|
88 |
return cx->methodJitEnabled;
|
|
89 |
#else
|
|
90 |
return true;
|
|
91 |
diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
|
|
92 |
--- a/js/src/vm/RegExpObject.cpp
|
|
93 |
+++ b/js/src/vm/RegExpObject.cpp
|
|
94 |
@@ -162,17 +162,16 @@ MatchPairs::checkAgainst(size_t inputLen
|
|
95 |
continue;
|
|
96 |
JS_ASSERT(size_t(p.limit) <= inputLength);
|
|
97 |
}
|
|
98 |
#endif
|
|
99 |
}
|
|
100 |
|
|
101 |
/* detail::RegExpCode */
|
|
102 |
|
|
103 |
-#if ENABLE_YARR_JIT
|
|
104 |
void
|
|
105 |
RegExpCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode error)
|
|
106 |
{
|
|
107 |
switch (error) {
|
|
108 |
case JSC::Yarr::NoError:
|
|
109 |
JS_NOT_REACHED("Called reportYarrError with value for no error");
|
|
110 |
return;
|
|
111 |
#define COMPILE_EMSG(__code, __msg) \
|
445
|
112 |
@@ -194,52 +193,16 @@ RegExpCode::reportYarrError(JSContext *c
|
401
|
113 |
COMPILE_EMSG(QuantifierTooLarge, JSMSG_BAD_QUANTIFIER);
|
|
114 |
COMPILE_EMSG(EscapeUnterminated, JSMSG_TRAILING_SLASH);
|
|
115 |
#undef COMPILE_EMSG
|
|
116 |
default:
|
|
117 |
JS_NOT_REACHED("Unknown Yarr error code");
|
|
118 |
}
|
|
119 |
}
|
|
120 |
|
|
121 |
-#else /* !ENABLE_YARR_JIT */
|
|
122 |
-
|
|
123 |
-void
|
|
124 |
-RegExpCode::reportPCREError(JSContext *cx, int error)
|
|
125 |
-{
|
|
126 |
-#define REPORT(msg_) \
|
|
127 |
- JS_ReportErrorFlagsAndNumberUC(cx, JSREPORT_ERROR, js_GetErrorMessage, NULL, msg_); \
|
|
128 |
- return
|
|
129 |
- switch (error) {
|
|
130 |
- case -2: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
131 |
- case 0: JS_NOT_REACHED("Precondition violation: an error must have occurred.");
|
|
132 |
- case 1: REPORT(JSMSG_TRAILING_SLASH);
|
|
133 |
- case 2: REPORT(JSMSG_TRAILING_SLASH);
|
|
134 |
- case 3: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
135 |
- case 4: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
136 |
- case 5: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
137 |
- case 6: REPORT(JSMSG_BAD_CLASS_RANGE);
|
|
138 |
- case 7: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
139 |
- case 8: REPORT(JSMSG_BAD_CLASS_RANGE);
|
|
140 |
- case 9: REPORT(JSMSG_BAD_QUANTIFIER);
|
|
141 |
- case 10: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
|
142 |
- case 11: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
143 |
- case 12: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN);
|
|
144 |
- case 13: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
145 |
- case 14: REPORT(JSMSG_MISSING_PAREN);
|
|
146 |
- case 15: REPORT(JSMSG_BAD_BACKREF);
|
|
147 |
- case 16: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
148 |
- case 17: REPORT(JSMSG_REGEXP_TOO_COMPLEX);
|
|
149 |
- default:
|
|
150 |
- JS_NOT_REACHED("Precondition violation: unknown PCRE error code.");
|
|
151 |
- }
|
|
152 |
-#undef REPORT
|
|
153 |
-}
|
|
154 |
-
|
|
155 |
-#endif /* ENABLE_YARR_JIT */
|
|
156 |
-
|
|
157 |
bool
|
445
|
158 |
RegExpCode::compile(JSContext *cx, JSLinearString &pattern, unsigned *parenCount, RegExpFlag flags)
|
401
|
159 |
{
|
445
|
160 |
#if ENABLE_YARR_JIT
|
401
|
161 |
/* Parse the pattern. */
|
|
162 |
ErrorCode yarrError;
|
|
163 |
YarrPattern yarrPattern(pattern, bool(flags & IgnoreCaseFlag), bool(flags & MultilineFlag),
|
|
164 |
&yarrError);
|
|
165 |
diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h
|
|
166 |
--- a/js/src/vm/RegExpObject.h
|
|
167 |
+++ b/js/src/vm/RegExpObject.h
|
|
168 |
@@ -46,20 +46,18 @@
|
|
169 |
#include <stddef.h>
|
|
170 |
#include "jsobj.h"
|
|
171 |
|
|
172 |
#include "js/TemplateLib.h"
|
|
173 |
|
|
174 |
#include "yarr/Yarr.h"
|
|
175 |
#if ENABLE_YARR_JIT
|
|
176 |
#include "yarr/YarrJIT.h"
|
|
177 |
+#endif
|
|
178 |
#include "yarr/YarrSyntaxChecker.h"
|
|
179 |
-#else
|
|
180 |
-#include "yarr/pcre/pcre.h"
|
|
181 |
-#endif
|
|
182 |
|
|
183 |
/*
|
|
184 |
* JavaScript Regular Expressions
|
|
185 |
*
|
|
186 |
* There are several engine concepts associated with a single logical regexp:
|
|
187 |
*
|
|
188 |
* RegExpObject - The JS-visible object whose .[[Class]] equals "RegExp"
|
|
189 |
*
|
378
|
190 |
diff --git a/js/src/yarr/wtfbridge.h b/js/src/yarr/wtfbridge.h
|
|
191 |
--- a/js/src/yarr/wtfbridge.h
|
|
192 |
+++ b/js/src/yarr/wtfbridge.h
|
386
|
193 |
@@ -44,19 +44,17 @@
|
|
194 |
* WTF compatibility layer. This file provides various type and data
|
|
195 |
* definitions for use by Yarr.
|
|
196 |
*/
|
|
197 |
|
|
198 |
#include "jsstr.h"
|
378
|
199 |
#include "jsprvtd.h"
|
|
200 |
#include "vm/String.h"
|
|
201 |
#include "assembler/wtf/Platform.h"
|
|
202 |
-#if ENABLE_YARR_JIT
|
|
203 |
#include "assembler/jit/ExecutableAllocator.h"
|
|
204 |
-#endif
|
|
205 |
|
|
206 |
namespace JSC { namespace Yarr {
|
|
207 |
|
386
|
208 |
/*
|
|
209 |
* Basic type definitions.
|
|
210 |
*/
|
|
211 |
|
|
212 |
typedef jschar UChar;
|