Merge V8 5.2.361.47  DO NOT MERGE

https://chromium.googlesource.com/v8/v8/+/5.2.361.47

FPIIM-449

Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/deoptimizer.h b/src/deoptimizer.h
index 21ca84e..1d413e6 100644
--- a/src/deoptimizer.h
+++ b/src/deoptimizer.h
@@ -402,6 +402,22 @@
  public:
   enum BailoutType { EAGER, LAZY, SOFT, kLastBailoutType = SOFT };
 
+  enum class BailoutState {
+    NO_REGISTERS,
+    TOS_REGISTER,
+  };
+
+  static const char* BailoutStateToString(BailoutState state) {
+    switch (state) {
+      case BailoutState::NO_REGISTERS:
+        return "NO_REGISTERS";
+      case BailoutState::TOS_REGISTER:
+        return "TOS_REGISTER";
+    }
+    UNREACHABLE();
+    return nullptr;
+  }
+
 #define DEOPT_MESSAGES_CONSTANTS(C, T) C,
   enum DeoptReason {
     DEOPT_MESSAGES_LIST(DEOPT_MESSAGES_CONSTANTS) kLastDeoptReason
@@ -410,17 +426,21 @@
   static const char* GetDeoptReason(DeoptReason deopt_reason);
 
   struct DeoptInfo {
-    DeoptInfo(SourcePosition position, const char* m, DeoptReason d)
-        : position(position), mnemonic(m), deopt_reason(d), inlining_id(0) {}
+    DeoptInfo(SourcePosition position, DeoptReason deopt_reason, int deopt_id)
+        : position(position), deopt_reason(deopt_reason), deopt_id(deopt_id) {}
 
     SourcePosition position;
-    const char* mnemonic;
     DeoptReason deopt_reason;
-    int inlining_id;
+    int deopt_id;
+
+    static const int kNoDeoptId = -1;
   };
 
   static DeoptInfo GetDeoptInfo(Code* code, byte* from);
 
+  static int ComputeSourcePosition(SharedFunctionInfo* shared,
+                                   BailoutId node_id);
+
   struct JumpTableEntry : public ZoneObject {
     inline JumpTableEntry(Address entry, const DeoptInfo& deopt_info,
                           Deoptimizer::BailoutType type, bool frame)