| OLD | NEW |
| 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 #ifndef V8_UTILS_H_ | 5 #ifndef V8_UTILS_H_ |
| 6 #define V8_UTILS_H_ | 6 #define V8_UTILS_H_ |
| 7 | 7 |
| 8 #include <limits.h> | 8 #include <limits.h> |
| 9 #include <stdlib.h> | 9 #include <stdlib.h> |
| 10 #include <string.h> | 10 #include <string.h> |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 } else { | 667 } else { |
| 668 this->current_chunk_.Dispose(); | 668 this->current_chunk_.Dispose(); |
| 669 } | 669 } |
| 670 this->current_chunk_ = new_chunk; | 670 this->current_chunk_ = new_chunk; |
| 671 this->index_ = sequence_length; | 671 this->index_ = sequence_length; |
| 672 sequence_start_ = 0; | 672 sequence_start_ = 0; |
| 673 } | 673 } |
| 674 }; | 674 }; |
| 675 | 675 |
| 676 | 676 |
| 677 // Compare ASCII/16bit chars to ASCII/16bit chars. | 677 // Compare 8bit/16bit chars to 8bit/16bit chars. |
| 678 template <typename lchar, typename rchar> | 678 template <typename lchar, typename rchar> |
| 679 inline int CompareCharsUnsigned(const lchar* lhs, | 679 inline int CompareCharsUnsigned(const lchar* lhs, |
| 680 const rchar* rhs, | 680 const rchar* rhs, |
| 681 int chars) { | 681 int chars) { |
| 682 const lchar* limit = lhs + chars; | 682 const lchar* limit = lhs + chars; |
| 683 #ifdef V8_HOST_CAN_READ_UNALIGNED | 683 #ifdef V8_HOST_CAN_READ_UNALIGNED |
| 684 if (sizeof(*lhs) == sizeof(*rhs)) { | 684 if (sizeof(*lhs) == sizeof(*rhs)) { |
| 685 // Number of characters in a uintptr_t. | 685 // Number of characters in a uintptr_t. |
| 686 static const int kStepSize = sizeof(uintptr_t) / sizeof(*lhs); // NOLINT | 686 static const int kStepSize = sizeof(uintptr_t) / sizeof(*lhs); // NOLINT |
| 687 while (lhs <= limit - kStepSize) { | 687 while (lhs <= limit - kStepSize) { |
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1221 #else | 1221 #else |
| 1222 for (int i = 0; i < counter; i++) { | 1222 for (int i = 0; i < counter; i++) { |
| 1223 dest[i] = value; | 1223 dest[i] = value; |
| 1224 } | 1224 } |
| 1225 #endif | 1225 #endif |
| 1226 | 1226 |
| 1227 #undef STOS | 1227 #undef STOS |
| 1228 } | 1228 } |
| 1229 | 1229 |
| 1230 | 1230 |
| 1231 // Simple wrapper that allows an ExternalString to refer to a | |
| 1232 // Vector<const char>. Doesn't assume ownership of the data. | |
| 1233 class AsciiStringAdapter: public v8::String::ExternalAsciiStringResource { | |
| 1234 public: | |
| 1235 explicit AsciiStringAdapter(Vector<const char> data) : data_(data) {} | |
| 1236 | |
| 1237 virtual const char* data() const { return data_.start(); } | |
| 1238 | |
| 1239 virtual size_t length() const { return data_.length(); } | |
| 1240 | |
| 1241 private: | |
| 1242 Vector<const char> data_; | |
| 1243 }; | |
| 1244 | |
| 1245 | |
| 1246 // Simple support to read a file into a 0-terminated C-string. | 1231 // Simple support to read a file into a 0-terminated C-string. |
| 1247 // The returned buffer must be freed by the caller. | 1232 // The returned buffer must be freed by the caller. |
| 1248 // On return, *exits tells whether the file existed. | 1233 // On return, *exits tells whether the file existed. |
| 1249 Vector<const char> ReadFile(const char* filename, | 1234 Vector<const char> ReadFile(const char* filename, |
| 1250 bool* exists, | 1235 bool* exists, |
| 1251 bool verbose = true); | 1236 bool verbose = true); |
| 1252 Vector<const char> ReadFile(FILE* file, | 1237 Vector<const char> ReadFile(FILE* file, |
| 1253 bool* exists, | 1238 bool* exists, |
| 1254 bool verbose = true); | 1239 bool verbose = true); |
| 1255 | 1240 |
| 1256 | 1241 |
| 1257 template <typename sourcechar, typename sinkchar> | 1242 template <typename sourcechar, typename sinkchar> |
| 1258 INLINE(static void CopyCharsUnsigned(sinkchar* dest, | 1243 INLINE(static void CopyCharsUnsigned(sinkchar* dest, |
| 1259 const sourcechar* src, | 1244 const sourcechar* src, |
| 1260 int chars)); | 1245 int chars)); |
| 1261 #if defined(V8_HOST_ARCH_ARM) | 1246 #if defined(V8_HOST_ARCH_ARM) |
| 1262 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); | 1247 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); |
| 1263 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint8_t* src, int chars)); | 1248 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint8_t* src, int chars)); |
| 1264 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); | 1249 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); |
| 1265 #elif defined(V8_HOST_ARCH_MIPS) | 1250 #elif defined(V8_HOST_ARCH_MIPS) |
| 1266 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); | 1251 INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, int chars)); |
| 1267 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); | 1252 INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, int chars)); |
| 1268 #endif | 1253 #endif |
| 1269 | 1254 |
| 1270 // Copy from ASCII/16bit chars to ASCII/16bit chars. | 1255 // Copy from 8bit/16bit chars to 8bit/16bit chars. |
| 1271 template <typename sourcechar, typename sinkchar> | 1256 template <typename sourcechar, typename sinkchar> |
| 1272 INLINE(void CopyChars(sinkchar* dest, const sourcechar* src, int chars)); | 1257 INLINE(void CopyChars(sinkchar* dest, const sourcechar* src, int chars)); |
| 1273 | 1258 |
| 1274 template<typename sourcechar, typename sinkchar> | 1259 template<typename sourcechar, typename sinkchar> |
| 1275 void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { | 1260 void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { |
| 1276 DCHECK(sizeof(sourcechar) <= 2); | 1261 DCHECK(sizeof(sourcechar) <= 2); |
| 1277 DCHECK(sizeof(sinkchar) <= 2); | 1262 DCHECK(sizeof(sinkchar) <= 2); |
| 1278 if (sizeof(sinkchar) == 1) { | 1263 if (sizeof(sinkchar) == 1) { |
| 1279 if (sizeof(sourcechar) == 1) { | 1264 if (sizeof(sourcechar) == 1) { |
| 1280 CopyCharsUnsigned(reinterpret_cast<uint8_t*>(dest), | 1265 CopyCharsUnsigned(reinterpret_cast<uint8_t*>(dest), |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1492 // Takes the address of the limit variable in order to find out where | 1477 // Takes the address of the limit variable in order to find out where |
| 1493 // the top of stack is right now. | 1478 // the top of stack is right now. |
| 1494 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); | 1479 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); |
| 1495 return limit; | 1480 return limit; |
| 1496 } | 1481 } |
| 1497 | 1482 |
| 1498 } // namespace internal | 1483 } // namespace internal |
| 1499 } // namespace v8 | 1484 } // namespace v8 |
| 1500 | 1485 |
| 1501 #endif // V8_UTILS_H_ | 1486 #endif // V8_UTILS_H_ |
| OLD | NEW |