visitSwitch method
dynamic
visitSwitch(
- SwitchStatement node
)
Implementation
@override
visitSwitch(SwitchStatement node) {
final dynamic argument = getValueFromExpression(node.argument);
var matched = false;
var defaultIndex = -1;
for (var i = 0; i < node.cases.length; i++) {
if (node.cases[i].isDefault) {
defaultIndex = i;
continue;
}
if (_strictEquals(
argument, getValueFromExpression(node.cases[i].expression!))) {
matched = true;
defaultIndex = i;
break;
}
}
if (defaultIndex == -1) return null;
dynamic rtn;
for (var i = defaultIndex; i < node.cases.length; i++) {
if (!matched && !node.cases[i].isDefault) continue;
matched = true;
try {
for (final Statement stmt in node.cases[i].body) {
rtn = stmt.visitBy(this);
}
} on ControlFlowBreakException catch (e) {
if (e.label != null) rethrow;
return rtn;
}
}
return rtn;
}