Title: [193229] branches/safari-601-branch

Diff

Modified: branches/safari-601-branch/LayoutTests/ChangeLog (193228 => 193229)


--- branches/safari-601-branch/LayoutTests/ChangeLog	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/LayoutTests/ChangeLog	2015-12-03 18:59:57 UTC (rev 193229)
@@ -1,5 +1,19 @@
 2015-12-02  Timothy Hatcher  <[email protected]>
 
+        Merge r190184. rdar://problem/23221163
+
+    2015-09-23  Saam barati  <[email protected]>
+
+            Web Inspector: Type bubbles missing for computed methods and methods on object literals
+            https://bugs.webkit.org/show_bug.cgi?id=148562
+
+            Reviewed by Joseph Pecoraro.
+
+            * inspector/model/parse-script-syntax-tree-expected.txt:
+            * inspector/model/parse-script-syntax-tree.html:
+
+2015-12-02  Timothy Hatcher  <[email protected]>
+
         Merge r190146. rdar://problem/23221163
 
     2015-09-22  Saam barati  <[email protected]>

Modified: branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt (193228 => 193229)


--- branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt	2015-12-03 18:59:57 UTC (rev 193229)
@@ -41,5 +41,8 @@
 passed ClassStatement, Super, MetaProperty
 passed AssignmentPattern
 passed ArrowFunctionExpression
+passed computed method on object literal
+passed method on object literal
+passed computed method property on object literal
 passed ALL TESTS
 

Modified: branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree.html (193228 => 193229)


--- branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree.html	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/LayoutTests/inspector/model/parse-script-syntax-tree.html	2015-12-03 18:59:57 UTC (rev 193229)
@@ -193,13 +193,10 @@
     InspectorTest.assert(node.params[1].type === WebInspector.ScriptSyntaxTree.NodeType.Identifier);
     InspectorTest.assert(node.body);
     InspectorTest.assert(node.body.type === WebInspector.ScriptSyntaxTree.NodeType.BlockStatement);
-    InspectorTest.assert(!node.isGetterOrSetter);
     node = makeNode("x = {get foo(){return 20}}", true);
     InspectorTest.assert(node.right.properties[0].value.type === WebInspector.ScriptSyntaxTree.NodeType.FunctionExpression);
-    InspectorTest.assert(node.right.properties[0].value.isGetterOrSetter);
     node = makeNode("x = {set foo(x){return 20}}", true);
     InspectorTest.assert(node.right.properties[0].value.type === WebInspector.ScriptSyntaxTree.NodeType.FunctionExpression);
-    InspectorTest.assert(node.right.properties[0].value.isGetterOrSetter);
     InspectorTest.log("passed FunctionDeclaration");
 
     node = makeNode("foo(function(x,y){})", true);
@@ -496,6 +493,51 @@
     InspectorTest.assert(node.body.type === WebInspector.ScriptSyntaxTree.NodeType.BlockStatement);
     InspectorTest.log("passed ArrowFunctionExpression");
 
+    node = makeNode("var o = {['c']() { }};", false);
+    //                        ^
+    //                 type profiling return divot.
+    InspectorTest.assert(node.type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclaration);
+    InspectorTest.assert(node.declarations.length === 1);
+    InspectorTest.assert(node.declarations[0].type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclarator);
+    InspectorTest.assert(node.declarations[0].init.type === WebInspector.ScriptSyntaxTree.NodeType.ObjectExpression);
+    InspectorTest.assert(node.declarations[0].init.properties.length === 1);
+    InspectorTest.assert(node.declarations[0].init.properties[0].type === WebInspector.ScriptSyntaxTree.NodeType.Property);
+    InspectorTest.assert(!!node.declarations[0].init.properties[0].method);
+    InspectorTest.assert(!!node.declarations[0].init.properties[0].computed);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.type === WebInspector.ScriptSyntaxTree.NodeType.FunctionExpression);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.typeProfilingReturnDivot === 9);
+    InspectorTest.log("passed computed method on object literal");
+
+    node = makeNode("var o = { m(){ } };", false);
+    //                         ^
+    //                 type profiling return divot.
+    InspectorTest.assert(node.type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclaration);
+    InspectorTest.assert(node.declarations.length === 1);
+    InspectorTest.assert(node.declarations[0].type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclarator);
+    InspectorTest.assert(node.declarations[0].init.type === WebInspector.ScriptSyntaxTree.NodeType.ObjectExpression);
+    InspectorTest.assert(node.declarations[0].init.properties.length === 1);
+    InspectorTest.assert(node.declarations[0].init.properties[0].type === WebInspector.ScriptSyntaxTree.NodeType.Property);
+    InspectorTest.assert(!!node.declarations[0].init.properties[0].method);
+    InspectorTest.assert(!node.declarations[0].init.properties[0].computed);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.type === WebInspector.ScriptSyntaxTree.NodeType.FunctionExpression);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.typeProfilingReturnDivot === 10);
+    InspectorTest.log("passed method on object literal");
+
+    node = makeNode("var o = {['c']: function(){ } };", false);
+    //                               ^
+    //                    type profiling return divot.
+    InspectorTest.assert(node.type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclaration);
+    InspectorTest.assert(node.declarations.length === 1);
+    InspectorTest.assert(node.declarations[0].type === WebInspector.ScriptSyntaxTree.NodeType.VariableDeclarator);
+    InspectorTest.assert(node.declarations[0].init.type === WebInspector.ScriptSyntaxTree.NodeType.ObjectExpression);
+    InspectorTest.assert(node.declarations[0].init.properties.length === 1);
+    InspectorTest.assert(node.declarations[0].init.properties[0].type === WebInspector.ScriptSyntaxTree.NodeType.Property);
+    InspectorTest.assert(!node.declarations[0].init.properties[0].method);
+    InspectorTest.assert(!!node.declarations[0].init.properties[0].computed);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.type === WebInspector.ScriptSyntaxTree.NodeType.FunctionExpression);
+    InspectorTest.assert(node.declarations[0].init.properties[0].value.typeProfilingReturnDivot === 16);
+    InspectorTest.log("passed computed method property on object literal");
+
     InspectorTest.log("passed ALL TESTS");
     InspectorTest.completeTest();
 }

Modified: branches/safari-601-branch/Source/WebInspectorUI/ChangeLog (193228 => 193229)


--- branches/safari-601-branch/Source/WebInspectorUI/ChangeLog	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/Source/WebInspectorUI/ChangeLog	2015-12-03 18:59:57 UTC (rev 193229)
@@ -1,5 +1,34 @@
 2015-12-02  Timothy Hatcher  <[email protected]>
 
+        Merge r190184. rdar://problem/23221163
+
+    2015-09-23  Saam barati  <[email protected]>
+
+            Web Inspector: Type bubbles missing for computed methods and methods on object literals
+            https://bugs.webkit.org/show_bug.cgi?id=148562
+
+            Reviewed by Joseph Pecoraro.
+
+            This patch makes sure that computed methods are working
+            for both classes and object literals. Also, methods now
+            work on object literals. This patch also cleans up the
+            "isGetterOrSetter" and "getterOrSetterRange" fields.
+            Basically, we used this as a way to ask the type profiler
+            for the return types of a function. Now, we just have
+            a field called "typeProfilingReturnDivot" that is set
+            on all functions so we don't need to conditionally ask
+            if it's a getter or setter.
+
+            * UserInterface/Controllers/TypeTokenAnnotator.js:
+            (WebInspector.TypeTokenAnnotator.prototype._insertTypeToken):
+            * UserInterface/Models/ScriptSyntaxTree.js:
+            (WebInspector.ScriptSyntaxTree.functionReturnDivot):
+            (WebInspector.ScriptSyntaxTree.prototype._recurseArray):
+            (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
+            (WebInspector.ScriptSyntaxTree):
+
+2015-12-02  Timothy Hatcher  <[email protected]>
+
         Merge r190149. rdar://problem/23221163
 
     2015-09-22  Devin Rousso  <[email protected]>

Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js (193228 => 193229)


--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js	2015-12-03 18:59:57 UTC (rev 193229)
@@ -106,8 +106,7 @@
         var scriptSyntaxTree = this._script._scriptSyntaxTree;
         if (!node.attachments.__typeToken && (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) || !functionReturnType.typeSet.isContainedIn(WebInspector.TypeSet.TypeBit.Undefined))) {
             var functionName = node.id ? node.id.name : null;
-            var offset = node.isGetterOrSetter ? node.getterOrSetterRange[0] : node.range[0];
-            this._insertToken(offset, node, true, WebInspector.TypeTokenView.TitleType.ReturnStatement, functionName);
+            this._insertToken(node.typeProfilingReturnDivot, node, true, WebInspector.TypeTokenView.TitleType.ReturnStatement, functionName);
         }
 
         if (node.attachments.__typeToken)

Modified: branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js (193228 => 193229)


--- branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js	2015-12-03 18:59:50 UTC (rev 193228)
+++ branches/safari-601-branch/Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js	2015-12-03 18:59:57 UTC (rev 193229)
@@ -157,8 +157,9 @@
         if (!DOMAgent.hasEvent("pseudoElementAdded"))
             return node.body.range[0];
 
-        // "f" in function, "s" in set, "g" in get, first letter in any method name for classes.
-        return node.isGetterOrSetter ? node.getterOrSetterRange[0] : node.range[0];
+        // "f" in "function". "s" in "set". "g" in "get". First letter in any method name for classes and object literals. 
+        // The "[" for computed methods in classes and object literals.
+        return node.typeProfilingReturnDivot;
     }
 
     updateTypes(nodesToUpdate, callback)
@@ -516,7 +517,7 @@
     }
 
     // This function translates from esprima's Abstract Syntax Tree to ours.
-    // Mostly, this is just the identity function. We've added an extra isGetterOrSetter property for functions.
+    // Mostly, this is just the identity function. We've added an extra typeProfilingReturnDivot property for functions/methods.
     // Our AST complies with the Mozilla parser API:
     // https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API
     _createInternalSyntaxTree(node)
@@ -546,7 +547,7 @@
                 defaults: node.defaults.map(this._createInternalSyntaxTree.bind(this)),
                 body: this._createInternalSyntaxTree(node.body),
                 _expression_: node._expression_, // Boolean indicating if the body a single _expression_ or a block statement.
-                isGetterOrSetter: false
+                typeProfilingReturnDivot: node.range[0]
             };
             break;
         case "AssignmentExpression":
@@ -689,7 +690,7 @@
                 params: node.params.map(this._createInternalSyntaxTree.bind(this)),
                 defaults: node.defaults.map(this._createInternalSyntaxTree.bind(this)),
                 body: this._createInternalSyntaxTree(node.body),
-                isGetterOrSetter: false // This is obvious, but is convenient none the less b/c Declarations and Expressions are often intertwined.
+                typeProfilingReturnDivot: node.range[0]
             };
             break;
         case "FunctionExpression":
@@ -699,7 +700,7 @@
                 params: node.params.map(this._createInternalSyntaxTree.bind(this)),
                 defaults: node.defaults.map(this._createInternalSyntaxTree.bind(this)),
                 body: this._createInternalSyntaxTree(node.body),
-                isGetterOrSetter: false // If true, it is set in the Property AST node.
+                typeProfilingReturnDivot: node.range[0] // This may be overridden in the Property AST node.
             };
             break;
         case "Identifier":
@@ -763,14 +764,7 @@
                 kind: node.kind,
                 static: node.static
             };
-            if (result.kind === "get" || result.kind === "set") {
-                var length = result.key.range[1] - result.key.range[0];
-                result.value.getterOrSetterRange = node.range;
-                result.value.getterOrSetterRange[1] = node.range[0] + length;
-            } else
-                result.value.getterOrSetterRange = result.key.range;
-            // FIXME: <https://webkit.org/b/143171> Web Inspector: Improve Type Profiler Support for ES6 Syntax
-            result.value.isGetterOrSetter = true;
+            result.value.typeProfilingReturnDivot = node.range[0]; // "g" in "get" or "s" in "set" or "[" in "['computed']" or "m" in "methodName".
             break;
         case "NewExpression":
             result = {
@@ -803,12 +797,12 @@
                 type: WebInspector.ScriptSyntaxTree.NodeType.Property,
                 key: this._createInternalSyntaxTree(node.key),
                 value: this._createInternalSyntaxTree(node.value),
-                kind: node.kind
+                kind: node.kind,
+                method: node.method,
+                computed: node.computed
             };
-            if (result.kind === "get" || result.kind === "set") {
-                result.value.isGetterOrSetter = true;
-                result.value.getterOrSetterRange = result.key.range;
-            }
+            if (result.kind === "get" || result.kind === "set" || result.method)
+                result.value.typeProfilingReturnDivot = node.range[0];  // "g" in "get" or "s" in "set" or "[" in "['computed']" method or "m" in "methodName".
             break;
         case "ReturnStatement":
             result = {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to