Set the code age field of SharedFunctionInfo correctly.
authorulan@chromium.org <ulan@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 22 Nov 2011 19:46:00 +0000 (19:46 +0000)
committerulan@chromium.org <ulan@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 22 Nov 2011 19:46:00 +0000 (19:46 +0000)
BUG=
TEST=

Review URL: http://codereview.chromium.org/8554009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10046 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/mark-compact.cc
src/objects-inl.h

index 09dcc31..74c0777 100644 (file)
@@ -1012,7 +1012,9 @@ class StaticMarkingVisitor : public StaticVisitorBase {
     MarkBit code_mark =
         Marking::MarkBitFrom(function->unchecked_code());
     if (code_mark.Get()) {
-      shared_info->set_code_age(0);
+      if (!Marking::MarkBitFrom(shared_info).Get()) {
+        shared_info->set_code_age(0);
+      }
       return false;
     }
 
@@ -1030,7 +1032,6 @@ class StaticMarkingVisitor : public StaticVisitorBase {
     MarkBit code_mark =
         Marking::MarkBitFrom(shared_info->unchecked_code());
     if (code_mark.Get()) {
-      shared_info->set_code_age(0);
       return false;
     }
 
index 9da480e..f3a7fd3 100644 (file)
@@ -3667,8 +3667,8 @@ int SharedFunctionInfo::code_age() {
 
 
 void SharedFunctionInfo::set_code_age(int code_age) {
-  set_compiler_hints(compiler_hints() |
-                     ((code_age & kCodeAgeMask) << kCodeAgeShift));
+  int hints = compiler_hints() & ~(kCodeAgeMask << kCodeAgeShift);
+  set_compiler_hints(hints | ((code_age & kCodeAgeMask) << kCodeAgeShift));
 }