Reviewers: Erik Corry, Vyacheslav Egorov,

Description:
Fixed bool <-> Executability confusion and improved typing a bit.

Passing a value of type Executability to a function expecting a bool worked only
by accident (because of the order of values in the enum). But using boolean
parameters is often a bad idea, anyway, so we use Executability directly.

Just another example why implicit type conversions in C++ are a bad idea... :-P

Please review this at http://codereview.chromium.org/7753001/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/spaces-inl.h
  M     src/spaces.h
  M     src/spaces.cc


Index: src/spaces-inl.h
===================================================================
--- src/spaces-inl.h    (revision 9009)
+++ src/spaces-inl.h    (working copy)
@@ -294,13 +294,13 @@
   SetPageFlag(IS_NORMAL_PAGE, !is_large_object_page);
 }

-bool Page::IsPageExecutable() {
-  return GetPageFlag(IS_EXECUTABLE);
+Executability Page::PageExecutability() {
+  return GetPageFlag(IS_EXECUTABLE) ? EXECUTABLE : NOT_EXECUTABLE;
 }


-void Page::SetIsPageExecutable(bool is_page_executable) {
-  SetPageFlag(IS_EXECUTABLE, is_page_executable);
+void Page::SetPageExecutability(Executability executable) {
+  SetPageFlag(IS_EXECUTABLE, executable == EXECUTABLE);
 }


Index: src/spaces.cc
===================================================================
--- src/spaces.cc       (revision 9009)
+++ src/spaces.cc       (working copy)
@@ -2762,8 +2762,7 @@
     first_chunk_ = first_chunk_->next();
LOG(heap()->isolate(), DeleteEvent("LargeObjectChunk", chunk->address())); Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
-    Executability executable =
-        page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
+    Executability executable = page->PageExecutability();
     ObjectSpace space = kObjectSpaceLoSpace;
     if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
     size_t size = chunk->size();
@@ -2813,7 +2812,7 @@
// large object page. If the chunk_size happened to be written there, its
   // low order bit should already be clear.
   page->SetIsLargeObjectPage(true);
-  page->SetIsPageExecutable(executable);
+  page->SetPageExecutability(executable);
   page->SetRegionMarks(Page::kAllRegionsCleanMarks);
   return HeapObject::FromAddress(object_address);
 }
@@ -2946,8 +2945,7 @@
     } else {
       Page* page = Page::FromAddress(RoundUp(current->address(),
                                      Page::kPageSize));
-      Executability executable =
-          page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
+      Executability executable = page->PageExecutability();
       Address chunk_address = current->address();
       size_t chunk_size = current->size();

Index: src/spaces.h
===================================================================
--- src/spaces.h        (revision 9009)
+++ src/spaces.h        (working copy)
@@ -200,9 +200,9 @@

   inline void SetIsLargeObjectPage(bool is_large_object_page);

-  inline bool IsPageExecutable();
+  inline Executability PageExecutability();

-  inline void SetIsPageExecutable(bool is_page_executable);
+  inline void SetPageExecutability(Executability executable);

   // Returns the offset of a given address to this page.
   INLINE(int Offset(Address a)) {


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to