Reviewers: fschneider,
Description:
Thread the current isolate through a few places, avoiding
Isolate::Current().
This removes approx. 12k calls of Isolate::Current() in string-tagcloud.
Please review this at http://codereview.chromium.org/9490004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/arm/regexp-macro-assembler-arm.cc
M src/execution.h
M src/execution.cc
M src/ia32/regexp-macro-assembler-ia32.cc
M src/jsregexp.h
M src/jsregexp.cc
M src/mips/regexp-macro-assembler-mips.cc
M src/runtime.cc
M src/x64/regexp-macro-assembler-x64.cc
Index: src/arm/regexp-macro-assembler-arm.cc
diff --git a/src/arm/regexp-macro-assembler-arm.cc
b/src/arm/regexp-macro-assembler-arm.cc
index
880c372538d93b9e681ba7d095a5f08baa117681..de83c13e15007d55ca24de83b9dcbe54100d2c5f
100644
--- a/src/arm/regexp-macro-assembler-arm.cc
+++ b/src/arm/regexp-macro-assembler-arm.cc
@@ -1055,7 +1055,7 @@ int
RegExpMacroAssemblerARM::CheckStackGuardState(Address* return_address,
ASSERT(*return_address <=
re_code->instruction_start() + re_code->instruction_size());
- MaybeObject* result = Execution::HandleStackGuardInterrupt();
+ MaybeObject* result = Execution::HandleStackGuardInterrupt(isolate);
if (*code_handle != re_code) { // Return address no longer valid
int delta = code_handle->address() - re_code->address();
Index: src/execution.cc
diff --git a/src/execution.cc b/src/execution.cc
index
00806a7ce279905322908af283aae055f2a41944..1f019820b84e9da391ed1d7d80fc6770067f36bc
100644
--- a/src/execution.cc
+++ b/src/execution.cc
@@ -872,8 +872,7 @@ void Execution::ProcessDebugMessages(bool
debug_command_only) {
#endif
-MaybeObject* Execution::HandleStackGuardInterrupt() {
- Isolate* isolate = Isolate::Current();
+MaybeObject* Execution::HandleStackGuardInterrupt(Isolate* isolate) {
StackGuard* stack_guard = isolate->stack_guard();
if (stack_guard->IsGCRequest()) {
Index: src/execution.h
diff --git a/src/execution.h b/src/execution.h
index
014736ee88279232db85c6c9b68aa3b4934bd971..d9ec9dccf527c551af86a366843749f199397c63
100644
--- a/src/execution.h
+++ b/src/execution.h
@@ -45,6 +45,10 @@ enum InterruptFlag {
GC_REQUEST = 1 << 6
};
+
+class Isolate;
+
+
class Execution : public AllStatic {
public:
// Call a function, the caller supplies a receiver and an array
@@ -141,7 +145,8 @@ class Execution : public AllStatic {
// If the stack guard is triggered, but it is not an actual
// stack overflow, then handle the interruption accordingly.
- MUST_USE_RESULT static MaybeObject* HandleStackGuardInterrupt();
+ MUST_USE_RESULT static MaybeObject* HandleStackGuardInterrupt(
+ Isolate* isolate);
// Get a function delegate (or undefined) for the given non-function
// object. Used for support calling objects as functions.
@@ -158,7 +163,6 @@ class Execution : public AllStatic {
class ExecutionAccess;
-class Isolate;
// StackGuard contains the handling of the limits that are used to limit
the
Index: src/ia32/regexp-macro-assembler-ia32.cc
diff --git a/src/ia32/regexp-macro-assembler-ia32.cc
b/src/ia32/regexp-macro-assembler-ia32.cc
index
e613a06c3c519c375691af6e3a9c1a3c8f631d79..2c9b60c8687723efea580b2cc042805821023340
100644
--- a/src/ia32/regexp-macro-assembler-ia32.cc
+++ b/src/ia32/regexp-macro-assembler-ia32.cc
@@ -1085,7 +1085,7 @@ int
RegExpMacroAssemblerIA32::CheckStackGuardState(Address* return_address,
ASSERT(*return_address <=
re_code->instruction_start() + re_code->instruction_size());
- MaybeObject* result = Execution::HandleStackGuardInterrupt();
+ MaybeObject* result = Execution::HandleStackGuardInterrupt(isolate);
if (*code_handle != re_code) { // Return address no longer valid
int delta = code_handle->address() - re_code->address();
Index: src/jsregexp.cc
diff --git a/src/jsregexp.cc b/src/jsregexp.cc
index
82b495819e949a1bc724616fccf9200c334fcfcc..7e695bb2214da259eec0e9c8a29d921556b448fd
100644
--- a/src/jsregexp.cc
+++ b/src/jsregexp.cc
@@ -175,7 +175,8 @@ Handle<Object> RegExpImpl::Exec(Handle<JSRegExp> regexp,
case JSRegExp::IRREGEXP: {
Handle<Object> result =
IrregexpExec(regexp, subject, index, last_match_info);
- ASSERT(!result.is_null() ||
Isolate::Current()->has_pending_exception());
+ ASSERT(!result.is_null() ||
+ regexp->GetIsolate()->has_pending_exception());
return result;
}
default:
@@ -527,6 +528,7 @@ Handle<Object>
RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
Handle<String> subject,
int previous_index,
Handle<JSArray> last_match_info) {
+ Isolate* isolate = jsregexp->GetIsolate();
ASSERT_EQ(jsregexp->TypeTag(), JSRegExp::IRREGEXP);
// Prepare space for the return values.
@@ -542,11 +544,11 @@ Handle<Object>
RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
int required_registers = RegExpImpl::IrregexpPrepare(jsregexp, subject);
if (required_registers < 0) {
// Compiling failed with an exception.
- ASSERT(Isolate::Current()->has_pending_exception());
+ ASSERT(isolate->has_pending_exception());
return Handle<Object>::null();
}
- OffsetsVector registers(required_registers);
+ OffsetsVector registers(required_registers, isolate);
IrregexpResult res = RegExpImpl::IrregexpExecOnce(
jsregexp, subject, previous_index, Vector<int>(registers.vector(),
@@ -568,11 +570,11 @@ Handle<Object>
RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
return last_match_info;
}
if (res == RE_EXCEPTION) {
- ASSERT(Isolate::Current()->has_pending_exception());
+ ASSERT(isolate->has_pending_exception());
return Handle<Object>::null();
}
ASSERT(res == RE_FAILURE);
- return Isolate::Current()->factory()->null_value();
+ return isolate->factory()->null_value();
}
Index: src/jsregexp.h
diff --git a/src/jsregexp.h b/src/jsregexp.h
index
42c76fbd67666a8415a5a1091fffa4bc6e118460..8875de9eb2316cb27511cd7b9a9408bc08fd4f41
100644
--- a/src/jsregexp.h
+++ b/src/jsregexp.h
@@ -1466,12 +1466,12 @@ class RegExpEngine: public AllStatic {
class OffsetsVector {
public:
- explicit inline OffsetsVector(int num_registers)
+ inline OffsetsVector(int num_registers, Isolate* isolate)
: offsets_vector_length_(num_registers) {
if (offsets_vector_length_ >
Isolate::kJSRegexpStaticOffsetsVectorSize) {
vector_ = NewArray<int>(offsets_vector_length_);
} else {
- vector_ = Isolate::Current()->jsregexp_static_offsets_vector();
+ vector_ = isolate->jsregexp_static_offsets_vector();
}
}
inline ~OffsetsVector() {
Index: src/mips/regexp-macro-assembler-mips.cc
diff --git a/src/mips/regexp-macro-assembler-mips.cc
b/src/mips/regexp-macro-assembler-mips.cc
index
cb210fed04fc88233af4e8d2e23751b813248014..330ff2b8d1e5e20a28f4e9b77e47fc47742619ba
100644
--- a/src/mips/regexp-macro-assembler-mips.cc
+++ b/src/mips/regexp-macro-assembler-mips.cc
@@ -1056,7 +1056,7 @@ int
RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
ASSERT(*return_address <=
re_code->instruction_start() + re_code->instruction_size());
- MaybeObject* result = Execution::HandleStackGuardInterrupt();
+ MaybeObject* result = Execution::HandleStackGuardInterrupt(isolate);
if (*code_handle != re_code) { // Return address no longer valid.
int delta = code_handle->address() - re_code->address();
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index
fdbe1f5478a1fe6b46228f7c6523abef159c3333..d9c5bedc8ba216c5792bd9faed371f235bf174f5
100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -3763,7 +3763,7 @@ static RegExpImpl::IrregexpResult
SearchRegExpNoCaptureMultiple(
int required_registers = RegExpImpl::IrregexpPrepare(regexp, subject);
if (required_registers < 0) return RegExpImpl::RE_EXCEPTION;
- OffsetsVector registers(required_registers);
+ OffsetsVector registers(required_registers, isolate);
Vector<int32_t> register_vector(registers.vector(), registers.length());
int subject_length = subject->length();
bool first = true;
@@ -3836,7 +3836,7 @@ static RegExpImpl::IrregexpResult
SearchRegExpMultiple(
int required_registers = RegExpImpl::IrregexpPrepare(regexp, subject);
if (required_registers < 0) return RegExpImpl::RE_EXCEPTION;
- OffsetsVector registers(required_registers);
+ OffsetsVector registers(required_registers, isolate);
Vector<int32_t> register_vector(registers.vector(), registers.length());
RegExpImpl::IrregexpResult result =
@@ -3855,7 +3855,7 @@ static RegExpImpl::IrregexpResult
SearchRegExpMultiple(
if (result == RegExpImpl::RE_SUCCESS) {
// Need to keep a copy of the previous match for creating
last_match_info
// at the end, so we have two vectors that we swap between.
- OffsetsVector registers2(required_registers);
+ OffsetsVector registers2(required_registers, isolate);
Vector<int> prev_register_vector(registers2.vector(),
registers2.length());
bool first = true;
do {
@@ -9200,13 +9200,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StackGuard) {
return isolate->StackOverflow();
}
- return Execution::HandleStackGuardInterrupt();
+ return Execution::HandleStackGuardInterrupt(isolate);
}
RUNTIME_FUNCTION(MaybeObject*, Runtime_Interrupt) {
ASSERT(args.length() == 0);
- return Execution::HandleStackGuardInterrupt();
+ return Execution::HandleStackGuardInterrupt(isolate);
}
Index: src/x64/regexp-macro-assembler-x64.cc
diff --git a/src/x64/regexp-macro-assembler-x64.cc
b/src/x64/regexp-macro-assembler-x64.cc
index
16730d21bf09b457d30402c09325f26f907e9856..773fc4c16cce529ff9eb2b41f124ac60c5a77e6c
100644
--- a/src/x64/regexp-macro-assembler-x64.cc
+++ b/src/x64/regexp-macro-assembler-x64.cc
@@ -1192,7 +1192,7 @@ int
RegExpMacroAssemblerX64::CheckStackGuardState(Address* return_address,
ASSERT(*return_address <=
re_code->instruction_start() + re_code->instruction_size());
- MaybeObject* result = Execution::HandleStackGuardInterrupt();
+ MaybeObject* result = Execution::HandleStackGuardInterrupt(isolate);
if (*code_handle != re_code) { // Return address no longer valid
intptr_t delta = code_handle->address() - re_code->address();
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev