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

Side by Side Diff: src/parser.cc

Issue 300103005: Split StringLiteral from Literal. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: number literals Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mips/full-codegen-mips.cc ('k') | src/preparser.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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #include "api.h" 7 #include "api.h"
8 #include "ast.h" 8 #include "ast.h"
9 #include "bootstrapper.h" 9 #include "bootstrapper.h"
10 #include "char-predicates-inl.h" 10 #include "char-predicates-inl.h"
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 417
418 bool ParserTraits::IsIdentifier(Expression* expression) { 418 bool ParserTraits::IsIdentifier(Expression* expression) {
419 VariableProxy* operand = expression->AsVariableProxy(); 419 VariableProxy* operand = expression->AsVariableProxy();
420 return operand != NULL && !operand->is_this(); 420 return operand != NULL && !operand->is_this();
421 } 421 }
422 422
423 423
424 void ParserTraits::PushPropertyName(FuncNameInferrer* fni, 424 void ParserTraits::PushPropertyName(FuncNameInferrer* fni,
425 Expression* expression) { 425 Expression* expression) {
426 if (expression->IsPropertyName()) { 426 if (expression->IsPropertyName()) {
427 fni->PushLiteralName(expression->AsLiteral()->AsPropertyName()); 427 fni->PushLiteralName(expression->AsStringLiteral()->AsPropertyName());
428 } else { 428 } else {
429 fni->PushLiteralName( 429 fni->PushLiteralName(
430 parser_->isolate()->factory()->anonymous_function_string()); 430 parser_->isolate()->factory()->anonymous_function_string());
431 } 431 }
432 } 432 }
433 433
434 434
435 void ParserTraits::CheckAssigningFunctionLiteralToProperty(Expression* left, 435 void ParserTraits::CheckAssigningFunctionLiteralToProperty(Expression* left,
436 Expression* right) { 436 Expression* right) {
437 ASSERT(left != NULL); 437 ASSERT(left != NULL);
(...skipping 19 matching lines...) Expand all
457 ? expression->AsVariableProxy() 457 ? expression->AsVariableProxy()
458 : NULL; 458 : NULL;
459 if (proxy != NULL) proxy->MarkAsLValue(); 459 if (proxy != NULL) proxy->MarkAsLValue();
460 return expression; 460 return expression;
461 } 461 }
462 462
463 463
464 bool ParserTraits::ShortcutNumericLiteralBinaryExpression( 464 bool ParserTraits::ShortcutNumericLiteralBinaryExpression(
465 Expression** x, Expression* y, Token::Value op, int pos, 465 Expression** x, Expression* y, Token::Value op, int pos,
466 AstNodeFactory<AstConstructionVisitor>* factory) { 466 AstNodeFactory<AstConstructionVisitor>* factory) {
467 if ((*x)->AsLiteral() && (*x)->AsLiteral()->value()->IsNumber() && 467 if ((*x)->AsNumberLiteral() && y->AsNumberLiteral()) {
468 y->AsLiteral() && y->AsLiteral()->value()->IsNumber()) { 468 double x_val = (*x)->AsNumberLiteral()->number();
469 double x_val = (*x)->AsLiteral()->value()->Number(); 469 double y_val = y->AsNumberLiteral()->number();
470 double y_val = y->AsLiteral()->value()->Number();
471 switch (op) { 470 switch (op) {
472 case Token::ADD: 471 case Token::ADD:
473 *x = factory->NewNumberLiteral(x_val + y_val, pos); 472 *x = factory->NewNumberLiteral(x_val + y_val, pos);
474 return true; 473 return true;
475 case Token::SUB: 474 case Token::SUB:
476 *x = factory->NewNumberLiteral(x_val - y_val, pos); 475 *x = factory->NewNumberLiteral(x_val - y_val, pos);
477 return true; 476 return true;
478 case Token::MUL: 477 case Token::MUL:
479 *x = factory->NewNumberLiteral(x_val * y_val, pos); 478 *x = factory->NewNumberLiteral(x_val * y_val, pos);
480 return true; 479 return true;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 } 517 }
519 } 518 }
520 return false; 519 return false;
521 } 520 }
522 521
523 522
524 Expression* ParserTraits::BuildUnaryExpression( 523 Expression* ParserTraits::BuildUnaryExpression(
525 Expression* expression, Token::Value op, int pos, 524 Expression* expression, Token::Value op, int pos,
526 AstNodeFactory<AstConstructionVisitor>* factory) { 525 AstNodeFactory<AstConstructionVisitor>* factory) {
527 ASSERT(expression != NULL); 526 ASSERT(expression != NULL);
528 if (expression->AsLiteral() != NULL) { 527 if (expression->AsAnyLiteral() != NULL) {
529 Handle<Object> literal = expression->AsLiteral()->value(); 528 Handle<Object> literal = expression->AsAnyLiteral()->value();
530 if (op == Token::NOT) { 529 if (op == Token::NOT) {
531 // Convert the literal to a boolean condition and negate it. 530 // Convert the literal to a boolean condition and negate it.
532 bool condition = literal->BooleanValue(); 531 bool condition = literal->BooleanValue();
533 Handle<Object> result = 532 Handle<Object> result =
534 parser_->isolate()->factory()->ToBoolean(!condition); 533 parser_->isolate()->factory()->ToBoolean(!condition);
535 return factory->NewLiteral(result, pos); 534 return factory->NewLiteral(result, pos);
536 } else if (literal->IsNumber()) { 535 } else if (literal->IsNumber()) {
537 // Compute some expressions involving only number literals. 536 // Compute some expressions involving only number literals.
538 double value = literal->Number(); 537 double value = literal->Number();
539 switch (op) { 538 switch (op) {
540 case Token::ADD: 539 case Token::ADD:
541 return expression; 540 return expression;
542 case Token::SUB: 541 case Token::SUB:
543 return factory->NewNumberLiteral(-value, pos); 542 return factory->NewNumberLiteral(-value, pos);
544 case Token::BIT_NOT: 543 case Token::BIT_NOT:
545 return factory->NewNumberLiteral(~DoubleToInt32(value), pos); 544 return factory->NewNumberLiteral(~DoubleToInt32(value), pos);
546 default: 545 default:
547 break; 546 break;
548 } 547 }
549 } 548 }
550 } 549 }
550
551 // Desugar '+foo' => 'foo*1' 551 // Desugar '+foo' => 'foo*1'
552 if (op == Token::ADD) { 552 if (op == Token::ADD) {
553 return factory->NewBinaryOperation( 553 return factory->NewBinaryOperation(
554 Token::MUL, expression, factory->NewNumberLiteral(1, pos), pos); 554 Token::MUL, expression, factory->NewNumberLiteral(1, pos), pos);
555 } 555 }
556 // The same idea for '-foo' => 'foo*(-1)'. 556 // The same idea for '-foo' => 'foo*(-1)'.
557 if (op == Token::SUB) { 557 if (op == Token::SUB) {
558 return factory->NewBinaryOperation( 558 return factory->NewBinaryOperation(
559 Token::MUL, expression, factory->NewNumberLiteral(-1, pos), pos); 559 Token::MUL, expression, factory->NewNumberLiteral(-1, pos), pos);
560 } 560 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 Handle<Object> element = arguments[i]; 605 Handle<Object> element = arguments[i];
606 if (!element.is_null()) { 606 if (!element.is_null()) {
607 elements->set(i, *element); 607 elements->set(i, *element);
608 } 608 }
609 } 609 }
610 Handle<JSArray> array = 610 Handle<JSArray> array =
611 factory->NewJSArrayWithElements(elements, FAST_ELEMENTS, TENURED); 611 factory->NewJSArrayWithElements(elements, FAST_ELEMENTS, TENURED);
612 612
613 ZoneList<Expression*>* args = new(zone) ZoneList<Expression*>(2, zone); 613 ZoneList<Expression*>* args = new(zone) ZoneList<Expression*>(2, zone);
614 Handle<String> type = factory->InternalizeUtf8String(message); 614 Handle<String> type = factory->InternalizeUtf8String(message);
615 args->Add(parser_->factory()->NewLiteral(type, pos), zone); 615 args->Add(parser_->factory()->NewStringLiteral(type, pos), zone);
616 args->Add(parser_->factory()->NewLiteral(array, pos), zone); 616 args->Add(parser_->factory()->NewLiteral(array, pos), zone);
617 CallRuntime* call_constructor = 617 CallRuntime* call_constructor =
618 parser_->factory()->NewCallRuntime(constructor, NULL, args, pos); 618 parser_->factory()->NewCallRuntime(constructor, NULL, args, pos);
619 return parser_->factory()->NewThrow(call_constructor, pos); 619 return parser_->factory()->NewThrow(call_constructor, pos);
620 } 620 }
621 621
622 622
623 void ParserTraits::ReportMessageAt(Scanner::Location source_location, 623 void ParserTraits::ReportMessageAt(Scanner::Location source_location,
624 const char* message, 624 const char* message,
625 const char* arg, 625 const char* arg,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 Interface* interface = Interface::NewUnknown(parser_->zone()); 722 Interface* interface = Interface::NewUnknown(parser_->zone());
723 return scope->NewUnresolved(factory, name, interface, pos); 723 return scope->NewUnresolved(factory, name, interface, pos);
724 } 724 }
725 725
726 726
727 Expression* ParserTraits::ExpressionFromString( 727 Expression* ParserTraits::ExpressionFromString(
728 int pos, Scanner* scanner, 728 int pos, Scanner* scanner,
729 AstNodeFactory<AstConstructionVisitor>* factory) { 729 AstNodeFactory<AstConstructionVisitor>* factory) {
730 Handle<String> symbol = GetSymbol(scanner); 730 Handle<String> symbol = GetSymbol(scanner);
731 if (parser_->fni_ != NULL) parser_->fni_->PushLiteralName(symbol); 731 if (parser_->fni_ != NULL) parser_->fni_->PushLiteralName(symbol);
732 return factory->NewLiteral(symbol, pos); 732 return factory->NewStringLiteral(symbol, pos);
733 } 733 }
734 734
735 735
736 Literal* ParserTraits::GetLiteralTheHole( 736 Literal* ParserTraits::GetLiteralTheHole(
737 int position, AstNodeFactory<AstConstructionVisitor>* factory) { 737 int position, AstNodeFactory<AstConstructionVisitor>* factory) {
738 return factory->NewLiteral(parser_->isolate()->factory()->the_hole_value(), 738 return factory->NewLiteral(parser_->isolate()->factory()->the_hole_value(),
739 RelocInfo::kNoPosition); 739 RelocInfo::kNoPosition);
740 } 740 }
741 741
742 742
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 stat = ParseBlockElement(NULL, CHECK_OK); 1068 stat = ParseBlockElement(NULL, CHECK_OK);
1069 } 1069 }
1070 if (stat == NULL || stat->IsEmpty()) { 1070 if (stat == NULL || stat->IsEmpty()) {
1071 directive_prologue = false; // End of directive prologue. 1071 directive_prologue = false; // End of directive prologue.
1072 continue; 1072 continue;
1073 } 1073 }
1074 1074
1075 if (directive_prologue) { 1075 if (directive_prologue) {
1076 // A shot at a directive. 1076 // A shot at a directive.
1077 ExpressionStatement* e_stat; 1077 ExpressionStatement* e_stat;
1078 Literal* literal; 1078 StringLiteral* literal;
1079 // Still processing directive prologue? 1079 // Still processing directive prologue?
1080 if ((e_stat = stat->AsExpressionStatement()) != NULL && 1080 if ((e_stat = stat->AsExpressionStatement()) != NULL &&
1081 (literal = e_stat->expression()->AsLiteral()) != NULL && 1081 (literal = e_stat->expression()->AsStringLiteral()) != NULL) {
1082 literal->value()->IsString()) { 1082 Handle<String> directive = literal->string();
1083 Handle<String> directive = Handle<String>::cast(literal->value());
1084 1083
1085 // Check "use strict" directive (ES5 14.1). 1084 // Check "use strict" directive (ES5 14.1).
1086 if (strict_mode() == SLOPPY && 1085 if (strict_mode() == SLOPPY &&
1087 String::Equals(isolate()->factory()->use_strict_string(), 1086 String::Equals(isolate()->factory()->use_strict_string(),
1088 directive) && 1087 directive) &&
1089 token_loc.end_pos - token_loc.beg_pos == 1088 token_loc.end_pos - token_loc.beg_pos ==
1090 isolate()->heap()->use_strict_string()->length() + 2) { 1089 isolate()->heap()->use_strict_string()->length() + 2) {
1091 // TODO(mstarzinger): Global strict eval calls, need their own scope 1090 // TODO(mstarzinger): Global strict eval calls, need their own scope
1092 // as specified in ES5 10.4.2(3). The correct fix would be to always 1091 // as specified in ES5 10.4.2(3). The correct fix would be to always
1093 // add this scope in DoParseProgram(), but that requires adaptations 1092 // add this scope in DoParseProgram(), but that requires adaptations
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after
2187 // properties in the prototype chain, but only after the variable 2186 // properties in the prototype chain, but only after the variable
2188 // declaration statement has been executed. This is important in 2187 // declaration statement has been executed. This is important in
2189 // browsers where the global object (window) has lots of 2188 // browsers where the global object (window) has lots of
2190 // properties defined in prototype objects. 2189 // properties defined in prototype objects.
2191 if (initialization_scope->is_global_scope() && 2190 if (initialization_scope->is_global_scope() &&
2192 !IsLexicalVariableMode(mode)) { 2191 !IsLexicalVariableMode(mode)) {
2193 // Compute the arguments for the runtime call. 2192 // Compute the arguments for the runtime call.
2194 ZoneList<Expression*>* arguments = 2193 ZoneList<Expression*>* arguments =
2195 new(zone()) ZoneList<Expression*>(3, zone()); 2194 new(zone()) ZoneList<Expression*>(3, zone());
2196 // We have at least 1 parameter. 2195 // We have at least 1 parameter.
2197 arguments->Add(factory()->NewLiteral(name, pos), zone()); 2196 arguments->Add(factory()->NewStringLiteral(name, pos), zone());
2198 CallRuntime* initialize; 2197 CallRuntime* initialize;
2199 2198
2200 if (is_const) { 2199 if (is_const) {
2201 arguments->Add(value, zone()); 2200 arguments->Add(value, zone());
2202 value = NULL; // zap the value to avoid the unnecessary assignment 2201 value = NULL; // zap the value to avoid the unnecessary assignment
2203 2202
2204 // Construct the call to Runtime_InitializeConstGlobal 2203 // Construct the call to Runtime_InitializeConstGlobal
2205 // and add it to the initialization statement block. 2204 // and add it to the initialization statement block.
2206 // Note that the function does different things depending on 2205 // Note that the function does different things depending on
2207 // the number of arguments (1 or 2). 2206 // the number of arguments (1 or 2).
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
2789 // var iterator = iterable; 2788 // var iterator = iterable;
2790 { 2789 {
2791 Expression* iterator_proxy = factory()->NewVariableProxy(iterator); 2790 Expression* iterator_proxy = factory()->NewVariableProxy(iterator);
2792 assign_iterator = factory()->NewAssignment( 2791 assign_iterator = factory()->NewAssignment(
2793 Token::ASSIGN, iterator_proxy, subject, RelocInfo::kNoPosition); 2792 Token::ASSIGN, iterator_proxy, subject, RelocInfo::kNoPosition);
2794 } 2793 }
2795 2794
2796 // var result = iterator.next(); 2795 // var result = iterator.next();
2797 { 2796 {
2798 Expression* iterator_proxy = factory()->NewVariableProxy(iterator); 2797 Expression* iterator_proxy = factory()->NewVariableProxy(iterator);
2799 Expression* next_literal = factory()->NewLiteral( 2798 Expression* next_literal = factory()->NewStringLiteral(
2800 heap_factory->next_string(), RelocInfo::kNoPosition); 2799 heap_factory->next_string(), RelocInfo::kNoPosition);
2801 Expression* next_property = factory()->NewProperty( 2800 Expression* next_property = factory()->NewProperty(
2802 iterator_proxy, next_literal, RelocInfo::kNoPosition); 2801 iterator_proxy, next_literal, RelocInfo::kNoPosition);
2803 ZoneList<Expression*>* next_arguments = 2802 ZoneList<Expression*>* next_arguments =
2804 new(zone()) ZoneList<Expression*>(0, zone()); 2803 new(zone()) ZoneList<Expression*>(0, zone());
2805 Expression* next_call = factory()->NewCall( 2804 Expression* next_call = factory()->NewCall(
2806 next_property, next_arguments, RelocInfo::kNoPosition); 2805 next_property, next_arguments, RelocInfo::kNoPosition);
2807 Expression* result_proxy = factory()->NewVariableProxy(result); 2806 Expression* result_proxy = factory()->NewVariableProxy(result);
2808 next_result = factory()->NewAssignment( 2807 next_result = factory()->NewAssignment(
2809 Token::ASSIGN, result_proxy, next_call, RelocInfo::kNoPosition); 2808 Token::ASSIGN, result_proxy, next_call, RelocInfo::kNoPosition);
2810 } 2809 }
2811 2810
2812 // result.done 2811 // result.done
2813 { 2812 {
2814 Expression* done_literal = factory()->NewLiteral( 2813 Expression* done_literal = factory()->NewStringLiteral(
2815 heap_factory->done_string(), RelocInfo::kNoPosition); 2814 heap_factory->done_string(), RelocInfo::kNoPosition);
2816 Expression* result_proxy = factory()->NewVariableProxy(result); 2815 Expression* result_proxy = factory()->NewVariableProxy(result);
2817 result_done = factory()->NewProperty( 2816 result_done = factory()->NewProperty(
2818 result_proxy, done_literal, RelocInfo::kNoPosition); 2817 result_proxy, done_literal, RelocInfo::kNoPosition);
2819 } 2818 }
2820 2819
2821 // each = result.value 2820 // each = result.value
2822 { 2821 {
2823 Expression* value_literal = factory()->NewLiteral( 2822 Expression* value_literal = factory()->NewStringLiteral(
2824 heap_factory->value_string(), RelocInfo::kNoPosition); 2823 heap_factory->value_string(), RelocInfo::kNoPosition);
2825 Expression* result_proxy = factory()->NewVariableProxy(result); 2824 Expression* result_proxy = factory()->NewVariableProxy(result);
2826 Expression* result_value = factory()->NewProperty( 2825 Expression* result_value = factory()->NewProperty(
2827 result_proxy, value_literal, RelocInfo::kNoPosition); 2826 result_proxy, value_literal, RelocInfo::kNoPosition);
2828 assign_each = factory()->NewAssignment( 2827 assign_each = factory()->NewAssignment(
2829 Token::ASSIGN, each, result_value, RelocInfo::kNoPosition); 2828 Token::ASSIGN, each, result_value, RelocInfo::kNoPosition);
2830 } 2829 }
2831 2830
2832 for_of->Initialize(each, subject, body, 2831 for_of->Initialize(each, subject, body,
2833 assign_iterator, next_result, result_done, assign_each); 2832 assign_iterator, next_result, result_done, assign_each);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2898 Statement* assignment_statement = factory()->NewExpressionStatement( 2897 Statement* assignment_statement = factory()->NewExpressionStatement(
2899 assignment, RelocInfo::kNoPosition); 2898 assignment, RelocInfo::kNoPosition);
2900 outer_block->AddStatement(assignment_statement, zone()); 2899 outer_block->AddStatement(assignment_statement, zone());
2901 temps.Add(temp, zone()); 2900 temps.Add(temp, zone());
2902 } 2901 }
2903 2902
2904 Variable* flag = scope_->DeclarationScope()->NewTemporary(temp_name); 2903 Variable* flag = scope_->DeclarationScope()->NewTemporary(temp_name);
2905 // Make statement: flag = 1. 2904 // Make statement: flag = 1.
2906 { 2905 {
2907 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); 2906 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag);
2908 Expression* const1 = factory()->NewLiteral(smi1, RelocInfo::kNoPosition); 2907 Expression* const1 =
2908 factory()->NewNumberLiteral(smi1, RelocInfo::kNoPosition);
2909 Assignment* assignment = factory()->NewAssignment( 2909 Assignment* assignment = factory()->NewAssignment(
2910 Token::ASSIGN, flag_proxy, const1, RelocInfo::kNoPosition); 2910 Token::ASSIGN, flag_proxy, const1, RelocInfo::kNoPosition);
2911 Statement* assignment_statement = factory()->NewExpressionStatement( 2911 Statement* assignment_statement = factory()->NewExpressionStatement(
2912 assignment, RelocInfo::kNoPosition); 2912 assignment, RelocInfo::kNoPosition);
2913 outer_block->AddStatement(assignment_statement, zone()); 2913 outer_block->AddStatement(assignment_statement, zone());
2914 } 2914 }
2915 2915
2916 outer_block->AddStatement(loop, zone()); 2916 outer_block->AddStatement(loop, zone());
2917 outer_block->set_scope(for_scope); 2917 outer_block->set_scope(for_scope);
2918 scope_ = inner_scope; 2918 scope_ = inner_scope;
(...skipping 19 matching lines...) Expand all
2938 assignment, pos); 2938 assignment, pos);
2939 proxy->var()->set_initializer_position(pos); 2939 proxy->var()->set_initializer_position(pos);
2940 inner_block->AddStatement(assignment_statement, zone()); 2940 inner_block->AddStatement(assignment_statement, zone());
2941 } 2941 }
2942 2942
2943 // Make statement: if (flag == 1) { flag = 0; } else { next; }. 2943 // Make statement: if (flag == 1) { flag = 0; } else { next; }.
2944 { 2944 {
2945 Expression* compare = NULL; 2945 Expression* compare = NULL;
2946 // Make compare expresion: flag == 1. 2946 // Make compare expresion: flag == 1.
2947 { 2947 {
2948 Expression* const1 = factory()->NewLiteral(smi1, RelocInfo::kNoPosition); 2948 Expression* const1 =
2949 factory()->NewNumberLiteral(smi1, RelocInfo::kNoPosition);
2949 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); 2950 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag);
2950 compare = factory()->NewCompareOperation( 2951 compare = factory()->NewCompareOperation(
2951 Token::EQ, flag_proxy, const1, RelocInfo::kNoPosition); 2952 Token::EQ, flag_proxy, const1, RelocInfo::kNoPosition);
2952 } 2953 }
2953 Statement* clear_flag = NULL; 2954 Statement* clear_flag = NULL;
2954 // Make statement: flag = 0. 2955 // Make statement: flag = 0.
2955 { 2956 {
2956 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); 2957 VariableProxy* flag_proxy = factory()->NewVariableProxy(flag);
2957 Expression* const0 = factory()->NewLiteral(smi0, RelocInfo::kNoPosition); 2958 Expression* const0 =
2959 factory()->NewNumberLiteral(smi0, RelocInfo::kNoPosition);
2958 Assignment* assignment = factory()->NewAssignment( 2960 Assignment* assignment = factory()->NewAssignment(
2959 Token::ASSIGN, flag_proxy, const0, RelocInfo::kNoPosition); 2961 Token::ASSIGN, flag_proxy, const0, RelocInfo::kNoPosition);
2960 clear_flag = factory()->NewExpressionStatement(assignment, pos); 2962 clear_flag = factory()->NewExpressionStatement(assignment, pos);
2961 } 2963 }
2962 Statement* clear_flag_or_next = factory()->NewIfStatement( 2964 Statement* clear_flag_or_next = factory()->NewIfStatement(
2963 compare, clear_flag, next, RelocInfo::kNoPosition); 2965 compare, clear_flag, next, RelocInfo::kNoPosition);
2964 inner_block->AddStatement(clear_flag_or_next, zone()); 2966 inner_block->AddStatement(clear_flag_or_next, zone());
2965 } 2967 }
2966 2968
2967 2969
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
3217 } 3219 }
3218 3220
3219 3221
3220 void Parser::ReportInvalidCachedData(Handle<String> name, bool* ok) { 3222 void Parser::ReportInvalidCachedData(Handle<String> name, bool* ok) {
3221 ParserTraits::ReportMessage("invalid_cached_data_function", name); 3223 ParserTraits::ReportMessage("invalid_cached_data_function", name);
3222 *ok = false; 3224 *ok = false;
3223 } 3225 }
3224 3226
3225 3227
3226 bool CompileTimeValue::IsCompileTimeValue(Expression* expression) { 3228 bool CompileTimeValue::IsCompileTimeValue(Expression* expression) {
3227 if (expression->AsLiteral() != NULL) return true; 3229 if (expression->AsAnyLiteral() != NULL) {
3230 return true;
3231 }
3228 MaterializedLiteral* lit = expression->AsMaterializedLiteral(); 3232 MaterializedLiteral* lit = expression->AsMaterializedLiteral();
3229 return lit != NULL && lit->is_simple(); 3233 return lit != NULL && lit->is_simple();
3230 } 3234 }
3231 3235
3232 3236
3233 Handle<FixedArray> CompileTimeValue::GetValue(Isolate* isolate, 3237 Handle<FixedArray> CompileTimeValue::GetValue(Isolate* isolate,
3234 Expression* expression) { 3238 Expression* expression) {
3235 Factory* factory = isolate->factory(); 3239 Factory* factory = isolate->factory();
3236 ASSERT(IsCompileTimeValue(expression)); 3240 ASSERT(IsCompileTimeValue(expression));
3237 Handle<FixedArray> result = factory->NewFixedArray(2, TENURED); 3241 Handle<FixedArray> result = factory->NewFixedArray(2, TENURED);
(...skipping 1543 matching lines...) Expand 10 before | Expand all | Expand 10 after
4781 ASSERT(info()->isolate()->has_pending_exception()); 4785 ASSERT(info()->isolate()->has_pending_exception());
4782 } else { 4786 } else {
4783 result = ParseProgram(); 4787 result = ParseProgram();
4784 } 4788 }
4785 } 4789 }
4786 info()->SetFunction(result); 4790 info()->SetFunction(result);
4787 return (result != NULL); 4791 return (result != NULL);
4788 } 4792 }
4789 4793
4790 } } // namespace v8::internal 4794 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/mips/full-codegen-mips.cc ('k') | src/preparser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698