Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: include/v8.h

Issue 2123012: Allow to define accessors on objects. (Closed)
Patch Set: Last round of comments Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2009 the V8 project authors. All rights reserved. 1 // Copyright 2007-2009 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 class Function; 119 class Function;
120 class Date; 120 class Date;
121 class ImplementationUtilities; 121 class ImplementationUtilities;
122 class Signature; 122 class Signature;
123 template <class T> class Handle; 123 template <class T> class Handle;
124 template <class T> class Local; 124 template <class T> class Local;
125 template <class T> class Persistent; 125 template <class T> class Persistent;
126 class FunctionTemplate; 126 class FunctionTemplate;
127 class ObjectTemplate; 127 class ObjectTemplate;
128 class Data; 128 class Data;
129 class AccessorInfo;
129 class StackTrace; 130 class StackTrace;
130 class StackFrame; 131 class StackFrame;
131 132
132 namespace internal { 133 namespace internal {
133 134
134 class Arguments; 135 class Arguments;
135 class Object; 136 class Object;
136 class Top; 137 class Top;
137 138
138 } 139 }
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 kExternalByteArray = 1, 1300 kExternalByteArray = 1,
1300 kExternalUnsignedByteArray, 1301 kExternalUnsignedByteArray,
1301 kExternalShortArray, 1302 kExternalShortArray,
1302 kExternalUnsignedShortArray, 1303 kExternalUnsignedShortArray,
1303 kExternalIntArray, 1304 kExternalIntArray,
1304 kExternalUnsignedIntArray, 1305 kExternalUnsignedIntArray,
1305 kExternalFloatArray 1306 kExternalFloatArray
1306 }; 1307 };
1307 1308
1308 /** 1309 /**
1310 * Accessor[Getter|Setter] are used as callback functions when
1311 * setting|getting a particular property. See Object and ObjectTemplate's
1312 * method SetAccessor.
1313 */
1314 typedef Handle<Value> (*AccessorGetter)(Local<String> property,
1315 const AccessorInfo& info);
1316
1317
1318 typedef void (*AccessorSetter)(Local<String> property,
1319 Local<Value> value,
1320 const AccessorInfo& info);
1321
1322
1323 /**
1324 * Access control specifications.
1325 *
1326 * Some accessors should be accessible across contexts. These
1327 * accessors have an explicit access control parameter which specifies
1328 * the kind of cross-context access that should be allowed.
1329 *
1330 * Additionally, for security, accessors can prohibit overwriting by
1331 * accessors defined in JavaScript. For objects that have such
1332 * accessors either locally or in their prototype chain it is not
1333 * possible to overwrite the accessor by using __defineGetter__ or
1334 * __defineSetter__ from JavaScript code.
1335 */
1336 enum AccessControl {
1337 DEFAULT = 0,
1338 ALL_CAN_READ = 1,
1339 ALL_CAN_WRITE = 1 << 1,
1340 PROHIBITS_OVERWRITING = 1 << 2
1341 };
1342
1343
1344 /**
1309 * A JavaScript object (ECMA-262, 4.3.3) 1345 * A JavaScript object (ECMA-262, 4.3.3)
1310 */ 1346 */
1311 class V8EXPORT Object : public Value { 1347 class V8EXPORT Object : public Value {
1312 public: 1348 public:
1313 bool Set(Handle<Value> key, 1349 bool Set(Handle<Value> key,
1314 Handle<Value> value, 1350 Handle<Value> value,
1315 PropertyAttribute attribs = None); 1351 PropertyAttribute attribs = None);
1316 1352
1317 bool Set(uint32_t index, 1353 bool Set(uint32_t index,
1318 Handle<Value> value); 1354 Handle<Value> value);
(...skipping 21 matching lines...) Expand all
1340 bool Delete(Handle<String> key); 1376 bool Delete(Handle<String> key);
1341 1377
1342 // Delete a property on this object bypassing interceptors and 1378 // Delete a property on this object bypassing interceptors and
1343 // ignoring dont-delete attributes. 1379 // ignoring dont-delete attributes.
1344 bool ForceDelete(Handle<Value> key); 1380 bool ForceDelete(Handle<Value> key);
1345 1381
1346 bool Has(uint32_t index); 1382 bool Has(uint32_t index);
1347 1383
1348 bool Delete(uint32_t index); 1384 bool Delete(uint32_t index);
1349 1385
1386 bool SetAccessor(Handle<String> name,
1387 AccessorGetter getter,
1388 AccessorSetter setter = 0,
1389 Handle<Value> data = Handle<Value>(),
1390 AccessControl settings = DEFAULT,
1391 PropertyAttribute attribute = None);
1392
1350 /** 1393 /**
1351 * Returns an array containing the names of the enumerable properties 1394 * Returns an array containing the names of the enumerable properties
1352 * of this object, including properties from prototype objects. The 1395 * of this object, including properties from prototype objects. The
1353 * array returned by this method contains the same values as would 1396 * array returned by this method contains the same values as would
1354 * be enumerated by a for-in statement over this object. 1397 * be enumerated by a for-in statement over this object.
1355 */ 1398 */
1356 Local<Array> GetPropertyNames(); 1399 Local<Array> GetPropertyNames();
1357 1400
1358 /** 1401 /**
1359 * Get the prototype object. This does not skip objects marked to 1402 * Get the prototype object. This does not skip objects marked to
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1635 private: 1678 private:
1636 internal::Object** args_; 1679 internal::Object** args_;
1637 }; 1680 };
1638 1681
1639 1682
1640 typedef Handle<Value> (*InvocationCallback)(const Arguments& args); 1683 typedef Handle<Value> (*InvocationCallback)(const Arguments& args);
1641 1684
1642 typedef int (*LookupCallback)(Local<Object> self, Local<String> name); 1685 typedef int (*LookupCallback)(Local<Object> self, Local<String> name);
1643 1686
1644 /** 1687 /**
1645 * Accessor[Getter|Setter] are used as callback functions when
1646 * setting|getting a particular property. See objectTemplate::SetAccessor.
1647 */
1648 typedef Handle<Value> (*AccessorGetter)(Local<String> property,
1649 const AccessorInfo& info);
1650
1651
1652 typedef void (*AccessorSetter)(Local<String> property,
1653 Local<Value> value,
1654 const AccessorInfo& info);
1655
1656
1657 /**
1658 * NamedProperty[Getter|Setter] are used as interceptors on object. 1688 * NamedProperty[Getter|Setter] are used as interceptors on object.
1659 * See ObjectTemplate::SetNamedPropertyHandler. 1689 * See ObjectTemplate::SetNamedPropertyHandler.
1660 */ 1690 */
1661 typedef Handle<Value> (*NamedPropertyGetter)(Local<String> property, 1691 typedef Handle<Value> (*NamedPropertyGetter)(Local<String> property,
1662 const AccessorInfo& info); 1692 const AccessorInfo& info);
1663 1693
1664 1694
1665 /** 1695 /**
1666 * Returns the value if the setter intercepts the request. 1696 * Returns the value if the setter intercepts the request.
1667 * Otherwise, returns an empty handle. 1697 * Otherwise, returns an empty handle.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 const AccessorInfo& info); 1757 const AccessorInfo& info);
1728 1758
1729 /** 1759 /**
1730 * Returns an array containing the indices of the properties the 1760 * Returns an array containing the indices of the properties the
1731 * indexed property getter intercepts. 1761 * indexed property getter intercepts.
1732 */ 1762 */
1733 typedef Handle<Array> (*IndexedPropertyEnumerator)(const AccessorInfo& info); 1763 typedef Handle<Array> (*IndexedPropertyEnumerator)(const AccessorInfo& info);
1734 1764
1735 1765
1736 /** 1766 /**
1737 * Access control specifications.
1738 *
1739 * Some accessors should be accessible across contexts. These
1740 * accessors have an explicit access control parameter which specifies
1741 * the kind of cross-context access that should be allowed.
1742 *
1743 * Additionally, for security, accessors can prohibit overwriting by
1744 * accessors defined in JavaScript. For objects that have such
1745 * accessors either locally or in their prototype chain it is not
1746 * possible to overwrite the accessor by using __defineGetter__ or
1747 * __defineSetter__ from JavaScript code.
1748 */
1749 enum AccessControl {
1750 DEFAULT = 0,
1751 ALL_CAN_READ = 1,
1752 ALL_CAN_WRITE = 1 << 1,
1753 PROHIBITS_OVERWRITING = 1 << 2
1754 };
1755
1756
1757 /**
1758 * Access type specification. 1767 * Access type specification.
1759 */ 1768 */
1760 enum AccessType { 1769 enum AccessType {
1761 ACCESS_GET, 1770 ACCESS_GET,
1762 ACCESS_SET, 1771 ACCESS_SET,
1763 ACCESS_HAS, 1772 ACCESS_HAS,
1764 ACCESS_DELETE, 1773 ACCESS_DELETE,
1765 ACCESS_KEYS 1774 ACCESS_KEYS
1766 }; 1775 };
1767 1776
(...skipping 1740 matching lines...) Expand 10 before | Expand all | Expand 10 after
3508 3517
3509 } // namespace v8 3518 } // namespace v8
3510 3519
3511 3520
3512 #undef V8EXPORT 3521 #undef V8EXPORT
3513 #undef V8EXPORT_INLINE 3522 #undef V8EXPORT_INLINE
3514 #undef TYPE_CHECK 3523 #undef TYPE_CHECK
3515 3524
3516 3525
3517 #endif // V8_H_ 3526 #endif // V8_H_
OLDNEW
« no previous file with comments | « no previous file | src/api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698