Implement breakpoint spans of array destructuring pattern of destructuring assignment

This commit is contained in:
Sheetal Nandi 2015-12-22 14:54:21 -08:00
parent 7146b4870f
commit 35537b5f32
4 changed files with 426 additions and 147 deletions

View File

@ -97,7 +97,7 @@ namespace ts.BreakpointResolver {
if (isFunctionBlock(node)) {
return spanInFunctionBlock(<Block>node);
}
// Fall through
// Fall through
case SyntaxKind.ModuleBlock:
return spanInBlock(<Block>node);
@ -217,17 +217,17 @@ namespace ts.BreakpointResolver {
case SyntaxKind.CommaToken:
return spanInPreviousNode(node)
case SyntaxKind.OpenBraceToken:
return spanInOpenBraceToken(node);
case SyntaxKind.CloseBraceToken:
return spanInCloseBraceToken(node);
case SyntaxKind.CloseBracketToken:
return spanInCloseBracketToken(node);
case SyntaxKind.OpenParenToken:
case SyntaxKind.OpenParenToken:
return spanInOpenParenToken(node);
case SyntaxKind.CloseParenToken:
@ -253,6 +253,42 @@ namespace ts.BreakpointResolver {
return spanInOfKeyword(node);
default:
// Destructuring pattern in destructuring assignment
// [a, b, c] of
// [a, b, c] = expression
if (isArrayLiteralOrObjectLiteralDestructuringPattern(node)) {
return spanInArrayLiteralOrObjectLiteralDestructuringPattern(<DestructuringPattern>node);
}
// Set breakpoint on identifier element of destructuring pattern
// a or ...c from
// [a, b, ...c] or { a, b } from destructuring pattern
if ((node.kind === SyntaxKind.Identifier || node.kind == SyntaxKind.SpreadElementExpression) &&
isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
return textSpan(node);
}
if (node.kind === SyntaxKind.BinaryExpression) {
const binaryExpression = <BinaryExpression>node;
// Set breakpoint in destructuring pattern if its destructuring assignment
// [a, b, c] or {a, b, c} of
// [a, b, c] = expression or
// {a, b, c} = expression
if (isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left)) {
return spanInArrayLiteralOrObjectLiteralDestructuringPattern(
<ArrayLiteralExpression | ObjectLiteralExpression>binaryExpression.left);
}
if (binaryExpression.operatorToken.kind === SyntaxKind.EqualsToken &&
isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.parent)) {
// Set breakpoint on assignment expression element of destructuring pattern
// a = expression of
// [a = expression, b, c] = someExpression or
// { a = expression, b, c } = someExpression
return textSpan(node);
}
}
if (isExpression(node)) {
switch (node.parent.kind) {
case SyntaxKind.DoStatement:
@ -310,6 +346,16 @@ namespace ts.BreakpointResolver {
}
}
if (node.parent.kind === SyntaxKind.BinaryExpression) {
const binaryExpression = <BinaryExpression>node.parent;
if (isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left) &&
(binaryExpression.right === node ||
binaryExpression.operatorToken === node)) {
// If initializer of destructuring assignment move to previous token
return spanInPreviousNode(node);
}
}
// Default go to parent to set the breakpoint
return spanInNode(node.parent);
}
@ -474,13 +520,34 @@ namespace ts.BreakpointResolver {
// Empty binding pattern of binding element, set breakpoint on binding element
if (bindingPattern.parent.kind === SyntaxKind.BindingElement) {
return spanInNode(bindingPattern.parent);
return textSpan(bindingPattern.parent);
}
// Variable declaration is used as the span
return textSpanFromVariableDeclaration(<VariableDeclaration>bindingPattern.parent);
}
function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node: DestructuringPattern): TextSpan {
Debug.assert(node.kind !== SyntaxKind.ArrayBindingPattern && node.kind !== SyntaxKind.ObjectBindingPattern);
const elements: NodeArray<Expression | ObjectLiteralElement> =
node.kind === SyntaxKind.ArrayLiteralExpression ?
(<ArrayLiteralExpression>node).elements :
(<ObjectLiteralExpression>node).properties;
const firstBindingElement = forEach(elements,
element => element.kind !== SyntaxKind.OmittedExpression ? element : undefined);
if (firstBindingElement) {
return spanInNode(firstBindingElement);
}
// Could be ArrayLiteral from destructuring assignment or
// just nested element in another destructuring assignment
// set breakpoint on assignment when parent is destructuring assignment
// Otherwise set breakpoint for this element
return textSpan(node.parent.kind === SyntaxKind.BinaryExpression ? node.parent : node);
}
// Tokens:
function spanInOpenBraceToken(node: Node): TextSpan {
switch (node.parent.kind) {
@ -548,10 +615,16 @@ namespace ts.BreakpointResolver {
case SyntaxKind.ArrayBindingPattern:
// Breakpoint in last binding element or binding pattern if it contains no elements
let bindingPattern = <BindingPattern>node.parent;
return spanInNode(lastOrUndefined(bindingPattern.elements) || bindingPattern);
return textSpan(lastOrUndefined(bindingPattern.elements) || bindingPattern);
// Default to parent node
default:
if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
// Breakpoint in last binding element or binding pattern if it contains no elements
let arrayLiteral = <ArrayLiteralExpression>node.parent;
return textSpan(lastOrUndefined(arrayLiteral.elements) || arrayLiteral);
}
// Default to parent node
return spanInNode(node.parent);
}
}

View File

@ -608,6 +608,34 @@ namespace ts {
}
return true;
}
export function isArrayLiteralOrObjectLiteralDestructuringPattern(node: Node) {
if (node.kind === SyntaxKind.ArrayLiteralExpression ||
node.kind === SyntaxKind.ObjectLiteralExpression) {
// [a,b,c] from:
// [a, b, c] = someExpression;
if (node.parent.kind === SyntaxKind.BinaryExpression &&
(<BinaryExpression>node.parent).left === node &&
(<BinaryExpression>node.parent).operatorToken.kind === SyntaxKind.EqualsToken) {
return true;
}
// [a, b, c] from:
// for([a, b, c] of expression)
if (node.parent.kind === SyntaxKind.ForOfStatement &&
(<ForOfStatement>node.parent).initializer === node) {
return true;
}
// [a, b, c] of
// [x, [a, b, c] ] = someExpression
if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
return true;
}
}
return false;
}
}
// Display-part writer helpers

View File

@ -77,39 +77,39 @@
--------------------------------
18 >[, nameA] = robotA;
~~~~~~~~~~~~~~~~~~~~ => Pos: (631 to 650) SpanInfo: {"start":631,"length":18}
>[, nameA] = robotA
>:=> (line 18, col 0) to (line 18, col 18)
~~~~~~~~~~~~~~~~~~~~ => Pos: (631 to 650) SpanInfo: {"start":634,"length":5}
>nameA
>:=> (line 18, col 3) to (line 18, col 8)
--------------------------------
19 >[, nameB] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (651 to 675) SpanInfo: {"start":651,"length":23}
>[, nameB] = getRobotB()
>:=> (line 19, col 0) to (line 19, col 23)
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (651 to 675) SpanInfo: {"start":654,"length":5}
>nameB
>:=> (line 19, col 3) to (line 19, col 8)
--------------------------------
20 >[, nameB] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (676 to 715) SpanInfo: {"start":676,"length":38}
>[, nameB] = [2, "trimmer", "trimming"]
>:=> (line 20, col 0) to (line 20, col 38)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (676 to 715) SpanInfo: {"start":679,"length":5}
>nameB
>:=> (line 20, col 3) to (line 20, col 8)
--------------------------------
21 >[, multiSkillB] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (716 to 746) SpanInfo: {"start":716,"length":29}
>[, multiSkillB] = multiRobotB
>:=> (line 21, col 0) to (line 21, col 29)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (716 to 746) SpanInfo: {"start":719,"length":11}
>multiSkillB
>:=> (line 21, col 3) to (line 21, col 14)
--------------------------------
22 >[, multiSkillB] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (747 to 782) SpanInfo: {"start":747,"length":34}
>[, multiSkillB] = getMultiRobotB()
>:=> (line 22, col 0) to (line 22, col 34)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (747 to 782) SpanInfo: {"start":750,"length":11}
>multiSkillB
>:=> (line 22, col 3) to (line 22, col 14)
--------------------------------
23 >[, multiSkillB] = ["roomba", ["vaccum", "mopping"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (783 to 835) SpanInfo: {"start":783,"length":51}
>[, multiSkillB] = ["roomba", ["vaccum", "mopping"]]
>:=> (line 23, col 0) to (line 23, col 51)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (783 to 835) SpanInfo: {"start":786,"length":11}
>multiSkillB
>:=> (line 23, col 3) to (line 23, col 14)
--------------------------------
24 >
@ -117,39 +117,39 @@
--------------------------------
25 >[numberB] = robotB;
~~~~~~~~~~~~~~~~~~~~ => Pos: (837 to 856) SpanInfo: {"start":837,"length":18}
>[numberB] = robotB
>:=> (line 25, col 0) to (line 25, col 18)
~~~~~~~~~~~~~~~~~~~~ => Pos: (837 to 856) SpanInfo: {"start":838,"length":7}
>numberB
>:=> (line 25, col 1) to (line 25, col 8)
--------------------------------
26 >[numberB] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (857 to 881) SpanInfo: {"start":857,"length":23}
>[numberB] = getRobotB()
>:=> (line 26, col 0) to (line 26, col 23)
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (857 to 881) SpanInfo: {"start":858,"length":7}
>numberB
>:=> (line 26, col 1) to (line 26, col 8)
--------------------------------
27 >[numberB] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (882 to 921) SpanInfo: {"start":882,"length":38}
>[numberB] = [2, "trimmer", "trimming"]
>:=> (line 27, col 0) to (line 27, col 38)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (882 to 921) SpanInfo: {"start":883,"length":7}
>numberB
>:=> (line 27, col 1) to (line 27, col 8)
--------------------------------
28 >[nameMB] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (922 to 945) SpanInfo: {"start":922,"length":22}
>[nameMB] = multiRobotB
>:=> (line 28, col 0) to (line 28, col 22)
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (922 to 945) SpanInfo: {"start":923,"length":6}
>nameMB
>:=> (line 28, col 1) to (line 28, col 7)
--------------------------------
29 >[nameMB] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (946 to 974) SpanInfo: {"start":946,"length":27}
>[nameMB] = getMultiRobotB()
>:=> (line 29, col 0) to (line 29, col 27)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (946 to 974) SpanInfo: {"start":947,"length":6}
>nameMB
>:=> (line 29, col 1) to (line 29, col 7)
--------------------------------
30 >[nameMB] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (975 to 1022) SpanInfo: {"start":975,"length":46}
>[nameMB] = ["trimmer", ["trimming", "edging"]]
>:=> (line 30, col 0) to (line 30, col 46)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (975 to 1022) SpanInfo: {"start":976,"length":6}
>nameMB
>:=> (line 30, col 1) to (line 30, col 7)
--------------------------------
31 >
@ -157,39 +157,114 @@
--------------------------------
32 >[numberB, nameB, skillB] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1024 to 1058) SpanInfo: {"start":1024,"length":33}
>[numberB, nameB, skillB] = robotB
>:=> (line 32, col 0) to (line 32, col 33)
~~~~~~~~~ => Pos: (1024 to 1032) SpanInfo: {"start":1025,"length":7}
>numberB
>:=> (line 32, col 1) to (line 32, col 8)
32 >[numberB, nameB, skillB] = robotB;
~~~~~~~ => Pos: (1033 to 1039) SpanInfo: {"start":1034,"length":5}
>nameB
>:=> (line 32, col 10) to (line 32, col 15)
32 >[numberB, nameB, skillB] = robotB;
~~~~~~~~~~~~~~~~~~~ => Pos: (1040 to 1058) SpanInfo: {"start":1041,"length":6}
>skillB
>:=> (line 32, col 17) to (line 32, col 23)
--------------------------------
33 >[numberB, nameB, skillB] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1059 to 1098) SpanInfo: {"start":1059,"length":38}
>[numberB, nameB, skillB] = getRobotB()
>:=> (line 33, col 0) to (line 33, col 38)
~~~~~~~~~ => Pos: (1059 to 1067) SpanInfo: {"start":1060,"length":7}
>numberB
>:=> (line 33, col 1) to (line 33, col 8)
33 >[numberB, nameB, skillB] = getRobotB();
~~~~~~~ => Pos: (1068 to 1074) SpanInfo: {"start":1069,"length":5}
>nameB
>:=> (line 33, col 10) to (line 33, col 15)
33 >[numberB, nameB, skillB] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1075 to 1098) SpanInfo: {"start":1076,"length":6}
>skillB
>:=> (line 33, col 17) to (line 33, col 23)
--------------------------------
34 >[numberB, nameB, skillB] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1099 to 1153) SpanInfo: {"start":1099,"length":53}
>[numberB, nameB, skillB] = [2, "trimmer", "trimming"]
>:=> (line 34, col 0) to (line 34, col 53)
~~~~~~~~~ => Pos: (1099 to 1107) SpanInfo: {"start":1100,"length":7}
>numberB
>:=> (line 34, col 1) to (line 34, col 8)
34 >[numberB, nameB, skillB] = [2, "trimmer", "trimming"];
~~~~~~~ => Pos: (1108 to 1114) SpanInfo: {"start":1109,"length":5}
>nameB
>:=> (line 34, col 10) to (line 34, col 15)
34 >[numberB, nameB, skillB] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1115 to 1153) SpanInfo: {"start":1116,"length":6}
>skillB
>:=> (line 34, col 17) to (line 34, col 23)
--------------------------------
35 >[nameMB, [primarySkillB, secondarySkillB]] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1154 to 1211) SpanInfo: {"start":1154,"length":56}
>[nameMB, [primarySkillB, secondarySkillB]] = multiRobotB
>:=> (line 35, col 0) to (line 35, col 56)
~~~~~~~~ => Pos: (1154 to 1161) SpanInfo: {"start":1155,"length":6}
>nameMB
>:=> (line 35, col 1) to (line 35, col 7)
35 >[nameMB, [primarySkillB, secondarySkillB]] = multiRobotB;
~~~~~~~~~~~~~~~~ => Pos: (1162 to 1177) SpanInfo: {"start":1164,"length":13}
>primarySkillB
>:=> (line 35, col 10) to (line 35, col 23)
35 >[nameMB, [primarySkillB, secondarySkillB]] = multiRobotB;
~~~~~~~~~~~~~~~~~ => Pos: (1178 to 1194) SpanInfo: {"start":1179,"length":15}
>secondarySkillB
>:=> (line 35, col 25) to (line 35, col 40)
35 >[nameMB, [primarySkillB, secondarySkillB]] = multiRobotB;
~~~~~~~~~~~~~~~~~=> Pos: (1195 to 1211) SpanInfo: {"start":1163,"length":32}
>[primarySkillB, secondarySkillB]
>:=> (line 35, col 9) to (line 35, col 41)
--------------------------------
36 >[nameMB, [primarySkillB, secondarySkillB]] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1212 to 1274) SpanInfo: {"start":1212,"length":61}
>[nameMB, [primarySkillB, secondarySkillB]] = getMultiRobotB()
>:=> (line 36, col 0) to (line 36, col 61)
~~~~~~~~ => Pos: (1212 to 1219) SpanInfo: {"start":1213,"length":6}
>nameMB
>:=> (line 36, col 1) to (line 36, col 7)
36 >[nameMB, [primarySkillB, secondarySkillB]] = getMultiRobotB();
~~~~~~~~~~~~~~~~ => Pos: (1220 to 1235) SpanInfo: {"start":1222,"length":13}
>primarySkillB
>:=> (line 36, col 10) to (line 36, col 23)
36 >[nameMB, [primarySkillB, secondarySkillB]] = getMultiRobotB();
~~~~~~~~~~~~~~~~~ => Pos: (1236 to 1252) SpanInfo: {"start":1237,"length":15}
>secondarySkillB
>:=> (line 36, col 25) to (line 36, col 40)
36 >[nameMB, [primarySkillB, secondarySkillB]] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1253 to 1274) SpanInfo: {"start":1221,"length":32}
>[primarySkillB, secondarySkillB]
>:=> (line 36, col 9) to (line 36, col 41)
--------------------------------
37 >[nameMB, [primarySkillB, secondarySkillB]] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1275 to 1356) SpanInfo: {"start":1275,"length":80}
>[nameMB, [primarySkillB, secondarySkillB]] = ["trimmer", ["trimming", "edging"]]
>:=> (line 37, col 0) to (line 37, col 80)
~~~~~~~~ => Pos: (1275 to 1282) SpanInfo: {"start":1276,"length":6}
>nameMB
>:=> (line 37, col 1) to (line 37, col 7)
37 >[nameMB, [primarySkillB, secondarySkillB]] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~ => Pos: (1283 to 1298) SpanInfo: {"start":1285,"length":13}
>primarySkillB
>:=> (line 37, col 10) to (line 37, col 23)
37 >[nameMB, [primarySkillB, secondarySkillB]] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~ => Pos: (1299 to 1315) SpanInfo: {"start":1300,"length":15}
>secondarySkillB
>:=> (line 37, col 25) to (line 37, col 40)
37 >[nameMB, [primarySkillB, secondarySkillB]] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1316 to 1356) SpanInfo: {"start":1284,"length":32}
>[primarySkillB, secondarySkillB]
>:=> (line 37, col 9) to (line 37, col 41)
--------------------------------
38 >
@ -197,39 +272,54 @@
--------------------------------
39 >[numberB, ...robotAInfo] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1358 to 1392) SpanInfo: {"start":1358,"length":33}
>[numberB, ...robotAInfo] = robotB
>:=> (line 39, col 0) to (line 39, col 33)
~~~~~~~~~ => Pos: (1358 to 1366) SpanInfo: {"start":1359,"length":7}
>numberB
>:=> (line 39, col 1) to (line 39, col 8)
39 >[numberB, ...robotAInfo] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1367 to 1392) SpanInfo: {"start":1368,"length":13}
>...robotAInfo
>:=> (line 39, col 10) to (line 39, col 23)
--------------------------------
40 >[numberB, ...robotAInfo] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1393 to 1432) SpanInfo: {"start":1393,"length":38}
>[numberB, ...robotAInfo] = getRobotB()
>:=> (line 40, col 0) to (line 40, col 38)
~~~~~~~~~ => Pos: (1393 to 1401) SpanInfo: {"start":1394,"length":7}
>numberB
>:=> (line 40, col 1) to (line 40, col 8)
40 >[numberB, ...robotAInfo] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1402 to 1432) SpanInfo: {"start":1403,"length":13}
>...robotAInfo
>:=> (line 40, col 10) to (line 40, col 23)
--------------------------------
41 >[numberB, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1433 to 1494) SpanInfo: {"start":1433,"length":60}
>[numberB, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"]
>:=> (line 41, col 0) to (line 41, col 60)
~~~~~~~~~ => Pos: (1433 to 1441) SpanInfo: {"start":1434,"length":7}
>numberB
>:=> (line 41, col 1) to (line 41, col 8)
41 >[numberB, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1442 to 1494) SpanInfo: {"start":1443,"length":13}
>...robotAInfo
>:=> (line 41, col 10) to (line 41, col 23)
--------------------------------
42 >[...multiRobotAInfo] = multiRobotA;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1495 to 1530) SpanInfo: {"start":1495,"length":34}
>[...multiRobotAInfo] = multiRobotA
>:=> (line 42, col 0) to (line 42, col 34)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1495 to 1530) SpanInfo: {"start":1496,"length":18}
>...multiRobotAInfo
>:=> (line 42, col 1) to (line 42, col 19)
--------------------------------
43 >[...multiRobotAInfo] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1531 to 1571) SpanInfo: {"start":1531,"length":39}
>[...multiRobotAInfo] = getMultiRobotB()
>:=> (line 43, col 0) to (line 43, col 39)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1531 to 1571) SpanInfo: {"start":1532,"length":18}
>...multiRobotAInfo
>:=> (line 43, col 1) to (line 43, col 19)
--------------------------------
44 >[...multiRobotAInfo] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1572 to 1631) SpanInfo: {"start":1572,"length":58}
>[...multiRobotAInfo] = ["trimmer", ["trimming", "edging"]]
>:=> (line 44, col 0) to (line 44, col 58)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1572 to 1631) SpanInfo: {"start":1573,"length":18}
>...multiRobotAInfo
>:=> (line 44, col 1) to (line 44, col 19)
--------------------------------
45 >

View File

@ -77,39 +77,39 @@
--------------------------------
18 >[, nameA = "helloNoName"] = robotA;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (607 to 642) SpanInfo: {"start":607,"length":34}
>[, nameA = "helloNoName"] = robotA
>:=> (line 18, col 0) to (line 18, col 34)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (607 to 642) SpanInfo: {"start":610,"length":21}
>nameA = "helloNoName"
>:=> (line 18, col 3) to (line 18, col 24)
--------------------------------
19 >[, nameB = "helloNoName"] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (643 to 683) SpanInfo: {"start":643,"length":39}
>[, nameB = "helloNoName"] = getRobotB()
>:=> (line 19, col 0) to (line 19, col 39)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (643 to 683) SpanInfo: {"start":646,"length":21}
>nameB = "helloNoName"
>:=> (line 19, col 3) to (line 19, col 24)
--------------------------------
20 >[, nameB = "helloNoName"] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (684 to 739) SpanInfo: {"start":684,"length":54}
>[, nameB = "helloNoName"] = [2, "trimmer", "trimming"]
>:=> (line 20, col 0) to (line 20, col 54)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (684 to 739) SpanInfo: {"start":687,"length":21}
>nameB = "helloNoName"
>:=> (line 20, col 3) to (line 20, col 24)
--------------------------------
21 >[, multiSkillB = []] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (740 to 775) SpanInfo: {"start":740,"length":34}
>[, multiSkillB = []] = multiRobotB
>:=> (line 21, col 0) to (line 21, col 34)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (740 to 775) SpanInfo: {"start":743,"length":16}
>multiSkillB = []
>:=> (line 21, col 3) to (line 21, col 19)
--------------------------------
22 >[, multiSkillB = []] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (776 to 816) SpanInfo: {"start":776,"length":39}
>[, multiSkillB = []] = getMultiRobotB()
>:=> (line 22, col 0) to (line 22, col 39)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (776 to 816) SpanInfo: {"start":779,"length":16}
>multiSkillB = []
>:=> (line 22, col 3) to (line 22, col 19)
--------------------------------
23 >[, multiSkillB = []] = ["roomba", ["vaccum", "mopping"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (817 to 874) SpanInfo: {"start":817,"length":56}
>[, multiSkillB = []] = ["roomba", ["vaccum", "mopping"]]
>:=> (line 23, col 0) to (line 23, col 56)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (817 to 874) SpanInfo: {"start":820,"length":16}
>multiSkillB = []
>:=> (line 23, col 3) to (line 23, col 19)
--------------------------------
24 >
@ -117,39 +117,39 @@
--------------------------------
25 >[numberB = -1] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (876 to 900) SpanInfo: {"start":876,"length":23}
>[numberB = -1] = robotB
>:=> (line 25, col 0) to (line 25, col 23)
~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (876 to 900) SpanInfo: {"start":877,"length":12}
>numberB = -1
>:=> (line 25, col 1) to (line 25, col 13)
--------------------------------
26 >[numberB = -1] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (901 to 930) SpanInfo: {"start":901,"length":28}
>[numberB = -1] = getRobotB()
>:=> (line 26, col 0) to (line 26, col 28)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (901 to 930) SpanInfo: {"start":902,"length":12}
>numberB = -1
>:=> (line 26, col 1) to (line 26, col 13)
--------------------------------
27 >[numberB = -1] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (931 to 975) SpanInfo: {"start":931,"length":43}
>[numberB = -1] = [2, "trimmer", "trimming"]
>:=> (line 27, col 0) to (line 27, col 43)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (931 to 975) SpanInfo: {"start":932,"length":12}
>numberB = -1
>:=> (line 27, col 1) to (line 27, col 13)
--------------------------------
28 >[nameMB = "helloNoName"] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (976 to 1015) SpanInfo: {"start":976,"length":38}
>[nameMB = "helloNoName"] = multiRobotB
>:=> (line 28, col 0) to (line 28, col 38)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (976 to 1015) SpanInfo: {"start":977,"length":22}
>nameMB = "helloNoName"
>:=> (line 28, col 1) to (line 28, col 23)
--------------------------------
29 >[nameMB = "helloNoName"] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1016 to 1060) SpanInfo: {"start":1016,"length":43}
>[nameMB = "helloNoName"] = getMultiRobotB()
>:=> (line 29, col 0) to (line 29, col 43)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1016 to 1060) SpanInfo: {"start":1017,"length":22}
>nameMB = "helloNoName"
>:=> (line 29, col 1) to (line 29, col 23)
--------------------------------
30 >[nameMB = "helloNoName"] = ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1061 to 1124) SpanInfo: {"start":1061,"length":62}
>[nameMB = "helloNoName"] = ["trimmer", ["trimming", "edging"]]
>:=> (line 30, col 0) to (line 30, col 62)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1061 to 1124) SpanInfo: {"start":1062,"length":22}
>nameMB = "helloNoName"
>:=> (line 30, col 1) to (line 30, col 23)
--------------------------------
31 >
@ -157,47 +157,120 @@
--------------------------------
32 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1126 to 1193) SpanInfo: {"start":1126,"length":66}
>[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = robotB
>:=> (line 32, col 0) to (line 32, col 66)
~~~~~~~~~~~~~~ => Pos: (1126 to 1139) SpanInfo: {"start":1127,"length":12}
>numberB = -1
>:=> (line 32, col 1) to (line 32, col 13)
32 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1140 to 1162) SpanInfo: {"start":1141,"length":21}
>nameB = "helloNoName"
>:=> (line 32, col 15) to (line 32, col 36)
32 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1163 to 1193) SpanInfo: {"start":1164,"length":18}
>skillB = "noSkill"
>:=> (line 32, col 38) to (line 32, col 56)
--------------------------------
33 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1194 to 1266) SpanInfo: {"start":1194,"length":71}
>[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = getRobotB()
>:=> (line 33, col 0) to (line 33, col 71)
~~~~~~~~~~~~~~ => Pos: (1194 to 1207) SpanInfo: {"start":1195,"length":12}
>numberB = -1
>:=> (line 33, col 1) to (line 33, col 13)
33 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1208 to 1230) SpanInfo: {"start":1209,"length":21}
>nameB = "helloNoName"
>:=> (line 33, col 15) to (line 33, col 36)
33 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1231 to 1266) SpanInfo: {"start":1232,"length":18}
>skillB = "noSkill"
>:=> (line 33, col 38) to (line 33, col 56)
--------------------------------
34 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1267 to 1354) SpanInfo: {"start":1267,"length":86}
>[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = [2, "trimmer", "trimming"]
>:=> (line 34, col 0) to (line 34, col 86)
~~~~~~~~~~~~~~ => Pos: (1267 to 1280) SpanInfo: {"start":1268,"length":12}
>numberB = -1
>:=> (line 34, col 1) to (line 34, col 13)
34 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1281 to 1303) SpanInfo: {"start":1282,"length":21}
>nameB = "helloNoName"
>:=> (line 34, col 15) to (line 34, col 36)
34 >[numberB = -1, nameB = "helloNoName", skillB = "noSkill"] = [2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1304 to 1354) SpanInfo: {"start":1305,"length":18}
>skillB = "noSkill"
>:=> (line 34, col 38) to (line 34, col 56)
--------------------------------
35 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1355 to 1457) SpanInfo: {"start":1355,"length":101}
>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB
>:=> (line 35, col 0) to (line 35, col 101)
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1355 to 1378) SpanInfo: {"start":1356,"length":22}
>nameMB = "helloNoName"
>:=> (line 35, col 1) to (line 35, col 23)
35 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1379 to 1406) SpanInfo: {"start":1381,"length":25}
>primarySkillB = "noSkill"
>:=> (line 35, col 26) to (line 35, col 51)
35 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1407 to 1440) SpanInfo: {"start":1408,"length":27}
>secondarySkillB = "noSkill"
>:=> (line 35, col 53) to (line 35, col 80)
35 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB;
~~~~~~~~~~~~~~~~~=> Pos: (1441 to 1457) SpanInfo: {"start":1380,"length":61}
>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []
>:=> (line 35, col 25) to (line 35, col 86)
--------------------------------
36 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1458 to 1565) SpanInfo: {"start":1458,"length":106}
>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB()
>:=> (line 36, col 0) to (line 36, col 106)
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1458 to 1481) SpanInfo: {"start":1459,"length":22}
>nameMB = "helloNoName"
>:=> (line 36, col 1) to (line 36, col 23)
36 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1482 to 1509) SpanInfo: {"start":1484,"length":25}
>primarySkillB = "noSkill"
>:=> (line 36, col 26) to (line 36, col 51)
36 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1510 to 1543) SpanInfo: {"start":1511,"length":27}
>secondarySkillB = "noSkill"
>:=> (line 36, col 53) to (line 36, col 80)
36 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB();
~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1544 to 1565) SpanInfo: {"start":1483,"length":61}
>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []
>:=> (line 36, col 25) to (line 36, col 86)
--------------------------------
37 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1566 to 1655) SpanInfo: {"start":1566,"length":129}
>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
> ["trimmer", ["trimming", "edging"]]
>:=> (line 37, col 0) to (line 38, col 39)
~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1566 to 1589) SpanInfo: {"start":1567,"length":22}
>nameMB = "helloNoName"
>:=> (line 37, col 1) to (line 37, col 23)
37 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1590 to 1617) SpanInfo: {"start":1592,"length":25}
>primarySkillB = "noSkill"
>:=> (line 37, col 26) to (line 37, col 51)
37 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1618 to 1651) SpanInfo: {"start":1619,"length":27}
>secondarySkillB = "noSkill"
>:=> (line 37, col 53) to (line 37, col 80)
37 >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
~~~~=> Pos: (1652 to 1655) SpanInfo: {"start":1591,"length":61}
>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []
>:=> (line 37, col 25) to (line 37, col 86)
--------------------------------
38 > ["trimmer", ["trimming", "edging"]];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1656 to 1696) SpanInfo: {"start":1566,"length":129}
>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] =
> ["trimmer", ["trimming", "edging"]]
>:=> (line 37, col 0) to (line 38, col 39)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1656 to 1696) SpanInfo: {"start":1591,"length":61}
>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []
>:=> (line 37, col 25) to (line 37, col 86)
--------------------------------
39 >
@ -205,21 +278,36 @@
--------------------------------
40 >[numberB = -1, ...robotAInfo] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1698 to 1737) SpanInfo: {"start":1698,"length":38}
>[numberB = -1, ...robotAInfo] = robotB
>:=> (line 40, col 0) to (line 40, col 38)
~~~~~~~~~~~~~~ => Pos: (1698 to 1711) SpanInfo: {"start":1699,"length":12}
>numberB = -1
>:=> (line 40, col 1) to (line 40, col 13)
40 >[numberB = -1, ...robotAInfo] = robotB;
~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1712 to 1737) SpanInfo: {"start":1713,"length":13}
>...robotAInfo
>:=> (line 40, col 15) to (line 40, col 28)
--------------------------------
41 >[numberB = -1, ...robotAInfo] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1738 to 1782) SpanInfo: {"start":1738,"length":43}
>[numberB = -1, ...robotAInfo] = getRobotB()
>:=> (line 41, col 0) to (line 41, col 43)
~~~~~~~~~~~~~~ => Pos: (1738 to 1751) SpanInfo: {"start":1739,"length":12}
>numberB = -1
>:=> (line 41, col 1) to (line 41, col 13)
41 >[numberB = -1, ...robotAInfo] = getRobotB();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (1752 to 1782) SpanInfo: {"start":1753,"length":13}
>...robotAInfo
>:=> (line 41, col 15) to (line 41, col 28)
--------------------------------
42 >[numberB = -1, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1783 to 1849) SpanInfo: {"start":1783,"length":65}
>[numberB = -1, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"]
>:=> (line 42, col 0) to (line 42, col 65)
~~~~~~~~~~~~~~ => Pos: (1783 to 1796) SpanInfo: {"start":1784,"length":12}
>numberB = -1
>:=> (line 42, col 1) to (line 42, col 13)
42 >[numberB = -1, ...robotAInfo] = <Robot>[2, "trimmer", "trimming"];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (1797 to 1849) SpanInfo: {"start":1798,"length":13}
>...robotAInfo
>:=> (line 42, col 15) to (line 42, col 28)
--------------------------------
43 >