OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1114 if (scanner_->has_line_terminator_before_next() || | 1114 if (scanner_->has_line_terminator_before_next() || |
1115 tok == i::Token::RBRACE || | 1115 tok == i::Token::RBRACE || |
1116 tok == i::Token::EOS) { | 1116 tok == i::Token::EOS) { |
1117 return; | 1117 return; |
1118 } | 1118 } |
1119 Expect(i::Token::SEMICOLON, ok); | 1119 Expect(i::Token::SEMICOLON, ok); |
1120 } | 1120 } |
1121 | 1121 |
1122 | 1122 |
1123 PreParser::Identifier PreParser::GetIdentifierSymbol() { | 1123 PreParser::Identifier PreParser::GetIdentifierSymbol() { |
1124 const char* literal_chars = scanner_->literal_string(); | |
1125 int literal_length = scanner_->literal_length(); | |
1126 int identifier_pos = scanner_->location().beg_pos; | 1124 int identifier_pos = scanner_->location().beg_pos; |
1127 | 1125 if (scanner_->is_literal_ascii()) { |
1128 log_->LogSymbol(identifier_pos, literal_chars, literal_length); | 1126 log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string()); |
1129 | 1127 } else { |
1130 return kUnknownExpression; | 1128 log_->LogUC16Symbol(identifier_pos, scanner_->literal_uc16_string()); |
| 1129 } |
| 1130 return kUnknownIdentifier; |
1131 } | 1131 } |
1132 | 1132 |
1133 | 1133 |
1134 PreParser::Expression PreParser::GetStringSymbol() { | 1134 PreParser::Expression PreParser::GetStringSymbol() { |
1135 const char* literal_chars = scanner_->literal_string(); | 1135 int identifier_pos = scanner_->location().beg_pos; |
1136 int literal_length = scanner_->literal_length(); | 1136 if (scanner_->is_literal_ascii()) { |
1137 | 1137 log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string()); |
1138 int literal_position = scanner_->location().beg_pos; | 1138 } else { |
1139 log_->LogSymbol(literal_position, literal_chars, literal_length); | 1139 log_->LogUC16Symbol(identifier_pos, scanner_->literal_uc16_string()); |
1140 | 1140 } |
1141 return kUnknownExpression; | 1141 return kUnknownExpression; |
1142 } | 1142 } |
1143 | 1143 |
1144 | 1144 |
1145 PreParser::Identifier PreParser::ParseIdentifier(bool* ok) { | 1145 PreParser::Identifier PreParser::ParseIdentifier(bool* ok) { |
1146 Expect(i::Token::IDENTIFIER, ok); | 1146 Expect(i::Token::IDENTIFIER, ok); |
1147 if (!*ok) return kUnknownIdentifier; | 1147 if (!*ok) return kUnknownIdentifier; |
1148 return GetIdentifierSymbol(); | 1148 return GetIdentifierSymbol(); |
1149 } | 1149 } |
1150 | 1150 |
1151 | 1151 |
1152 PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) { | 1152 PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) { |
1153 i::Token::Value next = Next(); | 1153 i::Token::Value next = Next(); |
1154 if (i::Token::IsKeyword(next)) { | 1154 if (i::Token::IsKeyword(next)) { |
1155 int pos = scanner_->location().beg_pos; | 1155 int pos = scanner_->location().beg_pos; |
1156 const char* keyword = i::Token::String(next); | 1156 const char* keyword = i::Token::String(next); |
1157 log_->LogSymbol(pos, keyword, i::StrLength(keyword)); | 1157 log_->LogAsciiSymbol(pos, i::Vector<const char>(keyword, |
| 1158 i::StrLength(keyword))); |
1158 return kUnknownExpression; | 1159 return kUnknownExpression; |
1159 } | 1160 } |
1160 if (next == i::Token::IDENTIFIER) { | 1161 if (next == i::Token::IDENTIFIER) { |
1161 return GetIdentifierSymbol(); | 1162 return GetIdentifierSymbol(); |
1162 } | 1163 } |
1163 *ok = false; | 1164 *ok = false; |
1164 return kUnknownIdentifier; | 1165 return kUnknownIdentifier; |
1165 } | 1166 } |
1166 | 1167 |
1167 | 1168 |
1168 // This function reads an identifier and determines whether or not it | 1169 // This function reads an identifier and determines whether or not it |
1169 // is 'get' or 'set'. The reason for not using ParseIdentifier and | 1170 // is 'get' or 'set'. The reason for not using ParseIdentifier and |
1170 // checking on the output is that this involves heap allocation which | 1171 // checking on the output is that this involves heap allocation which |
1171 // we can't do during preparsing. | 1172 // we can't do during preparsing. |
1172 PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get, | 1173 PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get, |
1173 bool* is_set, | 1174 bool* is_set, |
1174 bool* ok) { | 1175 bool* ok) { |
1175 Expect(i::Token::IDENTIFIER, CHECK_OK); | 1176 Expect(i::Token::IDENTIFIER, CHECK_OK); |
1176 if (scanner_->literal_length() == 3) { | 1177 if (scanner_->is_literal_ascii() && scanner_->literal_length() == 3) { |
1177 const char* token = scanner_->literal_string(); | 1178 const char* token = scanner_->literal_ascii_string().start(); |
1178 *is_get = strncmp(token, "get", 3) == 0; | 1179 *is_get = strncmp(token, "get", 3) == 0; |
1179 *is_set = !*is_get && strncmp(token, "set", 3) == 0; | 1180 *is_set = !*is_get && strncmp(token, "set", 3) == 0; |
1180 } | 1181 } |
1181 return GetIdentifierSymbol(); | 1182 return GetIdentifierSymbol(); |
1182 } | 1183 } |
1183 | 1184 |
1184 #undef CHECK_OK | 1185 #undef CHECK_OK |
1185 } } // v8::preparser | 1186 } } // v8::preparser |
OLD | NEW |