Web Inspector: Basic Block Annotations and Type Profiler annotations wrong for script...
authorsbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Sep 2015 07:35:27 +0000 (07:35 +0000)
committersbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Sep 2015 07:35:27 +0000 (07:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=149248

Reviewed by Mark Lam.

We keep track of which functions have and have not
executed so we can show visually, inside the inspector,
which functions have and have not executed. With a default
constructor, our parser parses code that isn't in the actual
JavaScript source code of the user. Our parser would then
give us a range of starting at "1" to "1 + default constructor length"
as being the text range of a function. But, this would then pollute
actual source code that was at these ranges.

Therefore, we should treat these default constructor source
codes as having "invalid" ranges. We use [UINT_MAX, UINT_MAX]
as the invalid range. This range has the effect of not polluting
valid ranges inside the source code.

* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
(JSC::UnlinkedFunctionExecutable::setInvalidTypeProfilingOffsets):
* bytecode/UnlinkedFunctionExecutable.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitNewDefaultConstructor):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190108 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp
Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp

index 4a86204..bae8015 100644 (file)
@@ -1,3 +1,31 @@
+2015-09-22  Saam barati  <sbarati@apple.com>
+
+        Web Inspector: Basic Block Annotations and Type Profiler annotations wrong for script with "class" with default constructor
+        https://bugs.webkit.org/show_bug.cgi?id=149248
+
+        Reviewed by Mark Lam.
+
+        We keep track of which functions have and have not
+        executed so we can show visually, inside the inspector,
+        which functions have and have not executed. With a default
+        constructor, our parser parses code that isn't in the actual
+        JavaScript source code of the user. Our parser would then
+        give us a range of starting at "1" to "1 + default constructor length"
+        as being the text range of a function. But, this would then pollute
+        actual source code that was at these ranges.
+
+        Therefore, we should treat these default constructor source 
+        codes as having "invalid" ranges. We use [UINT_MAX, UINT_MAX] 
+        as the invalid range. This range has the effect of not polluting 
+        valid ranges inside the source code.
+
+        * bytecode/UnlinkedFunctionExecutable.cpp:
+        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
+        (JSC::UnlinkedFunctionExecutable::setInvalidTypeProfilingOffsets):
+        * bytecode/UnlinkedFunctionExecutable.h:
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::emitNewDefaultConstructor):
+
 2015-09-21  Sukolsak Sakshuwong  <sukolsak@gmail.com>
 
         Implement the comma instruction in WebAssembly
index 4104c0f..6da1859 100644 (file)
@@ -212,4 +212,10 @@ UnlinkedFunctionCodeBlock* UnlinkedFunctionExecutable::unlinkedCodeBlockFor(
     return result;
 }
 
+void UnlinkedFunctionExecutable::setInvalidTypeProfilingOffsets()
+{
+    m_typeProfilingStartOffset = std::numeric_limits<unsigned>::max();
+    m_typeProfilingEndOffset = std::numeric_limits<unsigned>::max();
+}
+
 } // namespace JSC
index e3fc2a9..2223f6c 100644 (file)
@@ -91,6 +91,7 @@ public:
     unsigned parametersStartOffset() const { return m_parametersStartOffset; }
     unsigned typeProfilingStartOffset() const { return m_typeProfilingStartOffset; }
     unsigned typeProfilingEndOffset() const { return m_typeProfilingEndOffset; }
+    void setInvalidTypeProfilingOffsets();
 
     UnlinkedFunctionCodeBlock* unlinkedCodeBlockFor(
         VM&, const SourceCode&, CodeSpecializationKind, DebuggerMode, ProfilerMode, 
index 41ffb3a..764dabb 100644 (file)
@@ -2503,6 +2503,7 @@ RegisterID* BytecodeGenerator::emitNewArrowFunctionExpression(RegisterID* dst, A
 RegisterID* BytecodeGenerator::emitNewDefaultConstructor(RegisterID* dst, ConstructorKind constructorKind, const Identifier& name)
 {
     UnlinkedFunctionExecutable* executable = m_vm->builtinExecutables()->createDefaultConstructor(constructorKind, name);
+    executable->setInvalidTypeProfilingOffsets();
 
     unsigned index = m_codeBlock->addFunctionExpr(executable);