| OLD | NEW |
| 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 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 result = DoParseProgram(info(), source); | 593 result = DoParseProgram(info(), source); |
| 594 } | 594 } |
| 595 | 595 |
| 596 if (FLAG_trace_parse && result != NULL) { | 596 if (FLAG_trace_parse && result != NULL) { |
| 597 double ms = timer.Elapsed().InMillisecondsF(); | 597 double ms = timer.Elapsed().InMillisecondsF(); |
| 598 if (info()->is_eval()) { | 598 if (info()->is_eval()) { |
| 599 PrintF("[parsing eval"); | 599 PrintF("[parsing eval"); |
| 600 } else if (info()->script()->name()->IsString()) { | 600 } else if (info()->script()->name()->IsString()) { |
| 601 String* name = String::cast(info()->script()->name()); | 601 String* name = String::cast(info()->script()->name()); |
| 602 SmartArrayPointer<char> name_chars = name->ToCString(); | 602 SmartArrayPointer<char> name_chars = name->ToCString(); |
| 603 PrintF("[parsing script: %s", *name_chars); | 603 PrintF("[parsing script: %s", name_chars.get()); |
| 604 } else { | 604 } else { |
| 605 PrintF("[parsing script"); | 605 PrintF("[parsing script"); |
| 606 } | 606 } |
| 607 PrintF(" - took %0.3f ms]\n", ms); | 607 PrintF(" - took %0.3f ms]\n", ms); |
| 608 } | 608 } |
| 609 return result; | 609 return result; |
| 610 } | 610 } |
| 611 | 611 |
| 612 | 612 |
| 613 FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, | 613 FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 } else { | 722 } else { |
| 723 GenericStringUtf16CharacterStream stream(source, | 723 GenericStringUtf16CharacterStream stream(source, |
| 724 shared_info->start_position(), | 724 shared_info->start_position(), |
| 725 shared_info->end_position()); | 725 shared_info->end_position()); |
| 726 result = ParseLazy(&stream); | 726 result = ParseLazy(&stream); |
| 727 } | 727 } |
| 728 | 728 |
| 729 if (FLAG_trace_parse && result != NULL) { | 729 if (FLAG_trace_parse && result != NULL) { |
| 730 double ms = timer.Elapsed().InMillisecondsF(); | 730 double ms = timer.Elapsed().InMillisecondsF(); |
| 731 SmartArrayPointer<char> name_chars = result->debug_name()->ToCString(); | 731 SmartArrayPointer<char> name_chars = result->debug_name()->ToCString(); |
| 732 PrintF("[parsing function: %s - took %0.3f ms]\n", *name_chars, ms); | 732 PrintF("[parsing function: %s - took %0.3f ms]\n", name_chars.get(), ms); |
| 733 } | 733 } |
| 734 return result; | 734 return result; |
| 735 } | 735 } |
| 736 | 736 |
| 737 | 737 |
| 738 FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) { | 738 FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) { |
| 739 Handle<SharedFunctionInfo> shared_info = info()->shared_info(); | 739 Handle<SharedFunctionInfo> shared_info = info()->shared_info(); |
| 740 scanner_.Initialize(source); | 740 scanner_.Initialize(source); |
| 741 ASSERT(top_scope_ == NULL); | 741 ASSERT(top_scope_ == NULL); |
| 742 ASSERT(target_stack_ == NULL); | 742 ASSERT(target_stack_ == NULL); |
| (...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1514 // | 1514 // |
| 1515 // function () { let x; { var x; } } | 1515 // function () { let x; { var x; } } |
| 1516 // | 1516 // |
| 1517 // because the var declaration is hoisted to the function scope where 'x' | 1517 // because the var declaration is hoisted to the function scope where 'x' |
| 1518 // is already bound. | 1518 // is already bound. |
| 1519 ASSERT(IsDeclaredVariableMode(var->mode())); | 1519 ASSERT(IsDeclaredVariableMode(var->mode())); |
| 1520 if (is_extended_mode()) { | 1520 if (is_extended_mode()) { |
| 1521 // In harmony mode we treat re-declarations as early errors. See | 1521 // In harmony mode we treat re-declarations as early errors. See |
| 1522 // ES5 16 for a definition of early errors. | 1522 // ES5 16 for a definition of early errors. |
| 1523 SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS); | 1523 SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS); |
| 1524 const char* elms[2] = { "Variable", *c_string }; | 1524 const char* elms[2] = { "Variable", c_string.get() }; |
| 1525 Vector<const char*> args(elms, 2); | 1525 Vector<const char*> args(elms, 2); |
| 1526 ReportMessage("redeclaration", args); | 1526 ReportMessage("redeclaration", args); |
| 1527 *ok = false; | 1527 *ok = false; |
| 1528 return; | 1528 return; |
| 1529 } | 1529 } |
| 1530 Handle<String> message_string = | 1530 Handle<String> message_string = |
| 1531 isolate()->factory()->NewStringFromUtf8(CStrVector("Variable"), | 1531 isolate()->factory()->NewStringFromUtf8(CStrVector("Variable"), |
| 1532 TENURED); | 1532 TENURED); |
| 1533 Expression* expression = | 1533 Expression* expression = |
| 1534 NewThrowTypeError(isolate()->factory()->redeclaration_string(), | 1534 NewThrowTypeError(isolate()->factory()->redeclaration_string(), |
| (...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 // identifier. | 2138 // identifier. |
| 2139 VariableProxy* var = expr->AsVariableProxy(); | 2139 VariableProxy* var = expr->AsVariableProxy(); |
| 2140 Handle<String> label = var->name(); | 2140 Handle<String> label = var->name(); |
| 2141 // TODO(1240780): We don't check for redeclaration of labels | 2141 // TODO(1240780): We don't check for redeclaration of labels |
| 2142 // during preparsing since keeping track of the set of active | 2142 // during preparsing since keeping track of the set of active |
| 2143 // labels requires nontrivial changes to the way scopes are | 2143 // labels requires nontrivial changes to the way scopes are |
| 2144 // structured. However, these are probably changes we want to | 2144 // structured. However, these are probably changes we want to |
| 2145 // make later anyway so we should go back and fix this then. | 2145 // make later anyway so we should go back and fix this then. |
| 2146 if (ContainsLabel(labels, label) || TargetStackContainsLabel(label)) { | 2146 if (ContainsLabel(labels, label) || TargetStackContainsLabel(label)) { |
| 2147 SmartArrayPointer<char> c_string = label->ToCString(DISALLOW_NULLS); | 2147 SmartArrayPointer<char> c_string = label->ToCString(DISALLOW_NULLS); |
| 2148 const char* elms[2] = { "Label", *c_string }; | 2148 const char* elms[2] = { "Label", c_string.get() }; |
| 2149 Vector<const char*> args(elms, 2); | 2149 Vector<const char*> args(elms, 2); |
| 2150 ReportMessage("redeclaration", args); | 2150 ReportMessage("redeclaration", args); |
| 2151 *ok = false; | 2151 *ok = false; |
| 2152 return NULL; | 2152 return NULL; |
| 2153 } | 2153 } |
| 2154 if (labels == NULL) { | 2154 if (labels == NULL) { |
| 2155 labels = new(zone()) ZoneStringList(4, zone()); | 2155 labels = new(zone()) ZoneStringList(4, zone()); |
| 2156 } | 2156 } |
| 2157 labels->Add(label, zone()); | 2157 labels->Add(label, zone()); |
| 2158 // Remove the "ghost" variable that turned out to be a label | 2158 // Remove the "ghost" variable that turned out to be a label |
| (...skipping 1346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3505 default: | 3505 default: |
| 3506 const char* name = Token::String(token); | 3506 const char* name = Token::String(token); |
| 3507 ASSERT(name != NULL); | 3507 ASSERT(name != NULL); |
| 3508 ReportMessage("unexpected_token", Vector<const char*>(&name, 1)); | 3508 ReportMessage("unexpected_token", Vector<const char*>(&name, 1)); |
| 3509 } | 3509 } |
| 3510 } | 3510 } |
| 3511 | 3511 |
| 3512 | 3512 |
| 3513 void Parser::ReportInvalidPreparseData(Handle<String> name, bool* ok) { | 3513 void Parser::ReportInvalidPreparseData(Handle<String> name, bool* ok) { |
| 3514 SmartArrayPointer<char> name_string = name->ToCString(DISALLOW_NULLS); | 3514 SmartArrayPointer<char> name_string = name->ToCString(DISALLOW_NULLS); |
| 3515 const char* element[1] = { *name_string }; | 3515 const char* element[1] = { name_string.get() }; |
| 3516 ReportMessage("invalid_preparser_data", | 3516 ReportMessage("invalid_preparser_data", |
| 3517 Vector<const char*>(element, 1)); | 3517 Vector<const char*>(element, 1)); |
| 3518 *ok = false; | 3518 *ok = false; |
| 3519 } | 3519 } |
| 3520 | 3520 |
| 3521 | 3521 |
| 3522 Expression* Parser::ParsePrimaryExpression(bool* ok) { | 3522 Expression* Parser::ParsePrimaryExpression(bool* ok) { |
| 3523 // PrimaryExpression :: | 3523 // PrimaryExpression :: |
| 3524 // 'this' | 3524 // 'this' |
| 3525 // 'null' | 3525 // 'null' |
| (...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4594 } | 4594 } |
| 4595 | 4595 |
| 4596 | 4596 |
| 4597 void Parser::CheckConflictingVarDeclarations(Scope* scope, bool* ok) { | 4597 void Parser::CheckConflictingVarDeclarations(Scope* scope, bool* ok) { |
| 4598 Declaration* decl = scope->CheckConflictingVarDeclarations(); | 4598 Declaration* decl = scope->CheckConflictingVarDeclarations(); |
| 4599 if (decl != NULL) { | 4599 if (decl != NULL) { |
| 4600 // In harmony mode we treat conflicting variable bindinds as early | 4600 // In harmony mode we treat conflicting variable bindinds as early |
| 4601 // errors. See ES5 16 for a definition of early errors. | 4601 // errors. See ES5 16 for a definition of early errors. |
| 4602 Handle<String> name = decl->proxy()->name(); | 4602 Handle<String> name = decl->proxy()->name(); |
| 4603 SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS); | 4603 SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS); |
| 4604 const char* elms[2] = { "Variable", *c_string }; | 4604 const char* elms[2] = { "Variable", c_string.get() }; |
| 4605 Vector<const char*> args(elms, 2); | 4605 Vector<const char*> args(elms, 2); |
| 4606 int position = decl->proxy()->position(); | 4606 int position = decl->proxy()->position(); |
| 4607 Scanner::Location location = position == RelocInfo::kNoPosition | 4607 Scanner::Location location = position == RelocInfo::kNoPosition |
| 4608 ? Scanner::Location::invalid() | 4608 ? Scanner::Location::invalid() |
| 4609 : Scanner::Location(position, position + 1); | 4609 : Scanner::Location(position, position + 1); |
| 4610 ReportMessageAt(location, "redeclaration", args); | 4610 ReportMessageAt(location, "redeclaration", args); |
| 4611 *ok = false; | 4611 *ok = false; |
| 4612 } | 4612 } |
| 4613 } | 4613 } |
| 4614 | 4614 |
| (...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5686 ASSERT(info()->isolate()->has_pending_exception()); | 5686 ASSERT(info()->isolate()->has_pending_exception()); |
| 5687 } else { | 5687 } else { |
| 5688 result = ParseProgram(); | 5688 result = ParseProgram(); |
| 5689 } | 5689 } |
| 5690 } | 5690 } |
| 5691 info()->SetFunction(result); | 5691 info()->SetFunction(result); |
| 5692 return (result != NULL); | 5692 return (result != NULL); |
| 5693 } | 5693 } |
| 5694 | 5694 |
| 5695 } } // namespace v8::internal | 5695 } } // namespace v8::internal |
| OLD | NEW |