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

Side by Side Diff: src/objects.h

Issue 9117034: New class for Date objects: caches individual date components. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add constant for index of first barrier-free slot. Created 8 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « src/macros.py ('k') | src/objects.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 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // - JSSet 57 // - JSSet
58 // - JSMap 58 // - JSMap
59 // - JSWeakMap 59 // - JSWeakMap
60 // - JSRegExp 60 // - JSRegExp
61 // - JSFunction 61 // - JSFunction
62 // - GlobalObject 62 // - GlobalObject
63 // - JSGlobalObject 63 // - JSGlobalObject
64 // - JSBuiltinsObject 64 // - JSBuiltinsObject
65 // - JSGlobalProxy 65 // - JSGlobalProxy
66 // - JSValue 66 // - JSValue
67 // - JSDate
67 // - JSMessageObject 68 // - JSMessageObject
68 // - JSProxy 69 // - JSProxy
69 // - JSFunctionProxy 70 // - JSFunctionProxy
70 // - FixedArrayBase 71 // - FixedArrayBase
71 // - ByteArray 72 // - ByteArray
72 // - FixedArray 73 // - FixedArray
73 // - DescriptorArray 74 // - DescriptorArray
74 // - HashTable 75 // - HashTable
75 // - Dictionary 76 // - Dictionary
76 // - SymbolTable 77 // - SymbolTable
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 V(CODE_CACHE_TYPE) \ 289 V(CODE_CACHE_TYPE) \
289 V(POLYMORPHIC_CODE_CACHE_TYPE) \ 290 V(POLYMORPHIC_CODE_CACHE_TYPE) \
290 \ 291 \
291 V(FIXED_ARRAY_TYPE) \ 292 V(FIXED_ARRAY_TYPE) \
292 V(FIXED_DOUBLE_ARRAY_TYPE) \ 293 V(FIXED_DOUBLE_ARRAY_TYPE) \
293 V(SHARED_FUNCTION_INFO_TYPE) \ 294 V(SHARED_FUNCTION_INFO_TYPE) \
294 \ 295 \
295 V(JS_MESSAGE_OBJECT_TYPE) \ 296 V(JS_MESSAGE_OBJECT_TYPE) \
296 \ 297 \
297 V(JS_VALUE_TYPE) \ 298 V(JS_VALUE_TYPE) \
299 V(JS_DATE_TYPE) \
298 V(JS_OBJECT_TYPE) \ 300 V(JS_OBJECT_TYPE) \
299 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \ 301 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \
300 V(JS_GLOBAL_OBJECT_TYPE) \ 302 V(JS_GLOBAL_OBJECT_TYPE) \
301 V(JS_BUILTINS_OBJECT_TYPE) \ 303 V(JS_BUILTINS_OBJECT_TYPE) \
302 V(JS_GLOBAL_PROXY_TYPE) \ 304 V(JS_GLOBAL_PROXY_TYPE) \
303 V(JS_ARRAY_TYPE) \ 305 V(JS_ARRAY_TYPE) \
304 V(JS_PROXY_TYPE) \ 306 V(JS_PROXY_TYPE) \
305 V(JS_WEAK_MAP_TYPE) \ 307 V(JS_WEAK_MAP_TYPE) \
306 V(JS_REGEXP_TYPE) \ 308 V(JS_REGEXP_TYPE) \
307 \ 309 \
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 605
604 // All the following types are subtypes of JSReceiver, which corresponds to 606 // All the following types are subtypes of JSReceiver, which corresponds to
605 // objects in the JS sense. The first and the last type in this range are 607 // objects in the JS sense. The first and the last type in this range are
606 // the two forms of function. This organization enables using the same 608 // the two forms of function. This organization enables using the same
607 // compares for checking the JS_RECEIVER/SPEC_OBJECT range and the 609 // compares for checking the JS_RECEIVER/SPEC_OBJECT range and the
608 // NONCALLABLE_JS_OBJECT range. 610 // NONCALLABLE_JS_OBJECT range.
609 JS_FUNCTION_PROXY_TYPE, // FIRST_JS_RECEIVER_TYPE, FIRST_JS_PROXY_TYPE 611 JS_FUNCTION_PROXY_TYPE, // FIRST_JS_RECEIVER_TYPE, FIRST_JS_PROXY_TYPE
610 JS_PROXY_TYPE, // LAST_JS_PROXY_TYPE 612 JS_PROXY_TYPE, // LAST_JS_PROXY_TYPE
611 613
612 JS_VALUE_TYPE, // FIRST_JS_OBJECT_TYPE 614 JS_VALUE_TYPE, // FIRST_JS_OBJECT_TYPE
615 JS_DATE_TYPE,
613 JS_OBJECT_TYPE, 616 JS_OBJECT_TYPE,
614 JS_CONTEXT_EXTENSION_OBJECT_TYPE, 617 JS_CONTEXT_EXTENSION_OBJECT_TYPE,
615 JS_GLOBAL_OBJECT_TYPE, 618 JS_GLOBAL_OBJECT_TYPE,
616 JS_BUILTINS_OBJECT_TYPE, 619 JS_BUILTINS_OBJECT_TYPE,
617 JS_GLOBAL_PROXY_TYPE, 620 JS_GLOBAL_PROXY_TYPE,
618 JS_ARRAY_TYPE, 621 JS_ARRAY_TYPE,
619 JS_SET_TYPE, 622 JS_SET_TYPE,
620 JS_MAP_TYPE, 623 JS_MAP_TYPE,
621 JS_WEAK_MAP_TYPE, 624 JS_WEAK_MAP_TYPE,
622 625
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 V(FixedArray) \ 799 V(FixedArray) \
797 V(FixedDoubleArray) \ 800 V(FixedDoubleArray) \
798 V(Context) \ 801 V(Context) \
799 V(GlobalContext) \ 802 V(GlobalContext) \
800 V(ScopeInfo) \ 803 V(ScopeInfo) \
801 V(JSFunction) \ 804 V(JSFunction) \
802 V(Code) \ 805 V(Code) \
803 V(Oddball) \ 806 V(Oddball) \
804 V(SharedFunctionInfo) \ 807 V(SharedFunctionInfo) \
805 V(JSValue) \ 808 V(JSValue) \
809 V(JSDate) \
806 V(JSMessageObject) \ 810 V(JSMessageObject) \
807 V(StringWrapper) \ 811 V(StringWrapper) \
808 V(Foreign) \ 812 V(Foreign) \
809 V(Boolean) \ 813 V(Boolean) \
810 V(JSArray) \ 814 V(JSArray) \
811 V(JSProxy) \ 815 V(JSProxy) \
812 V(JSFunctionProxy) \ 816 V(JSFunctionProxy) \
813 V(JSSet) \ 817 V(JSSet) \
814 V(JSMap) \ 818 V(JSMap) \
815 V(JSWeakMap) \ 819 V(JSWeakMap) \
(...skipping 5000 matching lines...) Expand 10 before | Expand all | Expand 10 after
5816 5820
5817 static int OffsetOfCodeWithId(Builtins::JavaScript id) { 5821 static int OffsetOfCodeWithId(Builtins::JavaScript id) {
5818 return kJSBuiltinsCodeOffset + id * kPointerSize; 5822 return kJSBuiltinsCodeOffset + id * kPointerSize;
5819 } 5823 }
5820 5824
5821 private: 5825 private:
5822 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject); 5826 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject);
5823 }; 5827 };
5824 5828
5825 5829
5826 // Representation for JS Wrapper objects, String, Number, Boolean, Date, etc. 5830 // Representation for JS Wrapper objects, String, Number, Boolean, etc.
5827 class JSValue: public JSObject { 5831 class JSValue: public JSObject {
5828 public: 5832 public:
5829 // [value]: the object being wrapped. 5833 // [value]: the object being wrapped.
5830 DECL_ACCESSORS(value, Object) 5834 DECL_ACCESSORS(value, Object)
5831 5835
5832 // Casting. 5836 // Casting.
5833 static inline JSValue* cast(Object* obj); 5837 static inline JSValue* cast(Object* obj);
5834 5838
5835 // Dispatched behavior. 5839 // Dispatched behavior.
5836 #ifdef OBJECT_PRINT 5840 #ifdef OBJECT_PRINT
5837 inline void JSValuePrint() { 5841 inline void JSValuePrint() {
5838 JSValuePrint(stdout); 5842 JSValuePrint(stdout);
5839 } 5843 }
5840 void JSValuePrint(FILE* out); 5844 void JSValuePrint(FILE* out);
5841 #endif 5845 #endif
5842 #ifdef DEBUG 5846 #ifdef DEBUG
5843 void JSValueVerify(); 5847 void JSValueVerify();
5844 #endif 5848 #endif
5845 5849
5846 // Layout description. 5850 // Layout description.
5847 static const int kValueOffset = JSObject::kHeaderSize; 5851 static const int kValueOffset = JSObject::kHeaderSize;
5848 static const int kSize = kValueOffset + kPointerSize; 5852 static const int kSize = kValueOffset + kPointerSize;
5849 5853
5850 private: 5854 private:
5851 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); 5855 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue);
5852 }; 5856 };
5853 5857
5854 5858
5859 // Representation for JS date objects.
5860 class JSDate: public JSObject {
5861 public:
5862 // If one component is NaN, all of them are, indicating a NaN time value.
5863 // [value]: the time value.
5864 DECL_ACCESSORS(value, Object)
5865 // [year]: caches year. Either undefined, smi, or NaN.
5866 DECL_ACCESSORS(year, Object)
5867 // [month]: caches month. Either undefined, smi, or NaN.
5868 DECL_ACCESSORS(month, Object)
5869 // [day]: caches day. Either undefined, smi, or NaN.
5870 DECL_ACCESSORS(day, Object)
5871 // [hour]: caches hours. Either undefined, smi, or NaN.
5872 DECL_ACCESSORS(hour, Object)
5873 // [min]: caches minutes. Either undefined, smi, or NaN.
5874 DECL_ACCESSORS(min, Object)
5875 // [sec]: caches seconds. Either undefined, smi, or NaN.
5876 DECL_ACCESSORS(sec, Object)
5877 // [ms]: caches milliseconds. Either undefined, smi, or NaN.
5878 DECL_ACCESSORS(ms, Object)
5879
5880 // Casting.
5881 static inline JSDate* cast(Object* obj);
5882
5883 // Dispatched behavior.
5884 #ifdef OBJECT_PRINT
5885 inline void JSDatePrint() {
5886 JSDatePrint(stdout);
5887 }
5888 void JSDatePrint(FILE* out);
5889 #endif
5890 #ifdef DEBUG
5891 void JSDateVerify();
5892 #endif
5893
5894 // Layout description.
5895 static const int kValueOffset = JSObject::kHeaderSize;
5896 static const int kYearOffset = kValueOffset + kPointerSize;
5897 static const int kMonthOffset = kYearOffset + kPointerSize;
5898 static const int kDayOffset = kMonthOffset + kPointerSize;
5899 static const int kHourOffset = kDayOffset + kPointerSize;
5900 static const int kMinOffset = kHourOffset + kPointerSize;
5901 static const int kSecOffset = kMinOffset + kPointerSize;
5902 static const int kMsOffset = kSecOffset + kPointerSize;
5903 static const int kSize = kMsOffset + kPointerSize;
5904
5905 // Index of first field not requiring a write barrier.
5906 static const int kFirstBarrierFree = 1; // year
5907
5908 private:
5909 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDate);
5910 };
5911
5912
5855 // Representation of message objects used for error reporting through 5913 // Representation of message objects used for error reporting through
5856 // the API. The messages are formatted in JavaScript so this object is 5914 // the API. The messages are formatted in JavaScript so this object is
5857 // a real JavaScript object. The information used for formatting the 5915 // a real JavaScript object. The information used for formatting the
5858 // error messages are not directly accessible from JavaScript to 5916 // error messages are not directly accessible from JavaScript to
5859 // prevent leaking information to user code called during error 5917 // prevent leaking information to user code called during error
5860 // formatting. 5918 // formatting.
5861 class JSMessageObject: public JSObject { 5919 class JSMessageObject: public JSObject {
5862 public: 5920 public:
5863 // [type]: the type of error message. 5921 // [type]: the type of error message.
5864 DECL_ACCESSORS(type, String) 5922 DECL_ACCESSORS(type, String)
(...skipping 2329 matching lines...) Expand 10 before | Expand all | Expand 10 after
8194 } else { 8252 } else {
8195 value &= ~(1 << bit_position); 8253 value &= ~(1 << bit_position);
8196 } 8254 }
8197 return value; 8255 return value;
8198 } 8256 }
8199 }; 8257 };
8200 8258
8201 } } // namespace v8::internal 8259 } } // namespace v8::internal
8202 8260
8203 #endif // V8_OBJECTS_H_ 8261 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/macros.py ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698