visitUpdateExpression method
dynamic
visitUpdateExpression(
- UpdateExpression node
)
Implementation
@override
visitUpdateExpression(UpdateExpression node) {
dynamic val = getValueFromExpression(node.argument!);
ObjectPattern? pattern;
num number;
num originalNumber;
if (val is num) {
number = val;
originalNumber = number;
} else {
throw JSException(
node.line ?? -1,
'The operator ' +
node.operator! +
' is only valid for numbers and ' +
node.argument.toString() +
' is not a number.',
detailedError: 'Code: ${getCode(node)}');
}
if (node.argument is MemberExpression) {
pattern = visitMember(node.argument as MemberExpression,
computeAsPattern: true);
} else if (node.argument is IndexExpression) {
pattern =
visitIndex(node.argument as IndexExpression, computeAsPattern: true);
}
if (pattern != null) {
var obj = pattern.obj;
switch (node.operator) {
case '++':
number++;
InvokableController.setProperty(obj, pattern.property, number);
break;
case '--':
number--;
InvokableController.setProperty(obj, pattern.property, number);
break;
default:
throw JSException(node.line ?? -1,
"${node.operator!} in Code: ${getCode(node)} is not yet supported");
}
} else if (node.argument is Name || node.argument is NameExpression) {
Name n;
if (node.argument is NameExpression) {
n = (node.argument as NameExpression).name;
} else {
n = node.argument as Name;
}
switch (node.operator) {
case '++':
number++;
break;
case '--':
number--;
break;
}
addToContext(n, number);
}
if (node.isPrefix) {
return number;
}
return originalNumber;
}