OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1207 i::Token::Value property, | 1207 i::Token::Value property, |
1208 int type, | 1208 int type, |
1209 bool* ok) { | 1209 bool* ok) { |
1210 int old_type; | 1210 int old_type; |
1211 if (property == i::Token::NUMBER) { | 1211 if (property == i::Token::NUMBER) { |
1212 old_type = finder->AddNumber(scanner_->literal_ascii_string(), type); | 1212 old_type = finder->AddNumber(scanner_->literal_ascii_string(), type); |
1213 } else if (scanner_->is_literal_ascii()) { | 1213 } else if (scanner_->is_literal_ascii()) { |
1214 old_type = finder->AddAsciiSymbol(scanner_->literal_ascii_string(), | 1214 old_type = finder->AddAsciiSymbol(scanner_->literal_ascii_string(), |
1215 type); | 1215 type); |
1216 } else { | 1216 } else { |
1217 old_type = finder->AddUC16Symbol(scanner_->literal_uc16_string(), type); | 1217 old_type = finder->AddUtf16Symbol(scanner_->literal_utf16_string(), type); |
1218 } | 1218 } |
1219 if (HasConflict(old_type, type)) { | 1219 if (HasConflict(old_type, type)) { |
1220 if (IsDataDataConflict(old_type, type)) { | 1220 if (IsDataDataConflict(old_type, type)) { |
1221 // Both are data properties. | 1221 // Both are data properties. |
1222 if (is_classic_mode()) return; | 1222 if (is_classic_mode()) return; |
1223 ReportMessageAt(scanner_->location(), | 1223 ReportMessageAt(scanner_->location(), |
1224 "strict_duplicate_property", NULL); | 1224 "strict_duplicate_property", NULL); |
1225 } else if (IsDataAccessorConflict(old_type, type)) { | 1225 } else if (IsDataAccessorConflict(old_type, type)) { |
1226 // Both a data and an accessor property with the same name. | 1226 // Both a data and an accessor property with the same name. |
1227 ReportMessageAt(scanner_->location(), | 1227 ReportMessageAt(scanner_->location(), |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1380 "strict_param_name", | 1380 "strict_param_name", |
1381 id, | 1381 id, |
1382 CHECK_OK); | 1382 CHECK_OK); |
1383 } | 1383 } |
1384 int prev_value; | 1384 int prev_value; |
1385 if (scanner_->is_literal_ascii()) { | 1385 if (scanner_->is_literal_ascii()) { |
1386 prev_value = | 1386 prev_value = |
1387 duplicate_finder.AddAsciiSymbol(scanner_->literal_ascii_string(), 1); | 1387 duplicate_finder.AddAsciiSymbol(scanner_->literal_ascii_string(), 1); |
1388 } else { | 1388 } else { |
1389 prev_value = | 1389 prev_value = |
1390 duplicate_finder.AddUC16Symbol(scanner_->literal_uc16_string(), 1); | 1390 duplicate_finder.AddUtf16Symbol(scanner_->literal_utf16_string(), 1); |
1391 } | 1391 } |
1392 | 1392 |
1393 if (prev_value != 0) { | 1393 if (prev_value != 0) { |
1394 SetStrictModeViolation(scanner_->location(), | 1394 SetStrictModeViolation(scanner_->location(), |
1395 "strict_param_dupe", | 1395 "strict_param_dupe", |
1396 CHECK_OK); | 1396 CHECK_OK); |
1397 } | 1397 } |
1398 done = (peek() == i::Token::RPAREN); | 1398 done = (peek() == i::Token::RPAREN); |
1399 if (!done) { | 1399 if (!done) { |
1400 Expect(i::Token::COMMA, CHECK_OK); | 1400 Expect(i::Token::COMMA, CHECK_OK); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 } | 1478 } |
1479 Expect(i::Token::SEMICOLON, ok); | 1479 Expect(i::Token::SEMICOLON, ok); |
1480 } | 1480 } |
1481 | 1481 |
1482 | 1482 |
1483 void PreParser::LogSymbol() { | 1483 void PreParser::LogSymbol() { |
1484 int identifier_pos = scanner_->location().beg_pos; | 1484 int identifier_pos = scanner_->location().beg_pos; |
1485 if (scanner_->is_literal_ascii()) { | 1485 if (scanner_->is_literal_ascii()) { |
1486 log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string()); | 1486 log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string()); |
1487 } else { | 1487 } else { |
1488 log_->LogUC16Symbol(identifier_pos, scanner_->literal_uc16_string()); | 1488 log_->LogUtf16Symbol(identifier_pos, scanner_->literal_utf16_string()); |
1489 } | 1489 } |
1490 } | 1490 } |
1491 | 1491 |
1492 | 1492 |
1493 PreParser::Expression PreParser::GetStringSymbol() { | 1493 PreParser::Expression PreParser::GetStringSymbol() { |
1494 const int kUseStrictLength = 10; | 1494 const int kUseStrictLength = 10; |
1495 const char* kUseStrictChars = "use strict"; | 1495 const char* kUseStrictChars = "use strict"; |
1496 LogSymbol(); | 1496 LogSymbol(); |
1497 if (scanner_->is_literal_ascii() && | 1497 if (scanner_->is_literal_ascii() && |
1498 scanner_->literal_length() == kUseStrictLength && | 1498 scanner_->literal_length() == kUseStrictLength && |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1650 return next == i::Token::IDENTIFIER || | 1650 return next == i::Token::IDENTIFIER || |
1651 next == i::Token::FUTURE_RESERVED_WORD || | 1651 next == i::Token::FUTURE_RESERVED_WORD || |
1652 next == i::Token::FUTURE_STRICT_RESERVED_WORD; | 1652 next == i::Token::FUTURE_STRICT_RESERVED_WORD; |
1653 } | 1653 } |
1654 | 1654 |
1655 | 1655 |
1656 int DuplicateFinder::AddAsciiSymbol(i::Vector<const char> key, int value) { | 1656 int DuplicateFinder::AddAsciiSymbol(i::Vector<const char> key, int value) { |
1657 return AddSymbol(i::Vector<const byte>::cast(key), true, value); | 1657 return AddSymbol(i::Vector<const byte>::cast(key), true, value); |
1658 } | 1658 } |
1659 | 1659 |
1660 int DuplicateFinder::AddUC16Symbol(i::Vector<const uint16_t> key, int value) { | 1660 int DuplicateFinder::AddUtf16Symbol(i::Vector<const uint16_t> key, int value) { |
1661 return AddSymbol(i::Vector<const byte>::cast(key), false, value); | 1661 return AddSymbol(i::Vector<const byte>::cast(key), false, value); |
1662 } | 1662 } |
1663 | 1663 |
1664 int DuplicateFinder::AddSymbol(i::Vector<const byte> key, | 1664 int DuplicateFinder::AddSymbol(i::Vector<const byte> key, |
1665 bool is_ascii, | 1665 bool is_ascii, |
1666 int value) { | 1666 int value) { |
1667 uint32_t hash = Hash(key, is_ascii); | 1667 uint32_t hash = Hash(key, is_ascii); |
1668 byte* encoding = BackupKey(key, is_ascii); | 1668 byte* encoding = BackupKey(key, is_ascii); |
1669 i::HashMap::Entry* entry = map_.Lookup(encoding, hash, true); | 1669 i::HashMap::Entry* entry = map_.Lookup(encoding, hash, true); |
1670 int old_value = static_cast<int>(reinterpret_cast<intptr_t>(entry->value)); | 1670 int old_value = static_cast<int>(reinterpret_cast<intptr_t>(entry->value)); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1779 backing_store_.Add(static_cast<byte>((ascii_length >> 14) | 0x80u)); | 1779 backing_store_.Add(static_cast<byte>((ascii_length >> 14) | 0x80u)); |
1780 } | 1780 } |
1781 backing_store_.Add(static_cast<byte>((ascii_length >> 7) | 0x80u)); | 1781 backing_store_.Add(static_cast<byte>((ascii_length >> 7) | 0x80u)); |
1782 } | 1782 } |
1783 backing_store_.Add(static_cast<byte>(ascii_length & 0x7f)); | 1783 backing_store_.Add(static_cast<byte>(ascii_length & 0x7f)); |
1784 | 1784 |
1785 backing_store_.AddBlock(bytes); | 1785 backing_store_.AddBlock(bytes); |
1786 return backing_store_.EndSequence().start(); | 1786 return backing_store_.EndSequence().start(); |
1787 } | 1787 } |
1788 } } // v8::preparser | 1788 } } // v8::preparser |
OLD | NEW |