blob: f5c17bac7f6cadd2b169f79eba4c367a32e6a348 [file] [log] [blame]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'expressions.dart';
import 'proto.dart';
/// Superclass for named and position arguments.
// TODO(johnniwinther): Merge subclasses into one class?
sealed class Argument {
/// Returns the [Argument] corresponding to this [Argument] in
/// which all [UnresolvedIdentifier]s have been resolved within their scope.
///
/// If this didn't create a new [Argument], `null` is returned.
Argument? resolve();
}
class PositionalArgument extends Argument {
final Expression expression;
PositionalArgument(this.expression);
@override
String toString() => 'PositionalArgument($expression)';
@override
Argument? resolve() {
Expression? newExpression = expression.resolve();
return newExpression == null ? null : new PositionalArgument(newExpression);
}
}
class NamedArgument extends Argument {
final String name;
final Expression expression;
NamedArgument(this.name, this.expression);
@override
String toString() => 'NamedArgument($name,$expression)';
@override
Argument? resolve() {
Expression? newExpression = expression.resolve();
return newExpression == null
? null
: new NamedArgument(name, newExpression);
}
}