blob: 0061be42e4741d181ff26d1feb0768c6a36423ed [file] [log] [blame]
// Copyright (c) 2015, 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.
/// API to get results from a static analysis of the source program.
// TODO(sigmund): split out implementations out of this file.
library compiler.src.stats.naive_analysis_result;
import 'analysis_result.dart';
import '../tree/tree.dart' show Node;
import '../universe/selector.dart' show Selector;
/// A naive [AnalysisResult] that tells us very little. This is the most
/// conservative we can be when we only use information from the AST structure
/// and from resolution, but no type information.
class NaiveAnalysisResult implements AnalysisResult {
NaiveAnalysisResult();
ReceiverInfo infoForReceiver(Node receiver) =>
new NaiveReceiverInfo(receiver);
SelectorInfo infoForSelector(Node receiver, Selector selector) =>
new NaiveSelectorInfo(receiver, selector);
}
class NaiveReceiverInfo implements ReceiverInfo {
final Node receiver;
NaiveReceiverInfo(this.receiver);
Boolish get hasNoSuchMethod => Boolish.maybe;
Boolish get isNull => Boolish.maybe;
int get possibleNsmTargets => -1;
}
class NaiveSelectorInfo implements SelectorInfo {
final Node receiver;
final Selector selector;
NaiveSelectorInfo(this.receiver, this.selector);
Boolish get exists => Boolish.maybe;
Boolish get usesInterceptor => Boolish.maybe;
int get possibleTargets => -1;
bool get isAccurate => false;
}