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

Side by Side Diff: src/objects-inl.h

Issue 7607031: Update gc branch to bleeding_edge revision 8862. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Fix bug in weak-map merge Created 9 years, 4 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/objects-debug.cc ('k') | src/objects-printer.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 17 matching lines...) Expand all
28 // Review notes: 28 // Review notes:
29 // 29 //
30 // - The use of macros in these inline functions may seem superfluous 30 // - The use of macros in these inline functions may seem superfluous
31 // but it is absolutely needed to make sure gcc generates optimal 31 // but it is absolutely needed to make sure gcc generates optimal
32 // code. gcc is not happy when attempting to inline too deep. 32 // code. gcc is not happy when attempting to inline too deep.
33 // 33 //
34 34
35 #ifndef V8_OBJECTS_INL_H_ 35 #ifndef V8_OBJECTS_INL_H_
36 #define V8_OBJECTS_INL_H_ 36 #define V8_OBJECTS_INL_H_
37 37
38 #include "elements.h"
38 #include "objects.h" 39 #include "objects.h"
39 #include "contexts.h" 40 #include "contexts.h"
40 #include "conversions-inl.h" 41 #include "conversions-inl.h"
41 #include "heap.h" 42 #include "heap.h"
42 #include "isolate.h" 43 #include "isolate.h"
43 #include "property.h" 44 #include "property.h"
44 #include "spaces.h" 45 #include "spaces.h"
45 #include "store-buffer.h" 46 #include "store-buffer.h"
46 #include "v8memory.h" 47 #include "v8memory.h"
47 48
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE); 496 HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE);
496 } 497 }
497 498
498 499
499 bool Object::IsJSFunctionProxy() { 500 bool Object::IsJSFunctionProxy() {
500 return Object::IsHeapObject() && 501 return Object::IsHeapObject() &&
501 HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE; 502 HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE;
502 } 503 }
503 504
504 505
506 bool Object::IsJSWeakMap() {
507 return Object::IsJSObject() &&
508 HeapObject::cast(this)->map()->instance_type() == JS_WEAK_MAP_TYPE;
509 }
510
511
505 bool Object::IsJSContextExtensionObject() { 512 bool Object::IsJSContextExtensionObject() {
506 return IsHeapObject() 513 return IsHeapObject()
507 && (HeapObject::cast(this)->map()->instance_type() == 514 && (HeapObject::cast(this)->map()->instance_type() ==
508 JS_CONTEXT_EXTENSION_OBJECT_TYPE); 515 JS_CONTEXT_EXTENSION_OBJECT_TYPE);
509 } 516 }
510 517
511 518
512 bool Object::IsMap() { 519 bool Object::IsMap() {
513 return Object::IsHeapObject() 520 return Object::IsHeapObject()
514 && HeapObject::cast(this)->map()->instance_type() == MAP_TYPE; 521 && HeapObject::cast(this)->map()->instance_type() == MAP_TYPE;
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 case JS_GLOBAL_OBJECT_TYPE: 1308 case JS_GLOBAL_OBJECT_TYPE:
1302 return JSGlobalObject::kSize; 1309 return JSGlobalObject::kSize;
1303 case JS_BUILTINS_OBJECT_TYPE: 1310 case JS_BUILTINS_OBJECT_TYPE:
1304 return JSBuiltinsObject::kSize; 1311 return JSBuiltinsObject::kSize;
1305 case JS_FUNCTION_TYPE: 1312 case JS_FUNCTION_TYPE:
1306 return JSFunction::kSize; 1313 return JSFunction::kSize;
1307 case JS_VALUE_TYPE: 1314 case JS_VALUE_TYPE:
1308 return JSValue::kSize; 1315 return JSValue::kSize;
1309 case JS_ARRAY_TYPE: 1316 case JS_ARRAY_TYPE:
1310 return JSValue::kSize; 1317 return JSValue::kSize;
1318 case JS_WEAK_MAP_TYPE:
1319 return JSWeakMap::kSize;
1311 case JS_REGEXP_TYPE: 1320 case JS_REGEXP_TYPE:
1312 return JSValue::kSize; 1321 return JSValue::kSize;
1313 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 1322 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
1314 return JSObject::kHeaderSize; 1323 return JSObject::kHeaderSize;
1315 case JS_MESSAGE_OBJECT_TYPE: 1324 case JS_MESSAGE_OBJECT_TYPE:
1316 return JSMessageObject::kSize; 1325 return JSMessageObject::kSize;
1317 default: 1326 default:
1318 UNREACHABLE(); 1327 UNREACHABLE();
1319 return 0; 1328 return 0;
1320 } 1329 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1488 1497
1489 1498
1490 Object* FixedArray::get(int index) { 1499 Object* FixedArray::get(int index) {
1491 ASSERT(index >= 0 && index < this->length()); 1500 ASSERT(index >= 0 && index < this->length());
1492 return READ_FIELD(this, kHeaderSize + index * kPointerSize); 1501 return READ_FIELD(this, kHeaderSize + index * kPointerSize);
1493 } 1502 }
1494 1503
1495 1504
1496 void FixedArray::set(int index, Smi* value) { 1505 void FixedArray::set(int index, Smi* value) {
1497 ASSERT(map() != HEAP->fixed_cow_array_map()); 1506 ASSERT(map() != HEAP->fixed_cow_array_map());
1507 ASSERT(index >= 0 && index < this->length());
1498 ASSERT(reinterpret_cast<Object*>(value)->IsSmi()); 1508 ASSERT(reinterpret_cast<Object*>(value)->IsSmi());
1499 int offset = kHeaderSize + index * kPointerSize; 1509 int offset = kHeaderSize + index * kPointerSize;
1500 WRITE_FIELD(this, offset, value); 1510 WRITE_FIELD(this, offset, value);
1501 } 1511 }
1502 1512
1503 1513
1504 void FixedArray::set(int index, Object* value) { 1514 void FixedArray::set(int index, Object* value) {
1505 ASSERT(map() != HEAP->fixed_cow_array_map()); 1515 ASSERT(map() != HEAP->fixed_cow_array_map());
1506 ASSERT(index >= 0 && index < this->length()); 1516 ASSERT(index >= 0 && index < this->length());
1507 int offset = kHeaderSize + index * kPointerSize; 1517 int offset = kHeaderSize + index * kPointerSize;
(...skipping 12 matching lines...) Expand all
1520 } 1530 }
1521 1531
1522 1532
1523 inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() { 1533 inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() {
1524 ASSERT(BitCast<uint64_t>(OS::nan_value()) != kHoleNanInt64); 1534 ASSERT(BitCast<uint64_t>(OS::nan_value()) != kHoleNanInt64);
1525 ASSERT((BitCast<uint64_t>(OS::nan_value()) >> 32) != kHoleNanUpper32); 1535 ASSERT((BitCast<uint64_t>(OS::nan_value()) >> 32) != kHoleNanUpper32);
1526 return OS::nan_value(); 1536 return OS::nan_value();
1527 } 1537 }
1528 1538
1529 1539
1530 double FixedDoubleArray::get(int index) { 1540 double FixedDoubleArray::get_scalar(int index) {
1531 ASSERT(map() != HEAP->fixed_cow_array_map() && 1541 ASSERT(map() != HEAP->fixed_cow_array_map() &&
1532 map() != HEAP->fixed_array_map()); 1542 map() != HEAP->fixed_array_map());
1533 ASSERT(index >= 0 && index < this->length()); 1543 ASSERT(index >= 0 && index < this->length());
1534 double result = READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); 1544 double result = READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize);
1535 ASSERT(!is_the_hole_nan(result)); 1545 ASSERT(!is_the_hole_nan(result));
1536 return result; 1546 return result;
1537 } 1547 }
1538 1548
1539 1549
1550 MaybeObject* FixedDoubleArray::get(int index) {
1551 if (is_the_hole(index)) {
1552 return GetHeap()->the_hole_value();
1553 } else {
1554 return GetHeap()->NumberFromDouble(get_scalar(index));
1555 }
1556 }
1557
1558
1540 void FixedDoubleArray::set(int index, double value) { 1559 void FixedDoubleArray::set(int index, double value) {
1541 ASSERT(map() != HEAP->fixed_cow_array_map() && 1560 ASSERT(map() != HEAP->fixed_cow_array_map() &&
1542 map() != HEAP->fixed_array_map()); 1561 map() != HEAP->fixed_array_map());
1543 int offset = kHeaderSize + index * kDoubleSize; 1562 int offset = kHeaderSize + index * kDoubleSize;
1544 if (isnan(value)) value = canonical_not_the_hole_nan_as_double(); 1563 if (isnan(value)) value = canonical_not_the_hole_nan_as_double();
1545 WRITE_DOUBLE_FIELD(this, offset, value); 1564 WRITE_DOUBLE_FIELD(this, offset, value);
1546 } 1565 }
1547 1566
1548 1567
1549 void FixedDoubleArray::set_the_hole(int index) { 1568 void FixedDoubleArray::set_the_hole(int index) {
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
1955 CAST_ACCESSOR(JSFunction) 1974 CAST_ACCESSOR(JSFunction)
1956 CAST_ACCESSOR(GlobalObject) 1975 CAST_ACCESSOR(GlobalObject)
1957 CAST_ACCESSOR(JSGlobalProxy) 1976 CAST_ACCESSOR(JSGlobalProxy)
1958 CAST_ACCESSOR(JSGlobalObject) 1977 CAST_ACCESSOR(JSGlobalObject)
1959 CAST_ACCESSOR(JSBuiltinsObject) 1978 CAST_ACCESSOR(JSBuiltinsObject)
1960 CAST_ACCESSOR(Code) 1979 CAST_ACCESSOR(Code)
1961 CAST_ACCESSOR(JSArray) 1980 CAST_ACCESSOR(JSArray)
1962 CAST_ACCESSOR(JSRegExp) 1981 CAST_ACCESSOR(JSRegExp)
1963 CAST_ACCESSOR(JSProxy) 1982 CAST_ACCESSOR(JSProxy)
1964 CAST_ACCESSOR(JSFunctionProxy) 1983 CAST_ACCESSOR(JSFunctionProxy)
1984 CAST_ACCESSOR(JSWeakMap)
1965 CAST_ACCESSOR(Foreign) 1985 CAST_ACCESSOR(Foreign)
1966 CAST_ACCESSOR(ByteArray) 1986 CAST_ACCESSOR(ByteArray)
1967 CAST_ACCESSOR(FreeSpace) 1987 CAST_ACCESSOR(FreeSpace)
1968 CAST_ACCESSOR(ExternalArray) 1988 CAST_ACCESSOR(ExternalArray)
1969 CAST_ACCESSOR(ExternalByteArray) 1989 CAST_ACCESSOR(ExternalByteArray)
1970 CAST_ACCESSOR(ExternalUnsignedByteArray) 1990 CAST_ACCESSOR(ExternalUnsignedByteArray)
1971 CAST_ACCESSOR(ExternalShortArray) 1991 CAST_ACCESSOR(ExternalShortArray)
1972 CAST_ACCESSOR(ExternalUnsignedShortArray) 1992 CAST_ACCESSOR(ExternalUnsignedShortArray)
1973 CAST_ACCESSOR(ExternalIntArray) 1993 CAST_ACCESSOR(ExternalIntArray)
1974 CAST_ACCESSOR(ExternalUnsignedIntArray) 1994 CAST_ACCESSOR(ExternalUnsignedIntArray)
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
2260 Address ByteArray::GetDataStartAddress() { 2280 Address ByteArray::GetDataStartAddress() {
2261 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; 2281 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize;
2262 } 2282 }
2263 2283
2264 2284
2265 uint8_t* ExternalPixelArray::external_pixel_pointer() { 2285 uint8_t* ExternalPixelArray::external_pixel_pointer() {
2266 return reinterpret_cast<uint8_t*>(external_pointer()); 2286 return reinterpret_cast<uint8_t*>(external_pointer());
2267 } 2287 }
2268 2288
2269 2289
2270 uint8_t ExternalPixelArray::get(int index) { 2290 uint8_t ExternalPixelArray::get_scalar(int index) {
2271 ASSERT((index >= 0) && (index < this->length())); 2291 ASSERT((index >= 0) && (index < this->length()));
2272 uint8_t* ptr = external_pixel_pointer(); 2292 uint8_t* ptr = external_pixel_pointer();
2273 return ptr[index]; 2293 return ptr[index];
2274 } 2294 }
2275 2295
2276 2296
2297 MaybeObject* ExternalPixelArray::get(int index) {
2298 return Smi::FromInt(static_cast<int>(get_scalar(index)));
2299 }
2300
2301
2277 void ExternalPixelArray::set(int index, uint8_t value) { 2302 void ExternalPixelArray::set(int index, uint8_t value) {
2278 ASSERT((index >= 0) && (index < this->length())); 2303 ASSERT((index >= 0) && (index < this->length()));
2279 uint8_t* ptr = external_pixel_pointer(); 2304 uint8_t* ptr = external_pixel_pointer();
2280 ptr[index] = value; 2305 ptr[index] = value;
2281 } 2306 }
2282 2307
2283 2308
2284 void* ExternalArray::external_pointer() { 2309 void* ExternalArray::external_pointer() {
2285 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); 2310 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
2286 return reinterpret_cast<void*>(ptr); 2311 return reinterpret_cast<void*>(ptr);
2287 } 2312 }
2288 2313
2289 2314
2290 void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) { 2315 void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) {
2291 intptr_t ptr = reinterpret_cast<intptr_t>(value); 2316 intptr_t ptr = reinterpret_cast<intptr_t>(value);
2292 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr); 2317 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr);
2293 } 2318 }
2294 2319
2295 2320
2296 int8_t ExternalByteArray::get(int index) { 2321 int8_t ExternalByteArray::get_scalar(int index) {
2297 ASSERT((index >= 0) && (index < this->length())); 2322 ASSERT((index >= 0) && (index < this->length()));
2298 int8_t* ptr = static_cast<int8_t*>(external_pointer()); 2323 int8_t* ptr = static_cast<int8_t*>(external_pointer());
2299 return ptr[index]; 2324 return ptr[index];
2300 } 2325 }
2301 2326
2302 2327
2328 MaybeObject* ExternalByteArray::get(int index) {
2329 return Smi::FromInt(static_cast<int>(get_scalar(index)));
2330 }
2331
2332
2303 void ExternalByteArray::set(int index, int8_t value) { 2333 void ExternalByteArray::set(int index, int8_t value) {
2304 ASSERT((index >= 0) && (index < this->length())); 2334 ASSERT((index >= 0) && (index < this->length()));
2305 int8_t* ptr = static_cast<int8_t*>(external_pointer()); 2335 int8_t* ptr = static_cast<int8_t*>(external_pointer());
2306 ptr[index] = value; 2336 ptr[index] = value;
2307 } 2337 }
2308 2338
2309 2339
2310 uint8_t ExternalUnsignedByteArray::get(int index) { 2340 uint8_t ExternalUnsignedByteArray::get_scalar(int index) {
2311 ASSERT((index >= 0) && (index < this->length())); 2341 ASSERT((index >= 0) && (index < this->length()));
2312 uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); 2342 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
2313 return ptr[index]; 2343 return ptr[index];
2314 } 2344 }
2315 2345
2316 2346
2347 MaybeObject* ExternalUnsignedByteArray::get(int index) {
2348 return Smi::FromInt(static_cast<int>(get_scalar(index)));
2349 }
2350
2351
2317 void ExternalUnsignedByteArray::set(int index, uint8_t value) { 2352 void ExternalUnsignedByteArray::set(int index, uint8_t value) {
2318 ASSERT((index >= 0) && (index < this->length())); 2353 ASSERT((index >= 0) && (index < this->length()));
2319 uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); 2354 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
2320 ptr[index] = value; 2355 ptr[index] = value;
2321 } 2356 }
2322 2357
2323 2358
2324 int16_t ExternalShortArray::get(int index) { 2359 int16_t ExternalShortArray::get_scalar(int index) {
2325 ASSERT((index >= 0) && (index < this->length())); 2360 ASSERT((index >= 0) && (index < this->length()));
2326 int16_t* ptr = static_cast<int16_t*>(external_pointer()); 2361 int16_t* ptr = static_cast<int16_t*>(external_pointer());
2327 return ptr[index]; 2362 return ptr[index];
2328 } 2363 }
2329 2364
2330 2365
2366 MaybeObject* ExternalShortArray::get(int index) {
2367 return Smi::FromInt(static_cast<int>(get_scalar(index)));
2368 }
2369
2370
2331 void ExternalShortArray::set(int index, int16_t value) { 2371 void ExternalShortArray::set(int index, int16_t value) {
2332 ASSERT((index >= 0) && (index < this->length())); 2372 ASSERT((index >= 0) && (index < this->length()));
2333 int16_t* ptr = static_cast<int16_t*>(external_pointer()); 2373 int16_t* ptr = static_cast<int16_t*>(external_pointer());
2334 ptr[index] = value; 2374 ptr[index] = value;
2335 } 2375 }
2336 2376
2337 2377
2338 uint16_t ExternalUnsignedShortArray::get(int index) { 2378 uint16_t ExternalUnsignedShortArray::get_scalar(int index) {
2339 ASSERT((index >= 0) && (index < this->length())); 2379 ASSERT((index >= 0) && (index < this->length()));
2340 uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); 2380 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
2341 return ptr[index]; 2381 return ptr[index];
2342 } 2382 }
2343 2383
2344 2384
2385 MaybeObject* ExternalUnsignedShortArray::get(int index) {
2386 return Smi::FromInt(static_cast<int>(get_scalar(index)));
2387 }
2388
2389
2345 void ExternalUnsignedShortArray::set(int index, uint16_t value) { 2390 void ExternalUnsignedShortArray::set(int index, uint16_t value) {
2346 ASSERT((index >= 0) && (index < this->length())); 2391 ASSERT((index >= 0) && (index < this->length()));
2347 uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); 2392 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
2348 ptr[index] = value; 2393 ptr[index] = value;
2349 } 2394 }
2350 2395
2351 2396
2352 int32_t ExternalIntArray::get(int index) { 2397 int32_t ExternalIntArray::get_scalar(int index) {
2353 ASSERT((index >= 0) && (index < this->length())); 2398 ASSERT((index >= 0) && (index < this->length()));
2354 int32_t* ptr = static_cast<int32_t*>(external_pointer()); 2399 int32_t* ptr = static_cast<int32_t*>(external_pointer());
2355 return ptr[index]; 2400 return ptr[index];
2356 } 2401 }
2357 2402
2358 2403
2404 MaybeObject* ExternalIntArray::get(int index) {
2405 return GetHeap()->NumberFromInt32(get_scalar(index));
2406 }
2407
2408
2359 void ExternalIntArray::set(int index, int32_t value) { 2409 void ExternalIntArray::set(int index, int32_t value) {
2360 ASSERT((index >= 0) && (index < this->length())); 2410 ASSERT((index >= 0) && (index < this->length()));
2361 int32_t* ptr = static_cast<int32_t*>(external_pointer()); 2411 int32_t* ptr = static_cast<int32_t*>(external_pointer());
2362 ptr[index] = value; 2412 ptr[index] = value;
2363 } 2413 }
2364 2414
2365 2415
2366 uint32_t ExternalUnsignedIntArray::get(int index) { 2416 uint32_t ExternalUnsignedIntArray::get_scalar(int index) {
2367 ASSERT((index >= 0) && (index < this->length())); 2417 ASSERT((index >= 0) && (index < this->length()));
2368 uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); 2418 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
2369 return ptr[index]; 2419 return ptr[index];
2370 } 2420 }
2371 2421
2372 2422
2423 MaybeObject* ExternalUnsignedIntArray::get(int index) {
2424 return GetHeap()->NumberFromUint32(get_scalar(index));
2425 }
2426
2427
2373 void ExternalUnsignedIntArray::set(int index, uint32_t value) { 2428 void ExternalUnsignedIntArray::set(int index, uint32_t value) {
2374 ASSERT((index >= 0) && (index < this->length())); 2429 ASSERT((index >= 0) && (index < this->length()));
2375 uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); 2430 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
2376 ptr[index] = value; 2431 ptr[index] = value;
2377 } 2432 }
2378 2433
2379 2434
2380 float ExternalFloatArray::get(int index) { 2435 float ExternalFloatArray::get_scalar(int index) {
2381 ASSERT((index >= 0) && (index < this->length())); 2436 ASSERT((index >= 0) && (index < this->length()));
2382 float* ptr = static_cast<float*>(external_pointer()); 2437 float* ptr = static_cast<float*>(external_pointer());
2383 return ptr[index]; 2438 return ptr[index];
2384 } 2439 }
2385 2440
2386 2441
2442 MaybeObject* ExternalFloatArray::get(int index) {
2443 return GetHeap()->NumberFromDouble(get_scalar(index));
2444 }
2445
2446
2387 void ExternalFloatArray::set(int index, float value) { 2447 void ExternalFloatArray::set(int index, float value) {
2388 ASSERT((index >= 0) && (index < this->length())); 2448 ASSERT((index >= 0) && (index < this->length()));
2389 float* ptr = static_cast<float*>(external_pointer()); 2449 float* ptr = static_cast<float*>(external_pointer());
2390 ptr[index] = value; 2450 ptr[index] = value;
2391 } 2451 }
2392 2452
2393 2453
2394 double ExternalDoubleArray::get(int index) { 2454 double ExternalDoubleArray::get_scalar(int index) {
2395 ASSERT((index >= 0) && (index < this->length())); 2455 ASSERT((index >= 0) && (index < this->length()));
2396 double* ptr = static_cast<double*>(external_pointer()); 2456 double* ptr = static_cast<double*>(external_pointer());
2397 return ptr[index]; 2457 return ptr[index];
2398 } 2458 }
2399 2459
2400 2460
2461 MaybeObject* ExternalDoubleArray::get(int index) {
2462 return GetHeap()->NumberFromDouble(get_scalar(index));
2463 }
2464
2465
2401 void ExternalDoubleArray::set(int index, double value) { 2466 void ExternalDoubleArray::set(int index, double value) {
2402 ASSERT((index >= 0) && (index < this->length())); 2467 ASSERT((index >= 0) && (index < this->length()));
2403 double* ptr = static_cast<double*>(external_pointer()); 2468 double* ptr = static_cast<double*>(external_pointer());
2404 ptr[index] = value; 2469 ptr[index] = value;
2405 } 2470 }
2406 2471
2407 2472
2408 int Map::visitor_id() { 2473 int Map::visitor_id() {
2409 return READ_BYTE_FIELD(this, kVisitorIdOffset); 2474 return READ_BYTE_FIELD(this, kVisitorIdOffset);
2410 } 2475 }
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
3321 kOptimizationDisabled, 3386 kOptimizationDisabled,
3322 disable)); 3387 disable));
3323 // If disabling optimizations we reflect that in the code object so 3388 // If disabling optimizations we reflect that in the code object so
3324 // it will not be counted as optimizable code. 3389 // it will not be counted as optimizable code.
3325 if ((code()->kind() == Code::FUNCTION) && disable) { 3390 if ((code()->kind() == Code::FUNCTION) && disable) {
3326 code()->set_optimizable(false); 3391 code()->set_optimizable(false);
3327 } 3392 }
3328 } 3393 }
3329 3394
3330 3395
3331 BOOL_ACCESSORS(SharedFunctionInfo, 3396 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, strict_mode,
3332 compiler_hints,
3333 strict_mode,
3334 kStrictModeFunction) 3397 kStrictModeFunction)
3335 3398 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, native, kNative)
3336 3399 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints,
3337 bool SharedFunctionInfo::native() { 3400 name_should_print_as_anonymous,
3338 return BooleanBit::get(compiler_hints(), kNative); 3401 kNameShouldPrintAsAnonymous)
3339 } 3402 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, bound, kBoundFunction)
3340 3403 BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous)
3341
3342 void SharedFunctionInfo::set_native(bool value) {
3343 set_compiler_hints(BooleanBit::set(compiler_hints(),
3344 kNative,
3345 value));
3346 }
3347
3348
3349 bool SharedFunctionInfo::bound() {
3350 return BooleanBit::get(compiler_hints(), kBoundFunction);
3351 }
3352
3353
3354 void SharedFunctionInfo::set_bound(bool value) {
3355 set_compiler_hints(BooleanBit::set(compiler_hints(),
3356 kBoundFunction,
3357 value));
3358 }
3359
3360 3404
3361 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset) 3405 ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset)
3362 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset) 3406 ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset)
3363 3407
3364 ACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset) 3408 ACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset)
3365 3409
3366 bool Script::HasValidSource() { 3410 bool Script::HasValidSource() {
3367 Object* src = this->source(); 3411 Object* src = this->source();
3368 if (!src->IsString()) return true; 3412 if (!src->IsString()) return true;
3369 String* src_str = String::cast(src); 3413 String* src_str = String::cast(src);
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
3656 ASSERT(id < kJSBuiltinsCount); // id is unsigned. 3700 ASSERT(id < kJSBuiltinsCount); // id is unsigned.
3657 WRITE_FIELD(this, OffsetOfCodeWithId(id), value); 3701 WRITE_FIELD(this, OffsetOfCodeWithId(id), value);
3658 ASSERT(!HEAP->InNewSpace(value)); 3702 ASSERT(!HEAP->InNewSpace(value));
3659 } 3703 }
3660 3704
3661 3705
3662 ACCESSORS(JSProxy, handler, Object, kHandlerOffset) 3706 ACCESSORS(JSProxy, handler, Object, kHandlerOffset)
3663 ACCESSORS(JSProxy, padding, Object, kPaddingOffset) 3707 ACCESSORS(JSProxy, padding, Object, kPaddingOffset)
3664 3708
3665 3709
3710 ACCESSORS(JSWeakMap, table, ObjectHashTable, kTableOffset)
3711 ACCESSORS_GCSAFE(JSWeakMap, next, Object, kNextOffset)
3712
3713
3714 ObjectHashTable* JSWeakMap::unchecked_table() {
3715 return reinterpret_cast<ObjectHashTable*>(READ_FIELD(this, kTableOffset));
3716 }
3717
3718
3666 Address Foreign::address() { 3719 Address Foreign::address() {
3667 return AddressFrom<Address>(READ_INTPTR_FIELD(this, kAddressOffset)); 3720 return AddressFrom<Address>(READ_INTPTR_FIELD(this, kAddressOffset));
3668 } 3721 }
3669 3722
3670 3723
3671 void Foreign::set_address(Address value) { 3724 void Foreign::set_address(Address value) {
3672 WRITE_INTPTR_FIELD(this, kAddressOffset, OffsetFrom(value)); 3725 WRITE_INTPTR_FIELD(this, kAddressOffset, OffsetFrom(value));
3673 } 3726 }
3674 3727
3675 3728
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
3841 (kind == FAST_DOUBLE_ELEMENTS && 3894 (kind == FAST_DOUBLE_ELEMENTS &&
3842 elements()->IsFixedDoubleArray()) || 3895 elements()->IsFixedDoubleArray()) ||
3843 (kind == DICTIONARY_ELEMENTS && 3896 (kind == DICTIONARY_ELEMENTS &&
3844 elements()->IsFixedArray() && 3897 elements()->IsFixedArray() &&
3845 elements()->IsDictionary()) || 3898 elements()->IsDictionary()) ||
3846 (kind > DICTIONARY_ELEMENTS)); 3899 (kind > DICTIONARY_ELEMENTS));
3847 return kind; 3900 return kind;
3848 } 3901 }
3849 3902
3850 3903
3904 ElementsAccessor* JSObject::GetElementsAccessor() {
3905 return ElementsAccessor::ForKind(GetElementsKind());
3906 }
3907
3908
3851 bool JSObject::HasFastElements() { 3909 bool JSObject::HasFastElements() {
3852 return GetElementsKind() == FAST_ELEMENTS; 3910 return GetElementsKind() == FAST_ELEMENTS;
3853 } 3911 }
3854 3912
3855 3913
3856 bool JSObject::HasFastDoubleElements() { 3914 bool JSObject::HasFastDoubleElements() {
3857 return GetElementsKind() == FAST_DOUBLE_ELEMENTS; 3915 return GetElementsKind() == FAST_DOUBLE_ELEMENTS;
3858 } 3916 }
3859 3917
3860 3918
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
4259 ASSERT(!maybe_hash->IsFailure()); 4317 ASSERT(!maybe_hash->IsFailure());
4260 return Smi::cast(maybe_hash->ToObjectUnchecked())->value(); 4318 return Smi::cast(maybe_hash->ToObjectUnchecked())->value();
4261 } 4319 }
4262 4320
4263 4321
4264 MaybeObject* ObjectHashTableShape::AsObject(JSObject* key) { 4322 MaybeObject* ObjectHashTableShape::AsObject(JSObject* key) {
4265 return key; 4323 return key;
4266 } 4324 }
4267 4325
4268 4326
4327 void ObjectHashTable::RemoveEntry(int entry) {
4328 RemoveEntry(entry, GetHeap());
4329 }
4330
4331
4269 void Map::ClearCodeCache(Heap* heap) { 4332 void Map::ClearCodeCache(Heap* heap) {
4270 // No write barrier is needed since empty_fixed_array is not in new space. 4333 // No write barrier is needed since empty_fixed_array is not in new space.
4271 // Please note this function is used during marking: 4334 // Please note this function is used during marking:
4272 // - MarkCompactCollector::MarkUnmarkedObject 4335 // - MarkCompactCollector::MarkUnmarkedObject
4273 ASSERT(!heap->InNewSpace(heap->raw_unchecked_empty_fixed_array())); 4336 ASSERT(!heap->InNewSpace(heap->raw_unchecked_empty_fixed_array()));
4274 WRITE_FIELD(this, kCodeCacheOffset, heap->raw_unchecked_empty_fixed_array()); 4337 WRITE_FIELD(this, kCodeCacheOffset, heap->raw_unchecked_empty_fixed_array());
4275 } 4338 }
4276 4339
4277 4340
4278 void JSArray::EnsureSize(int required_size) { 4341 void JSArray::EnsureSize(int required_size) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4409 #undef WRITE_INT_FIELD 4472 #undef WRITE_INT_FIELD
4410 #undef READ_SHORT_FIELD 4473 #undef READ_SHORT_FIELD
4411 #undef WRITE_SHORT_FIELD 4474 #undef WRITE_SHORT_FIELD
4412 #undef READ_BYTE_FIELD 4475 #undef READ_BYTE_FIELD
4413 #undef WRITE_BYTE_FIELD 4476 #undef WRITE_BYTE_FIELD
4414 4477
4415 4478
4416 } } // namespace v8::internal 4479 } } // namespace v8::internal
4417 4480
4418 #endif // V8_OBJECTS_INL_H_ 4481 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698