Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(932)

Unified Diff: src/parser.cc

Issue 2840018: [Isolates] Moved more compilation-related globals (builtins, runtime, &c.)... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: rebase Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/messages.cc ('k') | src/prettyprinter.h » ('j') | src/runtime.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
===================================================================
--- src/parser.cc (revision 4955)
+++ src/parser.cc (working copy)
@@ -817,17 +817,18 @@
}
virtual Expression* NewProperty(Expression* obj, Expression* key, int pos) {
- if (obj == VariableProxySentinel::this_proxy()) {
- return Property::this_property();
+ Isolate* isolate = Isolate::Current();
+ if (obj == isolate->ast_sentinels()->this_proxy()) {
+ return isolate->ast_sentinels()->this_property();
} else {
- return ValidLeftHandSideSentinel::instance();
+ return isolate->ast_sentinels()->valid_left_hand_side_sentinel();
}
}
virtual Expression* NewCall(Expression* expression,
ZoneList<Expression*>* arguments,
int pos) {
- return Call::sentinel();
+ return Isolate::Current()->ast_sentinels()->call_sentinel();
}
virtual Statement* EmptyStatement() {
@@ -880,7 +881,9 @@
return new Call(expression, arguments, pos);
}
- virtual Statement* EmptyStatement();
+ virtual Statement* EmptyStatement() {
+ return Isolate::Current()->ast_sentinels()->empty_statement();
+ }
};
@@ -1073,14 +1076,6 @@
}
-Statement* AstBuildingParserFactory::EmptyStatement() {
- // Use a statically allocated empty statement singleton to avoid
- // allocating lots and lots of empty statements.
- static v8::internal::EmptyStatement empty;
- return &empty;
-}
-
-
Scope* ParserFactory::NewScope(Scope* parent, Scope::Type type,
bool inside_with) {
ASSERT(parent != NULL);
@@ -2043,6 +2038,7 @@
Block* Parser::ParseVariableDeclarations(bool accept_IN,
Expression** var,
bool* ok) {
+ Isolate* isolate = Isolate::Current();
// VariableDeclarations ::
// ('var' | 'const') (Identifier ('=' AssignmentExpression)?)+[',']
@@ -2212,7 +2208,7 @@
if (is_pre_parsing_) {
// If we're preparsing then we need to set the var to something
// in order for for-in loops to parse correctly.
- *var = ValidLeftHandSideSentinel::instance();
+ *var = isolate->ast_sentinels()->valid_left_hand_side_sentinel();
} else {
ASSERT(last_var != NULL);
*var = last_var;
@@ -3264,6 +3260,7 @@
Expression* Parser::ParsePrimaryExpression(bool* ok) {
+ Isolate* isolate = Isolate::Current();
// PrimaryExpression ::
// 'this'
// 'null'
@@ -3282,7 +3279,7 @@
case Token::THIS: {
Consume(Token::THIS);
if (is_pre_parsing_) {
- result = VariableProxySentinel::this_proxy();
+ result = isolate->ast_sentinels()->this_proxy();
} else {
VariableProxy* recv = top_scope_->receiver();
result = recv;
@@ -3308,7 +3305,7 @@
case Token::IDENTIFIER: {
Handle<String> name = ParseIdentifier(CHECK_OK);
if (is_pre_parsing_) {
- result = VariableProxySentinel::identifier_proxy();
+ result = isolate->ast_sentinels()->identifier_proxy();
} else {
result = top_scope_->NewUnresolved(name, inside_with());
}
@@ -3868,7 +3865,7 @@
Expect(Token::MOD, CHECK_OK);
Handle<String> name = ParseIdentifier(CHECK_OK);
- Runtime::Function* function =
+ const Runtime::Function* function =
Runtime::FunctionForName(scanner_.literal_string());
ZoneList<Expression*>* args = ParseArguments(CHECK_OK);
if (function == NULL && extension_ != NULL) {
@@ -4667,31 +4664,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,9 +5033,7 @@
// MakeAST() is just a wrapper for the corresponding Parser calls
// so we don't have to expose the entire Parser class in the .h file.
-static bool always_allow_natives_syntax = false;
-
ParserMessage::~ParserMessage() {
for (int i = 0; i < args().length(); i++)
DeleteArray(args()[i]);
@@ -5095,7 +5066,7 @@
v8::Extension* extension) {
Handle<Script> no_script;
bool allow_natives_syntax =
- always_allow_natives_syntax ||
+ Isolate::Current()->always_allow_natives_syntax() ||
FLAG_allow_natives_syntax ||
Isolate::Current()->bootstrapper()->IsActive();
PreParser parser(no_script, allow_natives_syntax, extension);
@@ -5136,7 +5107,7 @@
ScriptDataImpl* pre_data,
bool is_json) {
bool allow_natives_syntax =
- always_allow_natives_syntax ||
+ Isolate::Current()->always_allow_natives_syntax() ||
FLAG_allow_natives_syntax ||
Isolate::Current()->bootstrapper()->IsActive();
AstBuildingParser parser(script, allow_natives_syntax, extension, pre_data);
@@ -5169,10 +5140,12 @@
int start_position,
int end_position,
bool is_expression) {
- bool allow_natives_syntax_before = always_allow_natives_syntax;
- always_allow_natives_syntax = true;
+ bool allow_natives_syntax_before =
+ Isolate::Current()->always_allow_natives_syntax();
+ Isolate::Current()->set_always_allow_natives_syntax(true);
AstBuildingParser parser(script, true, NULL, NULL); // always allow
- always_allow_natives_syntax = allow_natives_syntax_before;
+ Isolate::Current()->set_always_allow_natives_syntax(
+ allow_natives_syntax_before);
// Parse the function by pointing to the function source in the script source.
Handle<String> script_source(String::cast(script->source()));
FunctionLiteral* result =
« no previous file with comments | « src/messages.cc ('k') | src/prettyprinter.h » ('j') | src/runtime.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698