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

Side by Side Diff: src/parser.cc

Issue 12210083: Renamed "symbols" to "internalized strings" throughout the code base, (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed Yang's comments Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-printer.cc ('k') | src/preparse-data.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 250
251 251
252 Handle<String> Parser::LookupSymbol(int symbol_id) { 252 Handle<String> Parser::LookupSymbol(int symbol_id) {
253 // Length of symbol cache is the number of identified symbols. 253 // Length of symbol cache is the number of identified symbols.
254 // If we are larger than that, or negative, it's not a cached symbol. 254 // If we are larger than that, or negative, it's not a cached symbol.
255 // This might also happen if there is no preparser symbol data, even 255 // This might also happen if there is no preparser symbol data, even
256 // if there is some preparser data. 256 // if there is some preparser data.
257 if (static_cast<unsigned>(symbol_id) 257 if (static_cast<unsigned>(symbol_id)
258 >= static_cast<unsigned>(symbol_cache_.length())) { 258 >= static_cast<unsigned>(symbol_cache_.length())) {
259 if (scanner().is_literal_ascii()) { 259 if (scanner().is_literal_ascii()) {
260 return isolate()->factory()->LookupOneByteSymbol( 260 return isolate()->factory()->InternalizeOneByteString(
261 Vector<const uint8_t>::cast(scanner().literal_ascii_string())); 261 Vector<const uint8_t>::cast(scanner().literal_ascii_string()));
262 } else { 262 } else {
263 return isolate()->factory()->LookupTwoByteSymbol( 263 return isolate()->factory()->InternalizeTwoByteString(
264 scanner().literal_utf16_string()); 264 scanner().literal_utf16_string());
265 } 265 }
266 } 266 }
267 return LookupCachedSymbol(symbol_id); 267 return LookupCachedSymbol(symbol_id);
268 } 268 }
269 269
270 270
271 Handle<String> Parser::LookupCachedSymbol(int symbol_id) { 271 Handle<String> Parser::LookupCachedSymbol(int symbol_id) {
272 // Make sure the cache is large enough to hold the symbol identifier. 272 // Make sure the cache is large enough to hold the symbol identifier.
273 if (symbol_cache_.length() <= symbol_id) { 273 if (symbol_cache_.length() <= symbol_id) {
274 // Increase length to index + 1. 274 // Increase length to index + 1.
275 symbol_cache_.AddBlock(Handle<String>::null(), 275 symbol_cache_.AddBlock(Handle<String>::null(),
276 symbol_id + 1 - symbol_cache_.length(), zone()); 276 symbol_id + 1 - symbol_cache_.length(), zone());
277 } 277 }
278 Handle<String> result = symbol_cache_.at(symbol_id); 278 Handle<String> result = symbol_cache_.at(symbol_id);
279 if (result.is_null()) { 279 if (result.is_null()) {
280 if (scanner().is_literal_ascii()) { 280 if (scanner().is_literal_ascii()) {
281 result = isolate()->factory()->LookupOneByteSymbol( 281 result = isolate()->factory()->InternalizeOneByteString(
282 Vector<const uint8_t>::cast(scanner().literal_ascii_string())); 282 Vector<const uint8_t>::cast(scanner().literal_ascii_string()));
283 } else { 283 } else {
284 result = isolate()->factory()->LookupTwoByteSymbol( 284 result = isolate()->factory()->InternalizeTwoByteString(
285 scanner().literal_utf16_string()); 285 scanner().literal_utf16_string());
286 } 286 }
287 symbol_cache_.at(symbol_id) = result; 287 symbol_cache_.at(symbol_id) = result;
288 return result; 288 return result;
289 } 289 }
290 isolate()->counters()->total_preparse_symbols_skipped()->Increment(); 290 isolate()->counters()->total_preparse_symbols_skipped()->Increment();
291 return result; 291 return result;
292 } 292 }
293 293
294 294
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 } 610 }
611 611
612 612
613 FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, 613 FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
614 Handle<String> source, 614 Handle<String> source,
615 ZoneScope* zone_scope) { 615 ZoneScope* zone_scope) {
616 ASSERT(top_scope_ == NULL); 616 ASSERT(top_scope_ == NULL);
617 ASSERT(target_stack_ == NULL); 617 ASSERT(target_stack_ == NULL);
618 if (pre_data_ != NULL) pre_data_->Initialize(); 618 if (pre_data_ != NULL) pre_data_->Initialize();
619 619
620 Handle<String> no_name = isolate()->factory()->empty_symbol(); 620 Handle<String> no_name = isolate()->factory()->empty_string();
621 621
622 FunctionLiteral* result = NULL; 622 FunctionLiteral* result = NULL;
623 { Scope* scope = NewScope(top_scope_, GLOBAL_SCOPE); 623 { Scope* scope = NewScope(top_scope_, GLOBAL_SCOPE);
624 info->SetGlobalScope(scope); 624 info->SetGlobalScope(scope);
625 if (!info->context().is_null()) { 625 if (!info->context().is_null()) {
626 scope = Scope::DeserializeScopeChain(*info->context(), scope, zone()); 626 scope = Scope::DeserializeScopeChain(*info->context(), scope, zone());
627 } 627 }
628 if (info->is_eval()) { 628 if (info->is_eval()) {
629 if (!scope->is_global_scope() || info->language_mode() != CLASSIC_MODE) { 629 if (!scope->is_global_scope() || info->language_mode() != CLASSIC_MODE) {
630 scope = NewScope(scope, EVAL_SCOPE); 630 scope = NewScope(scope, EVAL_SCOPE);
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 void HandleThisPropertyAssignment(Scope* scope, Assignment* assignment) { 913 void HandleThisPropertyAssignment(Scope* scope, Assignment* assignment) {
914 // Check that the property assigned to is a named property, which is not 914 // Check that the property assigned to is a named property, which is not
915 // __proto__. 915 // __proto__.
916 Property* property = assignment->target()->AsProperty(); 916 Property* property = assignment->target()->AsProperty();
917 ASSERT(property != NULL); 917 ASSERT(property != NULL);
918 Literal* literal = property->key()->AsLiteral(); 918 Literal* literal = property->key()->AsLiteral();
919 uint32_t dummy; 919 uint32_t dummy;
920 if (literal != NULL && 920 if (literal != NULL &&
921 literal->handle()->IsString() && 921 literal->handle()->IsString() &&
922 !String::cast(*(literal->handle()))->Equals( 922 !String::cast(*(literal->handle()))->Equals(
923 isolate_->heap()->Proto_symbol()) && 923 isolate_->heap()->proto_string()) &&
924 !String::cast(*(literal->handle()))->AsArrayIndex(&dummy)) { 924 !String::cast(*(literal->handle()))->AsArrayIndex(&dummy)) {
925 Handle<String> key = Handle<String>::cast(literal->handle()); 925 Handle<String> key = Handle<String>::cast(literal->handle());
926 926
927 // Check whether the value assigned is either a constant or matches the 927 // Check whether the value assigned is either a constant or matches the
928 // name of one of the arguments to the function. 928 // name of one of the arguments to the function.
929 if (assignment->value()->AsLiteral() != NULL) { 929 if (assignment->value()->AsLiteral() != NULL) {
930 // Constant assigned. 930 // Constant assigned.
931 Literal* literal = assignment->value()->AsLiteral(); 931 Literal* literal = assignment->value()->AsLiteral();
932 AssignmentFromConstant(key, literal->handle()); 932 AssignmentFromConstant(key, literal->handle());
933 return; 933 return;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 ExpressionStatement* e_stat; 1050 ExpressionStatement* e_stat;
1051 Literal* literal; 1051 Literal* literal;
1052 // Still processing directive prologue? 1052 // Still processing directive prologue?
1053 if ((e_stat = stat->AsExpressionStatement()) != NULL && 1053 if ((e_stat = stat->AsExpressionStatement()) != NULL &&
1054 (literal = e_stat->expression()->AsLiteral()) != NULL && 1054 (literal = e_stat->expression()->AsLiteral()) != NULL &&
1055 literal->handle()->IsString()) { 1055 literal->handle()->IsString()) {
1056 Handle<String> directive = Handle<String>::cast(literal->handle()); 1056 Handle<String> directive = Handle<String>::cast(literal->handle());
1057 1057
1058 // Check "use strict" directive (ES5 14.1). 1058 // Check "use strict" directive (ES5 14.1).
1059 if (top_scope_->is_classic_mode() && 1059 if (top_scope_->is_classic_mode() &&
1060 directive->Equals(isolate()->heap()->use_strict()) && 1060 directive->Equals(isolate()->heap()->use_strict_string()) &&
1061 token_loc.end_pos - token_loc.beg_pos == 1061 token_loc.end_pos - token_loc.beg_pos ==
1062 isolate()->heap()->use_strict()->length() + 2) { 1062 isolate()->heap()->use_strict_string()->length() + 2) {
1063 // TODO(mstarzinger): Global strict eval calls, need their own scope 1063 // TODO(mstarzinger): Global strict eval calls, need their own scope
1064 // as specified in ES5 10.4.2(3). The correct fix would be to always 1064 // as specified in ES5 10.4.2(3). The correct fix would be to always
1065 // add this scope in DoParseProgram(), but that requires adaptations 1065 // add this scope in DoParseProgram(), but that requires adaptations
1066 // all over the code base, so we go with a quick-fix for now. 1066 // all over the code base, so we go with a quick-fix for now.
1067 // In the same manner, we have to patch the parsing mode. 1067 // In the same manner, we have to patch the parsing mode.
1068 if (is_eval && !top_scope_->is_eval_scope()) { 1068 if (is_eval && !top_scope_->is_eval_scope()) {
1069 ASSERT(top_scope_->is_global_scope()); 1069 ASSERT(top_scope_->is_global_scope());
1070 Scope* scope = NewScope(top_scope_, EVAL_SCOPE); 1070 Scope* scope = NewScope(top_scope_, EVAL_SCOPE);
1071 scope->set_start_position(top_scope_->start_position()); 1071 scope->set_start_position(top_scope_->start_position());
1072 scope->set_end_position(top_scope_->end_position()); 1072 scope->set_end_position(top_scope_->end_position());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 Statement* stmt = ParseStatement(labels, CHECK_OK); 1137 Statement* stmt = ParseStatement(labels, CHECK_OK);
1138 // Handle 'module' as a context-sensitive keyword. 1138 // Handle 'module' as a context-sensitive keyword.
1139 if (FLAG_harmony_modules && 1139 if (FLAG_harmony_modules &&
1140 peek() == Token::IDENTIFIER && 1140 peek() == Token::IDENTIFIER &&
1141 !scanner().HasAnyLineTerminatorBeforeNext() && 1141 !scanner().HasAnyLineTerminatorBeforeNext() &&
1142 stmt != NULL) { 1142 stmt != NULL) {
1143 ExpressionStatement* estmt = stmt->AsExpressionStatement(); 1143 ExpressionStatement* estmt = stmt->AsExpressionStatement();
1144 if (estmt != NULL && 1144 if (estmt != NULL &&
1145 estmt->expression()->AsVariableProxy() != NULL && 1145 estmt->expression()->AsVariableProxy() != NULL &&
1146 estmt->expression()->AsVariableProxy()->name()->Equals( 1146 estmt->expression()->AsVariableProxy()->name()->Equals(
1147 isolate()->heap()->module_symbol()) && 1147 isolate()->heap()->module_string()) &&
1148 !scanner().literal_contains_escapes()) { 1148 !scanner().literal_contains_escapes()) {
1149 return ParseModuleDeclaration(NULL, ok); 1149 return ParseModuleDeclaration(NULL, ok);
1150 } 1150 }
1151 } 1151 }
1152 return stmt; 1152 return stmt;
1153 } 1153 }
1154 } 1154 }
1155 } 1155 }
1156 1156
1157 1157
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 const char* elms[2] = { "Variable", *c_string }; 1709 const char* elms[2] = { "Variable", *c_string };
1710 Vector<const char*> args(elms, 2); 1710 Vector<const char*> args(elms, 2);
1711 ReportMessage("redeclaration", args); 1711 ReportMessage("redeclaration", args);
1712 *ok = false; 1712 *ok = false;
1713 return; 1713 return;
1714 } 1714 }
1715 Handle<String> type_string = 1715 Handle<String> type_string =
1716 isolate()->factory()->NewStringFromUtf8(CStrVector("Variable"), 1716 isolate()->factory()->NewStringFromUtf8(CStrVector("Variable"),
1717 TENURED); 1717 TENURED);
1718 Expression* expression = 1718 Expression* expression =
1719 NewThrowTypeError(isolate()->factory()->redeclaration_symbol(), 1719 NewThrowTypeError(isolate()->factory()->redeclaration_string(),
1720 type_string, name); 1720 type_string, name);
1721 declaration_scope->SetIllegalRedeclaration(expression); 1721 declaration_scope->SetIllegalRedeclaration(expression);
1722 } 1722 }
1723 } 1723 }
1724 1724
1725 // We add a declaration node for every declaration. The compiler 1725 // We add a declaration node for every declaration. The compiler
1726 // will only generate code if necessary. In particular, declarations 1726 // will only generate code if necessary. In particular, declarations
1727 // for inner local variables that do not represent functions won't 1727 // for inner local variables that do not represent functions won't
1728 // result in any generated code. 1728 // result in any generated code.
1729 // 1729 //
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 1971
1972 Handle<String> ignore; 1972 Handle<String> ignore;
1973 Block* result = 1973 Block* result =
1974 ParseVariableDeclarations(var_context, NULL, names, &ignore, CHECK_OK); 1974 ParseVariableDeclarations(var_context, NULL, names, &ignore, CHECK_OK);
1975 ExpectSemicolon(CHECK_OK); 1975 ExpectSemicolon(CHECK_OK);
1976 return result; 1976 return result;
1977 } 1977 }
1978 1978
1979 1979
1980 bool Parser::IsEvalOrArguments(Handle<String> string) { 1980 bool Parser::IsEvalOrArguments(Handle<String> string) {
1981 return string.is_identical_to(isolate()->factory()->eval_symbol()) || 1981 return string.is_identical_to(isolate()->factory()->eval_string()) ||
1982 string.is_identical_to(isolate()->factory()->arguments_symbol()); 1982 string.is_identical_to(isolate()->factory()->arguments_string());
1983 } 1983 }
1984 1984
1985 1985
1986 // If the variable declaration declares exactly one non-const 1986 // If the variable declaration declares exactly one non-const
1987 // variable, then *out is set to that variable. In all other cases, 1987 // variable, then *out is set to that variable. In all other cases,
1988 // *out is untouched; in particular, it is the caller's responsibility 1988 // *out is untouched; in particular, it is the caller's responsibility
1989 // to initialize it properly. This mechanism is used for the parsing 1989 // to initialize it properly. This mechanism is used for the parsing
1990 // of 'for-in' loops. 1990 // of 'for-in' loops.
1991 Block* Parser::ParseVariableDeclarations( 1991 Block* Parser::ParseVariableDeclarations(
1992 VariableDeclarationContext var_context, 1992 VariableDeclarationContext var_context,
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2226 2226
2227 if (is_const) { 2227 if (is_const) {
2228 arguments->Add(value, zone()); 2228 arguments->Add(value, zone());
2229 value = NULL; // zap the value to avoid the unnecessary assignment 2229 value = NULL; // zap the value to avoid the unnecessary assignment
2230 2230
2231 // Construct the call to Runtime_InitializeConstGlobal 2231 // Construct the call to Runtime_InitializeConstGlobal
2232 // and add it to the initialization statement block. 2232 // and add it to the initialization statement block.
2233 // Note that the function does different things depending on 2233 // Note that the function does different things depending on
2234 // the number of arguments (1 or 2). 2234 // the number of arguments (1 or 2).
2235 initialize = factory()->NewCallRuntime( 2235 initialize = factory()->NewCallRuntime(
2236 isolate()->factory()->InitializeConstGlobal_symbol(), 2236 isolate()->factory()->InitializeConstGlobal_string(),
2237 Runtime::FunctionForId(Runtime::kInitializeConstGlobal), 2237 Runtime::FunctionForId(Runtime::kInitializeConstGlobal),
2238 arguments); 2238 arguments);
2239 } else { 2239 } else {
2240 // Add strict mode. 2240 // Add strict mode.
2241 // We may want to pass singleton to avoid Literal allocations. 2241 // We may want to pass singleton to avoid Literal allocations.
2242 LanguageMode language_mode = initialization_scope->language_mode(); 2242 LanguageMode language_mode = initialization_scope->language_mode();
2243 arguments->Add(factory()->NewNumberLiteral(language_mode), zone()); 2243 arguments->Add(factory()->NewNumberLiteral(language_mode), zone());
2244 2244
2245 // Be careful not to assign a value to the global variable if 2245 // Be careful not to assign a value to the global variable if
2246 // we're in a with. The initialization value should not 2246 // we're in a with. The initialization value should not
2247 // necessarily be stored in the global object in that case, 2247 // necessarily be stored in the global object in that case,
2248 // which is why we need to generate a separate assignment node. 2248 // which is why we need to generate a separate assignment node.
2249 if (value != NULL && !inside_with()) { 2249 if (value != NULL && !inside_with()) {
2250 arguments->Add(value, zone()); 2250 arguments->Add(value, zone());
2251 value = NULL; // zap the value to avoid the unnecessary assignment 2251 value = NULL; // zap the value to avoid the unnecessary assignment
2252 } 2252 }
2253 2253
2254 // Construct the call to Runtime_InitializeVarGlobal 2254 // Construct the call to Runtime_InitializeVarGlobal
2255 // and add it to the initialization statement block. 2255 // and add it to the initialization statement block.
2256 // Note that the function does different things depending on 2256 // Note that the function does different things depending on
2257 // the number of arguments (2 or 3). 2257 // the number of arguments (2 or 3).
2258 initialize = factory()->NewCallRuntime( 2258 initialize = factory()->NewCallRuntime(
2259 isolate()->factory()->InitializeVarGlobal_symbol(), 2259 isolate()->factory()->InitializeVarGlobal_string(),
2260 Runtime::FunctionForId(Runtime::kInitializeVarGlobal), 2260 Runtime::FunctionForId(Runtime::kInitializeVarGlobal),
2261 arguments); 2261 arguments);
2262 } 2262 }
2263 2263
2264 block->AddStatement(factory()->NewExpressionStatement(initialize), 2264 block->AddStatement(factory()->NewExpressionStatement(initialize),
2265 zone()); 2265 zone());
2266 } else if (needs_init) { 2266 } else if (needs_init) {
2267 // Constant initializations always assign to the declared constant which 2267 // Constant initializations always assign to the declared constant which
2268 // is always at the function scope level. This is only relevant for 2268 // is always at the function scope level. This is only relevant for
2269 // dynamically looked-up variables and constants (the start context for 2269 // dynamically looked-up variables and constants (the start context for
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 2361
2362 // If we have an extension, we allow a native function declaration. 2362 // If we have an extension, we allow a native function declaration.
2363 // A native function declaration starts with "native function" with 2363 // A native function declaration starts with "native function" with
2364 // no line-terminator between the two words. 2364 // no line-terminator between the two words.
2365 if (extension_ != NULL && 2365 if (extension_ != NULL &&
2366 peek() == Token::FUNCTION && 2366 peek() == Token::FUNCTION &&
2367 !scanner().HasAnyLineTerminatorBeforeNext() && 2367 !scanner().HasAnyLineTerminatorBeforeNext() &&
2368 expr != NULL && 2368 expr != NULL &&
2369 expr->AsVariableProxy() != NULL && 2369 expr->AsVariableProxy() != NULL &&
2370 expr->AsVariableProxy()->name()->Equals( 2370 expr->AsVariableProxy()->name()->Equals(
2371 isolate()->heap()->native_symbol()) && 2371 isolate()->heap()->native_string()) &&
2372 !scanner().literal_contains_escapes()) { 2372 !scanner().literal_contains_escapes()) {
2373 return ParseNativeDeclaration(ok); 2373 return ParseNativeDeclaration(ok);
2374 } 2374 }
2375 2375
2376 // Parsed expression statement, or the context-sensitive 'module' keyword. 2376 // Parsed expression statement, or the context-sensitive 'module' keyword.
2377 // Only expect semicolon in the former case. 2377 // Only expect semicolon in the former case.
2378 if (!FLAG_harmony_modules || 2378 if (!FLAG_harmony_modules ||
2379 peek() != Token::IDENTIFIER || 2379 peek() != Token::IDENTIFIER ||
2380 scanner().HasAnyLineTerminatorBeforeNext() || 2380 scanner().HasAnyLineTerminatorBeforeNext() ||
2381 expr->AsVariableProxy() == NULL || 2381 expr->AsVariableProxy() == NULL ||
2382 !expr->AsVariableProxy()->name()->Equals( 2382 !expr->AsVariableProxy()->name()->Equals(
2383 isolate()->heap()->module_symbol()) || 2383 isolate()->heap()->module_string()) ||
2384 scanner().literal_contains_escapes()) { 2384 scanner().literal_contains_escapes()) {
2385 ExpectSemicolon(CHECK_OK); 2385 ExpectSemicolon(CHECK_OK);
2386 } 2386 }
2387 return factory()->NewExpressionStatement(expr); 2387 return factory()->NewExpressionStatement(expr);
2388 } 2388 }
2389 2389
2390 2390
2391 IfStatement* Parser::ParseIfStatement(ZoneStringList* labels, bool* ok) { 2391 IfStatement* Parser::ParseIfStatement(ZoneStringList* labels, bool* ok) {
2392 // IfStatement :: 2392 // IfStatement ::
2393 // 'if' '(' Expression ')' Statement ('else' Statement)? 2393 // 'if' '(' Expression ')' Statement ('else' Statement)?
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2498 } 2498 }
2499 2499
2500 // An ECMAScript program is considered syntactically incorrect if it 2500 // An ECMAScript program is considered syntactically incorrect if it
2501 // contains a return statement that is not within the body of a 2501 // contains a return statement that is not within the body of a
2502 // function. See ECMA-262, section 12.9, page 67. 2502 // function. See ECMA-262, section 12.9, page 67.
2503 // 2503 //
2504 // To be consistent with KJS we report the syntax error at runtime. 2504 // To be consistent with KJS we report the syntax error at runtime.
2505 Scope* declaration_scope = top_scope_->DeclarationScope(); 2505 Scope* declaration_scope = top_scope_->DeclarationScope();
2506 if (declaration_scope->is_global_scope() || 2506 if (declaration_scope->is_global_scope() ||
2507 declaration_scope->is_eval_scope()) { 2507 declaration_scope->is_eval_scope()) {
2508 Handle<String> type = isolate()->factory()->illegal_return_symbol(); 2508 Handle<String> type = isolate()->factory()->illegal_return_string();
2509 Expression* throw_error = NewThrowSyntaxError(type, Handle<Object>::null()); 2509 Expression* throw_error = NewThrowSyntaxError(type, Handle<Object>::null());
2510 return factory()->NewExpressionStatement(throw_error); 2510 return factory()->NewExpressionStatement(throw_error);
2511 } 2511 }
2512 return result; 2512 return result;
2513 } 2513 }
2514 2514
2515 2515
2516 Statement* Parser::ParseWithStatement(ZoneStringList* labels, bool* ok) { 2516 Statement* Parser::ParseWithStatement(ZoneStringList* labels, bool* ok) {
2517 // WithStatement :: 2517 // WithStatement ::
2518 // 'with' '(' Expression ')' Statement 2518 // 'with' '(' Expression ')' Statement
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
2846 // for (x' in e) { 2846 // for (x' in e) {
2847 // let x; 2847 // let x;
2848 // x = x'; 2848 // x = x';
2849 // b; 2849 // b;
2850 // } 2850 // }
2851 2851
2852 // TODO(keuchel): Move the temporary variable to the block scope, after 2852 // TODO(keuchel): Move the temporary variable to the block scope, after
2853 // implementing stack allocated block scoped variables. 2853 // implementing stack allocated block scoped variables.
2854 Factory* heap_factory = isolate()->factory(); 2854 Factory* heap_factory = isolate()->factory();
2855 Handle<String> tempstr = 2855 Handle<String> tempstr =
2856 heap_factory->NewConsString(heap_factory->dot_for_symbol(), name); 2856 heap_factory->NewConsString(heap_factory->dot_for_string(), name);
2857 Handle<String> tempname = heap_factory->LookupSymbol(tempstr); 2857 Handle<String> tempname = heap_factory->InternalizeString(tempstr);
2858 Variable* temp = top_scope_->DeclarationScope()->NewTemporary(tempname); 2858 Variable* temp = top_scope_->DeclarationScope()->NewTemporary(tempname);
2859 VariableProxy* temp_proxy = factory()->NewVariableProxy(temp); 2859 VariableProxy* temp_proxy = factory()->NewVariableProxy(temp);
2860 ForInStatement* loop = factory()->NewForInStatement(labels); 2860 ForInStatement* loop = factory()->NewForInStatement(labels);
2861 Target target(&this->target_stack_, loop); 2861 Target target(&this->target_stack_, loop);
2862 2862
2863 // The expression does not see the loop variable. 2863 // The expression does not see the loop variable.
2864 Expect(Token::IN, CHECK_OK); 2864 Expect(Token::IN, CHECK_OK);
2865 top_scope_ = saved_scope; 2865 top_scope_ = saved_scope;
2866 Expression* enumerable = ParseExpression(true, CHECK_OK); 2866 Expression* enumerable = ParseExpression(true, CHECK_OK);
2867 top_scope_ = for_scope; 2867 top_scope_ = for_scope;
(...skipping 23 matching lines...) Expand all
2891 } 2891 }
2892 } else { 2892 } else {
2893 Expression* expression = ParseExpression(false, CHECK_OK); 2893 Expression* expression = ParseExpression(false, CHECK_OK);
2894 if (peek() == Token::IN) { 2894 if (peek() == Token::IN) {
2895 // Signal a reference error if the expression is an invalid 2895 // Signal a reference error if the expression is an invalid
2896 // left-hand side expression. We could report this as a syntax 2896 // left-hand side expression. We could report this as a syntax
2897 // error here but for compatibility with JSC we choose to report 2897 // error here but for compatibility with JSC we choose to report
2898 // the error at runtime. 2898 // the error at runtime.
2899 if (expression == NULL || !expression->IsValidLeftHandSide()) { 2899 if (expression == NULL || !expression->IsValidLeftHandSide()) {
2900 Handle<String> type = 2900 Handle<String> type =
2901 isolate()->factory()->invalid_lhs_in_for_in_symbol(); 2901 isolate()->factory()->invalid_lhs_in_for_in_string();
2902 expression = NewThrowReferenceError(type); 2902 expression = NewThrowReferenceError(type);
2903 } 2903 }
2904 ForInStatement* loop = factory()->NewForInStatement(labels); 2904 ForInStatement* loop = factory()->NewForInStatement(labels);
2905 Target target(&this->target_stack_, loop); 2905 Target target(&this->target_stack_, loop);
2906 2906
2907 Expect(Token::IN, CHECK_OK); 2907 Expect(Token::IN, CHECK_OK);
2908 Expression* enumerable = ParseExpression(true, CHECK_OK); 2908 Expression* enumerable = ParseExpression(true, CHECK_OK);
2909 Expect(Token::RPAREN, CHECK_OK); 2909 Expect(Token::RPAREN, CHECK_OK);
2910 2910
2911 Statement* body = ParseStatement(NULL, CHECK_OK); 2911 Statement* body = ParseStatement(NULL, CHECK_OK);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
3005 return expression; 3005 return expression;
3006 } 3006 }
3007 3007
3008 // Signal a reference error if the expression is an invalid left-hand 3008 // Signal a reference error if the expression is an invalid left-hand
3009 // side expression. We could report this as a syntax error here but 3009 // side expression. We could report this as a syntax error here but
3010 // for compatibility with JSC we choose to report the error at 3010 // for compatibility with JSC we choose to report the error at
3011 // runtime. 3011 // runtime.
3012 // TODO(ES5): Should change parsing for spec conformance. 3012 // TODO(ES5): Should change parsing for spec conformance.
3013 if (expression == NULL || !expression->IsValidLeftHandSide()) { 3013 if (expression == NULL || !expression->IsValidLeftHandSide()) {
3014 Handle<String> type = 3014 Handle<String> type =
3015 isolate()->factory()->invalid_lhs_in_assignment_symbol(); 3015 isolate()->factory()->invalid_lhs_in_assignment_string();
3016 expression = NewThrowReferenceError(type); 3016 expression = NewThrowReferenceError(type);
3017 } 3017 }
3018 3018
3019 if (!top_scope_->is_classic_mode()) { 3019 if (!top_scope_->is_classic_mode()) {
3020 // Assignment to eval or arguments is disallowed in strict mode. 3020 // Assignment to eval or arguments is disallowed in strict mode.
3021 CheckStrictModeLValue(expression, "strict_lhs_assignment", CHECK_OK); 3021 CheckStrictModeLValue(expression, "strict_lhs_assignment", CHECK_OK);
3022 } 3022 }
3023 MarkAsLValue(expression); 3023 MarkAsLValue(expression);
3024 3024
3025 Token::Value op = Next(); // Get assignment operator. 3025 Token::Value op = Next(); // Get assignment operator.
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
3246 3246
3247 } else if (Token::IsCountOp(op)) { 3247 } else if (Token::IsCountOp(op)) {
3248 op = Next(); 3248 op = Next();
3249 Expression* expression = ParseUnaryExpression(CHECK_OK); 3249 Expression* expression = ParseUnaryExpression(CHECK_OK);
3250 // Signal a reference error if the expression is an invalid 3250 // Signal a reference error if the expression is an invalid
3251 // left-hand side expression. We could report this as a syntax 3251 // left-hand side expression. We could report this as a syntax
3252 // error here but for compatibility with JSC we choose to report the 3252 // error here but for compatibility with JSC we choose to report the
3253 // error at runtime. 3253 // error at runtime.
3254 if (expression == NULL || !expression->IsValidLeftHandSide()) { 3254 if (expression == NULL || !expression->IsValidLeftHandSide()) {
3255 Handle<String> type = 3255 Handle<String> type =
3256 isolate()->factory()->invalid_lhs_in_prefix_op_symbol(); 3256 isolate()->factory()->invalid_lhs_in_prefix_op_string();
3257 expression = NewThrowReferenceError(type); 3257 expression = NewThrowReferenceError(type);
3258 } 3258 }
3259 3259
3260 if (!top_scope_->is_classic_mode()) { 3260 if (!top_scope_->is_classic_mode()) {
3261 // Prefix expression operand in strict mode may not be eval or arguments. 3261 // Prefix expression operand in strict mode may not be eval or arguments.
3262 CheckStrictModeLValue(expression, "strict_lhs_prefix", CHECK_OK); 3262 CheckStrictModeLValue(expression, "strict_lhs_prefix", CHECK_OK);
3263 } 3263 }
3264 MarkAsLValue(expression); 3264 MarkAsLValue(expression);
3265 3265
3266 int position = scanner().location().beg_pos; 3266 int position = scanner().location().beg_pos;
(...skipping 14 matching lines...) Expand all
3281 3281
3282 Expression* expression = ParseLeftHandSideExpression(CHECK_OK); 3282 Expression* expression = ParseLeftHandSideExpression(CHECK_OK);
3283 if (!scanner().HasAnyLineTerminatorBeforeNext() && 3283 if (!scanner().HasAnyLineTerminatorBeforeNext() &&
3284 Token::IsCountOp(peek())) { 3284 Token::IsCountOp(peek())) {
3285 // Signal a reference error if the expression is an invalid 3285 // Signal a reference error if the expression is an invalid
3286 // left-hand side expression. We could report this as a syntax 3286 // left-hand side expression. We could report this as a syntax
3287 // error here but for compatibility with JSC we choose to report the 3287 // error here but for compatibility with JSC we choose to report the
3288 // error at runtime. 3288 // error at runtime.
3289 if (expression == NULL || !expression->IsValidLeftHandSide()) { 3289 if (expression == NULL || !expression->IsValidLeftHandSide()) {
3290 Handle<String> type = 3290 Handle<String> type =
3291 isolate()->factory()->invalid_lhs_in_postfix_op_symbol(); 3291 isolate()->factory()->invalid_lhs_in_postfix_op_string();
3292 expression = NewThrowReferenceError(type); 3292 expression = NewThrowReferenceError(type);
3293 } 3293 }
3294 3294
3295 if (!top_scope_->is_classic_mode()) { 3295 if (!top_scope_->is_classic_mode()) {
3296 // Postfix expression operand in strict mode may not be eval or arguments. 3296 // Postfix expression operand in strict mode may not be eval or arguments.
3297 CheckStrictModeLValue(expression, "strict_lhs_prefix", CHECK_OK); 3297 CheckStrictModeLValue(expression, "strict_lhs_prefix", CHECK_OK);
3298 } 3298 }
3299 MarkAsLValue(expression); 3299 MarkAsLValue(expression);
3300 3300
3301 Token::Value next = Next(); 3301 Token::Value next = Next();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3356 3356
3357 // Keep track of eval() calls since they disable all local variable 3357 // Keep track of eval() calls since they disable all local variable
3358 // optimizations. 3358 // optimizations.
3359 // The calls that need special treatment are the 3359 // The calls that need special treatment are the
3360 // direct eval calls. These calls are all of the form eval(...), with 3360 // direct eval calls. These calls are all of the form eval(...), with
3361 // no explicit receiver. 3361 // no explicit receiver.
3362 // These calls are marked as potentially direct eval calls. Whether 3362 // These calls are marked as potentially direct eval calls. Whether
3363 // they are actually direct calls to eval is determined at run time. 3363 // they are actually direct calls to eval is determined at run time.
3364 VariableProxy* callee = result->AsVariableProxy(); 3364 VariableProxy* callee = result->AsVariableProxy();
3365 if (callee != NULL && 3365 if (callee != NULL &&
3366 callee->IsVariable(isolate()->factory()->eval_symbol())) { 3366 callee->IsVariable(isolate()->factory()->eval_string())) {
3367 top_scope_->DeclarationScope()->RecordEvalCall(); 3367 top_scope_->DeclarationScope()->RecordEvalCall();
3368 } 3368 }
3369 result = factory()->NewCall(result, args, pos); 3369 result = factory()->NewCall(result, args, pos);
3370 break; 3370 break;
3371 } 3371 }
3372 3372
3373 case Token::PERIOD: { 3373 case Token::PERIOD: {
3374 Consume(Token::PERIOD); 3374 Consume(Token::PERIOD);
3375 int pos = scanner().location().beg_pos; 3375 int pos = scanner().location().beg_pos;
3376 Handle<String> name = ParseIdentifierName(CHECK_OK); 3376 Handle<String> name = ParseIdentifierName(CHECK_OK);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
3463 case Token::LBRACK: { 3463 case Token::LBRACK: {
3464 Consume(Token::LBRACK); 3464 Consume(Token::LBRACK);
3465 int pos = scanner().location().beg_pos; 3465 int pos = scanner().location().beg_pos;
3466 Expression* index = ParseExpression(true, CHECK_OK); 3466 Expression* index = ParseExpression(true, CHECK_OK);
3467 result = factory()->NewProperty(result, index, pos); 3467 result = factory()->NewProperty(result, index, pos);
3468 if (fni_ != NULL) { 3468 if (fni_ != NULL) {
3469 if (index->IsPropertyName()) { 3469 if (index->IsPropertyName()) {
3470 fni_->PushLiteralName(index->AsLiteral()->AsPropertyName()); 3470 fni_->PushLiteralName(index->AsLiteral()->AsPropertyName());
3471 } else { 3471 } else {
3472 fni_->PushLiteralName( 3472 fni_->PushLiteralName(
3473 isolate()->factory()->anonymous_function_symbol()); 3473 isolate()->factory()->anonymous_function_string());
3474 } 3474 }
3475 } 3475 }
3476 Expect(Token::RBRACK, CHECK_OK); 3476 Expect(Token::RBRACK, CHECK_OK);
3477 break; 3477 break;
3478 } 3478 }
3479 case Token::PERIOD: { 3479 case Token::PERIOD: {
3480 Consume(Token::PERIOD); 3480 Consume(Token::PERIOD);
3481 int pos = scanner().location().beg_pos; 3481 int pos = scanner().location().beg_pos;
3482 Handle<String> name = ParseIdentifierName(CHECK_OK); 3482 Handle<String> name = ParseIdentifierName(CHECK_OK);
3483 result = 3483 result =
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
3985 // { ... , get foo() { ... }, ... , set foo(v) { ... v ... } , ... } 3985 // { ... , get foo() { ... }, ... , set foo(v) { ... v ... } , ... }
3986 // We have already read the "get" or "set" keyword. 3986 // We have already read the "get" or "set" keyword.
3987 Token::Value next = Next(); 3987 Token::Value next = Next();
3988 bool is_keyword = Token::IsKeyword(next); 3988 bool is_keyword = Token::IsKeyword(next);
3989 if (next == Token::IDENTIFIER || next == Token::NUMBER || 3989 if (next == Token::IDENTIFIER || next == Token::NUMBER ||
3990 next == Token::FUTURE_RESERVED_WORD || 3990 next == Token::FUTURE_RESERVED_WORD ||
3991 next == Token::FUTURE_STRICT_RESERVED_WORD || 3991 next == Token::FUTURE_STRICT_RESERVED_WORD ||
3992 next == Token::STRING || is_keyword) { 3992 next == Token::STRING || is_keyword) {
3993 Handle<String> name; 3993 Handle<String> name;
3994 if (is_keyword) { 3994 if (is_keyword) {
3995 name = isolate_->factory()->LookupUtf8Symbol(Token::String(next)); 3995 name = isolate_->factory()->InternalizeUtf8String(Token::String(next));
3996 } else { 3996 } else {
3997 name = GetSymbol(CHECK_OK); 3997 name = GetSymbol(CHECK_OK);
3998 } 3998 }
3999 FunctionLiteral* value = 3999 FunctionLiteral* value =
4000 ParseFunctionLiteral(name, 4000 ParseFunctionLiteral(name,
4001 false, // reserved words are allowed here 4001 false, // reserved words are allowed here
4002 RelocInfo::kNoPosition, 4002 RelocInfo::kNoPosition,
4003 FunctionLiteral::ANONYMOUS_EXPRESSION, 4003 FunctionLiteral::ANONYMOUS_EXPRESSION,
4004 CHECK_OK); 4004 CHECK_OK);
4005 // Allow any number of parameters for compatibilty with JSC. 4005 // Allow any number of parameters for compatibilty with JSC.
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
4306 // Function :: 4306 // Function ::
4307 // '(' FormalParameterList? ')' '{' FunctionBody '}' 4307 // '(' FormalParameterList? ')' '{' FunctionBody '}'
4308 4308
4309 // Anonymous functions were passed either the empty symbol or a null 4309 // Anonymous functions were passed either the empty symbol or a null
4310 // handle as the function name. Remember if we were passed a non-empty 4310 // handle as the function name. Remember if we were passed a non-empty
4311 // handle to decide whether to invoke function name inference. 4311 // handle to decide whether to invoke function name inference.
4312 bool should_infer_name = function_name.is_null(); 4312 bool should_infer_name = function_name.is_null();
4313 4313
4314 // We want a non-null handle as the function name. 4314 // We want a non-null handle as the function name.
4315 if (should_infer_name) { 4315 if (should_infer_name) {
4316 function_name = isolate()->factory()->empty_symbol(); 4316 function_name = isolate()->factory()->empty_string();
4317 } 4317 }
4318 4318
4319 int num_parameters = 0; 4319 int num_parameters = 0;
4320 // Function declarations are function scoped in normal mode, so they are 4320 // Function declarations are function scoped in normal mode, so they are
4321 // hoisted. In harmony block scoping mode they are block scoped, so they 4321 // hoisted. In harmony block scoping mode they are block scoped, so they
4322 // are not hoisted. 4322 // are not hoisted.
4323 Scope* scope = (type == FunctionLiteral::DECLARATION && !is_extended_mode()) 4323 Scope* scope = (type == FunctionLiteral::DECLARATION && !is_extended_mode())
4324 ? NewScope(top_scope_->DeclarationScope(), FUNCTION_SCOPE) 4324 ? NewScope(top_scope_->DeclarationScope(), FUNCTION_SCOPE)
4325 : NewScope(top_scope_, FUNCTION_SCOPE); 4325 : NewScope(top_scope_, FUNCTION_SCOPE);
4326 ZoneList<Statement*>* body = NULL; 4326 ZoneList<Statement*>* body = NULL;
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
4612 Expect(Token::MOD, CHECK_OK); 4612 Expect(Token::MOD, CHECK_OK);
4613 Handle<String> name = ParseIdentifier(CHECK_OK); 4613 Handle<String> name = ParseIdentifier(CHECK_OK);
4614 ZoneList<Expression*>* args = ParseArguments(CHECK_OK); 4614 ZoneList<Expression*>* args = ParseArguments(CHECK_OK);
4615 4615
4616 if (extension_ != NULL) { 4616 if (extension_ != NULL) {
4617 // The extension structures are only accessible while parsing the 4617 // The extension structures are only accessible while parsing the
4618 // very first time not when reparsing because of lazy compilation. 4618 // very first time not when reparsing because of lazy compilation.
4619 top_scope_->DeclarationScope()->ForceEagerCompilation(); 4619 top_scope_->DeclarationScope()->ForceEagerCompilation();
4620 } 4620 }
4621 4621
4622 const Runtime::Function* function = Runtime::FunctionForSymbol(name); 4622 const Runtime::Function* function = Runtime::FunctionForName(name);
4623 4623
4624 // Check for built-in IS_VAR macro. 4624 // Check for built-in IS_VAR macro.
4625 if (function != NULL && 4625 if (function != NULL &&
4626 function->intrinsic_type == Runtime::RUNTIME && 4626 function->intrinsic_type == Runtime::RUNTIME &&
4627 function->function_id == Runtime::kIS_VAR) { 4627 function->function_id == Runtime::kIS_VAR) {
4628 // %IS_VAR(x) evaluates to x if x is a variable, 4628 // %IS_VAR(x) evaluates to x if x is a variable,
4629 // leads to a parse error otherwise. Could be implemented as an 4629 // leads to a parse error otherwise. Could be implemented as an
4630 // inline function %_IS_VAR(x) to eliminate this special case. 4630 // inline function %_IS_VAR(x) to eliminate this special case.
4631 if (args->length() == 1 && args->at(0)->AsVariableProxy() != NULL) { 4631 if (args->length() == 1 && args->at(0)->AsVariableProxy() != NULL) {
4632 return args->at(0); 4632 return args->at(0);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
4899 // target stack has been used from the top of the target stack. Add 4899 // target stack has been used from the top of the target stack. Add
4900 // the break target to any TargetCollectors passed on the stack. 4900 // the break target to any TargetCollectors passed on the stack.
4901 for (Target* t = target_stack_; t != stop; t = t->previous()) { 4901 for (Target* t = target_stack_; t != stop; t = t->previous()) {
4902 TargetCollector* collector = t->node()->AsTargetCollector(); 4902 TargetCollector* collector = t->node()->AsTargetCollector();
4903 if (collector != NULL) collector->AddTarget(target, zone()); 4903 if (collector != NULL) collector->AddTarget(target, zone());
4904 } 4904 }
4905 } 4905 }
4906 4906
4907 4907
4908 Expression* Parser::NewThrowReferenceError(Handle<String> type) { 4908 Expression* Parser::NewThrowReferenceError(Handle<String> type) {
4909 return NewThrowError(isolate()->factory()->MakeReferenceError_symbol(), 4909 return NewThrowError(isolate()->factory()->MakeReferenceError_string(),
4910 type, HandleVector<Object>(NULL, 0)); 4910 type, HandleVector<Object>(NULL, 0));
4911 } 4911 }
4912 4912
4913 4913
4914 Expression* Parser::NewThrowSyntaxError(Handle<String> type, 4914 Expression* Parser::NewThrowSyntaxError(Handle<String> type,
4915 Handle<Object> first) { 4915 Handle<Object> first) {
4916 int argc = first.is_null() ? 0 : 1; 4916 int argc = first.is_null() ? 0 : 1;
4917 Vector< Handle<Object> > arguments = HandleVector<Object>(&first, argc); 4917 Vector< Handle<Object> > arguments = HandleVector<Object>(&first, argc);
4918 return NewThrowError( 4918 return NewThrowError(
4919 isolate()->factory()->MakeSyntaxError_symbol(), type, arguments); 4919 isolate()->factory()->MakeSyntaxError_string(), type, arguments);
4920 } 4920 }
4921 4921
4922 4922
4923 Expression* Parser::NewThrowTypeError(Handle<String> type, 4923 Expression* Parser::NewThrowTypeError(Handle<String> type,
4924 Handle<Object> first, 4924 Handle<Object> first,
4925 Handle<Object> second) { 4925 Handle<Object> second) {
4926 ASSERT(!first.is_null() && !second.is_null()); 4926 ASSERT(!first.is_null() && !second.is_null());
4927 Handle<Object> elements[] = { first, second }; 4927 Handle<Object> elements[] = { first, second };
4928 Vector< Handle<Object> > arguments = 4928 Vector< Handle<Object> > arguments =
4929 HandleVector<Object>(elements, ARRAY_SIZE(elements)); 4929 HandleVector<Object>(elements, ARRAY_SIZE(elements));
4930 return NewThrowError( 4930 return NewThrowError(
4931 isolate()->factory()->MakeTypeError_symbol(), type, arguments); 4931 isolate()->factory()->MakeTypeError_string(), type, arguments);
4932 } 4932 }
4933 4933
4934 4934
4935 Expression* Parser::NewThrowError(Handle<String> constructor, 4935 Expression* Parser::NewThrowError(Handle<String> constructor,
4936 Handle<String> type, 4936 Handle<String> type,
4937 Vector< Handle<Object> > arguments) { 4937 Vector< Handle<Object> > arguments) {
4938 int argc = arguments.length(); 4938 int argc = arguments.length();
4939 Handle<FixedArray> elements = isolate()->factory()->NewFixedArray(argc, 4939 Handle<FixedArray> elements = isolate()->factory()->NewFixedArray(argc,
4940 TENURED); 4940 TENURED);
4941 for (int i = 0; i < argc; i++) { 4941 for (int i = 0; i < argc; i++) {
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after
5932 ASSERT(info->isolate()->has_pending_exception()); 5932 ASSERT(info->isolate()->has_pending_exception());
5933 } else { 5933 } else {
5934 result = parser.ParseProgram(); 5934 result = parser.ParseProgram();
5935 } 5935 }
5936 } 5936 }
5937 info->SetFunction(result); 5937 info->SetFunction(result);
5938 return (result != NULL); 5938 return (result != NULL);
5939 } 5939 }
5940 5940
5941 } } // namespace v8::internal 5941 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects-printer.cc ('k') | src/preparse-data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698