Răsfoiți Sursa

Refactoring an assert

Rajat Dua 7 ani în urmă
părinte
comite
10808ce3cd

+ 6 - 1
lib/Runtime/Language/DynamicProfileInfo.cpp

@@ -1172,8 +1172,13 @@ namespace Js
         if (functionBody->GetCallSiteToCallApplyCallSiteArray())
         {
             Js::ProfileId callApplyCallSiteId = functionBody->GetCallSiteToCallApplyCallSiteArray()[callSiteId];
+            if (callApplyCallSiteId == Js::Constants::NoProfileId)
+            {
+                return nullptr;
+            } 
+            
             Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount());
-
+            
             if (callApplyTargetInfo[callApplyCallSiteId].isPolymorphic)
             {
                 return nullptr;

+ 5 - 2
lib/Runtime/Language/InterpreterStackFrame.cpp

@@ -3909,11 +3909,14 @@ skipThunk:
                 if (callSiteToCallApplyCallSiteMap)
                 {
                     Js::ProfileId callApplyCallSiteId = callSiteToCallApplyCallSiteMap[profileId];
-                    Assert(callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount());
-                    if (callApplyCallSiteId != Js::Constants::NoProfileId)
+                    if (callApplyCallSiteId < functionBody->GetProfiledCallApplyCallSiteCount())
                     {
                         dynamicProfileInfo->RecordCallApplyTargetInfo(functionBody, callApplyCallSiteId, targetFunction->GetFunctionInfo(), targetFunction);
                     }
+                    else
+                    {
+                        Assert(callApplyCallSiteId == Js::Constants::NoProfileId);
+                    }
                 }
             }
         }

+ 22 - 0
test/inlining/callTarget.js

@@ -80,4 +80,26 @@ function test3(a, b)
 test3("foobar", /foo/i)
 test3("foobar", /foo/i)
 test3("foobar", /foo/i)
+print("passed")
+
+function test4()
+{
+  function bar(a)
+  {
+      return 'call'
+  }
+  function test()
+  {
+      return this;
+  }
+  function foo()
+  {
+      test[bar('1')](this);
+      test.call(this);
+  }
+  foo()
+  foo()
+  foo()
+}
+test4()
 print("passed")