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

Side by Side Diff: include/v8.h

Issue 5188006: Push version 2.5.7 to trunk.... (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: Created 10 years, 1 month 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 | « ChangeLog ('k') | src/SConscript » ('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 3264 matching lines...) Expand 10 before | Expand all | Expand 10 after
3275 virtual WriteResult WriteAsciiChunk(char* data, int size) = 0; 3275 virtual WriteResult WriteAsciiChunk(char* data, int size) = 0;
3276 }; 3276 };
3277 3277
3278 3278
3279 3279
3280 // --- I m p l e m e n t a t i o n --- 3280 // --- I m p l e m e n t a t i o n ---
3281 3281
3282 3282
3283 namespace internal { 3283 namespace internal {
3284 3284
3285 const int kPointerSize = sizeof(void*); // NOLINT 3285 static const int kApiPointerSize = sizeof(void*); // NOLINT
3286 const int kIntSize = sizeof(int); // NOLINT 3286 static const int kApiIntSize = sizeof(int); // NOLINT
3287 3287
3288 // Tag information for HeapObject. 3288 // Tag information for HeapObject.
3289 const int kHeapObjectTag = 1; 3289 const int kHeapObjectTag = 1;
3290 const int kHeapObjectTagSize = 2; 3290 const int kHeapObjectTagSize = 2;
3291 const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; 3291 const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1;
3292 3292
3293 // Tag information for Smi. 3293 // Tag information for Smi.
3294 const int kSmiTag = 0; 3294 const int kSmiTag = 0;
3295 const int kSmiTagSize = 1; 3295 const int kSmiTagSize = 1;
3296 const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1; 3296 const intptr_t kSmiTagMask = (1 << kSmiTagSize) - 1;
(...skipping 15 matching lines...) Expand all
3312 template <> struct SmiConstants<8> { 3312 template <> struct SmiConstants<8> {
3313 static const int kSmiShiftSize = 31; 3313 static const int kSmiShiftSize = 31;
3314 static const int kSmiValueSize = 32; 3314 static const int kSmiValueSize = 32;
3315 static inline int SmiToInt(internal::Object* value) { 3315 static inline int SmiToInt(internal::Object* value) {
3316 int shift_bits = kSmiTagSize + kSmiShiftSize; 3316 int shift_bits = kSmiTagSize + kSmiShiftSize;
3317 // Shift down and throw away top 32 bits. 3317 // Shift down and throw away top 32 bits.
3318 return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits); 3318 return static_cast<int>(reinterpret_cast<intptr_t>(value) >> shift_bits);
3319 } 3319 }
3320 }; 3320 };
3321 3321
3322 const int kSmiShiftSize = SmiConstants<kPointerSize>::kSmiShiftSize; 3322 const int kSmiShiftSize = SmiConstants<kApiPointerSize>::kSmiShiftSize;
3323 const int kSmiValueSize = SmiConstants<kPointerSize>::kSmiValueSize; 3323 const int kSmiValueSize = SmiConstants<kApiPointerSize>::kSmiValueSize;
3324 3324
3325 template <size_t ptr_size> struct InternalConstants; 3325 template <size_t ptr_size> struct InternalConstants;
3326 3326
3327 // Internal constants for 32-bit systems. 3327 // Internal constants for 32-bit systems.
3328 template <> struct InternalConstants<4> { 3328 template <> struct InternalConstants<4> {
3329 static const int kStringResourceOffset = 3 * kPointerSize; 3329 static const int kStringResourceOffset = 3 * kApiPointerSize;
3330 }; 3330 };
3331 3331
3332 // Internal constants for 64-bit systems. 3332 // Internal constants for 64-bit systems.
3333 template <> struct InternalConstants<8> { 3333 template <> struct InternalConstants<8> {
3334 static const int kStringResourceOffset = 3 * kPointerSize; 3334 static const int kStringResourceOffset = 3 * kApiPointerSize;
3335 }; 3335 };
3336 3336
3337 /** 3337 /**
3338 * This class exports constants and functionality from within v8 that 3338 * This class exports constants and functionality from within v8 that
3339 * is necessary to implement inline functions in the v8 api. Don't 3339 * is necessary to implement inline functions in the v8 api. Don't
3340 * depend on functions and constants defined here. 3340 * depend on functions and constants defined here.
3341 */ 3341 */
3342 class Internals { 3342 class Internals {
3343 public: 3343 public:
3344 3344
3345 // These values match non-compiler-dependent values defined within 3345 // These values match non-compiler-dependent values defined within
3346 // the implementation of v8. 3346 // the implementation of v8.
3347 static const int kHeapObjectMapOffset = 0; 3347 static const int kHeapObjectMapOffset = 0;
3348 static const int kMapInstanceTypeOffset = kPointerSize + kIntSize; 3348 static const int kMapInstanceTypeOffset = kApiPointerSize + kApiIntSize;
3349 static const int kStringResourceOffset = 3349 static const int kStringResourceOffset =
3350 InternalConstants<kPointerSize>::kStringResourceOffset; 3350 InternalConstants<kApiPointerSize>::kStringResourceOffset;
3351 3351
3352 static const int kProxyProxyOffset = kPointerSize; 3352 static const int kProxyProxyOffset = kApiPointerSize;
3353 static const int kJSObjectHeaderSize = 3 * kPointerSize; 3353 static const int kJSObjectHeaderSize = 3 * kApiPointerSize;
3354 static const int kFullStringRepresentationMask = 0x07; 3354 static const int kFullStringRepresentationMask = 0x07;
3355 static const int kExternalTwoByteRepresentationTag = 0x02; 3355 static const int kExternalTwoByteRepresentationTag = 0x02;
3356 3356
3357 static const int kJSObjectType = 0x9f; 3357 static const int kJSObjectType = 0x9f;
3358 static const int kFirstNonstringType = 0x80; 3358 static const int kFirstNonstringType = 0x80;
3359 static const int kProxyType = 0x85; 3359 static const int kProxyType = 0x85;
3360 3360
3361 static inline bool HasHeapObjectTag(internal::Object* value) { 3361 static inline bool HasHeapObjectTag(internal::Object* value) {
3362 return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) == 3362 return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) ==
3363 kHeapObjectTag); 3363 kHeapObjectTag);
3364 } 3364 }
3365 3365
3366 static inline bool HasSmiTag(internal::Object* value) { 3366 static inline bool HasSmiTag(internal::Object* value) {
3367 return ((reinterpret_cast<intptr_t>(value) & kSmiTagMask) == kSmiTag); 3367 return ((reinterpret_cast<intptr_t>(value) & kSmiTagMask) == kSmiTag);
3368 } 3368 }
3369 3369
3370 static inline int SmiValue(internal::Object* value) { 3370 static inline int SmiValue(internal::Object* value) {
3371 return SmiConstants<kPointerSize>::SmiToInt(value); 3371 return SmiConstants<kApiPointerSize>::SmiToInt(value);
3372 } 3372 }
3373 3373
3374 static inline int GetInstanceType(internal::Object* obj) { 3374 static inline int GetInstanceType(internal::Object* obj) {
3375 typedef internal::Object O; 3375 typedef internal::Object O;
3376 O* map = ReadField<O*>(obj, kHeapObjectMapOffset); 3376 O* map = ReadField<O*>(obj, kHeapObjectMapOffset);
3377 return ReadField<uint8_t>(map, kMapInstanceTypeOffset); 3377 return ReadField<uint8_t>(map, kMapInstanceTypeOffset);
3378 } 3378 }
3379 3379
3380 static inline void* GetExternalPointer(internal::Object* obj) { 3380 static inline void* GetExternalPointer(internal::Object* obj) {
3381 if (HasSmiTag(obj)) { 3381 if (HasSmiTag(obj)) {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
3552 3552
3553 3553
3554 Local<Value> Object::UncheckedGetInternalField(int index) { 3554 Local<Value> Object::UncheckedGetInternalField(int index) {
3555 typedef internal::Object O; 3555 typedef internal::Object O;
3556 typedef internal::Internals I; 3556 typedef internal::Internals I;
3557 O* obj = *reinterpret_cast<O**>(this); 3557 O* obj = *reinterpret_cast<O**>(this);
3558 if (I::GetInstanceType(obj) == I::kJSObjectType) { 3558 if (I::GetInstanceType(obj) == I::kJSObjectType) {
3559 // If the object is a plain JSObject, which is the common case, 3559 // If the object is a plain JSObject, which is the common case,
3560 // we know where to find the internal fields and can return the 3560 // we know where to find the internal fields and can return the
3561 // value directly. 3561 // value directly.
3562 int offset = I::kJSObjectHeaderSize + (internal::kPointerSize * index); 3562 int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index);
3563 O* value = I::ReadField<O*>(obj, offset); 3563 O* value = I::ReadField<O*>(obj, offset);
3564 O** result = HandleScope::CreateHandle(value); 3564 O** result = HandleScope::CreateHandle(value);
3565 return Local<Value>(reinterpret_cast<Value*>(result)); 3565 return Local<Value>(reinterpret_cast<Value*>(result));
3566 } else { 3566 } else {
3567 return Local<Value>(); 3567 return Local<Value>();
3568 } 3568 }
3569 } 3569 }
3570 3570
3571 3571
3572 void* External::Unwrap(Handle<v8::Value> obj) { 3572 void* External::Unwrap(Handle<v8::Value> obj) {
(...skipping 15 matching lines...) Expand all
3588 void* Object::GetPointerFromInternalField(int index) { 3588 void* Object::GetPointerFromInternalField(int index) {
3589 typedef internal::Object O; 3589 typedef internal::Object O;
3590 typedef internal::Internals I; 3590 typedef internal::Internals I;
3591 3591
3592 O* obj = *reinterpret_cast<O**>(this); 3592 O* obj = *reinterpret_cast<O**>(this);
3593 3593
3594 if (I::GetInstanceType(obj) == I::kJSObjectType) { 3594 if (I::GetInstanceType(obj) == I::kJSObjectType) {
3595 // If the object is a plain JSObject, which is the common case, 3595 // If the object is a plain JSObject, which is the common case,
3596 // we know where to find the internal fields and can return the 3596 // we know where to find the internal fields and can return the
3597 // value directly. 3597 // value directly.
3598 int offset = I::kJSObjectHeaderSize + (internal::kPointerSize * index); 3598 int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index);
3599 O* value = I::ReadField<O*>(obj, offset); 3599 O* value = I::ReadField<O*>(obj, offset);
3600 return I::GetExternalPointer(value); 3600 return I::GetExternalPointer(value);
3601 } 3601 }
3602 3602
3603 return SlowGetPointerFromInternalField(index); 3603 return SlowGetPointerFromInternalField(index);
3604 } 3604 }
3605 3605
3606 3606
3607 String* String::Cast(v8::Value* value) { 3607 String* String::Cast(v8::Value* value) {
3608 #ifdef V8_ENABLE_CHECKS 3608 #ifdef V8_ENABLE_CHECKS
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
3739 3739
3740 3740
3741 } // namespace v8 3741 } // namespace v8
3742 3742
3743 3743
3744 #undef V8EXPORT 3744 #undef V8EXPORT
3745 #undef TYPE_CHECK 3745 #undef TYPE_CHECK
3746 3746
3747 3747
3748 #endif // V8_H_ 3748 #endif // V8_H_
OLDNEW
« no previous file with comments | « ChangeLog ('k') | src/SConscript » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698