Changeset 187524 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Jul 28, 2015, 3:39:12 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r187515 r187524 154 154 155 155 RegisterID* result = generator.moveToDestinationIfNeeded(dst, generator.thisRegister()); 156 if (generator.vm()->typeProfiler()) { 157 generator.emitProfileType(generator.thisRegister(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 158 static const unsigned thisLength = 4; 159 generator.emitTypeProfilerExpressionInfo(position(), JSTextPosition(-1, position().offset + thisLength, -1)); 160 } 156 static const unsigned thisLength = 4; 157 generator.emitProfileType(generator.thisRegister(), position(), JSTextPosition(-1, position().offset + thisLength, -1)); 161 158 return result; 162 159 } … … 210 207 if (dst == generator.ignoredResult()) 211 208 return nullptr; 212 if (generator.vm()->typeProfiler()) { 213 generator.emitProfileType(local, ProfileTypeBytecodeHasGlobalID, nullptr); 214 generator.emitTypeProfilerExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 215 } 209 210 generator.emitProfileType(local, var, m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 216 211 return generator.moveToDestinationIfNeeded(dst, local); 217 212 } … … 223 218 RegisterID* result = generator.emitGetFromScope(finalDest, scope.get(), var, ThrowIfNotFound); 224 219 generator.emitTDZCheckIfNecessary(var, finalDest, nullptr); 225 if (generator.vm()->typeProfiler()) { 226 generator.emitProfileType(finalDest, var.isResolved() ? ProfileTypeBytecodeGetFromLocalScope : ProfileTypeBytecodeGetFromScope, &m_ident); 227 generator.emitTypeProfilerExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 228 } 220 generator.emitProfileType(finalDest, var, m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 229 221 return result; 230 222 } … … 624 616 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 625 617 626 if (generator.vm()->typeProfiler()) { 627 generator.emitProfileType(finalDest, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 628 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 629 } 618 generator.emitProfileType(finalDest, divotStart(), divotEnd()); 630 619 return ret; 631 620 } … … 639 628 RegisterID* finalDest = generator.finalDestination(dst); 640 629 RegisterID* ret = generator.emitGetById(finalDest, base.get(), m_ident); 641 if (generator.vm()->typeProfiler()) { 642 generator.emitProfileType(finalDest, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 643 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 644 } 630 generator.emitProfileType(finalDest, divotStart(), divotEnd()); 645 631 return ret; 646 632 } … … 735 721 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 736 722 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 737 if (generator.vm()->typeProfiler()) { 738 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 739 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 740 } 723 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 741 724 return ret; 742 725 } … … 758 741 // local variable, then it's not one of our built-in constructors. 759 742 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 760 if (generator.vm()->typeProfiler()) { 761 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 762 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 763 } 743 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 764 744 return ret; 765 745 } … … 777 757 generator.emitTDZCheckIfNecessary(var, func.get(), nullptr); 778 758 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd()); 779 if (generator.vm()->typeProfiler()) { 780 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 781 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 782 } 759 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 783 760 return ret; 784 761 } … … 848 825 generator.emitMove(callArguments.thisRegister(), base.get()); 849 826 RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 850 if (generator.vm()->typeProfiler()) { 851 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 852 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 853 } 827 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 854 828 return ret; 855 829 } … … 870 844 generator.emitGetById(function.get(), baseIsSuper ? emitSuperBaseForCallee(generator) : callArguments.thisRegister(), m_ident); 871 845 RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 872 if (generator.vm()->typeProfiler()) { 873 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 874 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 875 } 846 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 876 847 return ret; 877 848 } … … 928 899 generator.emitLabel(end.get()); 929 900 } 930 if (generator.vm()->typeProfiler()) { 931 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 932 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 933 } 901 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 934 902 return returnValue.get(); 935 903 } … … 1039 1007 generator.emitLabel(end.get()); 1040 1008 } 1041 if (generator.vm()->typeProfiler()) { 1042 generator.emitProfileType(returnValue.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1043 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1044 } 1009 generator.emitProfileType(returnValue.get(), divotStart(), divotEnd()); 1045 1010 return returnValue.get(); 1046 1011 } … … 1078 1043 generator.emitReadOnlyExceptionIfNeeded(var); 1079 1044 localReg = generator.emitMove(generator.tempDestination(dst), local); 1080 } else if (generator.vm()->typeProfiler()) {1081 RefPtr<RegisterID> tempDst = generator.finalDestination(dst);1082 ASSERT(dst != localReg);1083 RefPtr<RegisterID> tempDstSrc = generator.newTemporary();1084 generator.emitToNumber(tempDst.get(), localReg.get());1085 generator.emitMove(tempDstSrc.get(), localReg.get());1086 emitIncOrDec(generator, tempDstSrc.get(), m_operator);1087 generator.emitMove(localReg.get(), tempDstSrc.get());1088 if (generator.vm()->typeProfiler())1089 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());1090 return tempDst.get();1091 1045 } 1092 return emitPostIncOrDec(generator, generator.finalDestination(dst), localReg.get(), m_operator); 1046 RefPtr<RegisterID> oldValue = emitPostIncOrDec(generator, generator.finalDestination(dst), localReg.get(), m_operator); 1047 generator.emitProfileType(localReg.get(), var, divotStart(), divotEnd()); 1048 return oldValue.get(); 1093 1049 } 1094 1050 … … 1104 1060 RefPtr<RegisterID> oldValue = emitPostIncOrDec(generator, generator.finalDestination(dst), value.get(), m_operator); 1105 1061 generator.emitPutToScope(scope.get(), var, value.get(), ThrowIfNotFound); 1106 if (generator.vm()->typeProfiler()) { 1107 generator.emitProfileType(value.get(), var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &ident); 1108 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1109 } 1062 generator.emitProfileType(value.get(), var, divotStart(), divotEnd()); 1110 1063 1111 1064 return oldValue.get(); … … 1130 1083 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1131 1084 generator.emitPutByVal(base.get(), property.get(), value.get()); 1132 if (generator.vm()->typeProfiler()) { 1133 generator.emitProfileType(value.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1134 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1135 } 1085 generator.emitProfileType(value.get(), divotStart(), divotEnd()); 1136 1086 return generator.moveToDestinationIfNeeded(dst, oldValue); 1137 1087 } … … 1154 1104 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1155 1105 generator.emitPutById(base.get(), ident, value.get()); 1156 if (generator.vm()->typeProfiler()) { 1157 generator.emitProfileType(value.get(), ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1158 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1159 } 1106 generator.emitProfileType(value.get(), divotStart(), divotEnd()); 1160 1107 return generator.moveToDestinationIfNeeded(dst, oldValue); 1161 1108 } … … 1292 1239 emitIncOrDec(generator, tempDst.get(), m_operator); 1293 1240 generator.emitMove(localReg.get(), tempDst.get()); 1294 if (generator.vm()->typeProfiler()) 1295 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1241 generator.emitProfileType(localReg.get(), var, divotStart(), divotEnd()); 1296 1242 return generator.moveToDestinationIfNeeded(dst, tempDst.get()); 1297 1243 } … … 1312 1258 emitIncOrDec(generator, value.get(), m_operator); 1313 1259 generator.emitPutToScope(scope.get(), var, value.get(), ThrowIfNotFound); 1314 if (generator.vm()->typeProfiler()) { 1315 generator.emitProfileType(value.get(), var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &ident); 1316 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1317 } 1260 generator.emitProfileType(value.get(), var, divotStart(), divotEnd()); 1318 1261 return generator.moveToDestinationIfNeeded(dst, value.get()); 1319 1262 } … … 1335 1278 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1336 1279 generator.emitPutByVal(base.get(), property.get(), value); 1337 if (generator.vm()->typeProfiler()) { 1338 generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1339 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1340 } 1280 generator.emitProfileType(value, divotStart(), divotEnd()); 1341 1281 return generator.moveToDestinationIfNeeded(dst, propDst.get()); 1342 1282 } … … 1357 1297 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1358 1298 generator.emitPutById(base.get(), ident, value); 1359 if (generator.vm()->typeProfiler()) { 1360 generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1361 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1362 } 1299 generator.emitProfileType(value, divotStart(), divotEnd()); 1363 1300 return generator.moveToDestinationIfNeeded(dst, propDst.get()); 1364 1301 } … … 1810 1747 if (var.isReadOnly()) { 1811 1748 generator.emitReadOnlyExceptionIfNeeded(var); 1812 return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1749 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst), local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1750 generator.emitProfileType(result, divotStart(), divotEnd()); 1751 return result; 1813 1752 } 1814 1753 1815 if (generator.vm()->typeProfiler() 1816 || generator.leftHandSideNeedsCopy(m_rightHasAssignments, m_right->isPure(generator))) { 1754 if (generator.leftHandSideNeedsCopy(m_rightHasAssignments, m_right->isPure(generator))) { 1817 1755 RefPtr<RegisterID> result = generator.newTemporary(); 1818 1756 generator.emitMove(result.get(), local); … … 1820 1758 generator.emitMove(local, result.get()); 1821 1759 generator.invalidateForInContextForLocal(local); 1822 if (generator.vm()->typeProfiler()) 1823 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1760 generator.emitProfileType(local, divotStart(), divotEnd()); 1824 1761 return generator.moveToDestinationIfNeeded(dst, result.get()); 1825 1762 } … … 1827 1764 RegisterID* result = emitReadModifyAssignment(generator, local, local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1828 1765 generator.invalidateForInContextForLocal(local); 1766 generator.emitProfileType(result, divotStart(), divotEnd()); 1829 1767 return generator.moveToDestinationIfNeeded(dst, result); 1830 1768 } … … 1841 1779 RefPtr<RegisterID> result = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()), this); 1842 1780 RegisterID* returnResult = generator.emitPutToScope(scope.get(), var, result.get(), ThrowIfNotFound); 1843 if (generator.vm()->typeProfiler()) { 1844 generator.emitProfileType(result.get(), var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &m_ident); 1845 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1846 } 1781 generator.emitProfileType(result.get(), var, divotStart(), divotEnd()); 1847 1782 return returnResult; 1848 1783 } … … 1861 1796 result = generator.emitNode(dst, m_right); // Execute side effects first. 1862 1797 generator.emitReadOnlyExceptionIfNeeded(var); 1863 } else if (var.isSpecial() || generator.vm()->typeProfiler()) { 1798 generator.emitProfileType(result, var, divotStart(), divotEnd()); 1799 } else if (var.isSpecial()) { 1864 1800 RefPtr<RegisterID> tempDst = generator.tempDestination(dst); 1865 1801 generator.emitNode(tempDst.get(), m_right); 1866 1802 generator.emitMove(local, tempDst.get()); 1803 generator.emitProfileType(local, var, divotStart(), divotEnd()); 1867 1804 generator.invalidateForInContextForLocal(local); 1868 if (generator.vm()->typeProfiler())1869 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());1870 1805 result = generator.moveToDestinationIfNeeded(dst, tempDst.get()); 1871 1806 } else { 1872 1807 RegisterID* right = generator.emitNode(local, m_right); 1808 generator.emitProfileType(right, var, divotStart(), divotEnd()); 1873 1809 generator.invalidateForInContextForLocal(local); 1874 1810 result = generator.moveToDestinationIfNeeded(dst, right); … … 1896 1832 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1897 1833 RegisterID* returnResult = generator.emitPutToScope(scope.get(), var, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 1898 if (generator.vm()->typeProfiler()) { 1899 generator.emitProfileType(result.get(), var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &m_ident); 1900 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1901 } 1834 generator.emitProfileType(result.get(), var, divotStart(), divotEnd()); 1902 1835 1903 1836 if (m_assignmentContext == AssignmentContext::DeclarationStatement || m_assignmentContext == AssignmentContext::ConstDeclarationStatement) … … 1916 1849 RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result.get() : generator.moveToDestinationIfNeeded(generator.tempDestination(result.get()), result.get()); 1917 1850 generator.emitPutById(base.get(), m_ident, forwardResult); 1918 if (generator.vm()->typeProfiler()) { 1919 generator.emitProfileType(forwardResult, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1920 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1921 } 1851 generator.emitProfileType(forwardResult, divotStart(), divotEnd()); 1922 1852 return generator.moveToDestinationIfNeeded(dst, forwardResult); 1923 1853 } … … 1935 1865 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1936 1866 RegisterID* ret = generator.emitPutById(base.get(), m_ident, updatedValue); 1937 if (generator.vm()->typeProfiler()) { 1938 generator.emitProfileType(updatedValue, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1939 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1940 } 1867 generator.emitProfileType(updatedValue, divotStart(), divotEnd()); 1941 1868 return ret; 1942 1869 } … … 1966 1893 generator.emitPutByVal(base.get(), property.get(), forwardResult); 1967 1894 1968 if (generator.vm()->typeProfiler()) { 1969 generator.emitProfileType(forwardResult, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1970 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1971 } 1895 generator.emitProfileType(forwardResult, divotStart(), divotEnd()); 1972 1896 return generator.moveToDestinationIfNeeded(dst, forwardResult); 1973 1897 } … … 1986 1910 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1987 1911 generator.emitPutByVal(base.get(), property.get(), updatedValue); 1988 if (generator.vm()->typeProfiler()) { 1989 generator.emitProfileType(updatedValue, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 1990 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 1991 } 1912 generator.emitProfileType(updatedValue, divotStart(), divotEnd()); 1992 1913 1993 1914 return updatedValue; … … 2081 2002 Variable var = generator.variable(m_ident); 2082 2003 if (RegisterID* local = var.local()) 2083 generator.emitProfileType(local, ProfileTypeBytecodeHasGlobalID, nullptr);2004 generator.emitProfileType(local, var, position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2084 2005 else { 2085 2006 RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, var); 2086 2007 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), var, DoNotThrowIfNotFound); 2087 generator.emitProfileType(value.get(), var.isResolved() ? ProfileTypeBytecodeGetFromLocalScope : ProfileTypeBytecodeGetFromScope, &m_ident); 2088 } 2089 2090 generator.emitTypeProfilerExpressionInfo(position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2008 generator.emitProfileType(value.get(), var, position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2009 } 2091 2010 2092 2011 return nullptr; … … 2102 2021 if (RegisterID* local = var.local()) { 2103 2022 generator.emitLoad(local, jsUndefined()); 2104 if (generator.vm()->typeProfiler()) 2105 generator.emitProfileType(local, ProfileTypeBytecodeHasGlobalID, nullptr); 2023 generator.emitProfileType(local, var, position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2106 2024 } else { 2107 2025 RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, var); 2108 2026 RefPtr<RegisterID> value = generator.emitLoad(nullptr, jsUndefined()); 2109 2027 generator.emitPutToScope(scope.get(), var, value.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 2110 if (generator.vm()->typeProfiler()) 2111 generator.emitProfileType(value.get(), var.isResolved() ? ProfileTypeBytecodeGetFromLocalScope : ProfileTypeBytecodeGetFromScope, &m_ident); 2112 } 2113 if (generator.vm()->typeProfiler()) 2114 generator.emitTypeProfilerExpressionInfo(position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2028 generator.emitProfileType(value.get(), var, position(), JSTextPosition(-1, position().offset + m_ident.length(), -1)); 2029 } 2115 2030 2116 2031 // It's safe to return null here because this node will always be a child node of DeclarationStatement which ignores our return value. … … 2317 2232 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 2318 2233 generator.emitPutToScope(scope, var, propertyName, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 2319 if (generator.vm()->typeProfiler())2320 generator.emitProfileType(propertyName, var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &ident);2321 2234 } 2322 if (generator.vm()->typeProfiler()) 2323 generator.emitTypeProfilerExpressionInfo(m_lexpr->position(), JSTextPosition(-1, m_lexpr->position().offset + ident.length(), -1)); 2235 generator.emitProfileType(propertyName, var, m_lexpr->position(), JSTextPosition(-1, m_lexpr->position().offset + ident.length(), -1)); 2324 2236 return; 2325 2237 } … … 2330 2242 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 2331 2243 generator.emitPutById(base, ident, propertyName); 2332 if (generator.vm()->typeProfiler()) { 2333 generator.emitProfileType(propertyName, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 2334 generator.emitTypeProfilerExpressionInfo(assignNode->divotStart(), assignNode->divotEnd()); 2335 } 2244 generator.emitProfileType(propertyName, assignNode->divotStart(), assignNode->divotEnd()); 2336 2245 return; 2337 2246 } … … 2342 2251 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 2343 2252 generator.emitPutByVal(base.get(), subscript, propertyName); 2344 if (generator.vm()->typeProfiler()) { 2345 generator.emitProfileType(propertyName, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 2346 generator.emitTypeProfilerExpressionInfo(assignNode->divotStart(), assignNode->divotEnd()); 2347 } 2253 generator.emitProfileType(propertyName, assignNode->divotStart(), assignNode->divotEnd()); 2348 2254 return; 2349 2255 } … … 2365 2271 } 2366 2272 generator.emitMove(var.local(), propertyName); 2367 if (generator.vm()->typeProfiler()) 2368 generator.emitTypeProfilerExpressionInfo(simpleBinding->divotStart(), simpleBinding->divotEnd()); 2273 generator.emitProfileType(propertyName, var, simpleBinding->divotStart(), simpleBinding->divotEnd()); 2369 2274 return; 2370 2275 } … … 2548 2453 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 2549 2454 generator.emitPutToScope(scope, var, value, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 2550 if (generator.vm()->typeProfiler())2551 generator.emitProfileType(value, var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &ident);2552 2455 } 2553 if (generator.vm()->typeProfiler()) 2554 generator.emitTypeProfilerExpressionInfo(m_lexpr->position(), JSTextPosition(-1, m_lexpr->position().offset + ident.length(), -1)); 2456 generator.emitProfileType(value, var, m_lexpr->position(), JSTextPosition(-1, m_lexpr->position().offset + ident.length(), -1)); 2555 2457 } else if (m_lexpr->isDotAccessorNode()) { 2556 2458 DotAccessorNode* assignNode = static_cast<DotAccessorNode*>(m_lexpr); … … 2560 2462 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 2561 2463 generator.emitPutById(base.get(), ident, value); 2562 if (generator.vm()->typeProfiler()) { 2563 generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 2564 generator.emitTypeProfilerExpressionInfo(assignNode->divotStart(), assignNode->divotEnd()); 2565 } 2464 generator.emitProfileType(value, assignNode->divotStart(), assignNode->divotEnd()); 2566 2465 } else if (m_lexpr->isBracketAccessorNode()) { 2567 2466 BracketAccessorNode* assignNode = static_cast<BracketAccessorNode*>(m_lexpr); … … 2571 2470 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 2572 2471 generator.emitPutByVal(base.get(), subscript, value); 2573 if (generator.vm()->typeProfiler()) { 2574 generator.emitProfileType(value, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr); 2575 generator.emitTypeProfilerExpressionInfo(assignNode->divotStart(), assignNode->divotEnd()); 2576 } 2472 generator.emitProfileType(value, assignNode->divotStart(), assignNode->divotEnd()); 2577 2473 } else { 2578 2474 ASSERT(m_lexpr->isDestructuringNode()); … … 2657 2553 2658 2554 RefPtr<RegisterID> returnRegister = m_value ? generator.emitNode(dst, m_value) : generator.emitLoad(dst, jsUndefined()); 2659 if (generator.vm()->typeProfiler()) { 2660 generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, nullptr); 2661 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 2662 } 2555 generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, divotStart(), divotEnd()); 2663 2556 if (generator.labelScopeDepth()) { 2664 2557 returnRegister = generator.emitMove(generator.newTemporary(), returnRegister.get()); … … 3020 2913 if (generator.vm()->typeProfiler()) { 3021 2914 for (size_t i = 0; i < m_parameters->size(); i++) { 3022 // FIXME: Handle Destructuring assignments into arguments.2915 // Destructuring parameters are handled in destructuring nodes. 3023 2916 if (!m_parameters->at(i).first->isBindingNode()) 3024 2917 continue; 3025 2918 BindingNode* parameter = static_cast<BindingNode*>(m_parameters->at(i).first); 3026 2919 RegisterID reg(CallFrame::argumentOffset(i)); 3027 generator.emitProfileType(®, ProfileTypeBytecodeFunctionArgument, nullptr); 3028 generator.emitTypeProfilerExpressionInfo(parameter->divotStart(), parameter->divotEnd()); 2920 generator.emitProfileType(®, ProfileTypeBytecodeFunctionArgument, parameter->divotStart(), parameter->divotEnd()); 3029 2921 } 3030 2922 } … … 3047 2939 if (!returnNode) { 3048 2940 RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined()); 3049 if (generator.vm()->typeProfiler()) 3050 generator.emitProfileType(r0, ProfileTypeBytecodeFunctionReturnStatement, nullptr); // Do not emit expression info for this profile because it's not in the user's source code. 2941 generator.emitProfileType(r0, ProfileTypeBytecodeFunctionReturnStatement); // Do not emit expression info for this profile because it's not in the user's source code. 3051 2942 ASSERT(startOffset() >= lineStartOffset()); 3052 2943 generator.emitDebugHook(WillLeaveCallFrame, lastLine(), startOffset(), lineStartOffset()); … … 3368 3259 } 3369 3260 generator.emitMove(local, value); 3370 if (generator.vm()->typeProfiler()) 3371 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 3261 generator.emitProfileType(local, var, divotStart(), divotEnd()); 3372 3262 if (m_bindingContext == AssignmentContext::DeclarationStatement || m_bindingContext == AssignmentContext::ConstDeclarationStatement) 3373 3263 generator.liftTDZCheckIfPossible(var); … … 3386 3276 } 3387 3277 generator.emitPutToScope(scope, var, value, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 3388 if (generator.vm()->typeProfiler()) { 3389 generator.emitProfileType(value, var.isResolved() ? ProfileTypeBytecodePutToLocalScope : ProfileTypeBytecodePutToScope, &m_boundProperty); 3390 generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd()); 3391 } 3278 generator.emitProfileType(value, var, divotStart(), divotEnd()); 3392 3279 if (m_bindingContext == AssignmentContext::DeclarationStatement || m_bindingContext == AssignmentContext::ConstDeclarationStatement) 3393 3280 generator.liftTDZCheckIfPossible(var);
Note:
See TracChangeset
for help on using the changeset viewer.