Author: [EMAIL PROTECTED]
Date: Tue Sep 23 04:45:43 2008
New Revision: 362
Modified:
branches/bleeding_edge/src/bootstrapper.cc
branches/bleeding_edge/src/heap.cc
branches/bleeding_edge/src/jsregexp.cc
branches/bleeding_edge/src/jsregexp.h
branches/bleeding_edge/src/log.cc
branches/bleeding_edge/src/log.h
branches/bleeding_edge/src/objects-debug.cc
branches/bleeding_edge/src/objects-inl.h
branches/bleeding_edge/src/objects.cc
branches/bleeding_edge/src/objects.h
branches/bleeding_edge/src/runtime.cc
branches/bleeding_edge/src/third_party/jscre/pcre.h
branches/bleeding_edge/test/mjsunit/mjsunit.status
Log:
- Added new object type, RegExp, for regular expressions.
- Renamed some ::kSizes to ::kHeaderSizes to avoid confusion.
Modified: branches/bleeding_edge/src/bootstrapper.cc
==============================================================================
--- branches/bleeding_edge/src/bootstrapper.cc (original)
+++ branches/bleeding_edge/src/bootstrapper.cc Tue Sep 23 04:45:43 2008
@@ -655,7 +655,7 @@
{ // -- R e g E x p
// Builtin functions for RegExp.prototype.
Handle<JSFunction> regexp_fun =
- InstallFunction(global, "RegExp", JS_VALUE_TYPE, JSValue::kSize,
+ InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize,
Top::initial_object_prototype(), Builtins::Illegal,
true);
Modified: branches/bleeding_edge/src/heap.cc
==============================================================================
--- branches/bleeding_edge/src/heap.cc (original)
+++ branches/bleeding_edge/src/heap.cc Tue Sep 23 04:45:43 2008
@@ -974,15 +974,15 @@
STRUCT_LIST(ALLOCATE_STRUCT_MAP)
#undef ALLOCATE_STRUCT_MAP
- obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kSize);
+ obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kHeaderSize);
if (obj->IsFailure()) return false;
hash_table_map_ = Map::cast(obj);
- obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kSize);
+ obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kHeaderSize);
if (obj->IsFailure()) return false;
context_map_ = Map::cast(obj);
- obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kSize);
+ obj = AllocateMap(FIXED_ARRAY_TYPE, HeapObject::kHeaderSize);
if (obj->IsFailure()) return false;
global_context_map_ = Map::cast(obj);
Modified: branches/bleeding_edge/src/jsregexp.cc
==============================================================================
--- branches/bleeding_edge/src/jsregexp.cc (original)
+++ branches/bleeding_edge/src/jsregexp.cc Tue Sep 23 04:45:43 2008
@@ -142,7 +142,7 @@
}
-Handle<Object> RegExpImpl::JsreCompile(Handle<JSValue> re,
+Handle<Object> RegExpImpl::JsreCompile(Handle<JSRegExp> re,
Handle<String> pattern,
Handle<String> flags) {
JSRegExpIgnoreCaseOption case_option = JSRegExpDoNotIgnoreCase;
@@ -159,10 +159,10 @@
const char* error_message = NULL;
malloc_failure = Failure::Exception();
- JSRegExp* code = jsRegExpCompile(two_byte_pattern->GetTwoByteData(),
- pattern->length(), case_option,
- multiline_option, &number_of_captures,
- &error_message, &JSREMalloc, &JSREFree);
+ JscreRegExp* code = jsRegExpCompile(two_byte_pattern->GetTwoByteData(),
+ pattern->length(), case_option,
+ multiline_option,
&number_of_captures,
+ &error_message, &JSREMalloc,
&JSREFree);
if (code == NULL && malloc_failure->IsRetryAfterGC()) {
// Performs a GC, then retries.
@@ -203,7 +203,8 @@
Handle<FixedArray> value = Factory::NewFixedArray(2);
value->set(CAPTURE_INDEX, Smi::FromInt(number_of_captures));
value->set(INTERNAL_INDEX, *internal);
- re->set_value(*value);
+ re->set_type_tag(JSRegExp::JSCRE);
+ re->set_data(*value);
LOG(RegExpCompileEvent(re));
@@ -211,7 +212,7 @@
}
-Handle<Object> RegExpImpl::JsreExecOnce(Handle<JSValue> regexp,
+Handle<Object> RegExpImpl::JsreExecOnce(Handle<JSRegExp> regexp,
int num_captures,
Handle<String> subject,
int previous_index,
@@ -222,16 +223,17 @@
{
AssertNoAllocation a;
ByteArray* internal = JsreInternal(regexp);
- const JSRegExp* js_regexp =
- reinterpret_cast<JSRegExp*>(internal->GetDataStartAddress());
+ const JscreRegExp* js_regexp =
+ reinterpret_cast<JscreRegExp*>(internal->GetDataStartAddress());
LOG(RegExpExecEvent(regexp, previous_index, subject));
- rc = jsRegExpExecute(js_regexp, two_byte_subject,
- subject->length(),
- previous_index,
- offsets_vector,
- offsets_vector_length);
+ rc = 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
@@ -304,7 +306,7 @@
OffsetsVector::kStaticOffsetsVectorSize];
-Handle<Object> RegExpImpl::JsreExec(Handle<JSValue> regexp,
+Handle<Object> RegExpImpl::JsreExec(Handle<JSRegExp> regexp,
Handle<String> subject,
Handle<Object> index) {
// Prepare space for the return values.
@@ -325,7 +327,7 @@
}
-Handle<Object> RegExpImpl::JsreExecGlobal(Handle<JSValue> regexp,
+Handle<Object> RegExpImpl::JsreExecGlobal(Handle<JSRegExp> regexp,
Handle<String> subject) {
// Prepare space for the return values.
int num_captures = JsreCapture(regexp);
@@ -370,15 +372,15 @@
}
-int RegExpImpl::JsreCapture(Handle<JSValue> re) {
- Object* value = re->value();
+int RegExpImpl::JsreCapture(Handle<JSRegExp> re) {
+ Object* value = re->data();
ASSERT(value->IsFixedArray());
return Smi::cast(FixedArray::cast(value)->get(CAPTURE_INDEX))->value();
}
-ByteArray* RegExpImpl::JsreInternal(Handle<JSValue> re) {
- Object* value = re->value();
+ByteArray* RegExpImpl::JsreInternal(Handle<JSRegExp> re) {
+ Object* value = re->data();
ASSERT(value->IsFixedArray());
return ByteArray::cast(FixedArray::cast(value)->get(INTERNAL_INDEX));
}
Modified: branches/bleeding_edge/src/jsregexp.h
==============================================================================
--- branches/bleeding_edge/src/jsregexp.h (original)
+++ branches/bleeding_edge/src/jsregexp.h Tue Sep 23 04:45:43 2008
@@ -44,21 +44,21 @@
// This function calls the garbage collector if necessary.
static Handle<String> ToString(Handle<Object> value);
- static Handle<Object> JsreCompile(Handle<JSValue> re,
+ static Handle<Object> JsreCompile(Handle<JSRegExp> re,
Handle<String> pattern,
Handle<String> flags);
// Implements RegExp.prototype.exec(string) function.
// See ECMA-262 section 15.10.6.2.
// This function calls the garbage collector if necessary.
- static Handle<Object> JsreExec(Handle<JSValue> regexp,
+ static Handle<Object> JsreExec(Handle<JSRegExp> regexp,
Handle<String> subject,
Handle<Object> index);
// Call RegExp.prototyp.exec(string) in a loop.
// Used by String.prototype.match and String.prototype.replace.
// This function calls the garbage collector if necessary.
- static Handle<Object> JsreExecGlobal(Handle<JSValue> regexp,
+ static Handle<Object> JsreExecGlobal(Handle<JSRegExp> regexp,
Handle<String> subject);
static void NewSpaceCollectionPrologue();
@@ -75,11 +75,11 @@
static String* two_byte_cached_string_;
// Returns the caputure from the re.
- static int JsreCapture(Handle<JSValue> re);
- static ByteArray* JsreInternal(Handle<JSValue> re);
+ static int JsreCapture(Handle<JSRegExp> re);
+ static ByteArray* JsreInternal(Handle<JSRegExp> re);
// Call jsRegExpExecute once
- static Handle<Object> JsreExecOnce(Handle<JSValue> regexp,
+ static Handle<Object> JsreExecOnce(Handle<JSRegExp> regexp,
int num_captures,
Handle<String> subject,
int previous_index,
Modified: branches/bleeding_edge/src/log.cc
==============================================================================
--- branches/bleeding_edge/src/log.cc (original)
+++ branches/bleeding_edge/src/log.cc Tue Sep 23 04:45:43 2008
@@ -348,7 +348,7 @@
#ifdef ENABLE_LOGGING_AND_PROFILING
-void Logger::LogRegExpSource(Handle<JSValue> regexp) {
+void Logger::LogRegExpSource(Handle<JSRegExp> regexp) {
// Prints "/" + re.source + "/" +
// (re.global?"g":"") + (re.ignorecase?"i":"") +
(re.multiline?"m":"")
@@ -392,7 +392,7 @@
#endif // ENABLE_LOGGING_AND_PROFILING
-void Logger::RegExpCompileEvent(Handle<JSValue> regexp) {
+void Logger::RegExpCompileEvent(Handle<JSRegExp> regexp) {
#ifdef ENABLE_LOGGING_AND_PROFILING
if (logfile_ == NULL || !FLAG_log_regexp) return;
ScopedLock sl(mutex_);
@@ -404,7 +404,7 @@
}
-void Logger::RegExpExecEvent(Handle<JSValue> regexp,
+void Logger::RegExpExecEvent(Handle<JSRegExp> regexp,
int start_index,
Handle<String> input_string) {
#ifdef ENABLE_LOGGING_AND_PROFILING
Modified: branches/bleeding_edge/src/log.h
==============================================================================
--- branches/bleeding_edge/src/log.h (original)
+++ branches/bleeding_edge/src/log.h Tue Sep 23 04:45:43 2008
@@ -181,9 +181,9 @@
// ==== Events logged by --log-regexp ====
// Regexp compilation and execution events.
- static void RegExpCompileEvent(Handle<JSValue> regexp);
+ static void RegExpCompileEvent(Handle<JSRegExp> regexp);
- static void RegExpExecEvent(Handle<JSValue> regexp,
+ static void RegExpExecEvent(Handle<JSRegExp> regexp,
int start_index,
Handle<String> input_string);
@@ -197,7 +197,7 @@
private:
// Emits the source code of a regexp. Used by regexp events.
- static void LogRegExpSource(Handle<JSValue> regexp);
+ static void LogRegExpSource(Handle<JSRegExp> regexp);
// Emits a profiler tick event. Used by the profiler thread.
static void TickEvent(TickSample* sample, bool overflow);
Modified: branches/bleeding_edge/src/objects-debug.cc
==============================================================================
--- branches/bleeding_edge/src/objects-debug.cc (original)
+++ branches/bleeding_edge/src/objects-debug.cc Tue Sep 23 04:45:43 2008
@@ -118,6 +118,7 @@
break;
case JS_OBJECT_TYPE: // fall through
case JS_ARRAY_TYPE:
+ case JS_REGEXP_TYPE:
JSObject::cast(this)->JSObjectPrint();
break;
case ODDBALL_TYPE:
@@ -206,6 +207,9 @@
case JS_ARRAY_TYPE:
JSArray::cast(this)->JSArrayVerify();
break;
+ case JS_REGEXP_TYPE:
+ JSRegExp::cast(this)->JSRegExpVerify();
+ break;
case FILLER_TYPE:
break;
case PROXY_TYPE:
@@ -375,6 +379,7 @@
case JS_FUNCTION_TYPE: return "JS_FUNCTION";
case CODE_TYPE: return "CODE";
case JS_ARRAY_TYPE: return "JS_ARRAY";
+ case JS_REGEXP_TYPE: return "JS_REGEXP";
case JS_VALUE_TYPE: return "JS_VALUE";
case JS_GLOBAL_OBJECT_TYPE: return "JS_GLOBAL_OBJECT";
case JS_BUILTINS_OBJECT_TYPE: return "JS_BUILTINS_OBJECT";
@@ -619,6 +624,13 @@
JSObjectVerify();
ASSERT(length()->IsNumber() || length()->IsUndefined());
ASSERT(elements()->IsUndefined() || elements()->IsFixedArray());
+}
+
+
+void JSRegExp::JSRegExpVerify() {
+ JSObjectVerify();
+ ASSERT(type()->IsSmi() || type()->IsUndefined());
+ ASSERT(data()->IsUndefined() || data()->IsFixedArray());
}
Modified: branches/bleeding_edge/src/objects-inl.h
==============================================================================
--- branches/bleeding_edge/src/objects-inl.h (original)
+++ branches/bleeding_edge/src/objects-inl.h Tue Sep 23 04:45:43 2008
@@ -293,6 +293,12 @@
}
+bool Object::IsJSRegExp() {
+ return Object::IsHeapObject()
+ && HeapObject::cast(this)->map()->instance_type() == JS_REGEXP_TYPE;
+}
+
+
template <> inline bool Is<JSArray>(Object* obj) {
return obj->IsJSArray();
}
@@ -487,7 +493,7 @@
Object* HeapObject::GetHeapObjectField(HeapObject* obj, int index) {
- return READ_FIELD(obj, HeapObject::kSize + kPointerSize * index);
+ return READ_FIELD(obj, HeapObject::kHeaderSize + kPointerSize * index);
}
@@ -756,7 +762,7 @@
ASSERT(map() == from->map());
ASSERT(Size() == from->Size());
int object_size = Size();
- for (int offset = kSize; offset < object_size; offset += kPointerSize) {
+ for (int offset = kHeaderSize; offset < object_size; offset +=
kPointerSize) {
Object* value = READ_FIELD(from, offset);
// Note: WRITE_FIELD does not update the write barrier.
WRITE_FIELD(this, offset, value);
@@ -848,6 +854,8 @@
return JSValue::kSize;
case JS_ARRAY_TYPE:
return JSValue::kSize;
+ case JS_REGEXP_TYPE:
+ return JSValue::kSize;
case JS_OBJECT_TYPE:
return JSObject::kHeaderSize;
default:
@@ -885,7 +893,7 @@
void Struct::InitializeBody(int object_size) {
- for (int offset = kSize; offset < object_size; offset += kPointerSize) {
+ for (int offset = kHeaderSize; offset < object_size; offset +=
kPointerSize) {
WRITE_FIELD(this, offset, Heap::undefined_value());
}
}
@@ -1124,6 +1132,7 @@
CAST_ACCESSOR(JSBuiltinsObject)
CAST_ACCESSOR(Code)
CAST_ACCESSOR(JSArray)
+CAST_ACCESSOR(JSRegExp)
CAST_ACCESSOR(Proxy)
CAST_ACCESSOR(ByteArray)
CAST_ACCESSOR(Struct)
@@ -2003,6 +2012,20 @@
ACCESSORS(JSArray, length, Object, kLengthOffset)
+
+
+ACCESSORS(JSRegExp, data, Object, kDataOffset)
+ACCESSORS(JSRegExp, type, Object, kTypeOffset)
+
+
+JSRegExp::Type JSRegExp::type_tag() {
+ return static_cast<JSRegExp::Type>(Smi::cast(type())->value());
+}
+
+
+void JSRegExp::set_type_tag(JSRegExp::Type value) {
+ set_type(Smi::FromInt(value));
+}
bool JSObject::HasFastElements() {
Modified: branches/bleeding_edge/src/objects.cc
==============================================================================
--- branches/bleeding_edge/src/objects.cc (original)
+++ branches/bleeding_edge/src/objects.cc Tue Sep 23 04:45:43 2008
@@ -620,6 +620,10 @@
accumulator->Add("<JS array[%u]>", static_cast<uint32_t>(length));
break;
}
+ case JS_REGEXP_TYPE: {
+ accumulator->Add("<JS RegExp>");
+ break;
+ }
case JS_FUNCTION_TYPE: {
Object* fun_name = JSFunction::cast(this)->shared()->name();
bool printed = false;
@@ -819,6 +823,7 @@
case JS_OBJECT_TYPE:
case JS_VALUE_TYPE:
case JS_ARRAY_TYPE:
+ case JS_REGEXP_TYPE:
case JS_FUNCTION_TYPE:
case JS_GLOBAL_OBJECT_TYPE:
reinterpret_cast<JSObject*>(this)->JSObjectIterateBody(object_size,
v);
@@ -861,7 +866,7 @@
void HeapObject::IterateStructBody(int object_size, ObjectVisitor* v) {
- IteratePointers(v, HeapObject::kSize, object_size);
+ IteratePointers(v, HeapObject::kHeaderSize, object_size);
}
Modified: branches/bleeding_edge/src/objects.h
==============================================================================
--- branches/bleeding_edge/src/objects.h (original)
+++ branches/bleeding_edge/src/objects.h Tue Sep 23 04:45:43 2008
@@ -43,6 +43,7 @@
// - HeapObject (superclass for everything allocated in the heap)
// - JSObject
// - JSArray
+// - JSRegExp
// - JSFunction
// - GlobalObject
// - JSGlobalObject
@@ -263,6 +264,7 @@
V(JS_GLOBAL_OBJECT_TYPE) \
V(JS_BUILTINS_OBJECT_TYPE) \
V(JS_ARRAY_TYPE) \
+ V(JS_REGEXP_TYPE) \
\
V(JS_FUNCTION_TYPE) \
@@ -517,6 +519,7 @@
JS_GLOBAL_OBJECT_TYPE,
JS_BUILTINS_OBJECT_TYPE,
JS_ARRAY_TYPE,
+ JS_REGEXP_TYPE,
JS_FUNCTION_TYPE,
@@ -528,7 +531,7 @@
// function objects are not counted as objects, even though they are
// implemented as such; only values whose typeof is "object" are
included.
FIRST_JS_OBJECT_TYPE = JS_VALUE_TYPE,
- LAST_JS_OBJECT_TYPE = JS_ARRAY_TYPE
+ LAST_JS_OBJECT_TYPE = JS_REGEXP_TYPE
};
@@ -611,6 +614,7 @@
inline bool IsProxy();
inline bool IsBoolean();
inline bool IsJSArray();
+ inline bool IsJSRegExp();
inline bool IsHashTable();
inline bool IsDictionary();
inline bool IsSymbolTable();
@@ -700,7 +704,7 @@
static Object* cast(Object* value) { return value; }
// Layout description.
- static const int kSize = 0; // Object does not take up any space.
+ static const int kHeaderSize = 0; // Object does not take up any space.
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(Object);
@@ -1042,8 +1046,8 @@
// Layout description.
// First field in a heap object is map.
- static const int kMapOffset = Object::kSize;
- static const int kSize = kMapOffset + kPointerSize;
+ static const int kMapOffset = Object::kHeaderSize;
+ static const int kHeaderSize = kMapOffset + kPointerSize;
protected:
// helpers for calling an ObjectVisitor to iterate over pointers in the
@@ -1081,7 +1085,7 @@
#endif
// Layout description.
- static const int kValueOffset = HeapObject::kSize;
+ static const int kValueOffset = HeapObject::kHeaderSize;
static const int kSize = kValueOffset + kDoubleSize;
private:
@@ -1371,7 +1375,7 @@
static const int kMaxFastProperties = 8;
// Layout description.
- static const int kPropertiesOffset = HeapObject::kSize;
+ static const int kPropertiesOffset = HeapObject::kHeaderSize;
static const int kElementsOffset = kPropertiesOffset + kPointerSize;
static const int kHeaderSize = kElementsOffset + kPointerSize;
@@ -1423,7 +1427,7 @@
static inline bool IndexFromObject(Object* object, uint32_t* index);
// Layout descriptor.
- static const int kLengthOffset = HeapObject::kSize;
+ static const int kLengthOffset = HeapObject::kHeaderSize;
static const int kHeaderSize = kLengthOffset + kIntSize;
private:
@@ -2180,7 +2184,7 @@
#endif
// Layout description.
- static const int kInstructionSizeOffset = HeapObject::kSize;
+ static const int kInstructionSizeOffset = HeapObject::kHeaderSize;
static const int kRelocationSizeOffset = kInstructionSizeOffset +
kIntSize;
static const int kSInfoSizeOffset = kRelocationSizeOffset + kIntSize;
static const int kFlagsOffset = kSInfoSizeOffset + kIntSize;
@@ -2360,7 +2364,7 @@
#endif
// Layout description.
- static const int kInstanceAttributesOffset = HeapObject::kSize;
+ static const int kInstanceAttributesOffset = HeapObject::kHeaderSize;
static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize;
static const int kConstructorOffset = kPrototypeOffset + kPointerSize;
static const int kInstanceDescriptorsOffset =
@@ -2435,7 +2439,7 @@
void ScriptVerify();
#endif
- static const int kSourceOffset = HeapObject::kSize;
+ static const int kSourceOffset = HeapObject::kHeaderSize;
static const int kNameOffset = kSourceOffset + kPointerSize;
static const int kLineOffsetOffset = kNameOffset + kPointerSize;
static const int kColumnOffsetOffset = kLineOffsetOffset + kPointerSize;
@@ -2547,7 +2551,7 @@
static const int kDontAdaptArgumentsSentinel = -1;
// Layout description.
- static const int kNameOffset = HeapObject::kSize;
+ static const int kNameOffset = HeapObject::kHeaderSize;
static const int kCodeOffset = kNameOffset + kPointerSize;
static const int kLengthOffset = kCodeOffset + kPointerSize;
static const int kFormalParameterCountOffset = kLengthOffset + kIntSize;
@@ -2788,6 +2792,31 @@
};
+// Regular expressions
+class JSRegExp: public JSObject {
+ public:
+ enum Type { JSCRE, INDEX_OF };
+
+ inline Type type_tag();
+ inline void set_type_tag(Type value);
+
+ DECL_ACCESSORS(type, Object)
+ DECL_ACCESSORS(data, Object)
+
+ static inline JSRegExp* cast(Object* obj);
+
+ // Dispatched behavior.
+#ifdef DEBUG
+ void JSRegExpPrint();
+ void JSRegExpVerify();
+#endif
+
+ static const int kTypeOffset = JSObject::kHeaderSize;
+ static const int kDataOffset = kTypeOffset + kIntSize;
+ static const int kSize = kDataOffset + kIntSize;
+};
+
+
enum AllowNullsFlag {ALLOW_NULLS, DISALLOW_NULLS};
enum RobustnessFlag {ROBUST_STRING_TRAVERSAL, FAST_STRING_TRAVERSAL};
@@ -2924,7 +2953,7 @@
inline bool IsFlat();
// Layout description.
- static const int kLengthOffset = HeapObject::kSize;
+ static const int kLengthOffset = HeapObject::kHeaderSize;
static const int kSize = kLengthOffset + kIntSize;
// Limits on sizes of different types of strings.
@@ -3344,7 +3373,7 @@
Object* Initialize(const char* to_string, Object* to_number);
// Layout description.
- static const int kToStringOffset = HeapObject::kSize;
+ static const int kToStringOffset = HeapObject::kHeaderSize;
static const int kToNumberOffset = kToStringOffset + kPointerSize;
static const int kSize = kToNumberOffset + kPointerSize;
@@ -3374,7 +3403,7 @@
// Layout description.
- static const int kProxyOffset = HeapObject::kSize;
+ static const int kProxyOffset = HeapObject::kHeaderSize;
static const int kSize = kProxyOffset + kPointerSize;
private:
@@ -3457,7 +3486,7 @@
void AccessorInfoVerify();
#endif
- static const int kGetterOffset = HeapObject::kSize;
+ static const int kGetterOffset = HeapObject::kHeaderSize;
static const int kSetterOffset = kGetterOffset + kPointerSize;
static const int kDataOffset = kSetterOffset + kPointerSize;
static const int kNameOffset = kDataOffset + kPointerSize;
@@ -3487,7 +3516,7 @@
void AccessCheckInfoVerify();
#endif
- static const int kNamedCallbackOffset = HeapObject::kSize;
+ static const int kNamedCallbackOffset = HeapObject::kHeaderSize;
static const int kIndexedCallbackOffset = kNamedCallbackOffset +
kPointerSize;
static const int kDataOffset = kIndexedCallbackOffset + kPointerSize;
static const int kSize = kDataOffset + kPointerSize;
@@ -3513,7 +3542,7 @@
void InterceptorInfoVerify();
#endif
- static const int kGetterOffset = HeapObject::kSize;
+ static const int kGetterOffset = HeapObject::kHeaderSize;
static const int kSetterOffset = kGetterOffset + kPointerSize;
static const int kQueryOffset = kSetterOffset + kPointerSize;
static const int kDeleterOffset = kQueryOffset + kPointerSize;
@@ -3538,7 +3567,7 @@
void CallHandlerInfoVerify();
#endif
- static const int kCallbackOffset = HeapObject::kSize;
+ static const int kCallbackOffset = HeapObject::kHeaderSize;
static const int kDataOffset = kCallbackOffset + kPointerSize;
static const int kSize = kDataOffset + kPointerSize;
@@ -3556,7 +3585,7 @@
void TemplateInfoVerify();
#endif
- static const int kTagOffset = HeapObject::kSize;
+ static const int kTagOffset = HeapObject::kHeaderSize;
static const int kPropertyListOffset = kTagOffset + kPointerSize;
static const int kHeaderSize = kPropertyListOffset +
kPointerSize;
protected:
@@ -3657,7 +3686,7 @@
void SignatureInfoVerify();
#endif
- static const int kReceiverOffset = Struct::kSize;
+ static const int kReceiverOffset = Struct::kHeaderSize;
static const int kArgsOffset = kReceiverOffset + kPointerSize;
static const int kSize = kArgsOffset + kPointerSize;
@@ -3677,7 +3706,7 @@
void TypeSwitchInfoVerify();
#endif
- static const int kTypesOffset = Struct::kSize;
+ static const int kTypesOffset = Struct::kHeaderSize;
static const int kSize = kTypesOffset + kPointerSize;
};
@@ -3723,7 +3752,7 @@
void DebugInfoVerify();
#endif
- static const int kSharedFunctionInfoIndex = Struct::kSize;
+ static const int kSharedFunctionInfoIndex = Struct::kHeaderSize;
static const int kOriginalCodeIndex = kSharedFunctionInfoIndex +
kPointerSize;
static const int kPatchedCodeIndex = kOriginalCodeIndex + kPointerSize;
static const int kActiveBreakPointsCountIndex =
@@ -3776,7 +3805,7 @@
void BreakPointInfoVerify();
#endif
- static const int kCodePositionIndex = Struct::kSize;
+ static const int kCodePositionIndex = Struct::kHeaderSize;
static const int kSourcePositionIndex = kCodePositionIndex +
kPointerSize;
static const int kStatementPositionIndex =
kSourcePositionIndex + kPointerSize;
Modified: branches/bleeding_edge/src/runtime.cc
==============================================================================
--- branches/bleeding_edge/src/runtime.cc (original)
+++ branches/bleeding_edge/src/runtime.cc Tue Sep 23 04:45:43 2008
@@ -212,8 +212,8 @@
static Object* Runtime_RegExpCompile(Arguments args) {
HandleScope scope; // create a new handle scope
ASSERT(args.length() == 3);
- CONVERT_CHECKED(JSValue, raw_re, args[0]);
- Handle<JSValue> re(raw_re);
+ CONVERT_CHECKED(JSRegExp, raw_re, args[0]);
+ Handle<JSRegExp> re(raw_re);
CONVERT_CHECKED(String, raw_pattern, args[1]);
Handle<String> pattern(raw_pattern);
CONVERT_CHECKED(String, raw_flags, args[2]);
@@ -665,8 +665,8 @@
static Object* Runtime_RegExpExec(Arguments args) {
HandleScope scope;
ASSERT(args.length() == 3);
- CONVERT_CHECKED(JSValue, raw_regexp, args[0]);
- Handle<JSValue> regexp(raw_regexp);
+ CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]);
+ Handle<JSRegExp> regexp(raw_regexp);
CONVERT_CHECKED(String, raw_subject, args[1]);
Handle<String> subject(raw_subject);
Handle<Object> index(args[2]);
@@ -678,8 +678,8 @@
static Object* Runtime_RegExpExecGlobal(Arguments args) {
HandleScope scope;
ASSERT(args.length() == 2);
- CONVERT_CHECKED(JSValue, raw_regexp, args[0]);
- Handle<JSValue> regexp(raw_regexp);
+ CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]);
+ Handle<JSRegExp> regexp(raw_regexp);
CONVERT_CHECKED(String, raw_subject, args[1]);
Handle<String> subject(raw_subject);
return *RegExpImpl::JsreExecGlobal(regexp, subject);
Modified: branches/bleeding_edge/src/third_party/jscre/pcre.h
==============================================================================
--- branches/bleeding_edge/src/third_party/jscre/pcre.h (original)
+++ branches/bleeding_edge/src/third_party/jscre/pcre.h Tue Sep 23 04:45:43
2008
@@ -52,6 +52,7 @@
typedef uint16_t UChar;
struct JSRegExp;
+typedef struct JSRegExp JscreRegExp;
enum JSRegExpIgnoreCaseOption { JSRegExpDoNotIgnoreCase,
JSRegExpIgnoreCase };
enum JSRegExpMultilineOption { JSRegExpSingleLine, JSRegExpMultiline };
Modified: branches/bleeding_edge/test/mjsunit/mjsunit.status
==============================================================================
--- branches/bleeding_edge/test/mjsunit/mjsunit.status (original)
+++ branches/bleeding_edge/test/mjsunit/mjsunit.status Tue Sep 23 04:45:43
2008
@@ -30,9 +30,6 @@
# All tests in the bug directory are expected to fail.
bugs: FAIL
-# This one fails in debug mode.
-regexp-multiline-stack-trace: PASS IF $MODE==RELEASE, FAIL IF $MODE==DEBUG
-
# This one uses a built-in that's only present in debug mode.
fuzz-natives: PASS, SKIP IF $MODE==RELEASE
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---