blob: 529dd5be94d6eeb88f75f020cebf51cae8d00405 [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]) {
return generate().accept(visitor, context);
}
}