visitUnary method

  1. @override
dynamic visitUnary(
  1. UnaryExpression node
)

Implementation

@override
visitUnary(UnaryExpression node) {
  dynamic val = getValueFromNode(node.argument);
  switch (node.operator) {
    case '-':
      val = (val is num) ? -val : -toNumber(val);
      break;
    case '+':
      val = toNumber(val);
      break;
    case '++':
      val = (val is num) ? val + 1 : toNumber(val) + 1;
      break;
    case '--':
      val = (val is num) ? val - 1 : toNumber(val) - 1;
      break;
    case '~':
      val = (val is int) ? ~val : ~toNumber(val).toInt();
      break;
    case 'typeof':
      val = _jsTypeOf(val);
      break;
    case '!':
      val = !toBoolean(val);
      break;
    default:
      throw JSException(
          node.line ?? -1, "${node.operator} not yet implemented.",
          detailedError: "Code: " + getCode(node));
  }
  return val;
}