Merge V8 5.4.500.40

Test: Manual - built & ran d8
Change-Id: I4edfa2853d3e565b729723645395688ece3193f4
diff --git a/src/codegen.cc b/src/codegen.cc
index 4597ae2..e47db10 100644
--- a/src/codegen.cc
+++ b/src/codegen.cc
@@ -7,10 +7,14 @@
 #if defined(V8_OS_AIX)
 #include <fenv.h>  // NOLINT(build/c++11)
 #endif
+
+#include <memory>
+
 #include "src/ast/prettyprinter.h"
 #include "src/bootstrapper.h"
 #include "src/compiler.h"
 #include "src/debug/debug.h"
+#include "src/eh-frame.h"
 #include "src/parsing/parser.h"
 #include "src/runtime/runtime.h"
 
@@ -84,32 +88,24 @@
 
 
 void CodeGenerator::MakeCodePrologue(CompilationInfo* info, const char* kind) {
-  bool print_source = false;
   bool print_ast = false;
   const char* ftype;
 
   if (info->isolate()->bootstrapper()->IsActive()) {
-    print_source = FLAG_print_builtin_source;
     print_ast = FLAG_print_builtin_ast;
     ftype = "builtin";
   } else {
-    print_source = FLAG_print_source;
     print_ast = FLAG_print_ast;
     ftype = "user-defined";
   }
 
-  if (FLAG_trace_codegen || print_source || print_ast) {
-    base::SmartArrayPointer<char> name = info->GetDebugName();
+  if (FLAG_trace_codegen || print_ast) {
+    std::unique_ptr<char[]> name = info->GetDebugName();
     PrintF("[generating %s code for %s function: %s]\n", kind, ftype,
            name.get());
   }
 
 #ifdef DEBUG
-  if (info->parse_info() && print_source) {
-    PrintF("--- Source from AST ---\n%s\n",
-           PrettyPrinter(info->isolate()).PrintProgram(info->literal()));
-  }
-
   if (info->parse_info() && print_ast) {
     PrintF("--- AST ---\n%s\n",
            AstPrinter(info->isolate()).PrintProgram(info->literal()));
@@ -117,9 +113,10 @@
 #endif  // DEBUG
 }
 
-
 Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm,
-                                             CompilationInfo* info) {
+                                             EhFrameWriter* eh_frame_writer,
+                                             CompilationInfo* info,
+                                             Handle<Object> self_reference) {
   Isolate* isolate = info->isolate();
 
   // Allocate and install the code.
@@ -129,11 +126,11 @@
       Code::ExtractKindFromFlags(flags) == Code::OPTIMIZED_FUNCTION ||
       info->IsStub();
   masm->GetCode(&desc);
-  Handle<Code> code =
-      isolate->factory()->NewCode(desc, flags, masm->CodeObject(),
-                                  false, is_crankshafted,
-                                  info->prologue_offset(),
-                                  info->is_debug() && !is_crankshafted);
+  if (eh_frame_writer) eh_frame_writer->GetEhFrame(&desc);
+
+  Handle<Code> code = isolate->factory()->NewCode(
+      desc, flags, self_reference, false, is_crankshafted,
+      info->prologue_offset(), info->is_debug() && !is_crankshafted);
   isolate->counters()->total_compiled_code_size()->Increment(
       code->instruction_size());
   isolate->heap()->IncrementCodeGeneratedBytes(is_crankshafted,
@@ -152,7 +149,7 @@
           : (FLAG_print_code || (info->IsStub() && FLAG_print_code_stubs) ||
              (info->IsOptimizing() && FLAG_print_opt_code));
   if (print_code) {
-    base::SmartArrayPointer<char> debug_name = info->GetDebugName();
+    std::unique_ptr<char[]> debug_name = info->GetDebugName();
     CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer());
     OFStream os(tracing_scope.file());