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

Side by Side Diff: src/objects.h

Issue 43075: * Reapply revisions 1383, 1384, 1391, 1398, 1401, 1402,... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 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
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 2948 matching lines...) Expand 10 before | Expand all | Expand 10 after
2959 2959
2960 // Layout description. 2960 // Layout description.
2961 static const int kValueOffset = JSObject::kHeaderSize; 2961 static const int kValueOffset = JSObject::kHeaderSize;
2962 static const int kSize = kValueOffset + kPointerSize; 2962 static const int kSize = kValueOffset + kPointerSize;
2963 2963
2964 private: 2964 private:
2965 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); 2965 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue);
2966 }; 2966 };
2967 2967
2968 // Regular expressions 2968 // Regular expressions
2969 // The regular expression holds a single reference to a FixedArray in
2970 // the kDataOffset field.
2971 // The FixedArray contains the following data:
2972 // - tag : type of regexp implementation (not compiled yet, atom or irregexp)
2973 // - reference to the original source string
2974 // - reference to the original flag string
2975 // If it is an atom regexp
2976 // - a reference to a literal string to search for
2977 // If it is an irregexp regexp:
2978 // - a reference to code for ASCII inputs (bytecode or compiled).
2979 // - a reference to code for UC16 inputs (bytecode or compiled).
2980 // - max number of registers used by irregexp implementations.
2981 // - number of capture registers (output values) of the regexp.
2969 class JSRegExp: public JSObject { 2982 class JSRegExp: public JSObject {
2970 public: 2983 public:
2971 // Meaning of Type: 2984 // Meaning of Type:
2972 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet. 2985 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet.
2973 // ATOM: A simple string to match against using an indexOf operation. 2986 // ATOM: A simple string to match against using an indexOf operation.
2974 // IRREGEXP: Compiled with Irregexp. 2987 // IRREGEXP: Compiled with Irregexp.
2975 // IRREGEXP_NATIVE: Compiled to native code with Irregexp. 2988 // IRREGEXP_NATIVE: Compiled to native code with Irregexp.
2976 enum Type { NOT_COMPILED, ATOM, IRREGEXP }; 2989 enum Type { NOT_COMPILED, ATOM, IRREGEXP };
2977 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 }; 2990 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 };
2978 2991
2979 class Flags { 2992 class Flags {
2980 public: 2993 public:
2981 explicit Flags(uint32_t value) : value_(value) { } 2994 explicit Flags(uint32_t value) : value_(value) { }
2982 bool is_global() { return (value_ & GLOBAL) != 0; } 2995 bool is_global() { return (value_ & GLOBAL) != 0; }
2983 bool is_ignore_case() { return (value_ & IGNORE_CASE) != 0; } 2996 bool is_ignore_case() { return (value_ & IGNORE_CASE) != 0; }
2984 bool is_multiline() { return (value_ & MULTILINE) != 0; } 2997 bool is_multiline() { return (value_ & MULTILINE) != 0; }
2985 uint32_t value() { return value_; } 2998 uint32_t value() { return value_; }
2986 private: 2999 private:
2987 uint32_t value_; 3000 uint32_t value_;
2988 }; 3001 };
2989 3002
2990 DECL_ACCESSORS(data, Object) 3003 DECL_ACCESSORS(data, Object)
2991 3004
2992 inline Type TypeTag(); 3005 inline Type TypeTag();
2993 inline Flags GetFlags(); 3006 inline Flags GetFlags();
2994 inline String* Pattern(); 3007 inline String* Pattern();
2995 inline Object* DataAt(int index); 3008 inline Object* DataAt(int index);
3009 // Set implementation data after the object has been prepared.
3010 inline void SetDataAt(int index, Object* value);
2996 3011
2997 static inline JSRegExp* cast(Object* obj); 3012 static inline JSRegExp* cast(Object* obj);
2998 3013
2999 // Dispatched behavior. 3014 // Dispatched behavior.
3000 #ifdef DEBUG 3015 #ifdef DEBUG
3001 void JSRegExpVerify(); 3016 void JSRegExpVerify();
3002 #endif 3017 #endif
3003 3018
3004 static const int kDataOffset = JSObject::kHeaderSize; 3019 static const int kDataOffset = JSObject::kHeaderSize;
3005 static const int kSize = kDataOffset + kIntSize; 3020 static const int kSize = kDataOffset + kIntSize;
3006 3021
3022 // Indices in the data array.
3007 static const int kTagIndex = 0; 3023 static const int kTagIndex = 0;
3008 static const int kSourceIndex = kTagIndex + 1; 3024 static const int kSourceIndex = kTagIndex + 1;
3009 static const int kFlagsIndex = kSourceIndex + 1; 3025 static const int kFlagsIndex = kSourceIndex + 1;
3010 // These two are the same since the same entry is shared for 3026 static const int kDataIndex = kFlagsIndex + 1;
3011 // different purposes in different types of regexps. 3027 // The data fields are used in different ways depending on the
3012 static const int kAtomPatternIndex = kFlagsIndex + 1; 3028 // value of the tag.
3013 static const int kIrregexpDataIndex = kFlagsIndex + 1; 3029 // Atom regexps (literal strings).
3014 static const int kDataSize = kAtomPatternIndex + 1; 3030 static const int kAtomPatternIndex = kDataIndex;
3031
3032 static const int kAtomDataSize = kAtomPatternIndex + 1;
3033
3034 // Irregexp compiled code or bytecode for ASCII.
3035 static const int kIrregexpASCIICodeIndex = kDataIndex;
3036 // Irregexp compiled code or bytecode for UC16.
3037 static const int kIrregexpUC16CodeIndex = kDataIndex + 1;
3038 // Maximal number of registers used by either ASCII or UC16.
3039 // Only used to check that there is enough stack space
3040 static const int kIrregexpMaxRegisterCountIndex = kDataIndex + 2;
3041 // Number of captures in the compiled regexp.
3042 static const int kIrregexpCaptureCountIndex = kDataIndex + 3;
3043
3044 static const int kIrregexpDataSize = kIrregexpCaptureCountIndex + 1;
3015 }; 3045 };
3016 3046
3017 3047
3018 class CompilationCacheTable: public HashTable<0, 2> { 3048 class CompilationCacheTable: public HashTable<0, 2> {
3019 public: 3049 public:
3020 // Find cached value for a string key, otherwise return null. 3050 // Find cached value for a string key, otherwise return null.
3021 Object* Lookup(String* src); 3051 Object* Lookup(String* src);
3022 Object* LookupEval(String* src, Context* context); 3052 Object* LookupEval(String* src, Context* context);
3023 Object* LookupRegExp(String* source, JSRegExp::Flags flags); 3053 Object* LookupRegExp(String* source, JSRegExp::Flags flags);
3024 Object* Put(String* src, Object* value); 3054 Object* Put(String* src, Object* value);
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after
3799 3829
3800 // Set the content of the array to the content of storage. 3830 // Set the content of the array to the content of storage.
3801 inline void SetContent(FixedArray* storage); 3831 inline void SetContent(FixedArray* storage);
3802 3832
3803 // Support for sorting 3833 // Support for sorting
3804 Object* RemoveHoles(); 3834 Object* RemoveHoles();
3805 3835
3806 // Casting. 3836 // Casting.
3807 static inline JSArray* cast(Object* obj); 3837 static inline JSArray* cast(Object* obj);
3808 3838
3839 // Uses handles. Ensures that the fixed array backing the JSArray has at
3840 // least the stated size.
3841 void EnsureSize(int minimum_size_of_backing_fixed_array);
3842
3809 // Dispatched behavior. 3843 // Dispatched behavior.
3810 #ifdef DEBUG 3844 #ifdef DEBUG
3811 void JSArrayPrint(); 3845 void JSArrayPrint();
3812 void JSArrayVerify(); 3846 void JSArrayVerify();
3813 #endif 3847 #endif
3814 3848
3815 // Layout description. 3849 // Layout description.
3816 static const int kLengthOffset = JSObject::kHeaderSize; 3850 static const int kLengthOffset = JSObject::kHeaderSize;
3817 static const int kSize = kLengthOffset + kPointerSize; 3851 static const int kSize = kLengthOffset + kPointerSize;
3818 3852
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
4265 } else { 4299 } else {
4266 value &= ~(1 << bit_position); 4300 value &= ~(1 << bit_position);
4267 } 4301 }
4268 return value; 4302 return value;
4269 } 4303 }
4270 }; 4304 };
4271 4305
4272 } } // namespace v8::internal 4306 } } // namespace v8::internal
4273 4307
4274 #endif // V8_OBJECTS_H_ 4308 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698