Index: src/factory.cc |
diff --git a/src/factory.cc b/src/factory.cc |
index d0e0b83f5605f0f00ff8964263768a3b5cac2b72..ed3afa593c3bbe80506a321226011cd7b65ea9f6 100644 |
--- a/src/factory.cc |
+++ b/src/factory.cc |
@@ -123,6 +123,28 @@ |
} |
} |
return array; |
+} |
+ |
+ |
+Handle<ConstantPoolArray> Factory::NewConstantPoolArray( |
+ const ConstantPoolArray::NumberOfEntries& small) { |
+ DCHECK(small.total_count() > 0); |
+ CALL_HEAP_FUNCTION( |
+ isolate(), |
+ isolate()->heap()->AllocateConstantPoolArray(small), |
+ ConstantPoolArray); |
+} |
+ |
+ |
+Handle<ConstantPoolArray> Factory::NewExtendedConstantPoolArray( |
+ const ConstantPoolArray::NumberOfEntries& small, |
+ const ConstantPoolArray::NumberOfEntries& extended) { |
+ DCHECK(small.total_count() > 0); |
+ DCHECK(extended.total_count() > 0); |
+ CALL_HEAP_FUNCTION( |
+ isolate(), |
+ isolate()->heap()->AllocateExtendedConstantPoolArray(small, extended), |
+ ConstantPoolArray); |
} |
@@ -1006,6 +1028,14 @@ |
} |
+Handle<ConstantPoolArray> Factory::CopyConstantPoolArray( |
+ Handle<ConstantPoolArray> array) { |
+ CALL_HEAP_FUNCTION(isolate(), |
+ isolate()->heap()->CopyConstantPoolArray(*array), |
+ ConstantPoolArray); |
+} |
+ |
+ |
Handle<Object> Factory::NewNumber(double value, |
PretenureFlag pretenure) { |
// We need to distinguish the minus zero value and this cannot be |
@@ -1426,6 +1456,8 @@ |
int prologue_offset, |
bool is_debug) { |
Handle<ByteArray> reloc_info = NewByteArray(desc.reloc_size, TENURED); |
+ Handle<ConstantPoolArray> constant_pool = |
+ desc.origin->NewConstantPool(isolate()); |
// Compute size. |
int body_size = RoundUp(desc.instr_size, kObjectAlignment); |
@@ -1452,9 +1484,6 @@ |
code->set_next_code_link(*undefined_value()); |
code->set_handler_table(*empty_fixed_array(), SKIP_WRITE_BARRIER); |
code->set_prologue_offset(prologue_offset); |
- if (FLAG_enable_embedded_constant_pool) { |
- code->set_constant_pool_offset(desc.instr_size - desc.constant_pool_size); |
- } |
if (code->kind() == Code::OPTIMIZED_FUNCTION) { |
code->set_marked_for_deoptimization(false); |
} |
@@ -1463,6 +1492,9 @@ |
DCHECK(code->kind() == Code::FUNCTION); |
code->set_has_debug_break_slots(true); |
} |
+ |
+ desc.origin->PopulateConstantPool(*constant_pool); |
+ code->set_constant_pool(*constant_pool); |
// Allow self references to created code object by patching the handle to |
// point to the newly allocated Code object. |