Changeset 6472 in webkit for trunk/JavaScriptCore/kjs/value.cpp


Ignore:
Timestamp:
Apr 23, 2004, 3:40:31 PM (21 years ago)
Author:
mjs
Message:

Reviewed by Darin.

Implementation of conservative GC, based partly on code from
Darin. It's turned off for now, so it shouldn't have any effect on
the normal build.

  • JavaScriptCore.pbproj/project.pbxproj:
  • kjs/collector.cpp: (KJS::Collector::markStackObjectsConservatively): (KJS::Collector::markProtectedObjects): (KJS::Collector::collect):
  • kjs/collector.h:
  • kjs/protect.h: (KJS::gcProtect): (KJS::gcUnprotect):
  • kjs/protected_values.cpp: Added. (KJS::ProtectedValues::getProtectCount): (KJS::ProtectedValues::increaseProtectCount): (KJS::ProtectedValues::insert): (KJS::ProtectedValues::decreaseProtectCount): (KJS::ProtectedValues::expand): (KJS::ProtectedValues::shrink): (KJS::ProtectedValues::rehash): (KJS::ProtectedValues::computeHash):
  • kjs/protected_values.h: Added.
  • kjs/value.cpp: (ValueImp::useConservativeMark): (ValueImp::mark): (ValueImp::marked):
  • kjs/value.h: (KJS::ValueImp::):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/value.cpp

    r6025 r6472  
    5757}
    5858
     59#if TEST_CONSERVATIVE_GC
     60static bool conservativeMark = false;
     61
     62void ValueImp::useConservativeMark(bool use)
     63{
     64  conservativeMark = use;
     65}
     66#endif
     67
    5968void ValueImp::mark()
    6069{
    6170  //fprintf(stderr,"ValueImp::mark %p\n",(void*)this);
     71#if TEST_CONSERVATIVE_GC
     72  if (conservativeMark) {
     73    _flags |= VI_CONSERVATIVE_MARKED;
     74  } else {
     75    if (!(_flags | VI_CONSERVATIVE_MARKED)) {
     76      printf("Conservative collector missed ValueImp 0x%x.\n", (int)this);
     77    }
     78    _flags |= VI_MARKED;
     79  }
     80#else
    6281  _flags |= VI_MARKED;
     82#endif
    6383}
    6484
     
    6686{
    6787  // Simple numbers are always considered marked.
     88#if TEST_CONSERVATIVE_GC
     89  if (conservativeMark) {
     90    return SimpleNumber::is(this) || (_flags & VI_CONSERVATIVE_MARKED);
     91  } else {
     92    return SimpleNumber::is(this) || (_flags & VI_MARKED);
     93  }
     94#else
    6895  return SimpleNumber::is(this) || (_flags & VI_MARKED);
     96#endif
    6997}
    7098
Note: See TracChangeset for help on using the changeset viewer.