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