Remove JSCRE
Review URL: http://codereview.chromium.org/21504 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1355 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
57dfd336db
commit
bbc2a73f31
6
LICENSE
6
LICENSE
@ -2,13 +2,9 @@ This license applies to all parts of V8 that are not externally
|
||||
maintained libraries. The externally maintained libraries used by V8
|
||||
are:
|
||||
|
||||
- Jscre, located under third_party/jscre. This code is copyrighted
|
||||
by the University of Cambridge and Apple Inc. and released under a
|
||||
2-clause BSD license.
|
||||
|
||||
- PCRE test suite, located in test/mjsunit/regexp-pcre.js. This is
|
||||
based on the test suite from PCRE-7.3, which is copyrighted by the
|
||||
University of Cambridge and Google, Inc. The copyright notive and
|
||||
University of Cambridge and Google, Inc. The copyright notice and
|
||||
license are embedded in regexp-pcre.js.
|
||||
|
||||
- Dtoa, located under third_party/dtoa. This code is copyrighted by
|
||||
|
21
SConstruct
21
SConstruct
@ -167,25 +167,6 @@ MKSNAPSHOT_EXTRA_FLAGS = {
|
||||
}
|
||||
|
||||
|
||||
JSCRE_EXTRA_FLAGS = {
|
||||
'gcc': {
|
||||
'all': {
|
||||
'CPPDEFINES': ['SUPPORT_UTF8', 'NO_RECURSE', 'SUPPORT_UCP'],
|
||||
'WARNINGFLAGS': ['-w']
|
||||
},
|
||||
},
|
||||
'msvc': {
|
||||
'all': {
|
||||
'CPPDEFINES': ['SUPPORT_UTF8', 'NO_RECURSE', 'SUPPORT_UCP'],
|
||||
'WARNINGFLAGS': ['/W3', '/WX', '/wd4355', '/wd4800']
|
||||
},
|
||||
'library:shared': {
|
||||
'CPPDEFINES': ['BUILDING_V8_SHARED']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DTOA_EXTRA_FLAGS = {
|
||||
'gcc': {
|
||||
'all': {
|
||||
@ -564,7 +545,6 @@ def BuildSpecific(env, mode, env_overrides):
|
||||
library_flags = context.AddRelevantFlags(os.environ, LIBRARY_FLAGS)
|
||||
v8_flags = context.AddRelevantFlags(library_flags, V8_EXTRA_FLAGS)
|
||||
mksnapshot_flags = context.AddRelevantFlags(library_flags, MKSNAPSHOT_EXTRA_FLAGS)
|
||||
jscre_flags = context.AddRelevantFlags(library_flags, JSCRE_EXTRA_FLAGS)
|
||||
dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS)
|
||||
cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS)
|
||||
sample_flags = context.AddRelevantFlags(os.environ, SAMPLE_FLAGS)
|
||||
@ -573,7 +553,6 @@ def BuildSpecific(env, mode, env_overrides):
|
||||
context.flags = {
|
||||
'v8': v8_flags,
|
||||
'mksnapshot': mksnapshot_flags,
|
||||
'jscre': jscre_flags,
|
||||
'dtoa': dtoa_flags,
|
||||
'cctest': cctest_flags,
|
||||
'sample': sample_flags,
|
||||
|
@ -97,15 +97,6 @@ regexp-delay.js
|
||||
'''.split()
|
||||
|
||||
|
||||
JSCRE_FILES = '''
|
||||
pcre_compile.cpp
|
||||
pcre_exec.cpp
|
||||
pcre_tables.cpp
|
||||
pcre_ucp_searchfuncs.cpp
|
||||
pcre_xclass.cpp
|
||||
'''.split()
|
||||
|
||||
|
||||
def Abort(message):
|
||||
print message
|
||||
sys.exit(1)
|
||||
@ -133,12 +124,6 @@ def ConfigureObjectFiles():
|
||||
libraries_src, libraries_empty_src = env.JS2C(['libraries.cc', 'libraries-empty.cc'], library_files, TYPE='CORE')
|
||||
libraries_obj = context.ConfigureObject(env, libraries_src, CPPPATH=['.'])
|
||||
|
||||
# Build JSCRE.
|
||||
jscre_env = env.Copy()
|
||||
jscre_env.Replace(**context.flags['jscre'])
|
||||
jscre_files = [join('third_party', 'jscre', s) for s in JSCRE_FILES]
|
||||
jscre_obj = context.ConfigureObject(jscre_env, jscre_files)
|
||||
|
||||
# Build dtoa.
|
||||
dtoa_env = env.Copy()
|
||||
dtoa_env.Replace(**context.flags['dtoa'])
|
||||
@ -146,7 +131,7 @@ def ConfigureObjectFiles():
|
||||
dtoa_obj = context.ConfigureObject(dtoa_env, dtoa_files)
|
||||
|
||||
source_objs = context.ConfigureObject(env, source_files)
|
||||
non_snapshot_files = [jscre_obj, dtoa_obj, source_objs]
|
||||
non_snapshot_files = [dtoa_obj, source_objs]
|
||||
|
||||
# Create snapshot if necessary.
|
||||
empty_snapshot_obj = context.ConfigureObject(env, 'snapshot-empty.cc')
|
||||
|
@ -199,11 +199,10 @@ DEFINE_bool(usage_computation, true, "compute variable usage counts")
|
||||
DEFINE_bool(preemption, false,
|
||||
"activate a 100ms timer that switches between V8 threads")
|
||||
|
||||
// Irregexp
|
||||
DEFINE_bool(irregexp, true, "new regular expression code")
|
||||
DEFINE_bool(trace_regexps, false, "trace Irregexp execution")
|
||||
DEFINE_bool(irregexp_native, true, "use native code Irregexp implementation (IA32 only)")
|
||||
DEFINE_bool(irregexp_optimization, true, "generate optimized regexp code")
|
||||
// Regexp
|
||||
DEFINE_bool(trace_regexps, false, "trace regexp execution")
|
||||
DEFINE_bool(regexp_native, true, "use native code regexp implementation (IA32 only)")
|
||||
DEFINE_bool(regexp_optimization, true, "generate optimized regexp code")
|
||||
|
||||
// Testing flags test/cctest/test-{flags,api,serialization}.cc
|
||||
DEFINE_bool(testing_bool_flag, true, "testing_bool_flag")
|
||||
@ -296,10 +295,11 @@ DEFINE_bool(collect_heap_spill_statistics, false,
|
||||
"report heap spill statistics along with heap_stats "
|
||||
"(requires heap_stats)")
|
||||
|
||||
// irregexp
|
||||
DEFINE_bool(trace_regexp_bytecodes, false, "trace Irregexp bytecode execution")
|
||||
DEFINE_bool(trace_regexp_assembler, false,
|
||||
"trace Irregexp macro assembler calls.")
|
||||
// Regexp
|
||||
DEFINE_bool(trace_regexp_bytecodes, false, "trace regexp bytecode execution")
|
||||
DEFINE_bool(trace_regexp_assembler,
|
||||
false,
|
||||
"trace regexp macro assembler calls.")
|
||||
|
||||
//
|
||||
// Logging and profiling only flags
|
||||
|
303
src/jsregexp.cc
303
src/jsregexp.cc
@ -51,44 +51,10 @@
|
||||
|
||||
#include "interpreter-irregexp.h"
|
||||
|
||||
// Including pcre.h undefines DEBUG to avoid getting debug output from
|
||||
// the JSCRE implementation. Make sure to redefine it in debug mode
|
||||
// after having included the header file.
|
||||
#ifdef DEBUG
|
||||
#include "third_party/jscre/pcre.h"
|
||||
#define DEBUG
|
||||
#else
|
||||
#include "third_party/jscre/pcre.h"
|
||||
#endif
|
||||
|
||||
|
||||
namespace v8 { namespace internal {
|
||||
|
||||
|
||||
static Failure* malloc_failure;
|
||||
|
||||
static void* JSREMalloc(size_t size) {
|
||||
Object* obj = Heap::AllocateByteArray(size);
|
||||
|
||||
// If allocation failed, return a NULL pointer to JSRE, and jsRegExpCompile
|
||||
// will return NULL to the caller, performs GC there.
|
||||
// Also pass failure information to the caller.
|
||||
if (obj->IsFailure()) {
|
||||
malloc_failure = Failure::cast(obj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Note: object is unrooted, the caller of jsRegExpCompile must
|
||||
// create a handle for the return value before doing heap allocation.
|
||||
return reinterpret_cast<void*>(ByteArray::cast(obj)->GetDataStartAddress());
|
||||
}
|
||||
|
||||
|
||||
static void JSREFree(void* p) {
|
||||
USE(p); // Do nothing, memory is garbage collected.
|
||||
}
|
||||
|
||||
|
||||
String* RegExpImpl::last_ascii_string_ = NULL;
|
||||
String* RegExpImpl::two_byte_cached_string_ = NULL;
|
||||
|
||||
@ -272,10 +238,8 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
||||
Vector<const uc16> atom_pattern = atom->data();
|
||||
Handle<String> atom_string = Factory::NewStringFromTwoByte(atom_pattern);
|
||||
result = AtomCompile(re, pattern, flags, atom_string);
|
||||
} else if (FLAG_irregexp) {
|
||||
result = IrregexpPrepare(re, pattern, flags);
|
||||
} else {
|
||||
result = JscrePrepare(re, pattern, flags);
|
||||
result = IrregexpPrepare(re, pattern, flags);
|
||||
}
|
||||
Object* data = re->data();
|
||||
if (data->IsFixedArray()) {
|
||||
@ -301,8 +265,6 @@ Handle<Object> RegExpImpl::Exec(Handle<JSRegExp> regexp,
|
||||
ASSERT(!result.is_null() || Top::has_pending_exception());
|
||||
return result;
|
||||
}
|
||||
case JSRegExp::JSCRE:
|
||||
return JscreExec(regexp, subject, index);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return Handle<Object>::null();
|
||||
@ -320,8 +282,6 @@ Handle<Object> RegExpImpl::ExecGlobal(Handle<JSRegExp> regexp,
|
||||
ASSERT(!result.is_null() || Top::has_pending_exception());
|
||||
return result;
|
||||
}
|
||||
case JSRegExp::JSCRE:
|
||||
return JscreExecGlobal(regexp, subject);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return Handle<Object>::null();
|
||||
@ -391,259 +351,6 @@ Handle<Object> RegExpImpl::AtomExecGlobal(Handle<JSRegExp> re,
|
||||
}
|
||||
|
||||
|
||||
// JSCRE implementation.
|
||||
|
||||
|
||||
int RegExpImpl::JscreNumberOfCaptures(Handle<JSRegExp> re) {
|
||||
FixedArray* value = FixedArray::cast(re->DataAt(JSRegExp::kJscreDataIndex));
|
||||
return Smi::cast(value->get(kJscreNumberOfCapturesIndex))->value();
|
||||
}
|
||||
|
||||
|
||||
ByteArray* RegExpImpl::JscreInternal(Handle<JSRegExp> re) {
|
||||
FixedArray* value = FixedArray::cast(re->DataAt(JSRegExp::kJscreDataIndex));
|
||||
return ByteArray::cast(value->get(kJscreInternalIndex));
|
||||
}
|
||||
|
||||
|
||||
Handle<Object>RegExpImpl::JscrePrepare(Handle<JSRegExp> re,
|
||||
Handle<String> pattern,
|
||||
JSRegExp::Flags flags) {
|
||||
Handle<Object> value(Heap::undefined_value());
|
||||
Factory::SetRegExpData(re, JSRegExp::JSCRE, pattern, flags, value);
|
||||
return re;
|
||||
}
|
||||
|
||||
|
||||
static inline Object* JscreDoCompile(String* pattern,
|
||||
JSRegExp::Flags flags,
|
||||
unsigned* number_of_captures,
|
||||
const char** error_message,
|
||||
v8::jscre::JscreRegExp** code) {
|
||||
v8::jscre::JSRegExpIgnoreCaseOption case_option = flags.is_ignore_case()
|
||||
? v8::jscre::JSRegExpIgnoreCase
|
||||
: v8::jscre::JSRegExpDoNotIgnoreCase;
|
||||
v8::jscre::JSRegExpMultilineOption multiline_option = flags.is_multiline()
|
||||
? v8::jscre::JSRegExpMultiline
|
||||
: v8::jscre::JSRegExpSingleLine;
|
||||
*error_message = NULL;
|
||||
malloc_failure = Failure::Exception();
|
||||
*code = v8::jscre::jsRegExpCompile(pattern->GetTwoByteData(),
|
||||
pattern->length(),
|
||||
case_option,
|
||||
multiline_option,
|
||||
number_of_captures,
|
||||
error_message,
|
||||
&JSREMalloc,
|
||||
&JSREFree);
|
||||
if (*code == NULL && (malloc_failure->IsRetryAfterGC() ||
|
||||
malloc_failure->IsOutOfMemoryFailure())) {
|
||||
return malloc_failure;
|
||||
} else {
|
||||
// It doesn't matter which object we return here, we just need to return
|
||||
// a non-failure to indicate to the GC-retry code that there was no
|
||||
// allocation failure.
|
||||
return pattern;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void JscreCompileWithRetryAfterGC(Handle<String> pattern,
|
||||
JSRegExp::Flags flags,
|
||||
unsigned* number_of_captures,
|
||||
const char** error_message,
|
||||
v8::jscre::JscreRegExp** code) {
|
||||
CALL_HEAP_FUNCTION_VOID(JscreDoCompile(*pattern,
|
||||
flags,
|
||||
number_of_captures,
|
||||
error_message,
|
||||
code));
|
||||
}
|
||||
|
||||
|
||||
Handle<Object> RegExpImpl::JscreCompile(Handle<JSRegExp> re) {
|
||||
ASSERT_EQ(re->TypeTag(), JSRegExp::JSCRE);
|
||||
ASSERT(re->DataAt(JSRegExp::kJscreDataIndex)->IsUndefined());
|
||||
|
||||
Handle<String> pattern(re->Pattern());
|
||||
JSRegExp::Flags flags = re->GetFlags();
|
||||
|
||||
Handle<String> two_byte_pattern = StringToTwoByte(pattern);
|
||||
|
||||
unsigned number_of_captures;
|
||||
const char* error_message = NULL;
|
||||
|
||||
v8::jscre::JscreRegExp* code = NULL;
|
||||
FlattenString(pattern);
|
||||
|
||||
JscreCompileWithRetryAfterGC(two_byte_pattern,
|
||||
flags,
|
||||
&number_of_captures,
|
||||
&error_message,
|
||||
&code);
|
||||
|
||||
if (code == NULL) {
|
||||
// Throw an exception.
|
||||
Handle<JSArray> array = Factory::NewJSArray(2);
|
||||
SetElement(array, 0, pattern);
|
||||
const char* message =
|
||||
(error_message == NULL) ? "Unknown regexp error" : error_message;
|
||||
SetElement(array, 1, Factory::NewStringFromUtf8(CStrVector(message)));
|
||||
Handle<Object> regexp_err =
|
||||
Factory::NewSyntaxError("malformed_regexp", array);
|
||||
Top::Throw(*regexp_err);
|
||||
return Handle<Object>();
|
||||
}
|
||||
|
||||
// Convert the return address to a ByteArray pointer.
|
||||
Handle<ByteArray> internal(
|
||||
ByteArray::FromDataStartAddress(reinterpret_cast<Address>(code)));
|
||||
|
||||
Handle<FixedArray> value = Factory::NewFixedArray(kJscreDataLength);
|
||||
value->set(kJscreNumberOfCapturesIndex, Smi::FromInt(number_of_captures));
|
||||
value->set(kJscreInternalIndex, *internal);
|
||||
Factory::SetRegExpData(re, JSRegExp::JSCRE, pattern, flags, value);
|
||||
|
||||
return re;
|
||||
}
|
||||
|
||||
|
||||
Handle<Object> RegExpImpl::JscreExec(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject,
|
||||
Handle<Object> index) {
|
||||
ASSERT_EQ(regexp->TypeTag(), JSRegExp::JSCRE);
|
||||
if (regexp->DataAt(JSRegExp::kJscreDataIndex)->IsUndefined()) {
|
||||
Handle<Object> compile_result = JscreCompile(regexp);
|
||||
if (compile_result.is_null()) return compile_result;
|
||||
}
|
||||
ASSERT(regexp->DataAt(JSRegExp::kJscreDataIndex)->IsFixedArray());
|
||||
|
||||
int num_captures = JscreNumberOfCaptures(regexp);
|
||||
|
||||
OffsetsVector offsets((num_captures + 1) * 3);
|
||||
|
||||
int previous_index = static_cast<int>(DoubleToInteger(index->Number()));
|
||||
|
||||
Handle<String> subject16 = CachedStringToTwoByte(subject);
|
||||
|
||||
return JscreExecOnce(regexp,
|
||||
num_captures,
|
||||
subject,
|
||||
previous_index,
|
||||
subject16->GetTwoByteData(),
|
||||
offsets.vector(),
|
||||
offsets.length());
|
||||
}
|
||||
|
||||
|
||||
Handle<Object> RegExpImpl::JscreExecOnce(Handle<JSRegExp> regexp,
|
||||
int num_captures,
|
||||
Handle<String> subject,
|
||||
int previous_index,
|
||||
const uc16* two_byte_subject,
|
||||
int* offsets_vector,
|
||||
int offsets_vector_length) {
|
||||
int rc;
|
||||
{
|
||||
AssertNoAllocation a;
|
||||
ByteArray* internal = JscreInternal(regexp);
|
||||
const v8::jscre::JscreRegExp* js_regexp =
|
||||
reinterpret_cast<v8::jscre::JscreRegExp*>(
|
||||
internal->GetDataStartAddress());
|
||||
|
||||
rc = v8::jscre::jsRegExpExecute(js_regexp,
|
||||
two_byte_subject,
|
||||
subject->length(),
|
||||
previous_index,
|
||||
offsets_vector,
|
||||
offsets_vector_length);
|
||||
}
|
||||
|
||||
// The KJS JavaScript engine returns null (ie, a failed match) when
|
||||
// JSRE's internal match limit is exceeded. We duplicate that behavior here.
|
||||
if (rc == v8::jscre::JSRegExpErrorNoMatch
|
||||
|| rc == v8::jscre::JSRegExpErrorHitLimit) {
|
||||
return Factory::null_value();
|
||||
}
|
||||
|
||||
// Other JSRE errors:
|
||||
if (rc < 0) {
|
||||
// Throw an exception.
|
||||
Handle<Object> code(Smi::FromInt(rc));
|
||||
Handle<Object> args[2] = { Factory::LookupAsciiSymbol("jsre_exec"), code };
|
||||
Handle<Object> regexp_err(
|
||||
Factory::NewTypeError("jsre_error", HandleVector(args, 2)));
|
||||
return Handle<Object>(Top::Throw(*regexp_err));
|
||||
}
|
||||
|
||||
Handle<FixedArray> array = Factory::NewFixedArray(2 * (num_captures+1));
|
||||
// The captures come in (start, end+1) pairs.
|
||||
for (int i = 0; i < 2 * (num_captures+1); i += 2) {
|
||||
array->set(i, Smi::FromInt(offsets_vector[i]));
|
||||
array->set(i+1, Smi::FromInt(offsets_vector[i+1]));
|
||||
}
|
||||
return Factory::NewJSArrayWithElements(array);
|
||||
}
|
||||
|
||||
|
||||
Handle<Object> RegExpImpl::JscreExecGlobal(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject) {
|
||||
ASSERT_EQ(regexp->TypeTag(), JSRegExp::JSCRE);
|
||||
if (regexp->DataAt(JSRegExp::kJscreDataIndex)->IsUndefined()) {
|
||||
Handle<Object> compile_result = JscreCompile(regexp);
|
||||
if (compile_result.is_null()) return compile_result;
|
||||
}
|
||||
ASSERT(regexp->DataAt(JSRegExp::kJscreDataIndex)->IsFixedArray());
|
||||
|
||||
// Prepare space for the return values.
|
||||
int num_captures = JscreNumberOfCaptures(regexp);
|
||||
|
||||
OffsetsVector offsets((num_captures + 1) * 3);
|
||||
|
||||
int previous_index = 0;
|
||||
|
||||
Handle<JSArray> result = Factory::NewJSArray(0);
|
||||
int i = 0;
|
||||
Handle<Object> matches;
|
||||
|
||||
Handle<String> subject16 = CachedStringToTwoByte(subject);
|
||||
|
||||
do {
|
||||
if (previous_index > subject->length() || previous_index < 0) {
|
||||
// Per ECMA-262 15.10.6.2, if the previous index is greater than the
|
||||
// string length, there is no match.
|
||||
matches = Factory::null_value();
|
||||
} else {
|
||||
matches = JscreExecOnce(regexp,
|
||||
num_captures,
|
||||
subject,
|
||||
previous_index,
|
||||
subject16->GetTwoByteData(),
|
||||
offsets.vector(),
|
||||
offsets.length());
|
||||
|
||||
if (matches->IsJSArray()) {
|
||||
SetElement(result, i, matches);
|
||||
i++;
|
||||
previous_index = offsets.vector()[1];
|
||||
if (offsets.vector()[0] == offsets.vector()[1]) {
|
||||
previous_index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (matches->IsJSArray());
|
||||
|
||||
// If we exited the loop with an exception, throw it.
|
||||
if (matches->IsNull()) {
|
||||
// Exited loop normally.
|
||||
return result;
|
||||
} else {
|
||||
// Exited loop with the exception in matches.
|
||||
return matches;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Irregexp implementation.
|
||||
|
||||
|
||||
@ -2070,7 +1777,7 @@ RegExpNode::LimitResult RegExpNode::LimitVersions(RegExpCompiler* compiler,
|
||||
// We are being asked to make a non-generic version. Keep track of how many
|
||||
// non-generic versions we generate so as not to overdo it.
|
||||
trace_count_++;
|
||||
if (FLAG_irregexp_optimization &&
|
||||
if (FLAG_regexp_optimization &&
|
||||
trace_count_ < kMaxCopiesCodeGenerated &&
|
||||
compiler->recursion_depth() <= RegExpCompiler::kMaxRecursion) {
|
||||
return CONTINUE;
|
||||
@ -3237,7 +2944,7 @@ void ChoiceNode::Emit(RegExpCompiler* compiler, Trace* trace) {
|
||||
if (not_at_start_) new_trace.set_at_start(Trace::FALSE);
|
||||
alt_gen->expects_preload = preload_is_current;
|
||||
bool generate_full_check_inline = false;
|
||||
if (FLAG_irregexp_optimization &&
|
||||
if (FLAG_regexp_optimization &&
|
||||
try_to_emit_quick_check_for_alternative(i) &&
|
||||
alternative.node()->EmitQuickCheck(compiler,
|
||||
&new_trace,
|
||||
@ -4038,7 +3745,7 @@ RegExpNode* RegExpQuantifier::ToNode(int min,
|
||||
bool needs_capture_clearing = !capture_registers.is_empty();
|
||||
if (body_can_be_empty) {
|
||||
body_start_reg = compiler->AllocateRegister();
|
||||
} else if (FLAG_irregexp_optimization && !needs_capture_clearing) {
|
||||
} else if (FLAG_regexp_optimization && !needs_capture_clearing) {
|
||||
// Only unroll if there are no captures and the body can't be
|
||||
// empty.
|
||||
if (min > 0 && min <= kMaxUnrolledMinMatches) {
|
||||
@ -4930,7 +4637,7 @@ Handle<FixedArray> RegExpEngine::Compile(RegExpCompileData* data,
|
||||
|
||||
NodeInfo info = *node->info();
|
||||
|
||||
if (FLAG_irregexp_native) {
|
||||
if (FLAG_regexp_native) {
|
||||
#ifdef ARM
|
||||
// Unimplemented, fall-through to bytecode implementation.
|
||||
#else // IA32
|
||||
|
@ -67,22 +67,12 @@ class RegExpImpl {
|
||||
static Handle<Object> ExecGlobal(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject);
|
||||
|
||||
// Stores an uncompiled RegExp pattern in the JSRegExp object.
|
||||
// It will be compiled by JSCRE when first executed.
|
||||
static Handle<Object> JscrePrepare(Handle<JSRegExp> re,
|
||||
Handle<String> pattern,
|
||||
JSRegExp::Flags flags);
|
||||
|
||||
// Prepares a JSRegExp object with Irregexp-specific data.
|
||||
static Handle<Object> IrregexpPrepare(Handle<JSRegExp> re,
|
||||
Handle<String> pattern,
|
||||
JSRegExp::Flags flags);
|
||||
|
||||
|
||||
// Compile the pattern using JSCRE and store the result in the
|
||||
// JSRegExp object.
|
||||
static Handle<Object> JscreCompile(Handle<JSRegExp> re);
|
||||
|
||||
static Handle<Object> AtomCompile(Handle<JSRegExp> re,
|
||||
Handle<String> pattern,
|
||||
JSRegExp::Flags flags,
|
||||
@ -94,23 +84,11 @@ class RegExpImpl {
|
||||
static Handle<Object> AtomExecGlobal(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject);
|
||||
|
||||
static Handle<Object> JscreCompile(Handle<JSRegExp> re,
|
||||
Handle<String> pattern,
|
||||
JSRegExp::Flags flags);
|
||||
|
||||
// Execute a compiled JSCRE pattern.
|
||||
static Handle<Object> JscreExec(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject,
|
||||
Handle<Object> index);
|
||||
|
||||
// Execute an Irregexp bytecode pattern.
|
||||
static Handle<Object> IrregexpExec(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject,
|
||||
Handle<Object> index);
|
||||
|
||||
static Handle<Object> JscreExecGlobal(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject);
|
||||
|
||||
static Handle<Object> IrregexpExecGlobal(Handle<JSRegExp> regexp,
|
||||
Handle<String> subject);
|
||||
|
||||
@ -129,31 +107,15 @@ class RegExpImpl {
|
||||
static const int kIrregexpCodeIndex = 3;
|
||||
static const int kIrregexpDataLength = 4;
|
||||
|
||||
static const int kJscreNumberOfCapturesIndex = 0;
|
||||
static const int kJscreInternalIndex = 1;
|
||||
static const int kJscreDataLength = 2;
|
||||
|
||||
private:
|
||||
static String* last_ascii_string_;
|
||||
static String* two_byte_cached_string_;
|
||||
|
||||
static int JscreNumberOfCaptures(Handle<JSRegExp> re);
|
||||
static ByteArray* JscreInternal(Handle<JSRegExp> re);
|
||||
|
||||
static int IrregexpNumberOfCaptures(Handle<FixedArray> re);
|
||||
static int IrregexpNumberOfRegisters(Handle<FixedArray> re);
|
||||
static Handle<ByteArray> IrregexpByteCode(Handle<FixedArray> re);
|
||||
static Handle<Code> IrregexpNativeCode(Handle<FixedArray> re);
|
||||
|
||||
// Call jsRegExpExecute once
|
||||
static Handle<Object> JscreExecOnce(Handle<JSRegExp> regexp,
|
||||
int num_captures,
|
||||
Handle<String> subject,
|
||||
int previous_index,
|
||||
const uc16* utf8_subject,
|
||||
int* ovector,
|
||||
int ovector_length);
|
||||
|
||||
// On a successful match, the result is a JSArray containing
|
||||
// captured positions. On a failure, the result is the null value.
|
||||
// Returns an empty handle in case of an exception.
|
||||
|
@ -693,16 +693,10 @@ void JSRegExp::JSRegExpVerify() {
|
||||
ASSERT(arr->get(JSRegExp::kAtomPatternIndex)->IsString());
|
||||
break;
|
||||
}
|
||||
case JSRegExp::JSCRE: {
|
||||
FixedArray* arr = FixedArray::cast(data());
|
||||
Object* jscre_data = arr->get(JSRegExp::kJscreDataIndex);
|
||||
ASSERT(jscre_data->IsFixedArray() || jscre_data->IsUndefined());
|
||||
break;
|
||||
}
|
||||
case JSRegExp::IRREGEXP: {
|
||||
FixedArray* arr = FixedArray::cast(data());
|
||||
Object* jscre_data = arr->get(JSRegExp::kJscreDataIndex);
|
||||
ASSERT(jscre_data->IsFixedArray());
|
||||
Object* irregexp_data = arr->get(JSRegExp::kIrregexpDataIndex);
|
||||
ASSERT(irregexp_data->IsFixedArray());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -2943,11 +2943,10 @@ class JSRegExp: public JSObject {
|
||||
public:
|
||||
// Meaning of Type:
|
||||
// NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet.
|
||||
// JSCRE: A complex RegExp for JSCRE
|
||||
// ATOM: A simple string to match against using an indexOf operation.
|
||||
// IRREGEXP: Compiled with Irregexp.
|
||||
// IRREGEXP_NATIVE: Compiled to native code with Irregexp.
|
||||
enum Type { NOT_COMPILED, JSCRE, ATOM, IRREGEXP };
|
||||
enum Type { NOT_COMPILED, ATOM, IRREGEXP };
|
||||
enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 };
|
||||
|
||||
class Flags {
|
||||
@ -2981,10 +2980,9 @@ class JSRegExp: public JSObject {
|
||||
static const int kTagIndex = 0;
|
||||
static const int kSourceIndex = kTagIndex + 1;
|
||||
static const int kFlagsIndex = kSourceIndex + 1;
|
||||
// These three are the same since the same entry is shared for
|
||||
// These two are the same since the same entry is shared for
|
||||
// different purposes in different types of regexps.
|
||||
static const int kAtomPatternIndex = kFlagsIndex + 1;
|
||||
static const int kJscreDataIndex = kFlagsIndex + 1;
|
||||
static const int kIrregexpDataIndex = kFlagsIndex + 1;
|
||||
static const int kDataSize = kAtomPatternIndex + 1;
|
||||
};
|
||||
|
95
src/third_party/jscre/ASCIICType.h
vendored
95
src/third_party/jscre/ASCIICType.h
vendored
@ -1,95 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef WTF_ASCIICType_h
|
||||
#define WTF_ASCIICType_h
|
||||
|
||||
// The behavior of many of the functions in the <ctype.h> header is dependent
|
||||
// on the current locale. But in the WebKit project, all uses of those functions
|
||||
// are in code processing something that's not locale-specific. These equivalents
|
||||
// for some of the <ctype.h> functions are named more explicitly, not dependent
|
||||
// on the C library locale, and we should also optimize them as needed.
|
||||
|
||||
// All functions return false or leave the character unchanged if passed a character
|
||||
// that is outside the range 0-7F. So they can be used on Unicode strings or
|
||||
// characters if the intent is to do processing only if the character is ASCII.
|
||||
|
||||
inline bool isASCIIAlpha(char c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
inline bool isASCIIAlpha(unsigned short c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
inline bool isASCIIAlpha(int c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
|
||||
inline bool isASCIIAlphanumeric(char c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
inline bool isASCIIAlphanumeric(unsigned short c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
inline bool isASCIIAlphanumeric(int c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
|
||||
|
||||
inline bool isASCIIDigit(char c) { return (c >= '0') & (c <= '9'); }
|
||||
inline bool isASCIIDigit(unsigned short c) { return (c >= '0') & (c <= '9'); }
|
||||
inline bool isASCIIDigit(int c) { return (c >= '0') & (c <= '9'); }
|
||||
|
||||
inline bool isASCIIHexDigit(char c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'f'; }
|
||||
inline bool isASCIIHexDigit(unsigned short c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'f'; }
|
||||
inline bool isASCIIHexDigit(int c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'f'; }
|
||||
|
||||
inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; }
|
||||
inline bool isASCIILower(unsigned short c) { return c >= 'a' && c <= 'z'; }
|
||||
inline bool isASCIILower(int c) { return c >= 'a' && c <= 'z'; }
|
||||
|
||||
inline bool isASCIIUpper(char c) { return c >= 'A' && c <= 'Z'; }
|
||||
inline bool isASCIIUpper(unsigned short c) { return c >= 'A' && c <= 'Z'; }
|
||||
inline bool isASCIIUpper(int c) { return c >= 'A' && c <= 'Z'; }
|
||||
|
||||
/*
|
||||
Statistics from a run of Apple's page load test for callers of isASCIISpace:
|
||||
|
||||
character count
|
||||
--------- -----
|
||||
non-spaces 689383
|
||||
20 space 294720
|
||||
0A \n 89059
|
||||
09 \t 28320
|
||||
0D \r 0
|
||||
0C \f 0
|
||||
0B \v 0
|
||||
*/
|
||||
inline bool isASCIISpace(char c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
|
||||
inline bool isASCIISpace(unsigned short c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
|
||||
inline bool isASCIISpace(int c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
|
||||
|
||||
inline char toASCIILower(char c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
|
||||
inline unsigned short toASCIILower(unsigned short c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
|
||||
inline int toASCIILower(int c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
|
||||
|
||||
inline char toASCIIUpper(char c) { return static_cast<char>(c & ~((c >= 'a' && c <= 'z') << 5)); }
|
||||
inline unsigned short toASCIIUpper(unsigned short c) { return static_cast<unsigned short>(c & ~((c >= 'a' && c <= 'z') << 5)); }
|
||||
inline int toASCIIUpper(int c) { return static_cast<int>(c & ~((c >= 'a' && c <= 'z') << 5)); }
|
||||
|
||||
inline int toASCIIHexValue(char c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
|
||||
inline int toASCIIHexValue(unsigned short c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
|
||||
inline int toASCIIHexValue(int c) { ASSERT(isASCIIHexDigit(c)); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
|
||||
|
||||
#endif
|
12
src/third_party/jscre/AUTHORS
vendored
12
src/third_party/jscre/AUTHORS
vendored
@ -1,12 +0,0 @@
|
||||
Originally written by: Philip Hazel
|
||||
Email local part: ph10
|
||||
Email domain: cam.ac.uk
|
||||
|
||||
University of Cambridge Computing Service,
|
||||
Cambridge, England. Phone: +44 1223 334714.
|
||||
|
||||
Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
|
||||
|
||||
Adapted for JavaScriptCore and WebKit by Apple Inc.
|
||||
|
||||
Copyright (c) 2005, 2006, 2007 Apple Inc. All rights reserved.
|
35
src/third_party/jscre/COPYING
vendored
35
src/third_party/jscre/COPYING
vendored
@ -1,35 +0,0 @@
|
||||
PCRE is a library of functions to support regular expressions whose syntax
|
||||
and semantics are as close as possible to those of the Perl 5 language.
|
||||
|
||||
This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed.
|
||||
|
||||
Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the name of Apple
|
||||
Inc. nor the names of their contributors may be used to endorse or
|
||||
promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
85
src/third_party/jscre/LICENSE
vendored
85
src/third_party/jscre/LICENSE
vendored
@ -1,85 +0,0 @@
|
||||
-----------------------------------------------------------------------------
|
||||
The following license text is extracted from the header of the file
|
||||
ASCIICType.h and applies only to that file.
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
|
||||
its contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
The following license text is from the file COPYING and applies to the other
|
||||
source files in this directory.
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
PCRE is a library of functions to support regular expressions whose syntax
|
||||
and semantics are as close as possible to those of the Perl 5 language.
|
||||
|
||||
This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed.
|
||||
|
||||
Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the name of Apple
|
||||
Inc. nor the names of their contributors may be used to endorse or
|
||||
promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
The following copyright lines are found in individual files other than
|
||||
ASCIICType.h
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
Copyright (C) 2002, 2004, 2006, 2007, 2008 Apple Inc. All rights reserved.
|
||||
Copyright (C) 2007 Eric Seidel <eric@webkit.org>
|
||||
Copyright (c) 1997-2005 University of Cambridge
|
||||
Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (c) 2005, 2006, 2007 Apple Inc. All rights reserved.
|
143
src/third_party/jscre/config.h
vendored
143
src/third_party/jscre/config.h
vendored
@ -1,143 +0,0 @@
|
||||
|
||||
/* On Unix-like systems config.in is converted by "configure" into config.h.
|
||||
Some other environments also support the use of "configure". PCRE is written in
|
||||
Standard C, but there are a few non-standard things it can cope with, allowing
|
||||
it to run on SunOS4 and other "close to standard" systems.
|
||||
|
||||
On a non-Unix-like system you should just copy this file into config.h, and set
|
||||
up the macros the way you need them. You should normally change the definitions
|
||||
of HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because of the way
|
||||
autoconf works, these cannot be made the defaults. If your system has bcopy()
|
||||
and not memmove(), change the definition of HAVE_BCOPY instead of HAVE_MEMMOVE.
|
||||
If your system has neither bcopy() nor memmove(), leave them both as 0; an
|
||||
emulation function will be used. */
|
||||
|
||||
/* If you are compiling for a system that uses EBCDIC instead of ASCII
|
||||
character codes, define this macro as 1. On systems that can use "configure",
|
||||
this can be done via --enable-ebcdic. */
|
||||
|
||||
#ifndef EBCDIC
|
||||
#define EBCDIC 0
|
||||
#endif
|
||||
|
||||
/* If you are compiling for a system other than a Unix-like system or Win32,
|
||||
and it needs some magic to be inserted before the definition of a function that
|
||||
is exported by the library, define this macro to contain the relevant magic. If
|
||||
you do not define this macro, it defaults to "extern" for a C compiler and
|
||||
"extern C" for a C++ compiler on non-Win32 systems. This macro apears at the
|
||||
start of every exported function that is part of the external API. It does not
|
||||
appear on functions that are "external" in the C sense, but which are internal
|
||||
to the library. */
|
||||
|
||||
/* #define PCRE_DATA_SCOPE */
|
||||
|
||||
/* Define the following macro to empty if the "const" keyword does not work. */
|
||||
|
||||
#undef const
|
||||
|
||||
/* Define the following macro to "unsigned" if <stddef.h> does not define
|
||||
size_t. */
|
||||
|
||||
#undef size_t
|
||||
|
||||
/* The following two definitions are mainly for the benefit of SunOS4, which
|
||||
does not have the strerror() or memmove() functions that should be present in
|
||||
all Standard C libraries. The macros HAVE_STRERROR and HAVE_MEMMOVE should
|
||||
normally be defined with the value 1 for other systems, but unfortunately we
|
||||
cannot make this the default because "configure" files generated by autoconf
|
||||
will only change 0 to 1; they won't change 1 to 0 if the functions are not
|
||||
found. */
|
||||
|
||||
#define HAVE_STRERROR 1
|
||||
#define HAVE_MEMMOVE 1
|
||||
|
||||
/* There are some non-Unix-like systems that don't even have bcopy(). If this
|
||||
macro is false, an emulation is used. If HAVE_MEMMOVE is set to 1, the value of
|
||||
HAVE_BCOPY is not relevant. */
|
||||
|
||||
#define HAVE_BCOPY 0
|
||||
|
||||
/* The value of NEWLINE determines the newline character. The default is to
|
||||
leave it up to the compiler, but some sites want to force a particular value.
|
||||
On Unix-like systems, "configure" can be used to override this default. */
|
||||
|
||||
#ifndef NEWLINE
|
||||
#define NEWLINE '\n'
|
||||
#endif
|
||||
|
||||
/* The value of LINK_SIZE determines the number of bytes used to store links as
|
||||
offsets within the compiled regex. The default is 2, which allows for compiled
|
||||
patterns up to 64K long. This covers the vast majority of cases. However, PCRE
|
||||
can also be compiled to use 3 or 4 bytes instead. This allows for longer
|
||||
patterns in extreme cases. On systems that support it, "configure" can be used
|
||||
to override this default. */
|
||||
|
||||
#ifndef LINK_SIZE
|
||||
#define LINK_SIZE 2
|
||||
#endif
|
||||
|
||||
/* When calling PCRE via the POSIX interface, additional working storage is
|
||||
required for holding the pointers to capturing substrings because PCRE requires
|
||||
three integers per substring, whereas the POSIX interface provides only two. If
|
||||
the number of expected substrings is small, the wrapper function uses space on
|
||||
the stack, because this is faster than using malloc() for each call. The
|
||||
threshold above which the stack is no longer used is defined by POSIX_MALLOC_
|
||||
THRESHOLD. On systems that support it, "configure" can be used to override this
|
||||
default. */
|
||||
|
||||
#ifndef POSIX_MALLOC_THRESHOLD
|
||||
#define POSIX_MALLOC_THRESHOLD 10
|
||||
#endif
|
||||
|
||||
/* PCRE uses recursive function calls to handle backtracking while matching.
|
||||
This can sometimes be a problem on systems that have stacks of limited size.
|
||||
Define NO_RECURSE to get a version that doesn't use recursion in the match()
|
||||
function; instead it creates its own stack by steam using pcre_recurse_malloc()
|
||||
to obtain memory from the heap. For more detail, see the comments and other
|
||||
stuff just above the match() function. On systems that support it, "configure"
|
||||
can be used to set this in the Makefile (use --disable-stack-for-recursion). */
|
||||
|
||||
/* #define NO_RECURSE */
|
||||
|
||||
/* The value of MATCH_LIMIT determines the default number of times the internal
|
||||
match() function can be called during a single execution of pcre_exec(). There
|
||||
is a runtime interface for setting a different limit. The limit exists in order
|
||||
to catch runaway regular expressions that take for ever to determine that they
|
||||
do not match. The default is set very large so that it does not accidentally
|
||||
catch legitimate cases. On systems that support it, "configure" can be used to
|
||||
override this default default. */
|
||||
|
||||
#ifndef MATCH_LIMIT
|
||||
#define MATCH_LIMIT 10000000
|
||||
#endif
|
||||
|
||||
/* The above limit applies to all calls of match(), whether or not they
|
||||
increase the recursion depth. In some environments it is desirable to limit the
|
||||
depth of recursive calls of match() more strictly, in order to restrict the
|
||||
maximum amount of stack (or heap, if NO_RECURSE is defined) that is used. The
|
||||
value of MATCH_LIMIT_RECURSION applies only to recursive calls of match(). To
|
||||
have any useful effect, it must be less than the value of MATCH_LIMIT. There is
|
||||
a runtime method for setting a different limit. On systems that support it,
|
||||
"configure" can be used to override this default default. */
|
||||
|
||||
#ifndef MATCH_LIMIT_RECURSION
|
||||
#define MATCH_LIMIT_RECURSION MATCH_LIMIT
|
||||
#endif
|
||||
|
||||
/* These three limits are parameterized just in case anybody ever wants to
|
||||
change them. Care must be taken if they are increased, because they guard
|
||||
against integer overflow caused by enormously large patterns. */
|
||||
|
||||
#ifndef MAX_NAME_SIZE
|
||||
#define MAX_NAME_SIZE 32
|
||||
#endif
|
||||
|
||||
#ifndef MAX_NAME_COUNT
|
||||
#define MAX_NAME_COUNT 10000
|
||||
#endif
|
||||
|
||||
#ifndef MAX_DUPLENGTH
|
||||
#define MAX_DUPLENGTH 30000
|
||||
#endif
|
||||
|
||||
/* End */
|
84
src/third_party/jscre/pcre.h
vendored
84
src/third_party/jscre/pcre.h
vendored
@ -1,84 +0,0 @@
|
||||
/* This is the public header file for JavaScriptCore's variant of the PCRE
|
||||
library. While this library started out as a copy of PCRE, many of the
|
||||
features of PCRE have been removed. This library now supports only the
|
||||
regular expression features required by the JavaScript language
|
||||
specification, and has only the functions needed by JavaScriptCore and the
|
||||
rest of WebKit.
|
||||
|
||||
Copyright (c) 1997-2005 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// FIXME: This file needs to be renamed to JSRegExp.h; it's no longer PCRE.
|
||||
|
||||
#ifndef JSRegExp_h
|
||||
#define JSRegExp_h
|
||||
|
||||
#include "../../../include/v8.h"
|
||||
|
||||
// JSCRE is very chatty in debug mode, so in order to keep it slient
|
||||
// while still importing v8.h correctly (it contains #ifdef DEBUGs)
|
||||
// we allow DEBUG to be set and undef it manually.
|
||||
#undef DEBUG
|
||||
|
||||
namespace v8 { namespace jscre {
|
||||
|
||||
typedef uint16_t UChar;
|
||||
|
||||
struct JSRegExp;
|
||||
typedef struct JSRegExp JscreRegExp;
|
||||
|
||||
enum JSRegExpIgnoreCaseOption { JSRegExpDoNotIgnoreCase, JSRegExpIgnoreCase };
|
||||
enum JSRegExpMultilineOption { JSRegExpSingleLine, JSRegExpMultiline };
|
||||
|
||||
/* jsRegExpExecute error codes */
|
||||
const int JSRegExpErrorNoMatch = -1;
|
||||
const int JSRegExpErrorHitLimit = -2;
|
||||
const int JSRegExpErrorNoMemory = -3;
|
||||
const int JSRegExpErrorInternal = -4;
|
||||
|
||||
typedef void* malloc_t(size_t size);
|
||||
typedef void free_t(void* address);
|
||||
|
||||
JSRegExp* jsRegExpCompile(const UChar* pattern, int patternLength,
|
||||
JSRegExpIgnoreCaseOption, JSRegExpMultilineOption,
|
||||
unsigned* numSubpatterns, const char** errorMessage,
|
||||
malloc_t* allocate_function, free_t* free_function);
|
||||
|
||||
int jsRegExpExecute(const JSRegExp*,
|
||||
const UChar* subject, int subjectLength, int startOffset,
|
||||
int* offsetsVector, int offsetsVectorLength);
|
||||
|
||||
void jsRegExpFree(JSRegExp*);
|
||||
|
||||
} } // namespace v8::jscre
|
||||
|
||||
#endif
|
96
src/third_party/jscre/pcre_chartables.c
vendored
96
src/third_party/jscre/pcre_chartables.c
vendored
@ -1,96 +0,0 @@
|
||||
/*************************************************
|
||||
* Perl-Compatible Regular Expressions *
|
||||
*************************************************/
|
||||
|
||||
/* This file is automatically written by the dftables auxiliary
|
||||
program. If you edit it by hand, you might like to edit the Makefile to
|
||||
prevent its ever being regenerated.
|
||||
|
||||
This file contains the default tables for characters with codes less than
|
||||
128 (ASCII characters). These tables are used when no external tables are
|
||||
passed to PCRE. */
|
||||
|
||||
const unsigned char kjs_pcre_default_tables[480] = {
|
||||
|
||||
/* This table is a lower casing table. */
|
||||
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
|
||||
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
||||
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||
0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
|
||||
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
|
||||
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
|
||||
0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
|
||||
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
|
||||
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
|
||||
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
|
||||
0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
|
||||
|
||||
/* This table is a case flipping table. */
|
||||
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
|
||||
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
||||
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
||||
0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
|
||||
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
|
||||
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
|
||||
0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
|
||||
0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
|
||||
0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
|
||||
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
|
||||
0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
|
||||
|
||||
/* This table contains bit maps for various character classes.
|
||||
Each map is 32 bytes long and the bits run from the least
|
||||
significant end of each byte. The classes are: space, digit, word. */
|
||||
|
||||
0x00, 0x3E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
|
||||
0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
/* This table identifies various classes of character by individual bits:
|
||||
0x01 white space character
|
||||
0x08 hexadecimal digit
|
||||
0x10 alphanumeric or '_'
|
||||
*/
|
||||
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0- 7 */
|
||||
0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 8- 15 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 16- 23 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24- 31 */
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - ' */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ( - / */
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, /* 0 - 7 */
|
||||
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 - ? */
|
||||
0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, /* @ - G */
|
||||
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* H - O */
|
||||
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* P - W */
|
||||
0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, /* X - _ */
|
||||
0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, /* ` - g */
|
||||
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* h - o */
|
||||
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, /* p - w */
|
||||
0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}; /* x -127 */
|
||||
|
||||
|
||||
/* End of chartables.c */
|
2677
src/third_party/jscre/pcre_compile.cpp
vendored
2677
src/third_party/jscre/pcre_compile.cpp
vendored
File diff suppressed because it is too large
Load Diff
2085
src/third_party/jscre/pcre_exec.cpp
vendored
2085
src/third_party/jscre/pcre_exec.cpp
vendored
File diff suppressed because it is too large
Load Diff
426
src/third_party/jscre/pcre_internal.h
vendored
426
src/third_party/jscre/pcre_internal.h
vendored
@ -1,426 +0,0 @@
|
||||
/* This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed. This library now supports only the regular expression features
|
||||
required by the JavaScript language specification, and has only the functions
|
||||
needed by JavaScriptCore and the rest of WebKit.
|
||||
|
||||
Originally written by Philip Hazel
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* This header contains definitions that are shared between the different
|
||||
modules, but which are not relevant to the exported API. This includes some
|
||||
functions whose names all begin with "_pcre_". */
|
||||
|
||||
#ifndef PCRE_INTERNAL_H
|
||||
#define PCRE_INTERNAL_H
|
||||
|
||||
/* Bit definitions for entries in the pcre_ctypes table. */
|
||||
|
||||
#define ctype_space 0x01
|
||||
#define ctype_xdigit 0x08
|
||||
#define ctype_word 0x10 /* alphameric or '_' */
|
||||
|
||||
/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
|
||||
of bits for a class map. Some classes are built by combining these tables. */
|
||||
|
||||
#define cbit_space 0 /* \s */
|
||||
#define cbit_digit 32 /* \d */
|
||||
#define cbit_word 64 /* \w */
|
||||
#define cbit_length 96 /* Length of the cbits table */
|
||||
|
||||
/* Offsets of the various tables from the base tables pointer, and
|
||||
total length. */
|
||||
|
||||
#define lcc_offset 0
|
||||
#define fcc_offset 128
|
||||
#define cbits_offset 256
|
||||
#define ctypes_offset (cbits_offset + cbit_length)
|
||||
#define tables_length (ctypes_offset + 128)
|
||||
|
||||
#ifndef DFTABLES
|
||||
|
||||
// TODO: Hook this up to something that checks assertions.
|
||||
#define ASSERT(x) do { } while(0)
|
||||
#define ASSERT_NOT_REACHED() do {} while(0)
|
||||
|
||||
#ifdef WIN32
|
||||
#pragma warning(disable: 4232)
|
||||
#pragma warning(disable: 4244)
|
||||
#endif
|
||||
|
||||
#include "pcre.h"
|
||||
|
||||
/* The value of LINK_SIZE determines the number of bytes used to store links as
|
||||
offsets within the compiled regex. The default is 2, which allows for compiled
|
||||
patterns up to 64K long. */
|
||||
|
||||
#define LINK_SIZE 2
|
||||
|
||||
/* Define DEBUG to get debugging output on stdout. */
|
||||
|
||||
#if 0
|
||||
#define DEBUG
|
||||
#endif
|
||||
|
||||
/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
|
||||
inline, and there are *still* stupid compilers about that don't like indented
|
||||
pre-processor statements, or at least there were when I first wrote this. After
|
||||
all, it had only been about 10 years then... */
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DPRINTF(p) printf p
|
||||
#else
|
||||
#define DPRINTF(p) /*nothing*/
|
||||
#endif
|
||||
|
||||
namespace v8 { namespace jscre {
|
||||
|
||||
/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
|
||||
in big-endian order) by default. These are used, for example, to link from the
|
||||
start of a subpattern to its alternatives and its end. The use of 2 bytes per
|
||||
offset limits the size of the compiled regex to around 64K, which is big enough
|
||||
for almost everybody. However, I received a request for an even bigger limit.
|
||||
For this reason, and also to make the code easier to maintain, the storing and
|
||||
loading of offsets from the byte string is now handled by the functions that are
|
||||
defined here. */
|
||||
|
||||
/* PCRE uses some other 2-byte quantities that do not change when the size of
|
||||
offsets changes. There are used for repeat counts and for other things such as
|
||||
capturing parenthesis numbers in back references. */
|
||||
|
||||
static inline void put2ByteValue(unsigned char* opcodePtr, int value)
|
||||
{
|
||||
ASSERT(value >= 0 && value <= 0xFFFF);
|
||||
opcodePtr[0] = value >> 8;
|
||||
opcodePtr[1] = value;
|
||||
}
|
||||
|
||||
static inline int get2ByteValue(const unsigned char* opcodePtr)
|
||||
{
|
||||
return (opcodePtr[0] << 8) | opcodePtr[1];
|
||||
}
|
||||
|
||||
static inline void put2ByteValueAndAdvance(unsigned char*& opcodePtr, int value)
|
||||
{
|
||||
put2ByteValue(opcodePtr, value);
|
||||
opcodePtr += 2;
|
||||
}
|
||||
|
||||
static inline void putLinkValueAllowZero(unsigned char* opcodePtr, int value)
|
||||
{
|
||||
put2ByteValue(opcodePtr, value);
|
||||
}
|
||||
|
||||
static inline int getLinkValueAllowZero(const unsigned char* opcodePtr)
|
||||
{
|
||||
return get2ByteValue(opcodePtr);
|
||||
}
|
||||
|
||||
#define MAX_PATTERN_SIZE (1 << 16)
|
||||
|
||||
static inline void putLinkValue(unsigned char* opcodePtr, int value)
|
||||
{
|
||||
ASSERT(value);
|
||||
putLinkValueAllowZero(opcodePtr, value);
|
||||
}
|
||||
|
||||
static inline int getLinkValue(const unsigned char* opcodePtr)
|
||||
{
|
||||
int value = getLinkValueAllowZero(opcodePtr);
|
||||
ASSERT(value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static inline void putLinkValueAndAdvance(unsigned char*& opcodePtr, int value)
|
||||
{
|
||||
putLinkValue(opcodePtr, value);
|
||||
opcodePtr += LINK_SIZE;
|
||||
}
|
||||
|
||||
static inline void putLinkValueAllowZeroAndAdvance(unsigned char*& opcodePtr, int value)
|
||||
{
|
||||
putLinkValueAllowZero(opcodePtr, value);
|
||||
opcodePtr += LINK_SIZE;
|
||||
}
|
||||
|
||||
// FIXME: These are really more of a "compiled regexp state" than "regexp options"
|
||||
enum RegExpOptions {
|
||||
UseFirstByteOptimizationOption = 0x40000000, /* first_byte is set */
|
||||
UseRequiredByteOptimizationOption = 0x20000000, /* req_byte is set */
|
||||
UseMultiLineFirstByteOptimizationOption = 0x10000000, /* start after \n for multiline */
|
||||
IsAnchoredOption = 0x02000000, /* can't use partial with this regex */
|
||||
IgnoreCaseOption = 0x00000001,
|
||||
MatchAcrossMultipleLinesOption = 0x00000002
|
||||
};
|
||||
|
||||
/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a
|
||||
variable-length repeat, or a anything other than literal characters. */
|
||||
|
||||
#define REQ_IGNORE_CASE 0x0100 /* indicates should ignore case */
|
||||
#define REQ_VARY 0x0200 /* reqbyte followed non-literal item */
|
||||
|
||||
/* Miscellaneous definitions */
|
||||
|
||||
/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
|
||||
contain UTF-8 characters with values greater than 255. */
|
||||
|
||||
#define XCL_NOT 0x01 /* Flag: this is a negative class */
|
||||
#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */
|
||||
|
||||
#define XCL_END 0 /* Marks end of individual items */
|
||||
#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */
|
||||
#define XCL_RANGE 2 /* A range (two multibyte chars) follows */
|
||||
|
||||
/* These are escaped items that aren't just an encoding of a particular data
|
||||
value such as \n. They must have non-zero values, as check_escape() returns
|
||||
their negation. Also, they must appear in the same order as in the opcode
|
||||
definitions below, up to ESC_w. The final one must be
|
||||
ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two
|
||||
tests in the code for an escape > ESC_b and <= ESC_w to
|
||||
detect the types that may be repeated. These are the types that consume
|
||||
characters. If any new escapes are put in between that don't consume a
|
||||
character, that code will have to change. */
|
||||
|
||||
enum { ESC_B = 1, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w, ESC_REF };
|
||||
|
||||
/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
|
||||
that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
|
||||
OP_EOD must correspond in order to the list of escapes immediately above.
|
||||
Note that whenever this list is updated, the two macro definitions that follow
|
||||
must also be updated to match. */
|
||||
|
||||
#define FOR_EACH_OPCODE(macro) \
|
||||
macro(END) \
|
||||
\
|
||||
macro(NOT_WORD_BOUNDARY) \
|
||||
macro(WORD_BOUNDARY) \
|
||||
macro(NOT_DIGIT) \
|
||||
macro(DIGIT) \
|
||||
macro(NOT_WHITESPACE) \
|
||||
macro(WHITESPACE) \
|
||||
macro(NOT_WORDCHAR) \
|
||||
macro(WORDCHAR) \
|
||||
\
|
||||
macro(NOT_NEWLINE) \
|
||||
\
|
||||
macro(CIRC) \
|
||||
macro(DOLL) \
|
||||
macro(BOL) \
|
||||
macro(EOL) \
|
||||
macro(CHAR) \
|
||||
macro(CHAR_IGNORING_CASE) \
|
||||
macro(ASCII_CHAR) \
|
||||
macro(ASCII_LETTER_IGNORING_CASE) \
|
||||
macro(NOT) \
|
||||
\
|
||||
macro(STAR) \
|
||||
macro(MINSTAR) \
|
||||
macro(PLUS) \
|
||||
macro(MINPLUS) \
|
||||
macro(QUERY) \
|
||||
macro(MINQUERY) \
|
||||
macro(UPTO) \
|
||||
macro(MINUPTO) \
|
||||
macro(EXACT) \
|
||||
\
|
||||
macro(NOTSTAR) \
|
||||
macro(NOTMINSTAR) \
|
||||
macro(NOTPLUS) \
|
||||
macro(NOTMINPLUS) \
|
||||
macro(NOTQUERY) \
|
||||
macro(NOTMINQUERY) \
|
||||
macro(NOTUPTO) \
|
||||
macro(NOTMINUPTO) \
|
||||
macro(NOTEXACT) \
|
||||
\
|
||||
macro(TYPESTAR) \
|
||||
macro(TYPEMINSTAR) \
|
||||
macro(TYPEPLUS) \
|
||||
macro(TYPEMINPLUS) \
|
||||
macro(TYPEQUERY) \
|
||||
macro(TYPEMINQUERY) \
|
||||
macro(TYPEUPTO) \
|
||||
macro(TYPEMINUPTO) \
|
||||
macro(TYPEEXACT) \
|
||||
\
|
||||
macro(CRSTAR) \
|
||||
macro(CRMINSTAR) \
|
||||
macro(CRPLUS) \
|
||||
macro(CRMINPLUS) \
|
||||
macro(CRQUERY) \
|
||||
macro(CRMINQUERY) \
|
||||
macro(CRRANGE) \
|
||||
macro(CRMINRANGE) \
|
||||
\
|
||||
macro(CLASS) \
|
||||
macro(NCLASS) \
|
||||
macro(XCLASS) \
|
||||
\
|
||||
macro(REF) \
|
||||
\
|
||||
macro(ALT) \
|
||||
macro(KET) \
|
||||
macro(KETRMAX) \
|
||||
macro(KETRMIN) \
|
||||
\
|
||||
macro(ASSERT) \
|
||||
macro(ASSERT_NOT) \
|
||||
\
|
||||
macro(BRAZERO) \
|
||||
macro(BRAMINZERO) \
|
||||
macro(BRANUMBER) \
|
||||
macro(BRA)
|
||||
|
||||
#define OPCODE_ENUM_VALUE(opcode) OP_##opcode,
|
||||
enum { FOR_EACH_OPCODE(OPCODE_ENUM_VALUE) };
|
||||
|
||||
/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and
|
||||
study.c that all opcodes are less than 128 in value. This makes handling UTF-8
|
||||
character sequences easier. */
|
||||
|
||||
/* The highest extraction number before we have to start using additional
|
||||
bytes. (Originally PCRE didn't have support for extraction counts higher than
|
||||
this number.) The value is limited by the number of opcodes left after OP_BRA,
|
||||
i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
|
||||
opcodes. */
|
||||
|
||||
/* FIXME: Note that OP_BRA + 100 is > 128, so the two comments above
|
||||
are in conflict! */
|
||||
|
||||
#define EXTRACT_BASIC_MAX 100
|
||||
|
||||
/* The index of names and the
|
||||
code vector run on as long as necessary after the end. We store an explicit
|
||||
offset to the name table so that if a regex is compiled on one host, saved, and
|
||||
then run on another where the size of pointers is different, all might still
|
||||
be well. For the case of compiled-on-4 and run-on-8, we include an extra
|
||||
pointer that is always NULL.
|
||||
*/
|
||||
|
||||
struct JSRegExp {
|
||||
unsigned options;
|
||||
|
||||
unsigned short top_bracket;
|
||||
unsigned short top_backref;
|
||||
|
||||
unsigned short first_byte;
|
||||
unsigned short req_byte;
|
||||
};
|
||||
|
||||
/* Internal shared data tables. These are tables that are used by more than one
|
||||
of the exported public functions. They have to be "external" in the C sense,
|
||||
but are not part of the PCRE public API. The data for these tables is in the
|
||||
pcre_tables.c module. */
|
||||
|
||||
#define kjs_pcre_utf8_table1_size 6
|
||||
|
||||
extern const int kjs_pcre_utf8_table1[6];
|
||||
extern const int kjs_pcre_utf8_table2[6];
|
||||
extern const int kjs_pcre_utf8_table3[6];
|
||||
extern const unsigned char kjs_pcre_utf8_table4[0x40];
|
||||
|
||||
extern const unsigned char kjs_pcre_default_tables[tables_length];
|
||||
|
||||
static inline unsigned char toLowerCase(unsigned char c)
|
||||
{
|
||||
static const unsigned char* lowerCaseChars = kjs_pcre_default_tables + lcc_offset;
|
||||
return lowerCaseChars[c];
|
||||
}
|
||||
|
||||
static inline unsigned char flipCase(unsigned char c)
|
||||
{
|
||||
static const unsigned char* flippedCaseChars = kjs_pcre_default_tables + fcc_offset;
|
||||
return flippedCaseChars[c];
|
||||
}
|
||||
|
||||
static inline unsigned char classBitmapForChar(unsigned char c)
|
||||
{
|
||||
static const unsigned char* charClassBitmaps = kjs_pcre_default_tables + cbits_offset;
|
||||
return charClassBitmaps[c];
|
||||
}
|
||||
|
||||
static inline unsigned char charTypeForChar(unsigned char c)
|
||||
{
|
||||
const unsigned char* charTypeMap = kjs_pcre_default_tables + ctypes_offset;
|
||||
return charTypeMap[c];
|
||||
}
|
||||
|
||||
static inline bool isWordChar(UChar c)
|
||||
{
|
||||
return c < 128 && (charTypeForChar(c) & ctype_word);
|
||||
}
|
||||
|
||||
static inline bool isSpaceChar(UChar c)
|
||||
{
|
||||
return (c < 128 && (charTypeForChar(c) & ctype_space));
|
||||
}
|
||||
|
||||
static inline bool isNewline(UChar nl)
|
||||
{
|
||||
return (nl == 0xA || nl == 0xD || nl == 0x2028 || nl == 0x2029);
|
||||
}
|
||||
|
||||
static inline bool isBracketStartOpcode(unsigned char opcode)
|
||||
{
|
||||
if (opcode >= OP_BRA)
|
||||
return true;
|
||||
switch (opcode) {
|
||||
case OP_ASSERT:
|
||||
case OP_ASSERT_NOT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void advanceToEndOfBracket(const unsigned char*& opcodePtr)
|
||||
{
|
||||
ASSERT(isBracketStartOpcode(*opcodePtr) || *opcodePtr == OP_ALT);
|
||||
do
|
||||
opcodePtr += getLinkValue(opcodePtr + 1);
|
||||
while (*opcodePtr == OP_ALT);
|
||||
}
|
||||
|
||||
/* Internal shared functions. These are functions that are used in more
|
||||
that one of the source files. They have to have external linkage, but
|
||||
but are not part of the public API and so not exported from the library. */
|
||||
|
||||
extern int kjs_pcre_ucp_othercase(unsigned);
|
||||
extern bool kjs_pcre_xclass(int, const unsigned char*);
|
||||
|
||||
} } // namespace v8::jscre
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/* End of pcre_internal.h */
|
75
src/third_party/jscre/pcre_tables.cpp
vendored
75
src/third_party/jscre/pcre_tables.cpp
vendored
@ -1,75 +0,0 @@
|
||||
/* This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed. This library now supports only the regular expression features
|
||||
required by the JavaScript language specification, and has only the functions
|
||||
needed by JavaScriptCore and the rest of WebKit.
|
||||
|
||||
Originally written by Philip Hazel
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* This module contains some fixed tables that are used by more than one of the
|
||||
PCRE code modules. */
|
||||
|
||||
#include "pcre_internal.h"
|
||||
|
||||
namespace v8 { namespace jscre {
|
||||
|
||||
/*************************************************
|
||||
* Tables for UTF-8 support *
|
||||
*************************************************/
|
||||
|
||||
/* These are the breakpoints for different numbers of bytes in a UTF-8
|
||||
character. */
|
||||
|
||||
const int kjs_pcre_utf8_table1[6] =
|
||||
{ 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
|
||||
|
||||
/* These are the indicator bits and the mask for the data bits to set in the
|
||||
first byte of a character, indexed by the number of additional bytes. */
|
||||
|
||||
const int kjs_pcre_utf8_table2[6] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
|
||||
const int kjs_pcre_utf8_table3[6] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
|
||||
|
||||
/* Table of the number of extra characters, indexed by the first character
|
||||
masked with 0x3f. The highest number for a valid UTF-8 character is in fact
|
||||
0x3d. */
|
||||
|
||||
const unsigned char kjs_pcre_utf8_table4[0x40] = {
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
|
||||
|
||||
#include "pcre_chartables.c"
|
||||
|
||||
} } // namespace v8::jscre
|
102
src/third_party/jscre/pcre_ucp_searchfuncs.cpp
vendored
102
src/third_party/jscre/pcre_ucp_searchfuncs.cpp
vendored
@ -1,102 +0,0 @@
|
||||
/* This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed. This library now supports only the regular expression features
|
||||
required by the JavaScript language specification, and has only the functions
|
||||
needed by JavaScriptCore and the rest of WebKit.
|
||||
|
||||
Originally written by Philip Hazel
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
/* This module contains code for searching the table of Unicode character
|
||||
properties. */
|
||||
|
||||
#include "pcre_internal.h"
|
||||
|
||||
#include "ucpinternal.h" /* Internal table details */
|
||||
#include "ucptable.cpp" /* The table itself */
|
||||
|
||||
namespace v8 { namespace jscre {
|
||||
|
||||
/*************************************************
|
||||
* Search table and return other case *
|
||||
*************************************************/
|
||||
|
||||
/* If the given character is a letter, and there is another case for the
|
||||
letter, return the other case. Otherwise, return -1.
|
||||
|
||||
Arguments:
|
||||
c the character value
|
||||
|
||||
Returns: the other case or -1 if none
|
||||
*/
|
||||
|
||||
int kjs_pcre_ucp_othercase(unsigned c)
|
||||
{
|
||||
int bot = 0;
|
||||
int top = sizeof(ucp_table) / sizeof(cnode);
|
||||
int mid;
|
||||
|
||||
/* The table is searched using a binary chop. You might think that using
|
||||
intermediate variables to hold some of the common expressions would speed
|
||||
things up, but tests with gcc 3.4.4 on Linux showed that, on the contrary, it
|
||||
makes things a lot slower. */
|
||||
|
||||
for (;;) {
|
||||
if (top <= bot)
|
||||
return -1;
|
||||
mid = (bot + top) >> 1;
|
||||
if (c == (ucp_table[mid].f0 & f0_charmask))
|
||||
break;
|
||||
if (c < (ucp_table[mid].f0 & f0_charmask))
|
||||
top = mid;
|
||||
else {
|
||||
if ((ucp_table[mid].f0 & f0_rangeflag) && (c <= (ucp_table[mid].f0 & f0_charmask) + (ucp_table[mid].f1 & f1_rangemask)))
|
||||
break;
|
||||
bot = mid + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Found an entry in the table. Return -1 for a range entry. Otherwise return
|
||||
the other case if there is one, else -1. */
|
||||
|
||||
if (ucp_table[mid].f0 & f0_rangeflag)
|
||||
return -1;
|
||||
|
||||
int offset = ucp_table[mid].f1 & f1_casemask;
|
||||
if (offset & f1_caseneg)
|
||||
offset |= f1_caseneg;
|
||||
return !offset ? -1 : c + offset;
|
||||
}
|
||||
|
||||
} } // namespace v8::jscre
|
118
src/third_party/jscre/pcre_xclass.cpp
vendored
118
src/third_party/jscre/pcre_xclass.cpp
vendored
@ -1,118 +0,0 @@
|
||||
/* This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed. This library now supports only the regular expression features
|
||||
required by the JavaScript language specification, and has only the functions
|
||||
needed by JavaScriptCore and the rest of WebKit.
|
||||
|
||||
Originally written by Philip Hazel
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* This module contains an internal function that is used to match an extended
|
||||
class (one that contains characters whose values are > 255). */
|
||||
|
||||
#include "pcre_internal.h"
|
||||
|
||||
namespace v8 { namespace jscre {
|
||||
|
||||
/*************************************************
|
||||
* Match character against an XCLASS *
|
||||
*************************************************/
|
||||
|
||||
/* This function is called to match a character against an extended class that
|
||||
might contain values > 255.
|
||||
|
||||
Arguments:
|
||||
c the character
|
||||
data points to the flag byte of the XCLASS data
|
||||
|
||||
Returns: true if character matches, else false
|
||||
*/
|
||||
|
||||
/* Get the next UTF-8 character, advancing the pointer. This is called when we
|
||||
know we are in UTF-8 mode. */
|
||||
|
||||
static inline void getUTF8CharAndAdvancePointer(int& c, const unsigned char*& subjectPtr)
|
||||
{
|
||||
c = *subjectPtr++;
|
||||
if ((c & 0xc0) == 0xc0) {
|
||||
int gcaa = kjs_pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */
|
||||
int gcss = 6 * gcaa;
|
||||
c = (c & kjs_pcre_utf8_table3[gcaa]) << gcss;
|
||||
while (gcaa-- > 0) {
|
||||
gcss -= 6;
|
||||
c |= (*subjectPtr++ & 0x3f) << gcss;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool kjs_pcre_xclass(int c, const unsigned char* data)
|
||||
{
|
||||
bool negated = (*data & XCL_NOT);
|
||||
|
||||
/* Character values < 256 are matched against a bitmap, if one is present. If
|
||||
not, we still carry on, because there may be ranges that start below 256 in the
|
||||
additional data. */
|
||||
|
||||
if (c < 256) {
|
||||
if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
|
||||
return !negated; /* char found */
|
||||
}
|
||||
|
||||
/* First skip the bit map if present. Then match against the list of Unicode
|
||||
properties or large chars or ranges that end with a large char. We won't ever
|
||||
encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
|
||||
|
||||
if ((*data++ & XCL_MAP) != 0)
|
||||
data += 32;
|
||||
|
||||
int t;
|
||||
while ((t = *data++) != XCL_END) {
|
||||
if (t == XCL_SINGLE) {
|
||||
int x;
|
||||
getUTF8CharAndAdvancePointer(x, data);
|
||||
if (c == x)
|
||||
return !negated;
|
||||
}
|
||||
else if (t == XCL_RANGE) {
|
||||
int x, y;
|
||||
getUTF8CharAndAdvancePointer(x, data);
|
||||
getUTF8CharAndAdvancePointer(y, data);
|
||||
if (c >= x && c <= y)
|
||||
return !negated;
|
||||
}
|
||||
}
|
||||
|
||||
return negated; /* char did not match */
|
||||
}
|
||||
|
||||
} } // namespace v8::jscre
|
126
src/third_party/jscre/ucpinternal.h
vendored
126
src/third_party/jscre/ucpinternal.h
vendored
@ -1,126 +0,0 @@
|
||||
/* This is JavaScriptCore's variant of the PCRE library. While this library
|
||||
started out as a copy of PCRE, many of the features of PCRE have been
|
||||
removed. This library now supports only the regular expression features
|
||||
required by the JavaScript language specification, and has only the functions
|
||||
needed by JavaScriptCore and the rest of WebKit.
|
||||
|
||||
Originally written by Philip Hazel
|
||||
Copyright (c) 1997-2006 University of Cambridge
|
||||
Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the University of Cambridge nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
* Unicode Property Table handler *
|
||||
*************************************************/
|
||||
|
||||
/* Internal header file defining the layout of the bits in each pair of 32-bit
|
||||
words that form a data item in the table. */
|
||||
|
||||
typedef struct cnode {
|
||||
unsigned f0;
|
||||
unsigned f1;
|
||||
} cnode;
|
||||
|
||||
/* Things for the f0 field */
|
||||
|
||||
#define f0_scriptmask 0xff000000 /* Mask for script field */
|
||||
#define f0_scriptshift 24 /* Shift for script value */
|
||||
#define f0_rangeflag 0x00f00000 /* Flag for a range item */
|
||||
#define f0_charmask 0x001fffff /* Mask for code point value */
|
||||
|
||||
/* Things for the f1 field */
|
||||
|
||||
#define f1_typemask 0xfc000000 /* Mask for char type field */
|
||||
#define f1_typeshift 26 /* Shift for the type field */
|
||||
#define f1_rangemask 0x0000ffff /* Mask for a range offset */
|
||||
#define f1_casemask 0x0000ffff /* Mask for a case offset */
|
||||
#define f1_caseneg 0xffff8000 /* Bits for negation */
|
||||
|
||||
/* The data consists of a vector of structures of type cnode. The two unsigned
|
||||
32-bit integers are used as follows:
|
||||
|
||||
(f0) (1) The most significant byte holds the script number. The numbers are
|
||||
defined by the enum in ucp.h.
|
||||
|
||||
(2) The 0x00800000 bit is set if this entry defines a range of characters.
|
||||
It is not set if this entry defines a single character
|
||||
|
||||
(3) The 0x00600000 bits are spare.
|
||||
|
||||
(4) The 0x001fffff bits contain the code point. No Unicode code point will
|
||||
ever be greater than 0x0010ffff, so this should be OK for ever.
|
||||
|
||||
(f1) (1) The 0xfc000000 bits contain the character type number. The numbers are
|
||||
defined by an enum in ucp.h.
|
||||
|
||||
(2) The 0x03ff0000 bits are spare.
|
||||
|
||||
(3) The 0x0000ffff bits contain EITHER the unsigned offset to the top of
|
||||
range if this entry defines a range, OR the *signed* offset to the
|
||||
character's "other case" partner if this entry defines a single
|
||||
character. There is no partner if the value is zero.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
| script (8) |.|.|.| codepoint (21) || type (6) |.|.| spare (8) | offset (16) |
|
||||
-------------------------------------------------------------------------------
|
||||
| | | | |
|
||||
| | |-> spare | |-> spare
|
||||
| | |
|
||||
| |-> spare |-> spare
|
||||
|
|
||||
|-> range flag
|
||||
|
||||
The upper/lower casing information is set only for characters that come in
|
||||
pairs. The non-one-to-one mappings in the Unicode data are ignored.
|
||||
|
||||
When searching the data, proceed as follows:
|
||||
|
||||
(1) Set up for a binary chop search.
|
||||
|
||||
(2) If the top is not greater than the bottom, the character is not in the
|
||||
table. Its type must therefore be "Cn" ("Undefined").
|
||||
|
||||
(3) Find the middle vector element.
|
||||
|
||||
(4) Extract the code point and compare. If equal, we are done.
|
||||
|
||||
(5) If the test character is smaller, set the top to the current point, and
|
||||
goto (2).
|
||||
|
||||
(6) If the current entry defines a range, compute the last character by adding
|
||||
the offset, and see if the test character is within the range. If it is,
|
||||
we are done.
|
||||
|
||||
(7) Otherwise, set the bottom to one element past the current point and goto
|
||||
(2).
|
||||
*/
|
||||
|
||||
/* End of ucpinternal.h */
|
2968
src/third_party/jscre/ucptable.cpp
vendored
2968
src/third_party/jscre/ucptable.cpp
vendored
File diff suppressed because it is too large
Load Diff
@ -32,7 +32,6 @@
|
||||
890A14020EE9C4B400E49346 /* regexp-macro-assembler-irregexp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 89A15C750EE466D000B48DEB /* regexp-macro-assembler-irregexp.cc */; };
|
||||
890A14030EE9C4B500E49346 /* regexp-macro-assembler-tracer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 89A15C770EE466D000B48DEB /* regexp-macro-assembler-tracer.cc */; };
|
||||
890A14040EE9C4B700E49346 /* regexp-macro-assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 89A15C790EE466D000B48DEB /* regexp-macro-assembler.cc */; };
|
||||
893988060F2A35FA007D5254 /* libjscre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 897FF1BF0E719CB600D62E90 /* libjscre.a */; };
|
||||
893988070F2A35FA007D5254 /* libv8.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8970F2F00E719FB2006AE7B5 /* libv8.a */; };
|
||||
8939880D0F2A362A007D5254 /* d8.cc in Sources */ = {isa = PBXBuildFile; fileRef = 89A15C920EE46A1700B48DEB /* d8.cc */; };
|
||||
893988160F2A3688007D5254 /* d8-debug.cc in Sources */ = {isa = PBXBuildFile; fileRef = 893988150F2A3686007D5254 /* d8-debug.cc */; };
|
||||
@ -44,7 +43,6 @@
|
||||
89495E490E79FC23001F68C3 /* compilation-cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 89495E460E79FC23001F68C3 /* compilation-cache.cc */; };
|
||||
896FD03A0E78D717003DFB6A /* libv8-arm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 89F23C870E78D5B2006B2466 /* libv8-arm.a */; };
|
||||
897F767F0E71B690007ACF34 /* shell.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF1B50E719C0900D62E90 /* shell.cc */; };
|
||||
897F76840E71B6B1007ACF34 /* libjscre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 897FF1BF0E719CB600D62E90 /* libjscre.a */; };
|
||||
897F76850E71B6B1007ACF34 /* libv8.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8970F2F00E719FB2006AE7B5 /* libv8.a */; };
|
||||
897FF1C40E719D6B00D62E90 /* pcre_compile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 897FF0EA0E719B3500D62E90 /* pcre_compile.cpp */; };
|
||||
897FF1C50E719D6E00D62E90 /* pcre_exec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 897FF0EB0E719B3500D62E90 /* pcre_exec.cpp */; };
|
||||
@ -184,7 +182,6 @@
|
||||
89F23C810E78D5B2006B2466 /* variables.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF19F0E719B8F00D62E90 /* variables.cc */; };
|
||||
89F23C820E78D5B2006B2466 /* zone.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF1A20E719B8F00D62E90 /* zone.cc */; };
|
||||
89F23C8E0E78D5B6006B2466 /* shell.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF1B50E719C0900D62E90 /* shell.cc */; };
|
||||
89F23C900E78D5B6006B2466 /* libjscre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 897FF1BF0E719CB600D62E90 /* libjscre.a */; };
|
||||
89F23C970E78D5E3006B2466 /* assembler-arm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF0FE0E719B8F00D62E90 /* assembler-arm.cc */; };
|
||||
89F23C980E78D5E7006B2466 /* builtins-arm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF1090E719B8F00D62E90 /* builtins-arm.cc */; };
|
||||
89F23C990E78D5E9006B2466 /* codegen-arm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 897FF1140E719B8F00D62E90 /* codegen-arm.cc */; };
|
||||
@ -212,20 +209,6 @@
|
||||
remoteGlobalIDString = 897F76790E71B4CC007ACF34;
|
||||
remoteInfo = v8_shell;
|
||||
};
|
||||
7BF8919A0E7309AD000BAF8A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 897FF1BE0E719CB600D62E90;
|
||||
remoteInfo = jscre;
|
||||
};
|
||||
893988000F2A35FA007D5254 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 897FF1BE0E719CB600D62E90;
|
||||
remoteInfo = jscre;
|
||||
};
|
||||
893988020F2A35FA007D5254 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
@ -261,13 +244,6 @@
|
||||
remoteGlobalIDString = 89F23C880E78D5B6006B2466;
|
||||
remoteInfo = "v8_shell-arm";
|
||||
};
|
||||
897F76800E71B6AC007ACF34 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 897FF1BE0E719CB600D62E90;
|
||||
remoteInfo = jscre;
|
||||
};
|
||||
897F76820E71B6AC007ACF34 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
@ -275,13 +251,6 @@
|
||||
remoteGlobalIDString = 8970F2EF0E719FB2006AE7B5;
|
||||
remoteInfo = v8;
|
||||
};
|
||||
89F23C8A0E78D5B6006B2466 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 8915B8680E719336009C4E19 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 897FF1BE0E719CB600D62E90;
|
||||
remoteInfo = jscre;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@ -506,7 +475,6 @@
|
||||
897FF1B50E719C0900D62E90 /* shell.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shell.cc; sourceTree = "<group>"; };
|
||||
897FF1B60E719C2300D62E90 /* js2c.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = js2c.py; sourceTree = "<group>"; };
|
||||
897FF1B70E719C2E00D62E90 /* macros.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = macros.py; path = ../src/macros.py; sourceTree = "<group>"; };
|
||||
897FF1BF0E719CB600D62E90 /* libjscre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjscre.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
898BD20C0EF6CC850068B00A /* debug-arm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "debug-arm.cc"; sourceTree = "<group>"; };
|
||||
898BD20D0EF6CC850068B00A /* debug-ia32.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "debug-ia32.cc"; sourceTree = "<group>"; };
|
||||
89A15C630EE4661A00B48DEB /* bytecodes-irregexp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "bytecodes-irregexp.h"; sourceTree = "<group>"; };
|
||||
@ -539,7 +507,6 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
893988060F2A35FA007D5254 /* libjscre.a in Frameworks */,
|
||||
893988070F2A35FA007D5254 /* libv8.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -555,7 +522,6 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
897F76840E71B6B1007ACF34 /* libjscre.a in Frameworks */,
|
||||
897F76850E71B6B1007ACF34 /* libv8.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -578,7 +544,6 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
89F23C900E78D5B6006B2466 /* libjscre.a in Frameworks */,
|
||||
896FD03A0E78D717003DFB6A /* libv8-arm.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -855,7 +820,6 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
897FF0DF0E719B3400D62E90 /* dtoa */,
|
||||
897FF0E20E719B3500D62E90 /* jscre */,
|
||||
);
|
||||
path = third_party;
|
||||
sourceTree = "<group>";
|
||||
@ -869,28 +833,6 @@
|
||||
path = dtoa;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
897FF0E20E719B3500D62E90 /* jscre */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
897FF0E30E719B3500D62E90 /* ASCIICType.h */,
|
||||
897FF0E40E719B3500D62E90 /* AUTHORS */,
|
||||
897FF0E50E719B3500D62E90 /* config.h */,
|
||||
897FF0E60E719B3500D62E90 /* COPYING */,
|
||||
897FF0E70E719B3500D62E90 /* LICENSE */,
|
||||
897FF0E80E719B3500D62E90 /* pcre.h */,
|
||||
897FF0E90E719B3500D62E90 /* pcre_chartables.c */,
|
||||
897FF0EA0E719B3500D62E90 /* pcre_compile.cpp */,
|
||||
897FF0EB0E719B3500D62E90 /* pcre_exec.cpp */,
|
||||
897FF0EC0E719B3500D62E90 /* pcre_internal.h */,
|
||||
897FF0ED0E719B3500D62E90 /* pcre_tables.cpp */,
|
||||
897FF0EE0E719B3500D62E90 /* pcre_ucp_searchfuncs.cpp */,
|
||||
897FF0EF0E719B3500D62E90 /* pcre_xclass.cpp */,
|
||||
897FF0F00E719B3500D62E90 /* ucpinternal.h */,
|
||||
897FF0F10E719B3500D62E90 /* ucptable.cpp */,
|
||||
);
|
||||
path = jscre;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
897FF1B30E719BCE00D62E90 /* samples */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -917,7 +859,6 @@
|
||||
897FF1C00E719CB600D62E90 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
897FF1BF0E719CB600D62E90 /* libjscre.a */,
|
||||
8970F2F00E719FB2006AE7B5 /* libv8.a */,
|
||||
897F767A0E71B4CC007ACF34 /* v8_shell */,
|
||||
89F23C870E78D5B2006B2466 /* libv8-arm.a */,
|
||||
@ -993,22 +934,6 @@
|
||||
productReference = 897F767A0E71B4CC007ACF34 /* v8_shell */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
897FF1BE0E719CB600D62E90 /* jscre */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 897FF1C30E719CB600D62E90 /* Build configuration list for PBXNativeTarget "jscre" */;
|
||||
buildPhases = (
|
||||
897FF1BC0E719CB600D62E90 /* Sources */,
|
||||
897FF1BD0E719CB600D62E90 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = jscre;
|
||||
productName = jscre;
|
||||
productReference = 897FF1BF0E719CB600D62E90 /* libjscre.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
89F23C3C0E78D5B2006B2466 /* v8-arm */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 89F23C840E78D5B2006B2466 /* Build configuration list for PBXNativeTarget "v8-arm" */;
|
||||
@ -1058,7 +983,6 @@
|
||||
projectRoot = ..;
|
||||
targets = (
|
||||
7BF891930E73098D000BAF8A /* All */,
|
||||
897FF1BE0E719CB600D62E90 /* jscre */,
|
||||
8970F2EF0E719FB2006AE7B5 /* v8 */,
|
||||
897F76790E71B4CC007ACF34 /* v8_shell */,
|
||||
893987FE0F2A35FA007D5254 /* d8_shell */,
|
||||
@ -1329,16 +1253,6 @@
|
||||
target = 897F76790E71B4CC007ACF34 /* v8_shell */;
|
||||
targetProxy = 7BF891980E73099F000BAF8A /* PBXContainerItemProxy */;
|
||||
};
|
||||
7BF8919B0E7309AD000BAF8A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 897FF1BE0E719CB600D62E90 /* jscre */;
|
||||
targetProxy = 7BF8919A0E7309AD000BAF8A /* PBXContainerItemProxy */;
|
||||
};
|
||||
893987FF0F2A35FA007D5254 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 897FF1BE0E719CB600D62E90 /* jscre */;
|
||||
targetProxy = 893988000F2A35FA007D5254 /* PBXContainerItemProxy */;
|
||||
};
|
||||
893988010F2A35FA007D5254 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 8970F2EF0E719FB2006AE7B5 /* v8 */;
|
||||
@ -1364,21 +1278,11 @@
|
||||
target = 89F23C880E78D5B6006B2466 /* v8_shell-arm */;
|
||||
targetProxy = 896FD03F0E78D735003DFB6A /* PBXContainerItemProxy */;
|
||||
};
|
||||
897F76810E71B6AC007ACF34 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 897FF1BE0E719CB600D62E90 /* jscre */;
|
||||
targetProxy = 897F76800E71B6AC007ACF34 /* PBXContainerItemProxy */;
|
||||
};
|
||||
897F76830E71B6AC007ACF34 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 8970F2EF0E719FB2006AE7B5 /* v8 */;
|
||||
targetProxy = 897F76820E71B6AC007ACF34 /* PBXContainerItemProxy */;
|
||||
};
|
||||
89F23C890E78D5B6006B2466 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 897FF1BE0E719CB600D62E90 /* jscre */;
|
||||
targetProxy = 89F23C8A0E78D5B6006B2466 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@ -1525,36 +1429,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
897FF1C10E719CB600D62E90 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DEPLOYMENT_POSTPROCESSING = NO;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(GCC_PREPROCESSOR_DEFINITIONS)",
|
||||
SUPPORT_UTF8,
|
||||
SUPPORT_UCP,
|
||||
NO_RECURSE,
|
||||
);
|
||||
PRODUCT_NAME = jscre;
|
||||
STRIP_STYLE = debugging;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
897FF1C20E719CB600D62E90 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DEPLOYMENT_POSTPROCESSING = NO;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(GCC_PREPROCESSOR_DEFINITIONS)",
|
||||
SUPPORT_UTF8,
|
||||
SUPPORT_UCP,
|
||||
NO_RECURSE,
|
||||
);
|
||||
PRODUCT_NAME = jscre;
|
||||
STRIP_STYLE = debugging;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
89F23C850E78D5B2006B2466 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
@ -1649,15 +1523,6 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
897FF1C30E719CB600D62E90 /* Build configuration list for PBXNativeTarget "jscre" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
897FF1C10E719CB600D62E90 /* Debug */,
|
||||
897FF1C20E719CB600D62E90 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
89F23C840E78D5B2006B2466 /* Build configuration list for PBXNativeTarget "v8-arm" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
@ -8,8 +8,7 @@ be performed by Visual Studio.
|
||||
v8_base.vcproj
|
||||
--------------
|
||||
Base V8 library containing all the V8 code but no JavaScript library code. This
|
||||
includes third party code for regular expression handling (jscre) and
|
||||
string/number convertions (dtoa).
|
||||
includes third party code for string/number convertions (dtoa).
|
||||
|
||||
v8.vcproj
|
||||
---------
|
||||
|
@ -121,114 +121,6 @@
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="jscre"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_compile.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_exec.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_internal.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_tables.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_ucp_searchfuncs.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_xclass.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="dtoa"
|
||||
>
|
||||
|
@ -121,114 +121,6 @@
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="jscre"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_compile.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_exec.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_internal.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_tables.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_ucp_searchfuncs.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\third_party\jscre\pcre_xclass.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UndefinePreprocessorDefinitions="DEBUG"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="dtoa"
|
||||
>
|
||||
|
Loading…
Reference in New Issue
Block a user