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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 class Object; | 120 class Object; |
121 class ObjectOperationDescriptor; | 121 class ObjectOperationDescriptor; |
122 class ObjectTemplate; | 122 class ObjectTemplate; |
123 class Primitive; | 123 class Primitive; |
124 class RawOperationDescriptor; | 124 class RawOperationDescriptor; |
125 class Signature; | 125 class Signature; |
126 class StackFrame; | 126 class StackFrame; |
127 class StackTrace; | 127 class StackTrace; |
128 class String; | 128 class String; |
129 class StringObject; | 129 class StringObject; |
| 130 class Symbol; |
| 131 class SymbolObject; |
130 class Uint32; | 132 class Uint32; |
131 class Utils; | 133 class Utils; |
132 class Value; | 134 class Value; |
133 template <class T> class Handle; | 135 template <class T> class Handle; |
134 template <class T> class Local; | 136 template <class T> class Local; |
135 template <class T> class Persistent; | 137 template <class T> class Persistent; |
136 | 138 |
137 namespace internal { | 139 namespace internal { |
138 class Arguments; | 140 class Arguments; |
139 class Heap; | 141 class Heap; |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 */ | 968 */ |
967 bool IsFalse() const; | 969 bool IsFalse() const; |
968 | 970 |
969 /** | 971 /** |
970 * Returns true if this value is an instance of the String type. | 972 * Returns true if this value is an instance of the String type. |
971 * See ECMA-262 8.4. | 973 * See ECMA-262 8.4. |
972 */ | 974 */ |
973 V8_INLINE(bool IsString() const); | 975 V8_INLINE(bool IsString() const); |
974 | 976 |
975 /** | 977 /** |
| 978 * Returns true if this value is a symbol. |
| 979 * This is an experimental feature. |
| 980 */ |
| 981 bool IsSymbol() const; |
| 982 |
| 983 /** |
976 * Returns true if this value is a function. | 984 * Returns true if this value is a function. |
977 */ | 985 */ |
978 bool IsFunction() const; | 986 bool IsFunction() const; |
979 | 987 |
980 /** | 988 /** |
981 * Returns true if this value is an array. | 989 * Returns true if this value is an array. |
982 */ | 990 */ |
983 bool IsArray() const; | 991 bool IsArray() const; |
984 | 992 |
985 /** | 993 /** |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1026 * Returns true if this value is a Number object. | 1034 * Returns true if this value is a Number object. |
1027 */ | 1035 */ |
1028 bool IsNumberObject() const; | 1036 bool IsNumberObject() const; |
1029 | 1037 |
1030 /** | 1038 /** |
1031 * Returns true if this value is a String object. | 1039 * Returns true if this value is a String object. |
1032 */ | 1040 */ |
1033 bool IsStringObject() const; | 1041 bool IsStringObject() const; |
1034 | 1042 |
1035 /** | 1043 /** |
| 1044 * Returns true if this value is a Symbol object. |
| 1045 * This is an experimental feature. |
| 1046 */ |
| 1047 bool IsSymbolObject() const; |
| 1048 |
| 1049 /** |
1036 * Returns true if this value is a NativeError. | 1050 * Returns true if this value is a NativeError. |
1037 */ | 1051 */ |
1038 bool IsNativeError() const; | 1052 bool IsNativeError() const; |
1039 | 1053 |
1040 /** | 1054 /** |
1041 * Returns true if this value is a RegExp. | 1055 * Returns true if this value is a RegExp. |
1042 */ | 1056 */ |
1043 bool IsRegExp() const; | 1057 bool IsRegExp() const; |
1044 | 1058 |
1045 Local<Boolean> ToBoolean() const; | 1059 Local<Boolean> ToBoolean() const; |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 /** | 1318 /** |
1305 * Allocates a new string from either UTF-8 encoded or ASCII data. | 1319 * Allocates a new string from either UTF-8 encoded or ASCII data. |
1306 * The second parameter 'length' gives the buffer length. If omitted, | 1320 * The second parameter 'length' gives the buffer length. If omitted, |
1307 * the function calls 'strlen' to determine the buffer length. | 1321 * the function calls 'strlen' to determine the buffer length. |
1308 */ | 1322 */ |
1309 static Local<String> New(const char* data, int length = -1); | 1323 static Local<String> New(const char* data, int length = -1); |
1310 | 1324 |
1311 /** Allocates a new string from 16-bit character codes.*/ | 1325 /** Allocates a new string from 16-bit character codes.*/ |
1312 static Local<String> New(const uint16_t* data, int length = -1); | 1326 static Local<String> New(const uint16_t* data, int length = -1); |
1313 | 1327 |
1314 /** Creates a symbol. Returns one if it exists already.*/ | 1328 /** |
| 1329 * Creates an internalized string (historically called a "symbol", |
| 1330 * not to be confused with ES6 symbols). Returns one if it exists already. |
| 1331 * TODO(rossberg): Deprecate me when the new string API is here. |
| 1332 */ |
1315 static Local<String> NewSymbol(const char* data, int length = -1); | 1333 static Local<String> NewSymbol(const char* data, int length = -1); |
1316 | 1334 |
1317 /** | 1335 /** |
1318 * Creates a new string by concatenating the left and the right strings | 1336 * Creates a new string by concatenating the left and the right strings |
1319 * passed in as parameters. | 1337 * passed in as parameters. |
1320 */ | 1338 */ |
1321 static Local<String> Concat(Handle<String> left, Handle<String> right); | 1339 static Local<String> Concat(Handle<String> left, Handle<String> right); |
1322 | 1340 |
1323 /** | 1341 /** |
1324 * Creates a new external string using the data defined in the given | 1342 * Creates a new external string using the data defined in the given |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 | 1461 |
1444 private: | 1462 private: |
1445 void VerifyExternalStringResourceBase(ExternalStringResourceBase* v, | 1463 void VerifyExternalStringResourceBase(ExternalStringResourceBase* v, |
1446 Encoding encoding) const; | 1464 Encoding encoding) const; |
1447 void VerifyExternalStringResource(ExternalStringResource* val) const; | 1465 void VerifyExternalStringResource(ExternalStringResource* val) const; |
1448 static void CheckCast(v8::Value* obj); | 1466 static void CheckCast(v8::Value* obj); |
1449 }; | 1467 }; |
1450 | 1468 |
1451 | 1469 |
1452 /** | 1470 /** |
| 1471 * A JavaScript symbol (ECMA-262 edition 6) |
| 1472 * |
| 1473 * This is an experimental feature. Use at your own risk. |
| 1474 */ |
| 1475 class V8EXPORT Symbol : public Primitive { |
| 1476 public: |
| 1477 // Returns the print name string of the symbol, or undefined if none. |
| 1478 Local<Value> Name() const; |
| 1479 |
| 1480 // Create a symbol without a print name. |
| 1481 static Local<Symbol> New(Isolate* isolate); |
| 1482 |
| 1483 // Create a symbol with a print name. |
| 1484 static Local<Symbol> New(Isolate *isolate, const char* data, int length = -1); |
| 1485 |
| 1486 V8_INLINE(static Symbol* Cast(v8::Value* obj)); |
| 1487 private: |
| 1488 Symbol(); |
| 1489 static void CheckCast(v8::Value* obj); |
| 1490 }; |
| 1491 |
| 1492 |
| 1493 /** |
1453 * A JavaScript number value (ECMA-262, 4.3.20) | 1494 * A JavaScript number value (ECMA-262, 4.3.20) |
1454 */ | 1495 */ |
1455 class V8EXPORT Number : public Primitive { | 1496 class V8EXPORT Number : public Primitive { |
1456 public: | 1497 public: |
1457 double Value() const; | 1498 double Value() const; |
1458 static Local<Number> New(double value); | 1499 static Local<Number> New(double value); |
1459 V8_INLINE(static Number* Cast(v8::Value* obj)); | 1500 V8_INLINE(static Number* Cast(v8::Value* obj)); |
1460 private: | 1501 private: |
1461 Number(); | 1502 Number(); |
1462 static void CheckCast(v8::Value* obj); | 1503 static void CheckCast(v8::Value* obj); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1583 | 1624 |
1584 Local<Value> Get(uint32_t index); | 1625 Local<Value> Get(uint32_t index); |
1585 | 1626 |
1586 /** | 1627 /** |
1587 * Gets the property attributes of a property which can be None or | 1628 * Gets the property attributes of a property which can be None or |
1588 * any combination of ReadOnly, DontEnum and DontDelete. Returns | 1629 * any combination of ReadOnly, DontEnum and DontDelete. Returns |
1589 * None when the property doesn't exist. | 1630 * None when the property doesn't exist. |
1590 */ | 1631 */ |
1591 PropertyAttribute GetPropertyAttributes(Handle<Value> key); | 1632 PropertyAttribute GetPropertyAttributes(Handle<Value> key); |
1592 | 1633 |
1593 // TODO(1245389): Replace the type-specific versions of these | 1634 bool Has(Handle<Value> key); |
1594 // functions with generic ones that accept a Handle<Value> key. | |
1595 bool Has(Handle<String> key); | |
1596 | 1635 |
1597 bool Delete(Handle<String> key); | 1636 bool Delete(Handle<Value> key); |
1598 | 1637 |
1599 // Delete a property on this object bypassing interceptors and | 1638 // Delete a property on this object bypassing interceptors and |
1600 // ignoring dont-delete attributes. | 1639 // ignoring dont-delete attributes. |
1601 bool ForceDelete(Handle<Value> key); | 1640 bool ForceDelete(Handle<Value> key); |
1602 | 1641 |
1603 bool Has(uint32_t index); | 1642 bool Has(uint32_t index); |
1604 | 1643 |
1605 bool Delete(uint32_t index); | 1644 bool Delete(uint32_t index); |
1606 | 1645 |
1607 bool SetAccessor(Handle<String> name, | 1646 bool SetAccessor(Handle<String> name, |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1975 Local<String> StringValue() const; | 2014 Local<String> StringValue() const; |
1976 | 2015 |
1977 V8_INLINE(static StringObject* Cast(v8::Value* obj)); | 2016 V8_INLINE(static StringObject* Cast(v8::Value* obj)); |
1978 | 2017 |
1979 private: | 2018 private: |
1980 static void CheckCast(v8::Value* obj); | 2019 static void CheckCast(v8::Value* obj); |
1981 }; | 2020 }; |
1982 | 2021 |
1983 | 2022 |
1984 /** | 2023 /** |
| 2024 * A Symbol object (ECMA-262 edition 6). |
| 2025 * |
| 2026 * This is an experimental feature. Use at your own risk. |
| 2027 */ |
| 2028 class V8EXPORT SymbolObject : public Object { |
| 2029 public: |
| 2030 static Local<Value> New(Isolate* isolate, Handle<Symbol> value); |
| 2031 |
| 2032 /** |
| 2033 * Returns the Symbol held by the object. |
| 2034 */ |
| 2035 Local<Symbol> SymbolValue() const; |
| 2036 |
| 2037 V8_INLINE(static SymbolObject* Cast(v8::Value* obj)); |
| 2038 |
| 2039 private: |
| 2040 static void CheckCast(v8::Value* obj); |
| 2041 }; |
| 2042 |
| 2043 |
| 2044 /** |
1985 * An instance of the built-in RegExp constructor (ECMA-262, 15.10). | 2045 * An instance of the built-in RegExp constructor (ECMA-262, 15.10). |
1986 */ | 2046 */ |
1987 class V8EXPORT RegExp : public Object { | 2047 class V8EXPORT RegExp : public Object { |
1988 public: | 2048 public: |
1989 /** | 2049 /** |
1990 * Regular expression flag bits. They can be or'ed to enable a set | 2050 * Regular expression flag bits. They can be or'ed to enable a set |
1991 * of flags. | 2051 * of flags. |
1992 */ | 2052 */ |
1993 enum Flags { | 2053 enum Flags { |
1994 kNone = 0, | 2054 kNone = 0, |
(...skipping 2845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4840 | 4900 |
4841 bool Value::QuickIsString() const { | 4901 bool Value::QuickIsString() const { |
4842 typedef internal::Object O; | 4902 typedef internal::Object O; |
4843 typedef internal::Internals I; | 4903 typedef internal::Internals I; |
4844 O* obj = *reinterpret_cast<O**>(const_cast<Value*>(this)); | 4904 O* obj = *reinterpret_cast<O**>(const_cast<Value*>(this)); |
4845 if (!I::HasHeapObjectTag(obj)) return false; | 4905 if (!I::HasHeapObjectTag(obj)) return false; |
4846 return (I::GetInstanceType(obj) < I::kFirstNonstringType); | 4906 return (I::GetInstanceType(obj) < I::kFirstNonstringType); |
4847 } | 4907 } |
4848 | 4908 |
4849 | 4909 |
| 4910 Symbol* Symbol::Cast(v8::Value* value) { |
| 4911 #ifdef V8_ENABLE_CHECKS |
| 4912 CheckCast(value); |
| 4913 #endif |
| 4914 return static_cast<Symbol*>(value); |
| 4915 } |
| 4916 |
| 4917 |
4850 Number* Number::Cast(v8::Value* value) { | 4918 Number* Number::Cast(v8::Value* value) { |
4851 #ifdef V8_ENABLE_CHECKS | 4919 #ifdef V8_ENABLE_CHECKS |
4852 CheckCast(value); | 4920 CheckCast(value); |
4853 #endif | 4921 #endif |
4854 return static_cast<Number*>(value); | 4922 return static_cast<Number*>(value); |
4855 } | 4923 } |
4856 | 4924 |
4857 | 4925 |
4858 Integer* Integer::Cast(v8::Value* value) { | 4926 Integer* Integer::Cast(v8::Value* value) { |
4859 #ifdef V8_ENABLE_CHECKS | 4927 #ifdef V8_ENABLE_CHECKS |
(...skipping 12 matching lines...) Expand all Loading... |
4872 | 4940 |
4873 | 4941 |
4874 StringObject* StringObject::Cast(v8::Value* value) { | 4942 StringObject* StringObject::Cast(v8::Value* value) { |
4875 #ifdef V8_ENABLE_CHECKS | 4943 #ifdef V8_ENABLE_CHECKS |
4876 CheckCast(value); | 4944 CheckCast(value); |
4877 #endif | 4945 #endif |
4878 return static_cast<StringObject*>(value); | 4946 return static_cast<StringObject*>(value); |
4879 } | 4947 } |
4880 | 4948 |
4881 | 4949 |
| 4950 SymbolObject* SymbolObject::Cast(v8::Value* value) { |
| 4951 #ifdef V8_ENABLE_CHECKS |
| 4952 CheckCast(value); |
| 4953 #endif |
| 4954 return static_cast<SymbolObject*>(value); |
| 4955 } |
| 4956 |
| 4957 |
4882 NumberObject* NumberObject::Cast(v8::Value* value) { | 4958 NumberObject* NumberObject::Cast(v8::Value* value) { |
4883 #ifdef V8_ENABLE_CHECKS | 4959 #ifdef V8_ENABLE_CHECKS |
4884 CheckCast(value); | 4960 CheckCast(value); |
4885 #endif | 4961 #endif |
4886 return static_cast<NumberObject*>(value); | 4962 return static_cast<NumberObject*>(value); |
4887 } | 4963 } |
4888 | 4964 |
4889 | 4965 |
4890 BooleanObject* BooleanObject::Cast(v8::Value* value) { | 4966 BooleanObject* BooleanObject::Cast(v8::Value* value) { |
4891 #ifdef V8_ENABLE_CHECKS | 4967 #ifdef V8_ENABLE_CHECKS |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5038 | 5114 |
5039 | 5115 |
5040 } // namespace v8 | 5116 } // namespace v8 |
5041 | 5117 |
5042 | 5118 |
5043 #undef V8EXPORT | 5119 #undef V8EXPORT |
5044 #undef TYPE_CHECK | 5120 #undef TYPE_CHECK |
5045 | 5121 |
5046 | 5122 |
5047 #endif // V8_H_ | 5123 #endif // V8_H_ |
OLD | NEW |