blob: c80447aeaf127fa41845da4298c9c9a03d19cb0d [file] [log] [blame]
// Copyright (c) 2016, 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.
library kernel.core_types;
import 'ast.dart';
import 'library_index.dart';
/// Provides access to the classes and libraries in the core libraries.
class CoreTypes {
static final Map<String, List<String>> requiredClasses = {
'dart:core': [
'Object',
'Null',
'bool',
'int',
'num',
'double',
'String',
'List',
'Map',
'Iterable',
'Iterator',
'Symbol',
'Type',
'Function',
'Invocation',
],
'dart:_internal': [
'Symbol',
],
'dart:async': [
'Future',
'Stream',
]
};
final LibraryIndex _index;
Library _coreLibrary;
Class _objectClass;
Class _nullClass;
Class _boolClass;
Class _intClass;
Class _numClass;
Class _doubleClass;
Class _stringClass;
Class _listClass;
Class _mapClass;
Class _iterableClass;
Class _iteratorClass;
Class _symbolClass;
Class _typeClass;
Class _functionClass;
Class _invocationClass;
Constructor _externalNameDefaultConstructor;
Class _invocationMirrorClass;
Constructor _invocationMirrorDefaultConstructor;
Class _noSuchMethodErrorClass;
Procedure _listFromConstructor;
Procedure _printProcedure;
Procedure _identicalProcedure;
Class _internalSymbolClass;
Library _asyncLibrary;
Class _futureClass;
Class _streamClass;
Class _completerClass;
Class _futureOrClass;
Procedure _completerSyncConstructor;
Procedure _futureMicrotaskConstructor;
Constructor _syncIterableDefaultConstructor;
Constructor _streamIteratorDefaultConstructor;
Constructor _asyncStarStreamControllerDefaultConstructor;
Procedure _asyncThenWrapperHelperProcedure;
Procedure _asyncErrorWrapperHelperProcedure;
Procedure _awaitHelperProcedure;
/// The `dart:mirrors` library, or `null` if the program does not use it.
Library _mirrorsLibrary;
CoreTypes(Program program) : _index = new LibraryIndex.coreLibraries(program);
Procedure get asyncErrorWrapperHelperProcedure {
return _asyncErrorWrapperHelperProcedure ??=
_index.getTopLevelMember('dart:async', '_asyncErrorWrapperHelper');
}
Library get asyncLibrary {
return _asyncLibrary ??= _index.getLibrary('dart:async');
}
Constructor get asyncStarStreamControllerDefaultConstructor {
return _asyncStarStreamControllerDefaultConstructor ??=
_index.getMember('dart:async', '_AsyncStarStreamController', '');
}
Procedure get asyncThenWrapperHelperProcedure {
return _asyncThenWrapperHelperProcedure ??=
_index.getTopLevelMember('dart:async', '_asyncThenWrapperHelper');
}
Procedure get awaitHelperProcedure {
return _awaitHelperProcedure ??=
_index.getTopLevelMember('dart:async', '_awaitHelper');
}
Class get boolClass {
return _boolClass ??= _index.getClass('dart:core', 'bool');
}
Class get completerClass {
return _completerClass ??= _index.getClass('dart:async', 'Completer');
}
Procedure get completerSyncConstructor {
return _completerSyncConstructor ??=
_index.getMember('dart:async', 'Completer', 'sync');
}
Library get coreLibrary {
return _coreLibrary ??= _index.getLibrary('dart:core');
}
Class get doubleClass {
return _doubleClass ??= _index.getClass('dart:core', 'double');
}
Constructor get externalNameDefaultConstructor {
return _externalNameDefaultConstructor ??=
_index.getMember('dart:_internal', 'ExternalName', '');
}
Class get functionClass {
return _functionClass ??= _index.getClass('dart:core', 'Function');
}
Class get futureClass {
return _futureClass ??= _index.getClass('dart:async', 'Future');
}
Procedure get futureMicrotaskConstructor {
return _futureMicrotaskConstructor ??=
_index.getMember('dart:async', 'Future', 'microtask');
}
Class get futureOrClass {
return _futureOrClass ??= _index.getClass('dart:async', 'FutureOr');
}
Procedure get identicalProcedure {
return _identicalProcedure ??=
_index.getTopLevelMember('dart:core', 'identical');
}
Class get intClass {
return _intClass ??= _index.getClass('dart:core', 'int');
}
Class get internalSymbolClass {
return _internalSymbolClass ??= _index.getClass('dart:_internal', 'Symbol');
}
Class get invocationClass {
return _invocationClass ??= _index.getClass('dart:core', 'Invocation');
}
Class get invocationMirrorClass {
return _invocationMirrorClass ??=
_index.getClass('dart:core', '_InvocationMirror');
}
Constructor get invocationMirrorDefaultConstructor {
return _invocationMirrorDefaultConstructor ??=
_index.getMember('dart:core', '_InvocationMirror', '');
}
Class get iterableClass {
return _iterableClass ??= _index.getClass('dart:core', 'Iterable');
}
Class get iteratorClass {
return _iteratorClass ??= _index.getClass('dart:core', 'Iterator');
}
Class get listClass {
return _listClass ??= _index.getClass('dart:core', 'List');
}
Procedure get listFromConstructor {
return _listFromConstructor ??=
_index.getMember('dart:core', 'List', 'from');
}
Class get mapClass {
return _mapClass ??= _index.getClass('dart:core', 'Map');
}
Library get mirrorsLibrary {
return _mirrorsLibrary ??= _index.tryGetLibrary('dart:mirrors');
}
Class get noSuchMethodErrorClass {
return _noSuchMethodErrorClass ??=
_index.getClass('dart:core', 'NoSuchMethodError');
}
Class get nullClass {
return _nullClass ??= _index.getClass('dart:core', 'Null');
}
Class get numClass {
return _numClass ??= _index.getClass('dart:core', 'num');
}
Class get objectClass {
return _objectClass ??= _index.getClass('dart:core', 'Object');
}
Procedure get printProcedure {
return _printProcedure ??= _index.getTopLevelMember('dart:core', 'print');
}
Class get streamClass {
return _streamClass ??= _index.getClass('dart:async', 'Stream');
}
Constructor get streamIteratorDefaultConstructor {
return _streamIteratorDefaultConstructor ??=
_index.getMember('dart:async', '_StreamIterator', '');
}
Class get stringClass {
return _stringClass ??= _index.getClass('dart:core', 'String');
}
Class get symbolClass {
return _symbolClass ??= _index.getClass('dart:core', 'Symbol');
}
Constructor get syncIterableDefaultConstructor {
return _syncIterableDefaultConstructor ??=
_index.getMember('dart:core', '_SyncIterable', '');
}
Class get typeClass {
return _typeClass ??= _index.getClass('dart:core', 'Type');
}
}