Index: src/parser.cc |
=================================================================== |
--- src/parser.cc (revision 7267) |
+++ src/parser.cc (working copy) |
@@ -310,7 +310,8 @@ |
: materialized_literal_count_(0), |
expected_property_count_(0), |
only_simple_this_property_assignments_(false), |
- this_property_assignments_(Factory::empty_fixed_array()), |
+ this_property_assignments_( |
+ Isolate::Current()->factory()->empty_fixed_array()), |
loop_count_(0), |
variable_(variable), |
parent_(*variable) { |
@@ -331,9 +332,11 @@ |
if (static_cast<unsigned>(symbol_id) |
>= static_cast<unsigned>(symbol_cache_.length())) { |
if (scanner().is_literal_ascii()) { |
- return Factory::LookupAsciiSymbol(scanner().literal_ascii_string()); |
+ return isolate()->factory()->LookupAsciiSymbol( |
+ scanner().literal_ascii_string()); |
} else { |
- return Factory::LookupTwoByteSymbol(scanner().literal_uc16_string()); |
+ return isolate()->factory()->LookupTwoByteSymbol( |
+ scanner().literal_uc16_string()); |
} |
} |
return LookupCachedSymbol(symbol_id); |
@@ -350,14 +353,16 @@ |
Handle<String> result = symbol_cache_.at(symbol_id); |
if (result.is_null()) { |
if (scanner().is_literal_ascii()) { |
- result = Factory::LookupAsciiSymbol(scanner().literal_ascii_string()); |
+ result = isolate()->factory()->LookupAsciiSymbol( |
+ scanner().literal_ascii_string()); |
} else { |
- result = Factory::LookupTwoByteSymbol(scanner().literal_uc16_string()); |
+ result = isolate()->factory()->LookupTwoByteSymbol( |
+ scanner().literal_uc16_string()); |
} |
symbol_cache_.at(symbol_id) = result; |
return result; |
} |
- Counters::total_preparse_symbols_skipped.Increment(); |
+ COUNTERS->total_preparse_symbols_skipped()->Increment(); |
return result; |
} |
@@ -588,9 +593,10 @@ |
bool allow_natives_syntax, |
v8::Extension* extension, |
ScriptDataImpl* pre_data) |
- : symbol_cache_(pre_data ? pre_data->symbol_count() : 0), |
+ : isolate_(script->GetIsolate()), |
+ symbol_cache_(pre_data ? pre_data->symbol_count() : 0), |
script_(script), |
- scanner_(), |
+ scanner_(isolate_), |
top_scope_(NULL), |
with_nesting_level_(0), |
temp_scope_(NULL), |
@@ -610,8 +616,8 @@ |
StrictModeFlag strict_mode) { |
CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT); |
- HistogramTimerScope timer(&Counters::parse); |
- Counters::total_parse_size.Increment(source->length()); |
+ HistogramTimerScope timer(COUNTERS->parse()); |
+ COUNTERS->total_parse_size()->Increment(source->length()); |
fni_ = new FuncNameInferrer(); |
// Initialize parser state. |
@@ -647,7 +653,7 @@ |
in_global_context |
? Scope::GLOBAL_SCOPE |
: Scope::EVAL_SCOPE; |
- Handle<String> no_name = Factory::empty_symbol(); |
+ Handle<String> no_name = isolate()->factory()->empty_symbol(); |
FunctionLiteral* result = NULL; |
{ Scope* scope = NewScope(top_scope_, type, inside_with()); |
@@ -679,7 +685,7 @@ |
false, |
temp_scope.ContainsLoops()); |
} else if (stack_overflow_) { |
- Top::StackOverflow(); |
+ isolate()->StackOverflow(); |
} |
} |
@@ -694,9 +700,9 @@ |
FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) { |
CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT); |
- HistogramTimerScope timer(&Counters::parse_lazy); |
+ HistogramTimerScope timer(COUNTERS->parse_lazy()); |
Handle<String> source(String::cast(script_->source())); |
- Counters::total_parse_size.Increment(source->length()); |
+ COUNTERS->total_parse_size()->Increment(source->length()); |
Handle<SharedFunctionInfo> shared_info = info->shared_info(); |
// Initialize parser state. |
@@ -736,7 +742,7 @@ |
{ |
// Parse the function literal. |
- Handle<String> no_name = Factory::empty_symbol(); |
+ Handle<String> no_name = isolate()->factory()->empty_symbol(); |
Scope* scope = NewScope(top_scope_, Scope::GLOBAL_SCOPE, inside_with()); |
if (!info->closure().is_null()) { |
scope = Scope::DeserializeScopeChain(info, scope); |
@@ -766,7 +772,7 @@ |
// not safe to do before scope has been deleted. |
if (result == NULL) { |
zone_scope->DeleteOnExit(); |
- if (stack_overflow_) Top::StackOverflow(); |
+ if (stack_overflow_) isolate()->StackOverflow(); |
} else { |
Handle<String> inferred_name(shared_info->inferred_name()); |
result->set_inferred_name(inferred_name); |
@@ -796,14 +802,15 @@ |
MessageLocation location(script_, |
source_location.beg_pos, |
source_location.end_pos); |
- Handle<FixedArray> elements = Factory::NewFixedArray(args.length()); |
+ Factory* factory = isolate()->factory(); |
+ Handle<FixedArray> elements = factory->NewFixedArray(args.length()); |
for (int i = 0; i < args.length(); i++) { |
- Handle<String> arg_string = Factory::NewStringFromUtf8(CStrVector(args[i])); |
+ Handle<String> arg_string = factory->NewStringFromUtf8(CStrVector(args[i])); |
elements->set(i, *arg_string); |
} |
- Handle<JSArray> array = Factory::NewJSArrayWithElements(elements); |
- Handle<Object> result = Factory::NewSyntaxError(type, array); |
- Top::Throw(*result, &location); |
+ Handle<JSArray> array = factory->NewJSArrayWithElements(elements); |
+ Handle<Object> result = factory->NewSyntaxError(type, array); |
+ isolate()->Throw(*result, &location); |
} |
@@ -813,13 +820,14 @@ |
MessageLocation location(script_, |
source_location.beg_pos, |
source_location.end_pos); |
- Handle<FixedArray> elements = Factory::NewFixedArray(args.length()); |
+ Factory* factory = isolate()->factory(); |
+ Handle<FixedArray> elements = factory->NewFixedArray(args.length()); |
for (int i = 0; i < args.length(); i++) { |
elements->set(i, *args[i]); |
} |
- Handle<JSArray> array = Factory::NewJSArrayWithElements(elements); |
- Handle<Object> result = Factory::NewSyntaxError(type, array); |
- Top::Throw(*result, &location); |
+ Handle<JSArray> array = factory->NewJSArrayWithElements(elements); |
+ Handle<Object> result = factory->NewSyntaxError(type, array); |
+ isolate()->Throw(*result, &location); |
} |
@@ -976,14 +984,14 @@ |
// form this.x = y; |
Handle<FixedArray> GetThisPropertyAssignments() { |
if (names_ == NULL) { |
- return Factory::empty_fixed_array(); |
+ return FACTORY->empty_fixed_array(); |
} |
ASSERT(names_ != NULL); |
ASSERT(assigned_arguments_ != NULL); |
ASSERT_EQ(names_->length(), assigned_arguments_->length()); |
ASSERT_EQ(names_->length(), assigned_constants_->length()); |
Handle<FixedArray> assignments = |
- Factory::NewFixedArray(names_->length() * 3); |
+ FACTORY->NewFixedArray(names_->length() * 3); |
for (int i = 0; i < names_->length(); i++) { |
assignments->set(i * 3, *names_->at(i)); |
assignments->set(i * 3 + 1, Smi::FromInt(assigned_arguments_->at(i))); |
@@ -1013,7 +1021,7 @@ |
uint32_t dummy; |
if (literal != NULL && |
literal->handle()->IsString() && |
- !String::cast(*(literal->handle()))->Equals(Heap::Proto_symbol()) && |
+ !String::cast(*(literal->handle()))->Equals(HEAP->Proto_symbol()) && |
!String::cast(*(literal->handle()))->AsArrayIndex(&dummy)) { |
Handle<String> key = Handle<String>::cast(literal->handle()); |
@@ -1047,7 +1055,7 @@ |
EnsureAllocation(); |
names_->Add(name); |
assigned_arguments_->Add(index); |
- assigned_constants_->Add(Factory::undefined_value()); |
+ assigned_constants_->Add(FACTORY->undefined_value()); |
} |
void AssignmentFromConstant(Handle<String> name, Handle<Object> value) { |
@@ -1134,9 +1142,9 @@ |
// Check "use strict" directive (ES5 14.1). |
if (!top_scope_->is_strict_mode() && |
- directive->Equals(Heap::use_strict()) && |
+ directive->Equals(isolate()->heap()->use_strict()) && |
token_loc.end_pos - token_loc.beg_pos == |
- Heap::use_strict()->length() + 2) { |
+ isolate()->heap()->use_strict()->length() + 2) { |
top_scope_->EnableStrictMode(); |
// "use strict" is the only directive for now. |
directive_prologue = false; |
@@ -1334,9 +1342,9 @@ |
var->mode() == Variable::CONST); |
const char* type = (var->mode() == Variable::VAR) ? "var" : "const"; |
Handle<String> type_string = |
- Factory::NewStringFromUtf8(CStrVector(type), TENURED); |
+ isolate()->factory()->NewStringFromUtf8(CStrVector(type), TENURED); |
Expression* expression = |
- NewThrowTypeError(Factory::redeclaration_symbol(), |
+ NewThrowTypeError(isolate()->factory()->redeclaration_symbol(), |
type_string, name); |
top_scope_->SetIllegalRedeclaration(expression); |
} |
@@ -1442,7 +1450,7 @@ |
Handle<Code> code = Handle<Code>(fun->shared()->code()); |
Handle<Code> construct_stub = Handle<Code>(fun->shared()->construct_stub()); |
Handle<SharedFunctionInfo> shared = |
- Factory::NewSharedFunctionInfo(name, literals, code, |
+ isolate()->factory()->NewSharedFunctionInfo(name, literals, code, |
Handle<SerializedScopeInfo>(fun->shared()->scope_info())); |
shared->set_construct_stub(*construct_stub); |
@@ -1512,8 +1520,8 @@ |
} |
static bool IsEvalOrArguments(Handle<String> string) { |
- return string.is_identical_to(Factory::eval_symbol()) || |
- string.is_identical_to(Factory::arguments_symbol()); |
+ return string.is_identical_to(FACTORY->eval_symbol()) || |
+ string.is_identical_to(FACTORY->arguments_symbol()); |
} |
// If the variable declaration declares exactly one non-const |
@@ -1671,7 +1679,7 @@ |
// the number of arguments (1 or 2). |
initialize = |
new CallRuntime( |
- Factory::InitializeConstGlobal_symbol(), |
+ isolate()->factory()->InitializeConstGlobal_symbol(), |
Runtime::FunctionForId(Runtime::kInitializeConstGlobal), |
arguments); |
} else { |
@@ -1695,7 +1703,7 @@ |
// the number of arguments (2 or 3). |
initialize = |
new CallRuntime( |
- Factory::InitializeVarGlobal_symbol(), |
+ isolate()->factory()->InitializeVarGlobal_symbol(), |
Runtime::FunctionForId(Runtime::kInitializeVarGlobal), |
arguments); |
} |
@@ -1886,7 +1894,7 @@ |
// |
// To be consistent with KJS we report the syntax error at runtime. |
if (!top_scope_->is_function_scope()) { |
- Handle<String> type = Factory::illegal_return_symbol(); |
+ Handle<String> type = isolate()->factory()->illegal_return_symbol(); |
Expression* throw_error = NewThrowSyntaxError(type, Handle<Object>::null()); |
return new ExpressionStatement(throw_error); |
} |
@@ -2101,7 +2109,8 @@ |
if (peek() == Token::LBRACE) { |
// Allocate a temporary for holding the finally state while |
// executing the finally block. |
- catch_var = top_scope_->NewTemporary(Factory::catch_var_symbol()); |
+ catch_var = |
+ top_scope_->NewTemporary(isolate()->factory()->catch_var_symbol()); |
Literal* name_literal = new Literal(name); |
VariableProxy* catch_var_use = new VariableProxy(catch_var); |
Expression* obj = new CatchExtensionObject(name_literal, catch_var_use); |
@@ -2252,7 +2261,8 @@ |
// error here but for compatibility with JSC we choose to report |
// the error at runtime. |
if (expression == NULL || !expression->IsValidLeftHandSide()) { |
- Handle<String> type = Factory::invalid_lhs_in_for_in_symbol(); |
+ Handle<String> type = |
+ isolate()->factory()->invalid_lhs_in_for_in_symbol(); |
expression = NewThrowReferenceError(type); |
} |
ForInStatement* loop = new ForInStatement(labels); |
@@ -2337,7 +2347,8 @@ |
// for compatibility with JSC we choose to report the error at |
// runtime. |
if (expression == NULL || !expression->IsValidLeftHandSide()) { |
- Handle<String> type = Factory::invalid_lhs_in_assignment_symbol(); |
+ Handle<String> type = |
+ isolate()->factory()->invalid_lhs_in_assignment_symbol(); |
expression = NewThrowReferenceError(type); |
} |
@@ -2579,7 +2590,8 @@ |
// error here but for compatibility with JSC we choose to report the |
// error at runtime. |
if (expression == NULL || !expression->IsValidLeftHandSide()) { |
- Handle<String> type = Factory::invalid_lhs_in_prefix_op_symbol(); |
+ Handle<String> type = |
+ isolate()->factory()->invalid_lhs_in_prefix_op_symbol(); |
expression = NewThrowReferenceError(type); |
} |
@@ -2610,7 +2622,8 @@ |
// error here but for compatibility with JSC we choose to report the |
// error at runtime. |
if (expression == NULL || !expression->IsValidLeftHandSide()) { |
- Handle<String> type = Factory::invalid_lhs_in_postfix_op_symbol(); |
+ Handle<String> type = |
+ isolate()->factory()->invalid_lhs_in_postfix_op_symbol(); |
expression = NewThrowReferenceError(type); |
} |
@@ -2667,7 +2680,8 @@ |
// is called without a receiver and it refers to the original eval |
// function. |
VariableProxy* callee = result->AsVariableProxy(); |
- if (callee != NULL && callee->IsVariable(Factory::eval_symbol())) { |
+ if (callee != NULL && |
+ callee->IsVariable(isolate()->factory()->eval_symbol())) { |
Handle<String> name = callee->name(); |
Variable* var = top_scope_->Lookup(name); |
if (var == NULL) { |
@@ -2868,17 +2882,17 @@ |
case Token::NULL_LITERAL: |
Consume(Token::NULL_LITERAL); |
- result = new Literal(Factory::null_value()); |
+ result = new Literal(isolate()->factory()->null_value()); |
break; |
case Token::TRUE_LITERAL: |
Consume(Token::TRUE_LITERAL); |
- result = new Literal(Factory::true_value()); |
+ result = new Literal(isolate()->factory()->true_value()); |
break; |
case Token::FALSE_LITERAL: |
Consume(Token::FALSE_LITERAL); |
- result = new Literal(Factory::false_value()); |
+ result = new Literal(isolate()->factory()->false_value()); |
break; |
case Token::IDENTIFIER: |
@@ -3003,7 +3017,7 @@ |
// Allocate a fixed array with all the literals. |
Handle<FixedArray> literals = |
- Factory::NewFixedArray(values->length(), TENURED); |
+ isolate()->factory()->NewFixedArray(values->length(), TENURED); |
// Fill in the literals. |
bool is_simple = true; |
@@ -3025,7 +3039,7 @@ |
// Simple and shallow arrays can be lazily copied, we transform the |
// elements array to a copy-on-write array. |
if (is_simple && depth == 1 && values->length() > 0) { |
- literals->set_map(Heap::fixed_cow_array_map()); |
+ literals->set_map(isolate()->heap()->fixed_cow_array_map()); |
} |
return new ArrayLiteral(literals, values, |
@@ -3060,7 +3074,7 @@ |
Handle<FixedArray> CompileTimeValue::GetValue(Expression* expression) { |
ASSERT(IsCompileTimeValue(expression)); |
- Handle<FixedArray> result = Factory::NewFixedArray(2, TENURED); |
+ Handle<FixedArray> result = FACTORY->NewFixedArray(2, TENURED); |
ObjectLiteral* object_literal = expression->AsObjectLiteral(); |
if (object_literal != NULL) { |
ASSERT(object_literal->is_simple()); |
@@ -3098,7 +3112,7 @@ |
if (CompileTimeValue::IsCompileTimeValue(expression)) { |
return CompileTimeValue::GetValue(expression); |
} |
- return Factory::undefined_value(); |
+ return isolate()->factory()->undefined_value(); |
} |
// Defined in ast.cc |
@@ -3164,7 +3178,7 @@ |
if (handle->IsSymbol()) { |
Handle<String> name(String::cast(*handle)); |
if (name->AsArrayIndex(&hash)) { |
- Handle<Object> key_handle = Factory::NewNumberFromUint(hash); |
+ Handle<Object> key_handle = FACTORY->NewNumberFromUint(hash); |
key = key_handle.location(); |
map = &elems; |
} else { |
@@ -3181,7 +3195,7 @@ |
char arr[100]; |
Vector<char> buffer(arr, ARRAY_SIZE(arr)); |
const char* str = DoubleToCString(num, buffer); |
- Handle<String> name = Factory::NewStringFromAscii(CStrVector(str)); |
+ Handle<String> name = FACTORY->NewStringFromAscii(CStrVector(str)); |
key = name.location(); |
hash = name->Hash(); |
map = &props; |
@@ -3293,7 +3307,7 @@ |
next == Token::STRING || is_keyword) { |
Handle<String> name; |
if (is_keyword) { |
- name = Factory::LookupAsciiSymbol(Token::String(next)); |
+ name = isolate_->factory()->LookupAsciiSymbol(Token::String(next)); |
} else { |
name = GetSymbol(CHECK_OK); |
} |
@@ -3433,8 +3447,8 @@ |
// Computation of literal_index must happen before pre parse bailout. |
int literal_index = temp_scope_->NextMaterializedLiteralIndex(); |
- Handle<FixedArray> constant_properties = |
- Factory::NewFixedArray(number_of_boilerplate_properties * 2, TENURED); |
+ Handle<FixedArray> constant_properties = isolate()->factory()->NewFixedArray( |
+ number_of_boilerplate_properties * 2, TENURED); |
bool is_simple = true; |
bool fast_elements = true; |
@@ -3503,9 +3517,10 @@ |
// this is the actual function name, otherwise this is the name of the |
// variable declared and initialized with the function (expression). In |
// that case, we don't have a function name (it's empty). |
- Handle<String> name = is_named ? var_name : Factory::empty_symbol(); |
+ Handle<String> name = |
+ is_named ? var_name : isolate()->factory()->empty_symbol(); |
// The function name, if any. |
- Handle<String> function_name = Factory::empty_symbol(); |
+ Handle<String> function_name = isolate()->factory()->empty_symbol(); |
if (is_named && (type == EXPRESSION || type == NESTED)) { |
function_name = name; |
} |
@@ -3602,13 +3617,14 @@ |
// End position greater than end of stream is safe, and hard to check. |
ReportInvalidPreparseData(name, CHECK_OK); |
} |
- Counters::total_preparse_skipped.Increment(end_pos - function_block_pos); |
+ COUNTERS->total_preparse_skipped()->Increment( |
+ end_pos - function_block_pos); |
// Seek to position just before terminal '}'. |
scanner().SeekForward(end_pos - 1); |
materialized_literal_count = entry.literal_count(); |
expected_property_count = entry.property_count(); |
only_simple_this_property_assignments = false; |
- this_property_assignments = Factory::empty_fixed_array(); |
+ this_property_assignments = isolate()->factory()->empty_fixed_array(); |
Expect(Token::RBRACE, CHECK_OK); |
} else { |
ParseSourceElements(body, Token::RBRACE, CHECK_OK); |
@@ -3701,7 +3717,7 @@ |
top_scope_->ForceEagerCompilation(); |
} |
- Runtime::Function* function = Runtime::FunctionForSymbol(name); |
+ const Runtime::Function* function = Runtime::FunctionForSymbol(name); |
// Check for built-in IS_VAR macro. |
if (function != NULL && |
@@ -3784,12 +3800,12 @@ |
Literal* Parser::GetLiteralUndefined() { |
- return new Literal(Factory::undefined_value()); |
+ return new Literal(isolate()->factory()->undefined_value()); |
} |
Literal* Parser::GetLiteralTheHole() { |
- return new Literal(Factory::the_hole_value()); |
+ return new Literal(isolate()->factory()->the_hole_value()); |
} |
@@ -3937,12 +3953,12 @@ |
Literal* Parser::NewNumberLiteral(double number) { |
- return new Literal(Factory::NewNumber(number, TENURED)); |
+ return new Literal(isolate()->factory()->NewNumber(number, TENURED)); |
} |
Expression* Parser::NewThrowReferenceError(Handle<String> type) { |
- return NewThrowError(Factory::MakeReferenceError_symbol(), |
+ return NewThrowError(isolate()->factory()->MakeReferenceError_symbol(), |
type, HandleVector<Object>(NULL, 0)); |
} |
@@ -3951,7 +3967,8 @@ |
Handle<Object> first) { |
int argc = first.is_null() ? 0 : 1; |
Vector< Handle<Object> > arguments = HandleVector<Object>(&first, argc); |
- return NewThrowError(Factory::MakeSyntaxError_symbol(), type, arguments); |
+ return NewThrowError( |
+ isolate()->factory()->MakeSyntaxError_symbol(), type, arguments); |
} |
@@ -3962,7 +3979,8 @@ |
Handle<Object> elements[] = { first, second }; |
Vector< Handle<Object> > arguments = |
HandleVector<Object>(elements, ARRAY_SIZE(elements)); |
- return NewThrowError(Factory::MakeTypeError_symbol(), type, arguments); |
+ return NewThrowError( |
+ isolate()->factory()->MakeTypeError_symbol(), type, arguments); |
} |
@@ -3970,14 +3988,16 @@ |
Handle<String> type, |
Vector< Handle<Object> > arguments) { |
int argc = arguments.length(); |
- Handle<FixedArray> elements = Factory::NewFixedArray(argc, TENURED); |
+ Handle<FixedArray> elements = isolate()->factory()->NewFixedArray(argc, |
+ TENURED); |
for (int i = 0; i < argc; i++) { |
Handle<Object> element = arguments[i]; |
if (!element.is_null()) { |
elements->set(i, *element); |
} |
} |
- Handle<JSArray> array = Factory::NewJSArrayWithElements(elements, TENURED); |
+ Handle<JSArray> array = isolate()->factory()->NewJSArrayWithElements(elements, |
+ TENURED); |
ZoneList<Expression*>* args = new ZoneList<Expression*>(2); |
args->Add(new Literal(type)); |
@@ -3997,7 +4017,7 @@ |
if (result.is_null() || scanner_.Next() != Token::EOS) { |
if (stack_overflow_) { |
// Scanner failed. |
- Top::StackOverflow(); |
+ isolate()->StackOverflow(); |
} else { |
// Parse failed. Scanner's current token is the unexpected token. |
Token::Value token = scanner_.current_token(); |
@@ -4027,20 +4047,21 @@ |
} |
Scanner::Location source_location = scanner_.location(); |
- MessageLocation location(Factory::NewScript(script), |
+ Factory* factory = isolate()->factory(); |
+ MessageLocation location(factory->NewScript(script), |
source_location.beg_pos, |
source_location.end_pos); |
Handle<JSArray> array; |
if (name_opt == NULL) { |
- array = Factory::NewJSArray(0); |
+ array = factory->NewJSArray(0); |
} else { |
- Handle<String> name = Factory::NewStringFromUtf8(CStrVector(name_opt)); |
- Handle<FixedArray> element = Factory::NewFixedArray(1); |
+ Handle<String> name = factory->NewStringFromUtf8(CStrVector(name_opt)); |
+ Handle<FixedArray> element = factory->NewFixedArray(1); |
element->set(0, *name); |
- array = Factory::NewJSArrayWithElements(element); |
+ array = factory->NewJSArrayWithElements(element); |
} |
- Handle<Object> result = Factory::NewSyntaxError(message, array); |
- Top::Throw(*result, &location); |
+ Handle<Object> result = factory->NewSyntaxError(message, array); |
+ isolate()->Throw(*result, &location); |
return Handle<Object>::null(); |
} |
} |
@@ -4051,12 +4072,14 @@ |
Handle<String> JsonParser::GetString() { |
int literal_length = scanner_.literal_length(); |
if (literal_length == 0) { |
- return Factory::empty_string(); |
+ return isolate()->factory()->empty_string(); |
} |
if (scanner_.is_literal_ascii()) { |
- return Factory::NewStringFromAscii(scanner_.literal_ascii_string()); |
+ return isolate()->factory()->NewStringFromAscii( |
+ scanner_.literal_ascii_string()); |
} else { |
- return Factory::NewStringFromTwoByte(scanner_.literal_uc16_string()); |
+ return isolate()->factory()->NewStringFromTwoByte( |
+ scanner_.literal_uc16_string()); |
} |
} |
@@ -4068,13 +4091,13 @@ |
case Token::STRING: |
return GetString(); |
case Token::NUMBER: |
- return Factory::NewNumber(scanner_.number()); |
+ return isolate()->factory()->NewNumber(scanner_.number()); |
case Token::FALSE_LITERAL: |
- return Factory::false_value(); |
+ return isolate()->factory()->false_value(); |
case Token::TRUE_LITERAL: |
- return Factory::true_value(); |
+ return isolate()->factory()->true_value(); |
case Token::NULL_LITERAL: |
- return Factory::null_value(); |
+ return isolate()->factory()->null_value(); |
case Token::LBRACE: |
return ParseJsonObject(); |
case Token::LBRACK: |
@@ -4088,12 +4111,13 @@ |
// Parse a JSON object. Scanner must be right after '{' token. |
Handle<Object> JsonParser::ParseJsonObject() { |
Handle<JSFunction> object_constructor( |
- Top::global_context()->object_function()); |
- Handle<JSObject> json_object = Factory::NewJSObject(object_constructor); |
+ isolate()->global_context()->object_function()); |
+ Handle<JSObject> json_object = |
+ isolate()->factory()->NewJSObject(object_constructor); |
if (scanner_.peek() == Token::RBRACE) { |
scanner_.Next(); |
} else { |
- if (StackLimitCheck().HasOverflowed()) { |
+ if (StackLimitCheck(isolate()).HasOverflowed()) { |
stack_overflow_ = true; |
return Handle<Object>::null(); |
} |
@@ -4110,7 +4134,7 @@ |
uint32_t index; |
if (key->AsArrayIndex(&index)) { |
SetOwnElement(json_object, index, value, kNonStrictMode); |
- } else if (key->Equals(Heap::Proto_symbol())) { |
+ } else if (key->Equals(isolate()->heap()->Proto_symbol())) { |
// We can't remove the __proto__ accessor since it's hardcoded |
// in several places. Instead go along and add the value as |
// the prototype of the created object if possible. |
@@ -4136,7 +4160,7 @@ |
if (token == Token::RBRACK) { |
scanner_.Next(); |
} else { |
- if (StackLimitCheck().HasOverflowed()) { |
+ if (StackLimitCheck(isolate()).HasOverflowed()) { |
stack_overflow_ = true; |
return Handle<Object>::null(); |
} |
@@ -4153,13 +4177,13 @@ |
// Allocate a fixed array with all the elements. |
Handle<FixedArray> fast_elements = |
- Factory::NewFixedArray(elements.length()); |
+ isolate()->factory()->NewFixedArray(elements.length()); |
for (int i = 0, n = elements.length(); i < n; i++) { |
fast_elements->set(i, *elements[i]); |
} |
- return Factory::NewJSArrayWithElements(fast_elements); |
+ return isolate()->factory()->NewJSArrayWithElements(fast_elements); |
} |
// ---------------------------------------------------------------------------- |
@@ -4169,18 +4193,19 @@ |
RegExpParser::RegExpParser(FlatStringReader* in, |
Handle<String>* error, |
bool multiline) |
- : error_(error), |
- captures_(NULL), |
- in_(in), |
- current_(kEndMarker), |
- next_pos_(0), |
- capture_count_(0), |
- has_more_(true), |
- multiline_(multiline), |
- simple_(false), |
- contains_anchor_(false), |
- is_scanned_for_captures_(false), |
- failed_(false) { |
+ : isolate_(Isolate::Current()), |
+ error_(error), |
+ captures_(NULL), |
+ in_(in), |
+ current_(kEndMarker), |
+ next_pos_(0), |
+ capture_count_(0), |
+ has_more_(true), |
+ multiline_(multiline), |
+ simple_(false), |
+ contains_anchor_(false), |
+ is_scanned_for_captures_(false), |
+ failed_(false) { |
Advance(); |
} |
@@ -4196,10 +4221,10 @@ |
void RegExpParser::Advance() { |
if (next_pos_ < in()->length()) { |
- StackLimitCheck check; |
+ StackLimitCheck check(isolate()); |
if (check.HasOverflowed()) { |
- ReportError(CStrVector(Top::kStackOverflowMessage)); |
- } else if (Zone::excess_allocation()) { |
+ ReportError(CStrVector(Isolate::kStackOverflowMessage)); |
+ } else if (isolate()->zone()->excess_allocation()) { |
ReportError(CStrVector("Regular expression too large")); |
} else { |
current_ = in()->Get(next_pos_); |
@@ -4230,7 +4255,7 @@ |
RegExpTree* RegExpParser::ReportError(Vector<const char> message) { |
failed_ = true; |
- *error_ = Factory::NewStringFromAscii(message, NOT_TENURED); |
+ *error_ = isolate()->factory()->NewStringFromAscii(message, NOT_TENURED); |
// Zip to the end to make sure the no more input is read. |
current_ = kEndMarker; |
next_pos_ = in()->length(); |
@@ -4584,31 +4609,7 @@ |
} |
} |
-class SourceCharacter { |
- public: |
- static bool Is(uc32 c) { |
- switch (c) { |
- // case ']': case '}': |
- // In spidermonkey and jsc these are treated as source characters |
- // so we do too. |
- case '^': case '$': case '\\': case '.': case '*': case '+': |
- case '?': case '(': case ')': case '[': case '{': case '|': |
- case RegExpParser::kEndMarker: |
- return false; |
- default: |
- return true; |
- } |
- } |
-}; |
- |
-static unibrow::Predicate<SourceCharacter> source_character; |
- |
- |
-static inline bool IsSourceCharacter(uc32 c) { |
- return source_character.get(c); |
-} |
- |
#ifdef DEBUG |
// Currently only used in an ASSERT. |
static bool IsSpecialClassEscape(uc32 c) { |
@@ -5060,14 +5061,15 @@ |
static ScriptDataImpl* DoPreParse(UC16CharacterStream* source, |
bool allow_lazy, |
ParserRecorder* recorder) { |
- V8JavaScriptScanner scanner; |
+ Isolate* isolate = Isolate::Current(); |
+ V8JavaScriptScanner scanner(isolate); |
scanner.Initialize(source); |
- intptr_t stack_limit = StackGuard::real_climit(); |
+ intptr_t stack_limit = isolate->stack_guard()->real_climit(); |
if (!preparser::PreParser::PreParseProgram(&scanner, |
recorder, |
allow_lazy, |
stack_limit)) { |
- Top::StackOverflow(); |
+ isolate->StackOverflow(); |
return NULL; |
} |
@@ -5146,7 +5148,7 @@ |
DeleteArray(args[i]); |
} |
DeleteArray(args.start()); |
- ASSERT(Top::has_pending_exception()); |
+ ASSERT(info->isolate()->has_pending_exception()); |
} else { |
Handle<String> source = Handle<String>(String::cast(script->source())); |
result = parser.ParseProgram(source, |