visitSwitch method

  1. @override
dynamic visitSwitch(
  1. 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;
}