visitAssignment method
dynamic
visitAssignment(
- AssignmentExpression node
)
Implementation
@override
visitAssignment(AssignmentExpression node) {
try {
dynamic val = getValueFromExpression(node.right);
ObjectPattern? pattern;
if (node.left is MemberExpression) {
pattern =
visitMember(node.left as MemberExpression, computeAsPattern: true);
} else if (node.left is IndexExpression) {
pattern =
visitIndex(node.left as IndexExpression, computeAsPattern: true);
}
if (pattern != null) {
var obj = pattern.obj;
if (node.operator == '=') {
InvokableController.setProperty(obj, pattern.property, val);
} else {
dynamic left = InvokableController.getProperty(obj, pattern.property);
dynamic right = val;
val = performOperation(
left, right, node.operator!, node.line ?? -1, getCode(node));
InvokableController.setProperty(obj, pattern.property, val);
}
} else if (node.left is Name || node.left is NameExpression) {
Name n;
if (node.left is NameExpression) {
n = (node.left as NameExpression).name;
} else {
n = node.left as Name;
}
dynamic value = getValue(n);
if (value == null || node.operator == '=') {
value = val;
} else {
value = performOperation(
value, val, node.operator!, node.line ?? -1, getCode(node));
}
addToContext(n, value);
}
} on JSException catch (e) {
rethrow;
} on InvalidPropertyException catch (e) {
throw JSException(node.line ?? 1, '${e.message}. Code: ${getCode(node)}');
}
}