Changeset 157539 in webkit for trunk/Source/JavaScriptCore/runtime/Structure.cpp
- Timestamp:
- Oct 16, 2013, 4:47:45 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r157424 r157539 281 281 // property map. We don't want getConcurrently() to see the property map in a half-baked 282 282 // state. 283 ConcurrentJITLocker locker(m_lock);283 GCSafeConcurrentJITLocker locker(m_lock, vm.heap); 284 284 if (!table) 285 285 createPropertyMap(locker, vm, numberOfSlotsForLastOffset(m_offset, m_inlineCapacity)); … … 314 314 StringImpl* rep = propertyName.uid(); 315 315 316 materializePropertyMapIfNecessary(vm); 316 DeferGC deferGC(vm.heap); 317 materializePropertyMapIfNecessary(vm, deferGC); 317 318 318 319 ASSERT(isDictionary()); … … 452 453 transition->m_prototype.set(vm, transition, prototype); 453 454 454 structure->materializePropertyMapIfNecessary(vm); 455 DeferGC deferGC(vm.heap); 456 structure->materializePropertyMapIfNecessary(vm, deferGC); 455 457 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm, transition)); 456 458 transition->m_offset = structure->m_offset; … … 468 470 ++transition->m_specificFunctionThrashCount; 469 471 470 structure->materializePropertyMapIfNecessary(vm); 472 DeferGC deferGC(vm.heap); 473 structure->materializePropertyMapIfNecessary(vm, deferGC); 471 474 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm, transition)); 472 475 transition->m_offset = structure->m_offset; … … 486 489 Structure* Structure::attributeChangeTransition(VM& vm, Structure* structure, PropertyName propertyName, unsigned attributes) 487 490 { 491 DeferGC deferGC(vm.heap); 488 492 if (!structure->isUncacheableDictionary()) { 489 493 Structure* transition = create(vm, structure); 490 494 491 structure->materializePropertyMapIfNecessary(vm );495 structure->materializePropertyMapIfNecessary(vm, deferGC); 492 496 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm, transition)); 493 497 transition->m_offset = structure->m_offset; … … 512 516 Structure* transition = create(vm, structure); 513 517 514 structure->materializePropertyMapIfNecessary(vm); 518 DeferGC deferGC(vm.heap); 519 structure->materializePropertyMapIfNecessary(vm, deferGC); 515 520 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm, transition)); 516 521 transition->m_offset = structure->m_offset; … … 572 577 // Don't set m_offset, as one can not transition to this. 573 578 574 structure->materializePropertyMapIfNecessary(vm); 579 DeferGC deferGC(vm.heap); 580 structure->materializePropertyMapIfNecessary(vm, deferGC); 575 581 transition->propertyTable().set(vm, transition, structure->copyPropertyTableForPinning(vm, transition)); 576 582 transition->m_offset = structure->m_offset; … … 584 590 PropertyTable* Structure::takePropertyTableOrCloneIfPinned(VM& vm, Structure* owner) 585 591 { 586 materializePropertyMapIfNecessaryForPinning(vm); 592 DeferGC deferGC(vm.heap); 593 materializePropertyMapIfNecessaryForPinning(vm, deferGC); 587 594 588 595 if (m_isPinnedPropertyTable) … … 641 648 return false; 642 649 643 materializePropertyMapIfNecessary(vm); 650 DeferGC deferGC(vm.heap); 651 materializePropertyMapIfNecessary(vm, deferGC); 644 652 if (!propertyTable()) 645 653 return true; … … 659 667 return false; 660 668 661 materializePropertyMapIfNecessary(vm); 669 DeferGC deferGC(vm.heap); 670 materializePropertyMapIfNecessary(vm, deferGC); 662 671 if (!propertyTable()) 663 672 return true; … … 719 728 specificValue = 0; 720 729 721 materializePropertyMapIfNecessaryForPinning(vm); 730 DeferGC deferGC(vm.heap); 731 materializePropertyMapIfNecessaryForPinning(vm, deferGC); 722 732 723 733 pin(); … … 731 741 ASSERT(!enumerationCache()); 732 742 733 materializePropertyMapIfNecessaryForPinning(vm); 743 DeferGC deferGC(vm.heap); 744 materializePropertyMapIfNecessaryForPinning(vm, deferGC); 734 745 735 746 pin(); … … 841 852 ASSERT(structure()->classInfo() == info()); 842 853 843 materializePropertyMapIfNecessary(vm); 854 DeferGC deferGC(vm.heap); 855 materializePropertyMapIfNecessary(vm, deferGC); 844 856 if (!propertyTable()) 845 857 return invalidOffset; … … 856 868 bool Structure::despecifyFunction(VM& vm, PropertyName propertyName) 857 869 { 858 materializePropertyMapIfNecessary(vm); 870 DeferGC deferGC(vm.heap); 871 materializePropertyMapIfNecessary(vm, deferGC); 859 872 if (!propertyTable()) 860 873 return false; … … 871 884 void Structure::despecifyAllFunctions(VM& vm) 872 885 { 873 materializePropertyMapIfNecessary(vm); 886 DeferGC deferGC(vm.heap); 887 materializePropertyMapIfNecessary(vm, deferGC); 874 888 if (!propertyTable()) 875 889 return; … … 882 896 PropertyOffset Structure::putSpecificValue(VM& vm, PropertyName propertyName, unsigned attributes, JSCell* specificValue) 883 897 { 884 ConcurrentJITLocker locker(m_lock);898 GCSafeConcurrentJITLocker locker(m_lock, vm.heap); 885 899 886 900 ASSERT(!JSC::isValidOffset(get(vm, propertyName))); … … 927 941 } 928 942 929 void Structure::createPropertyMap(const ConcurrentJITLocker&, VM& vm, unsigned capacity)943 void Structure::createPropertyMap(const GCSafeConcurrentJITLocker&, VM& vm, unsigned capacity) 930 944 { 931 945 ASSERT(!propertyTable()); … … 937 951 void Structure::getPropertyNamesFromStructure(VM& vm, PropertyNameArray& propertyNames, EnumerationMode mode) 938 952 { 939 materializePropertyMapIfNecessary(vm); 953 DeferGC deferGC(vm.heap); 954 materializePropertyMapIfNecessary(vm, deferGC); 940 955 if (!propertyTable()) 941 956 return;
Note:
See TracChangeset
for help on using the changeset viewer.