blob: 216b9a982932d043b52899f017a596efb39baba1 [file] [log] [blame]
// Copyright (c) 2017, 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 'visitors.dart';
abstract class Spec {
R accept<R>(SpecVisitor<R> visitor, [R? context]);
}
/// Returns a generic [Spec] that is lazily generated when visited.
Spec lazySpec(Spec Function() generate) => _LazySpec(generate);
class _LazySpec implements Spec {
final Spec Function() generate;
const _LazySpec(this.generate);
@override
R accept<R>(SpecVisitor<R> visitor, [R? context]) =>
generate().accept(visitor, context);
}