mirror of
https://github.com/dart-lang/sdk
synced 2024-10-02 23:59:16 +00:00
[dartfuzz] Adding fuzzing support for more core types
Change-Id: Id377a58a54cb17cb3e7e337efb9de01d237aa5a3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128766 Reviewed-by: Aart Bik <ajcbik@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Fizaa Luthra <fizaaluthra@google.com>
This commit is contained in:
parent
d0049dd7f3
commit
141fcfa610
|
@ -14,7 +14,7 @@ import 'dartfuzz_type_table.dart';
|
|||
// Version of DartFuzz. Increase this each time changes are made
|
||||
// to preserve the property that a given version of DartFuzz yields
|
||||
// the same fuzzed program for a deterministic random seed.
|
||||
const String version = '1.80';
|
||||
const String version = '1.81';
|
||||
|
||||
// Restriction on statements and expressions.
|
||||
const int stmtDepth = 1;
|
||||
|
@ -1472,6 +1472,8 @@ class DartFuzz {
|
|||
|
||||
void emitBool() => emit(coinFlip() ? 'true' : 'false');
|
||||
|
||||
void emitNull() => emit("null");
|
||||
|
||||
void emitSmallPositiveInt({int limit = 50, bool includeSemicolon = false}) {
|
||||
emit('${choose(limit)}');
|
||||
if (includeSemicolon) {
|
||||
|
@ -1680,7 +1682,9 @@ class DartFuzz {
|
|||
{bool smallPositiveValue = false, RhsFilter rhsFilter}) {
|
||||
// Randomly specialize interface if possible. E.g. num to int.
|
||||
tp = maybeSpecializeInterface(tp);
|
||||
if (tp == DartType.BOOL) {
|
||||
if (tp == DartType.NULL) {
|
||||
emitNull();
|
||||
} else if (tp == DartType.BOOL) {
|
||||
emitBool();
|
||||
} else if (tp == DartType.INT) {
|
||||
if (smallPositiveValue) {
|
||||
|
@ -1694,6 +1698,10 @@ class DartFuzz {
|
|||
emitNum(smallPositiveValue: smallPositiveValue);
|
||||
} else if (tp == DartType.STRING) {
|
||||
emitString();
|
||||
} else if (tp == DartType.ENDIAN) {
|
||||
// The Endian type doesn't have a public constructor, so we emit a
|
||||
// library call instead.
|
||||
emitLibraryCall(depth, tp);
|
||||
} else if (dartType.constructors(tp).isNotEmpty) {
|
||||
// Constructors serve as literals for non trivially constructable types.
|
||||
// Important note: We have to test for existence of a non trivial
|
||||
|
|
|
@ -29,7 +29,9 @@ class DartLib {
|
|||
|
||||
static final typeToLibraryMethods = {
|
||||
DartType.BOOL: boolLibs,
|
||||
DartType.DEPRECATED: deprecatedLibs,
|
||||
DartType.DOUBLE: doubleLibs,
|
||||
DartType.ENDIAN: endianLibs,
|
||||
DartType.FLOAT32LIST: float32ListLibs,
|
||||
DartType.FLOAT32X4: float32x4Libs,
|
||||
DartType.FLOAT32X4LIST: float32x4ListLibs,
|
||||
|
@ -45,8 +47,12 @@ class DartLib {
|
|||
DartType.INT8LIST: int8ListLibs,
|
||||
DartType.LIST_INT: listLibs,
|
||||
DartType.MAP_INT_STRING: mapLibs,
|
||||
DartType.NULL: nullLibs,
|
||||
DartType.RUNEITERATOR: runeIteratorLibs,
|
||||
DartType.RUNES: runesLibs,
|
||||
DartType.SET_INT: setLibs,
|
||||
DartType.STRING: stringLibs,
|
||||
DartType.SYMBOL: symbolLibs,
|
||||
DartType.UINT16LIST: uint16ListLibs,
|
||||
DartType.UINT32LIST: uint32ListLibs,
|
||||
DartType.UINT64LIST: uint64ListLibs,
|
||||
|
@ -74,16 +80,29 @@ class DartLib {
|
|||
DartLib('flagX', [DartType.INT32X4, DartType.VOID], false),
|
||||
DartLib('flagY', [DartType.INT32X4, DartType.VOID], false),
|
||||
DartLib('flagZ', [DartType.INT32X4, DartType.VOID], false),
|
||||
DartLib('hasMatch', [DartType.REGEXP, DartType.STRING], true),
|
||||
DartLib('isCaseSensitive', [DartType.REGEXP, DartType.VOID], false),
|
||||
DartLib('isDotAll', [DartType.REGEXP, DartType.VOID], false),
|
||||
DartLib('isEmpty', [DartType.MAP_INT_STRING, DartType.VOID], false),
|
||||
DartLib('isEmpty', [DartType.STRINGBUFFER, DartType.VOID], false),
|
||||
DartLib('isEmpty', [DartType.STRING, DartType.VOID], false),
|
||||
DartLib('isEven', [DartType.INT, DartType.VOID], false),
|
||||
DartLib('isFinite', [DartType.DOUBLE, DartType.VOID], false),
|
||||
DartLib('isInfinite', [DartType.DOUBLE, DartType.VOID], false),
|
||||
DartLib('isMultiLine', [DartType.REGEXP, DartType.VOID], false),
|
||||
DartLib('isNaN', [DartType.DOUBLE, DartType.VOID], false),
|
||||
DartLib('isNegative', [DartType.DOUBLE, DartType.VOID], false),
|
||||
DartLib('isNotEmpty', [DartType.MAP_INT_STRING, DartType.VOID], false),
|
||||
DartLib('isNotEmpty', [DartType.STRINGBUFFER, DartType.VOID], false),
|
||||
DartLib('isNotEmpty', [DartType.STRING, DartType.VOID], false),
|
||||
DartLib('isOdd', [DartType.INT, DartType.VOID], false),
|
||||
DartLib('isRunning', [DartType.STOPWATCH, DartType.VOID], false),
|
||||
DartLib('isUnicode', [DartType.REGEXP, DartType.VOID], false),
|
||||
DartLib('moveNext', [DartType.RUNEITERATOR, DartType.VOID], true),
|
||||
DartLib('movePrevious', [DartType.RUNEITERATOR, DartType.VOID], true),
|
||||
];
|
||||
static const deprecatedLibs = [
|
||||
DartLib('deprecated', [DartType.VOID, DartType.VOID], false),
|
||||
];
|
||||
static const doubleLibs = [
|
||||
DartLib('abs', [DartType.DOUBLE, DartType.VOID], true),
|
||||
|
@ -104,6 +123,7 @@ class DartLib {
|
|||
DartLib('double.negativeInfinity', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('double.tryParse', [DartType.VOID, DartType.STRING], true),
|
||||
DartLib('e', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('end', [DartType.RANGEERROR, DartType.VOID], false),
|
||||
DartLib('exp', [DartType.VOID, DartType.DOUBLE], true),
|
||||
DartLib('floorToDouble', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('floorToDouble', [DartType.DOUBLE, DartType.VOID], true),
|
||||
|
@ -127,6 +147,7 @@ class DartLib {
|
|||
DartLib('sqrt', [DartType.VOID, DartType.DOUBLE], true),
|
||||
DartLib('sqrt1_2', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('sqrt2', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('start', [DartType.RANGEERROR, DartType.VOID], false),
|
||||
DartLib('tan', [DartType.VOID, DartType.DOUBLE], true),
|
||||
DartLib('toDouble', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('truncateToDouble', [DartType.DOUBLE, DartType.VOID], true),
|
||||
|
@ -139,6 +160,11 @@ class DartLib {
|
|||
DartLib('y', [DartType.FLOAT64X2, DartType.VOID], false),
|
||||
DartLib('z', [DartType.FLOAT32X4, DartType.VOID], false),
|
||||
];
|
||||
static const endianLibs = [
|
||||
DartLib('Endian.big', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('Endian.host', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('Endian.little', [DartType.VOID, DartType.VOID], false),
|
||||
];
|
||||
static const float32ListLibs = [
|
||||
DartLib(
|
||||
'sublist', [DartType.FLOAT32LIST, DartType.INT, DartType.INT], true),
|
||||
|
@ -850,21 +876,33 @@ class DartLib {
|
|||
DartLib('codeUnitAt', [DartType.STRING, DartType.INT], true),
|
||||
DartLib('compareTo', [DartType.DOUBLE, DartType.DOUBLE], true),
|
||||
DartLib('compareTo', [DartType.STRING, DartType.STRING], true),
|
||||
DartLib('current', [DartType.RUNEITERATOR, DartType.VOID], false),
|
||||
DartLib('currentSize', [DartType.RUNEITERATOR, DartType.VOID], false),
|
||||
DartLib('elapsedMicroseconds', [DartType.STOPWATCH, DartType.VOID], false),
|
||||
DartLib('elapsedMilliseconds', [DartType.STOPWATCH, DartType.VOID], false),
|
||||
DartLib('elapsedTicks', [DartType.STOPWATCH, DartType.VOID], false),
|
||||
DartLib('end', [DartType.INDEXERROR, DartType.VOID], false),
|
||||
DartLib('floor', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('floor', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('floor', [DartType.INT, DartType.VOID], true),
|
||||
DartLib('frequency', [DartType.STOPWATCH, DartType.VOID], false),
|
||||
DartLib('gcd', [DartType.INT, DartType.INT], true),
|
||||
DartLib('indexOf', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
|
||||
DartLib('int.fromEnvironment', [DartType.VOID, DartType.STRING], true),
|
||||
DartLib('int.parse', [DartType.VOID, DartType.STRING], true),
|
||||
DartLib('int.tryParse', [DartType.VOID, DartType.STRING], true),
|
||||
DartLib('last', [DartType.RUNES, DartType.VOID], false),
|
||||
DartLib(
|
||||
'lastIndexOf', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
|
||||
DartLib('length', [DartType.INDEXERROR, DartType.VOID], false),
|
||||
DartLib('length', [DartType.LIST_INT, DartType.VOID], false),
|
||||
DartLib('length', [DartType.MAP_INT_STRING, DartType.VOID], false),
|
||||
DartLib('length', [DartType.STRINGBUFFER, DartType.VOID], false),
|
||||
DartLib('length', [DartType.STRING, DartType.VOID], false),
|
||||
DartLib('modInverse', [DartType.INT, DartType.INT], true),
|
||||
DartLib('modPow', [DartType.INT, DartType.INT, DartType.INT], true),
|
||||
DartLib('offset', [DartType.FORMATEXCEPTION, DartType.VOID], false),
|
||||
DartLib('rawIndex', [DartType.RUNEITERATOR, DartType.VOID], false),
|
||||
DartLib('removeAt', [DartType.LIST_INT, DartType.INT], true),
|
||||
DartLib('removeLast', [DartType.LIST_INT, DartType.VOID], true),
|
||||
DartLib('round', [DartType.DOUBLE, DartType.VOID], true),
|
||||
|
@ -874,6 +912,7 @@ class DartLib {
|
|||
DartLib('signMask', [DartType.FLOAT32X4, DartType.VOID], false),
|
||||
DartLib('signMask', [DartType.FLOAT64X2, DartType.VOID], false),
|
||||
DartLib('signMask', [DartType.INT32X4, DartType.VOID], false),
|
||||
DartLib('start', [DartType.INDEXERROR, DartType.VOID], false),
|
||||
DartLib('toInt', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('toSigned', [DartType.INT, DartType.INT], true),
|
||||
DartLib('toUnsigned', [DartType.INT, DartType.INT], true),
|
||||
|
@ -959,6 +998,15 @@ class DartLib {
|
|||
DartLib('Map<int, String>.unmodifiable',
|
||||
[DartType.VOID, DartType.MAP_INT_STRING], true),
|
||||
];
|
||||
static const nullLibs = [
|
||||
DartLib('provisional', [DartType.VOID, DartType.VOID], false),
|
||||
];
|
||||
static const runeIteratorLibs = [
|
||||
DartLib('iterator', [DartType.RUNES, DartType.VOID], false),
|
||||
];
|
||||
static const runesLibs = [
|
||||
DartLib('runes', [DartType.STRING, DartType.VOID], false),
|
||||
];
|
||||
static const setLibs = [
|
||||
DartLib('Set<int>.identity', [DartType.VOID, DartType.VOID], true),
|
||||
DartLib('difference', [DartType.SET_INT, DartType.SET_INT], true),
|
||||
|
@ -982,19 +1030,54 @@ class DartLib {
|
|||
DartLib('Uri.encodeQueryComponent', [DartType.VOID, DartType.STRING], true),
|
||||
DartLib('base64Encode', [DartType.VOID, DartType.LIST_INT], true),
|
||||
DartLib('base64UrlEncode', [DartType.VOID, DartType.LIST_INT], true),
|
||||
DartLib('currentAsString', [DartType.RUNEITERATOR, DartType.VOID], false),
|
||||
DartLib('expires', [DartType.DEPRECATED, DartType.VOID], false),
|
||||
DartLib('message', [DartType.DEPRECATED, DartType.VOID], false),
|
||||
DartLib('message', [DartType.FORMATEXCEPTION, DartType.VOID], false),
|
||||
DartLib('message', [DartType.PROVISIONAL, DartType.VOID], false),
|
||||
DartLib('message', [DartType.STATEERROR, DartType.VOID], false),
|
||||
DartLib('message', [DartType.UNIMPLEMENTEDERROR, DartType.VOID], false),
|
||||
DartLib('message', [DartType.UNSUPPORTEDERROR, DartType.VOID], false),
|
||||
DartLib('name', [DartType.ARGUMENTERROR, DartType.VOID], false),
|
||||
DartLib('padLeft', [DartType.STRING, DartType.INT, DartType.STRING], true,
|
||||
restrictions: [Restriction.none, Restriction.small, Restriction.small]),
|
||||
DartLib('padRight', [DartType.STRING, DartType.INT, DartType.STRING], true,
|
||||
restrictions: [Restriction.none, Restriction.small, Restriction.small]),
|
||||
DartLib('pattern', [DartType.REGEXP, DartType.VOID], false),
|
||||
DartLib('replaceRange',
|
||||
[DartType.STRING, DartType.INT, DartType.INT, DartType.STRING], true),
|
||||
DartLib('string', [DartType.RUNEITERATOR, DartType.VOID], false),
|
||||
DartLib('string', [DartType.RUNES, DartType.VOID], false),
|
||||
DartLib('stringMatch', [DartType.REGEXP, DartType.STRING], true),
|
||||
DartLib('substring', [DartType.STRING, DartType.INT, DartType.INT], true),
|
||||
DartLib('toLowerCase', [DartType.STRING, DartType.VOID], true),
|
||||
DartLib('toRadixString', [DartType.INT, DartType.INT], true),
|
||||
DartLib('toString',
|
||||
[DartType.ABSTRACTCLASSINSTANTIATIONERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.ARGUMENTERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.BOOL, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.CONCURRENTMODIFICATIONERROR, DartType.VOID],
|
||||
true),
|
||||
DartLib(
|
||||
'toString', [DartType.CYCLICINITIALIZATIONERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.DEPRECATED, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.DOUBLE, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.ERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.FALLTHROUGHERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.FORMATEXCEPTION, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.INT, DartType.VOID], true),
|
||||
DartLib('toString',
|
||||
[DartType.INTEGERDIVISIONBYZEROEXCEPTION, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.MAPENTRY_INT_STRING, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.NULL, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.NULLTHROWNERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.OUTOFMEMORYERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.STACKOVERFLOWERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.STATEERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.STRINGBUFFER, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.UNIMPLEMENTEDERROR, DartType.VOID], true),
|
||||
DartLib('toString', [DartType.UNSUPPORTEDERROR, DartType.VOID], true),
|
||||
DartLib('toStringAsExponential', [DartType.DOUBLE, DartType.INT], true),
|
||||
DartLib('toStringAsFixed', [DartType.DOUBLE, DartType.INT], true),
|
||||
DartLib('toStringAsPrecision', [DartType.DOUBLE, DartType.INT], true),
|
||||
|
@ -1002,6 +1085,12 @@ class DartLib {
|
|||
DartLib('trim', [DartType.STRING, DartType.VOID], true),
|
||||
DartLib('trimLeft', [DartType.STRING, DartType.VOID], true),
|
||||
DartLib('trimRight', [DartType.STRING, DartType.VOID], true),
|
||||
DartLib('variableName', [DartType.CYCLICINITIALIZATIONERROR, DartType.VOID],
|
||||
false),
|
||||
];
|
||||
static const symbolLibs = [
|
||||
DartLib('Symbol.empty', [DartType.VOID, DartType.VOID], false),
|
||||
DartLib('Symbol.unaryMinus', [DartType.VOID, DartType.VOID], false),
|
||||
];
|
||||
static const uint16ListLibs = [
|
||||
DartLib('Uint16List.fromList', [DartType.VOID, DartType.LIST_INT], true),
|
||||
|
@ -1045,10 +1134,16 @@ class DartLib {
|
|||
DartLib('clear', [DartType.LIST_INT, DartType.VOID], true),
|
||||
DartLib('clear', [DartType.MAP_INT_STRING, DartType.VOID], true),
|
||||
DartLib('clear', [DartType.SET_INT, DartType.VOID], true),
|
||||
DartLib('clear', [DartType.STRINGBUFFER, DartType.VOID], true),
|
||||
DartLib('fillRange',
|
||||
[DartType.LIST_INT, DartType.INT, DartType.INT, DartType.INT], true),
|
||||
DartLib('insert', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
|
||||
DartLib(
|
||||
'removeRange', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
|
||||
DartLib('reset', [DartType.RUNEITERATOR, DartType.INT], true),
|
||||
DartLib('reset', [DartType.STOPWATCH, DartType.VOID], true),
|
||||
DartLib('start', [DartType.STOPWATCH, DartType.VOID], true),
|
||||
DartLib('stop', [DartType.STOPWATCH, DartType.VOID], true),
|
||||
DartLib('writeCharCode', [DartType.STRINGBUFFER, DartType.INT], true),
|
||||
];
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -42,41 +42,33 @@ class DartLib {
|
|||
const DartLib(this.name, this.proto, this.restrictions, this.isMethod);
|
||||
}
|
||||
|
||||
// Lists of recognized methods, organized by return type.
|
||||
var boolTable = <DartLib>[];
|
||||
var doubleTable = <DartLib>[];
|
||||
var float32ListTable = <DartLib>[];
|
||||
var float32x4ListTable = <DartLib>[];
|
||||
var float32x4Table = <DartLib>[];
|
||||
var float64ListTable = <DartLib>[];
|
||||
var float64x2ListTable = <DartLib>[];
|
||||
var float64x2Table = <DartLib>[];
|
||||
var int16ListTable = <DartLib>[];
|
||||
var int32ListTable = <DartLib>[];
|
||||
var int32x4ListTable = <DartLib>[];
|
||||
var int32x4Table = <DartLib>[];
|
||||
var int64ListTable = <DartLib>[];
|
||||
var int8ListTable = <DartLib>[];
|
||||
var intTable = <DartLib>[];
|
||||
var listTable = <DartLib>[];
|
||||
var mapTable = <DartLib>[];
|
||||
var setTable = <DartLib>[];
|
||||
var stringTable = <DartLib>[];
|
||||
var uint16ListTable = <DartLib>[];
|
||||
var uint32ListTable = <DartLib>[];
|
||||
var uint64ListTable = <DartLib>[];
|
||||
var uint8ClampedListTable = <DartLib>[];
|
||||
var uint8ListTable = <DartLib>[];
|
||||
var voidTable = <DartLib>[];
|
||||
|
||||
// Constants for strings corresponding to the DartType.
|
||||
const abstractClassInstantiationErrorEncoding =
|
||||
'DartType.ABSTRACTCLASSINSTANTIATIONERROR';
|
||||
const argumentErrorEncoding = 'DartType.ARGUMENTERROR';
|
||||
const assertionErrorEncoding = 'DartType.ERROR';
|
||||
const boolEncoding = 'DartType.BOOL';
|
||||
const byteDataEncoding = 'DartType.BYTEDATA';
|
||||
const castErrorEncoding = 'DartType.CASTERROR';
|
||||
const concurrentModificationErrorEncoding =
|
||||
'DartType.CONCURRENTMODIFICATIONERROR';
|
||||
const cyclicInitializationErrorEncoding = 'DartType.CYCLICINITIALIZATIONERROR';
|
||||
const deprecatedEncoding = 'DartType.DEPRECATED';
|
||||
const doubleEncoding = 'DartType.DOUBLE';
|
||||
const endianEncoding = 'DartType.ENDIAN';
|
||||
const errorEncoding = 'DartType.ERROR';
|
||||
const exceptionEncoding = 'DartType.EXCEPTION';
|
||||
const expandoDoubleEncoding = 'DartType.EXPANDO_DOUBLE';
|
||||
const expandoIntEncoding = 'DartType.EXPANDO_INT';
|
||||
const fallThroughErrorEncoding = 'DartType.FALLTHROUGHERROR';
|
||||
const float32ListEncoding = 'DartType.FLOAT32LIST';
|
||||
const float32x4Encoding = 'DartType.FLOAT32X4';
|
||||
const float32x4ListEncoding = 'DartType.FLOAT32X4LIST';
|
||||
const float64ListEncoding = 'DartType.FLOAT64LIST';
|
||||
const float64x2Encoding = 'DartType.FLOAT64X2';
|
||||
const float64x2ListEncoding = 'DartType.FLOAT64X2LIST';
|
||||
const formatExceptionEncoding = 'DartType.FORMATEXCEPTION';
|
||||
const indexErrorEncoding = 'DartType.INDEXERROR';
|
||||
const int16ListEncoding = 'DartType.INT16LIST';
|
||||
const int32ListEncoding = 'DartType.INT32LIST';
|
||||
const int32x4Encoding = 'DartType.INT32X4';
|
||||
|
@ -84,25 +76,63 @@ const int32x4ListEncoding = 'DartType.INT32X4LIST';
|
|||
const int64ListEncoding = 'DartType.INT64LIST';
|
||||
const int8ListEncoding = 'DartType.INT8LIST';
|
||||
const intEncoding = 'DartType.INT';
|
||||
const integerDivisionByZeroExceptionEncoding =
|
||||
'DartType.INTEGERDIVISIONBYZEROEXCEPTION';
|
||||
const listIntEncoding = 'DartType.LIST_INT';
|
||||
const mapEntryIntStringEncoding = 'DartType.MAPENTRY_INT_STRING';
|
||||
const mapIntStringEncoding = 'DartType.MAP_INT_STRING';
|
||||
const nullEncoding = 'DartType.NULL';
|
||||
const nullThrownErrorEncoding = 'DartType.NULLTHROWNERROR';
|
||||
const numEncoding = 'DartType.NUM';
|
||||
const outOfMemoryErrorEncoding = 'DartType.OUTOFMEMORYERROR';
|
||||
const provisionalEncoding = 'DartType.PROVISIONAL';
|
||||
const rangeErrorEncoding = 'DartType.RANGEERROR';
|
||||
const regExpEncoding = 'DartType.REGEXP';
|
||||
const runeIteratorEncoding = 'DartType.RUNEITERATOR';
|
||||
const runesEncoding = 'DartType.RUNES';
|
||||
const setIntEncoding = 'DartType.SET_INT';
|
||||
const stackOverflowErrorEncoding = 'DartType.STACKOVERFLOWERROR';
|
||||
const stateErrorEncoding = 'DartType.STATEERROR';
|
||||
const stopwatchEncoding = 'DartType.STOPWATCH';
|
||||
const stringBufferEncoding = 'DartType.STRINGBUFFER';
|
||||
const stringEncoding = 'DartType.STRING';
|
||||
const symbolEncoding = 'DartType.SYMBOL';
|
||||
const typeErrorEncoding = 'DartType.TYPEERROR';
|
||||
const uint16ListEncoding = 'DartType.UINT16LIST';
|
||||
const uint32ListEncoding = 'DartType.UINT32LIST';
|
||||
const uint64ListEncoding = 'DartType.UINT64LIST';
|
||||
const uint8ClampedListEncoding = 'DartType.UINT8CLAMPEDLIST';
|
||||
const uint8ListEncoding = 'DartType.UINT8LIST';
|
||||
const unimplementedErrorEncoding = 'DartType.UNIMPLEMENTEDERROR';
|
||||
const unsupportedErrorEncoding = 'DartType.UNSUPPORTEDERROR';
|
||||
const voidEncoding = 'DartType.VOID';
|
||||
|
||||
// Constants for the library methods lists' names in dart_api_table.dart.
|
||||
final abstractClassInstantiationErrorLibs =
|
||||
'abstractClassInstantiationErrorLibs';
|
||||
final argumentErrorLibs = 'argumentErrorLibs';
|
||||
final assertionErrorLibs = 'assertionErrorLibs';
|
||||
final boolLibs = 'boolLibs';
|
||||
final byteDataLibs = 'byteDataLibs';
|
||||
final castErrorLibs = 'castErrorLibs';
|
||||
final concurrentModificationErrorLibs = 'concurrentModificationErrorLibs';
|
||||
final cyclicInitializationErrorLibs = 'cyclicInitializationErrorLibs';
|
||||
final deprecatedLibs = 'deprecatedLibs';
|
||||
final doubleLibs = 'doubleLibs';
|
||||
final endianLibs = 'endianLibs';
|
||||
final errorLibs = 'errorLibs';
|
||||
final exceptionLibs = 'exceptionLibs';
|
||||
final expandoDoubleLibs = 'expandoDoubleLibs';
|
||||
final expandoIntLibs = 'expandoIntLibs';
|
||||
final fallThroughErrorLibs = 'fallThroughErrorLibs';
|
||||
final float32ListLibs = 'float32ListLibs';
|
||||
final float32x4Libs = 'float32x4Libs';
|
||||
final float32x4ListLibs = 'float32x4ListLibs';
|
||||
final float64ListLibs = 'float64ListLibs';
|
||||
final float64x2Libs = 'float64x2Libs';
|
||||
final float64x2ListLibs = 'float64x2ListLibs';
|
||||
final formatExceptionLibs = 'formatExceptionLibs';
|
||||
final indexErrorLibs = 'indexErrorLibs';
|
||||
final int16ListLibs = 'int16ListLibs';
|
||||
final int32ListLibs = 'int32ListLibs';
|
||||
final int32x4Libs = 'int32x4Libs';
|
||||
|
@ -110,26 +140,62 @@ final int32x4ListLibs = 'int32x4ListLibs';
|
|||
final int64ListLibs = 'int64ListLibs';
|
||||
final int8ListLibs = 'int8ListLibs';
|
||||
final intLibs = 'intLibs';
|
||||
final integerDivisionByZeroExceptionLibs = 'integerDivisionByZeroExceptionLibs';
|
||||
final listLibs = 'listLibs';
|
||||
final mapEntryIntStringLibs = 'mapEntryIntStringLibs';
|
||||
final mapLibs = 'mapLibs';
|
||||
final nullLibs = 'nullLibs';
|
||||
final nullThrownErrorLibs = 'nullThrownErrorLibs';
|
||||
final numLibs = 'numLibs';
|
||||
final outOfMemoryErrorLibs = 'outOfMemoryErrorLibs';
|
||||
final provisionalLibs = 'provisionalLibs';
|
||||
final rangeErrorLibs = 'rangeErrorLibs';
|
||||
final regExpLibs = 'regExpLibs';
|
||||
final runeIteratorLibs = 'runeIteratorLibs';
|
||||
final runesLibs = 'runesLibs';
|
||||
final setLibs = 'setLibs';
|
||||
final stackOverflowErrorLibs = 'stackOverflowErrorLibs';
|
||||
final stateErrorLibs = 'stateErrorLibs';
|
||||
final stopwatchLibs = 'stopwatchLibs';
|
||||
final stringBufferLibs = 'stringBufferLibs';
|
||||
final stringLibs = 'stringLibs';
|
||||
final symbolLibs = 'symbolLibs';
|
||||
final typeErrorLibs = 'typeErrorLibs';
|
||||
final uint16ListLibs = 'uint16ListLibs';
|
||||
final uint32ListLibs = 'uint32ListLibs';
|
||||
final uint64ListLibs = 'uint64ListLibs';
|
||||
final uint8ClampedListLibs = 'uint8ClampedListLibs';
|
||||
final uint8ListLibs = 'uint8ListLibs';
|
||||
final unimplementedErrorLibs = 'unimplementedErrorLibs';
|
||||
final unsupportedErrorLibs = 'unsupportedErrorLibs';
|
||||
final voidLibs = 'voidLibs';
|
||||
|
||||
// Map from the DartType (string) to the name of the library methods list.
|
||||
final Map<String, String> typeToLibraryMethodsListName = {
|
||||
abstractClassInstantiationErrorEncoding: abstractClassInstantiationErrorLibs,
|
||||
argumentErrorEncoding: argumentErrorLibs,
|
||||
assertionErrorEncoding: assertionErrorLibs,
|
||||
boolEncoding: boolLibs,
|
||||
byteDataEncoding: byteDataLibs,
|
||||
castErrorEncoding: castErrorLibs,
|
||||
concurrentModificationErrorEncoding: concurrentModificationErrorLibs,
|
||||
cyclicInitializationErrorEncoding: cyclicInitializationErrorLibs,
|
||||
deprecatedEncoding: deprecatedLibs,
|
||||
doubleEncoding: doubleLibs,
|
||||
endianEncoding: endianLibs,
|
||||
errorEncoding: errorLibs,
|
||||
exceptionEncoding: exceptionLibs,
|
||||
expandoDoubleEncoding: expandoDoubleLibs,
|
||||
expandoIntEncoding: expandoIntLibs,
|
||||
fallThroughErrorEncoding: fallThroughErrorLibs,
|
||||
float32ListEncoding: float32ListLibs,
|
||||
float32x4Encoding: float32x4Libs,
|
||||
float32x4ListEncoding: float32x4ListLibs,
|
||||
float64ListEncoding: float64ListLibs,
|
||||
float64x2Encoding: float64x2Libs,
|
||||
float64x2ListEncoding: float64x2ListLibs,
|
||||
formatExceptionEncoding: formatExceptionLibs,
|
||||
indexErrorEncoding: indexErrorLibs,
|
||||
int16ListEncoding: int16ListLibs,
|
||||
int32ListEncoding: int32ListLibs,
|
||||
int32x4Encoding: int32x4Libs,
|
||||
|
@ -137,27 +203,65 @@ final Map<String, String> typeToLibraryMethodsListName = {
|
|||
int64ListEncoding: int64ListLibs,
|
||||
int8ListEncoding: int8ListLibs,
|
||||
intEncoding: intLibs,
|
||||
integerDivisionByZeroExceptionEncoding: integerDivisionByZeroExceptionLibs,
|
||||
listIntEncoding: listLibs,
|
||||
mapEntryIntStringEncoding: mapEntryIntStringLibs,
|
||||
mapIntStringEncoding: mapLibs,
|
||||
nullEncoding: nullLibs,
|
||||
nullThrownErrorEncoding: nullThrownErrorLibs,
|
||||
numEncoding: numLibs,
|
||||
outOfMemoryErrorEncoding: outOfMemoryErrorLibs,
|
||||
provisionalEncoding: provisionalLibs,
|
||||
rangeErrorEncoding: rangeErrorLibs,
|
||||
regExpEncoding: regExpLibs,
|
||||
runeIteratorEncoding: runeIteratorLibs,
|
||||
runesEncoding: runesLibs,
|
||||
setIntEncoding: setLibs,
|
||||
stackOverflowErrorEncoding: stackOverflowErrorLibs,
|
||||
stateErrorEncoding: stateErrorLibs,
|
||||
stopwatchEncoding: stopwatchLibs,
|
||||
stringBufferEncoding: stringBufferLibs,
|
||||
stringEncoding: stringLibs,
|
||||
stringEncoding: stringLibs,
|
||||
symbolEncoding: symbolLibs,
|
||||
typeErrorEncoding: typeErrorLibs,
|
||||
uint16ListEncoding: uint16ListLibs,
|
||||
uint32ListEncoding: uint32ListLibs,
|
||||
uint64ListEncoding: uint64ListLibs,
|
||||
uint8ClampedListEncoding: uint8ClampedListLibs,
|
||||
uint8ListEncoding: uint8ListLibs,
|
||||
unimplementedErrorEncoding: unimplementedErrorLibs,
|
||||
unsupportedErrorEncoding: unsupportedErrorLibs,
|
||||
voidEncoding: voidLibs
|
||||
};
|
||||
|
||||
// Map from return type encoding to list of recognized methods with that
|
||||
// return type.
|
||||
final Map<String, List<DartLib>> typeToLibraryMethodsList = {
|
||||
abstractClassInstantiationErrorEncoding: <DartLib>[],
|
||||
argumentErrorEncoding: <DartLib>[],
|
||||
assertionErrorEncoding: <DartLib>[],
|
||||
boolEncoding: <DartLib>[],
|
||||
byteDataEncoding: <DartLib>[],
|
||||
castErrorEncoding: <DartLib>[],
|
||||
concurrentModificationErrorEncoding: <DartLib>[],
|
||||
cyclicInitializationErrorEncoding: <DartLib>[],
|
||||
deprecatedEncoding: <DartLib>[],
|
||||
doubleEncoding: <DartLib>[],
|
||||
endianEncoding: <DartLib>[],
|
||||
errorEncoding: <DartLib>[],
|
||||
exceptionEncoding: <DartLib>[],
|
||||
expandoDoubleEncoding: <DartLib>[],
|
||||
expandoIntEncoding: <DartLib>[],
|
||||
fallThroughErrorEncoding: <DartLib>[],
|
||||
float32ListEncoding: <DartLib>[],
|
||||
float32x4Encoding: <DartLib>[],
|
||||
float32x4ListEncoding: <DartLib>[],
|
||||
float64ListEncoding: <DartLib>[],
|
||||
float64x2Encoding: <DartLib>[],
|
||||
float64x2ListEncoding: <DartLib>[],
|
||||
formatExceptionEncoding: <DartLib>[],
|
||||
indexErrorEncoding: <DartLib>[],
|
||||
int16ListEncoding: <DartLib>[],
|
||||
int32ListEncoding: <DartLib>[],
|
||||
int32x4Encoding: <DartLib>[],
|
||||
|
@ -165,15 +269,34 @@ final Map<String, List<DartLib>> typeToLibraryMethodsList = {
|
|||
int64ListEncoding: <DartLib>[],
|
||||
int8ListEncoding: <DartLib>[],
|
||||
intEncoding: <DartLib>[],
|
||||
integerDivisionByZeroExceptionEncoding: <DartLib>[],
|
||||
listIntEncoding: <DartLib>[],
|
||||
mapEntryIntStringEncoding: <DartLib>[],
|
||||
mapIntStringEncoding: <DartLib>[],
|
||||
nullEncoding: <DartLib>[],
|
||||
nullThrownErrorEncoding: <DartLib>[],
|
||||
numEncoding: <DartLib>[],
|
||||
outOfMemoryErrorEncoding: <DartLib>[],
|
||||
provisionalEncoding: <DartLib>[],
|
||||
rangeErrorEncoding: <DartLib>[],
|
||||
regExpEncoding: <DartLib>[],
|
||||
runeIteratorEncoding: <DartLib>[],
|
||||
runesEncoding: <DartLib>[],
|
||||
setIntEncoding: <DartLib>[],
|
||||
stackOverflowErrorEncoding: <DartLib>[],
|
||||
stateErrorEncoding: <DartLib>[],
|
||||
stopwatchEncoding: <DartLib>[],
|
||||
stringBufferEncoding: <DartLib>[],
|
||||
stringEncoding: <DartLib>[],
|
||||
symbolEncoding: <DartLib>[],
|
||||
typeErrorEncoding: <DartLib>[],
|
||||
uint16ListEncoding: <DartLib>[],
|
||||
uint32ListEncoding: <DartLib>[],
|
||||
uint64ListEncoding: <DartLib>[],
|
||||
uint8ClampedListEncoding: <DartLib>[],
|
||||
uint8ListEncoding: <DartLib>[],
|
||||
unimplementedErrorEncoding: <DartLib>[],
|
||||
unsupportedErrorEncoding: <DartLib>[],
|
||||
voidEncoding: <DartLib>[]
|
||||
};
|
||||
|
||||
|
@ -341,8 +464,34 @@ String typeString(DartType type) {
|
|||
// TODO(ajcbik): inspect type structure semantically, not by display name
|
||||
// and unify DartFuzz's DartType with analyzer DartType.
|
||||
switch (type.displayName) {
|
||||
case 'AbstractClassInstantiationError':
|
||||
return abstractClassInstantiationErrorEncoding;
|
||||
case 'ArgumentError':
|
||||
return argumentErrorEncoding;
|
||||
case 'AssertionError':
|
||||
return assertionErrorEncoding;
|
||||
case 'CastError':
|
||||
return castErrorEncoding;
|
||||
case 'ConcurrentModificationError':
|
||||
return concurrentModificationErrorEncoding;
|
||||
case 'CyclicInitializationError':
|
||||
return cyclicInitializationErrorEncoding;
|
||||
case 'Deprecated':
|
||||
return deprecatedEncoding;
|
||||
case 'E':
|
||||
return intEncoding;
|
||||
case 'Endian':
|
||||
return endianEncoding;
|
||||
case 'Error':
|
||||
return errorEncoding;
|
||||
case 'Exception':
|
||||
return exceptionEncoding;
|
||||
case 'Expando<double>':
|
||||
return expandoDoubleEncoding;
|
||||
case 'Expando<int>':
|
||||
return expandoIntEncoding;
|
||||
case 'FallThroughError':
|
||||
return fallThroughErrorEncoding;
|
||||
case 'Float32List':
|
||||
return float32ListEncoding;
|
||||
case 'Float32x4':
|
||||
|
@ -355,6 +504,10 @@ String typeString(DartType type) {
|
|||
return float64x2Encoding;
|
||||
case 'Float64x2List':
|
||||
return float64x2ListEncoding;
|
||||
case 'FormatException':
|
||||
return formatExceptionEncoding;
|
||||
case 'IndexError':
|
||||
return indexErrorEncoding;
|
||||
case 'Int16List':
|
||||
return int16ListEncoding;
|
||||
case 'Int32List':
|
||||
|
@ -367,6 +520,8 @@ String typeString(DartType type) {
|
|||
return int64ListEncoding;
|
||||
case 'Int8List':
|
||||
return int8ListEncoding;
|
||||
case 'IntegerDivisionByZeroException':
|
||||
return integerDivisionByZeroExceptionEncoding;
|
||||
case 'List':
|
||||
case 'List<E>':
|
||||
case 'List<Object>':
|
||||
|
@ -378,12 +533,45 @@ String typeString(DartType type) {
|
|||
case 'Map<dynamic, dynamic>':
|
||||
case 'Map<int, String>':
|
||||
return mapIntStringEncoding;
|
||||
case 'MapEntry':
|
||||
case 'MapEntry<K, V>':
|
||||
case 'MapEntry<dynamic, dynamic>':
|
||||
case 'MapEntry<int, String>':
|
||||
return mapEntryIntStringEncoding;
|
||||
case 'Null':
|
||||
return nullEncoding;
|
||||
case 'NullThrownError':
|
||||
return nullThrownErrorEncoding;
|
||||
case 'OutOfMemoryError':
|
||||
return outOfMemoryErrorEncoding;
|
||||
case 'Provisional':
|
||||
return provisionalEncoding;
|
||||
case 'RangeError':
|
||||
return rangeErrorEncoding;
|
||||
case 'RegExp':
|
||||
return regExpEncoding;
|
||||
case 'RuneIterator':
|
||||
return runeIteratorEncoding;
|
||||
case 'Runes':
|
||||
return runesEncoding;
|
||||
case 'Set':
|
||||
case 'Set<E>':
|
||||
case 'Set<Object>':
|
||||
case 'Set<dynamic>':
|
||||
case 'Set<int>':
|
||||
return setIntEncoding;
|
||||
case 'StackOverflowError':
|
||||
return stackOverflowErrorEncoding;
|
||||
case 'StateError':
|
||||
return stateErrorEncoding;
|
||||
case 'Stopwatch':
|
||||
return stopwatchEncoding;
|
||||
case 'StringBuffer':
|
||||
return stringBufferEncoding;
|
||||
case 'Symbol':
|
||||
return symbolEncoding;
|
||||
case 'TypeError':
|
||||
return typeErrorEncoding;
|
||||
case 'Uint16List':
|
||||
return uint16ListEncoding;
|
||||
case 'Uint32List':
|
||||
|
@ -394,6 +582,10 @@ String typeString(DartType type) {
|
|||
return uint8ClampedListEncoding;
|
||||
case 'Uint8List':
|
||||
return uint8ListEncoding;
|
||||
case 'UnimplementedError':
|
||||
return unimplementedErrorEncoding;
|
||||
case 'UnsupportedError':
|
||||
return unsupportedErrorEncoding;
|
||||
case 'num':
|
||||
return doubleEncoding;
|
||||
case 'void':
|
||||
|
|
|
@ -351,7 +351,7 @@ void printTypeMap3(String name, Map<String, Map<String, List<String>>> types,
|
|||
for (var op in ops.keys.toList()..sort()) {
|
||||
var paramTypes = ops[op];
|
||||
stdout.write(" '${op}': [");
|
||||
for (String paramType in paramTypes.toList()..sort()) {
|
||||
for (String paramType in paramTypes.toList()) {
|
||||
stdout.write("${prefix}${paramType}, ");
|
||||
}
|
||||
print("], ");
|
||||
|
@ -991,9 +991,10 @@ void getOperators(Set<InterfaceType> allTypes) {
|
|||
bool canConstruct = true;
|
||||
for (var p in constructor.parameters) {
|
||||
String tstr = getConstName(p.type.displayName);
|
||||
// Only allow trivially constructable parameters. If a constructor
|
||||
// parameter is not constructable from a literal, skip the constructor.
|
||||
if (!fromLiteral.contains(tstr)) {
|
||||
if (tstr == "DYNAMIC" || tstr == "OBJECT") {
|
||||
tstr = "INT";
|
||||
} else if (!allTypes.contains(p.type)) {
|
||||
// Exclude constructors that have an unsupported parameter type.
|
||||
canConstruct = false;
|
||||
break;
|
||||
}
|
||||
|
@ -1056,21 +1057,23 @@ void analyzeTypes(Set<InterfaceType> allTypes) {
|
|||
fpTypes.add(typName);
|
||||
}
|
||||
} else if (iTyp.typeArguments.length == 2) {
|
||||
// Analyze Map types.
|
||||
String argName0 = getConstName(iTyp.typeArguments[0].displayName);
|
||||
String argName1 = getConstName(iTyp.typeArguments[1].displayName);
|
||||
subscriptsTo[typName] = argName1;
|
||||
elementOf[argName1] ??= new Set<String>();
|
||||
elementOf[argName1].add(typName);
|
||||
indexableElementOf[argName1] ??= new Set<String>();
|
||||
indexableElementOf[argName1].add(typName);
|
||||
indexedBy[typName] = argName0;
|
||||
indexableTypes.add(typName);
|
||||
// Check if type is floating point precision.
|
||||
if (fpTypes.contains(typName) ||
|
||||
fpTypes.contains(argName0) ||
|
||||
fpTypes.contains(argName1)) {
|
||||
fpTypes.add(typName);
|
||||
if (isIndexable(iTyp)) {
|
||||
// Analyze Map and MapEntry types.
|
||||
String argName0 = getConstName(iTyp.typeArguments[0].displayName);
|
||||
String argName1 = getConstName(iTyp.typeArguments[1].displayName);
|
||||
subscriptsTo[typName] = argName1;
|
||||
elementOf[argName1] ??= new Set<String>();
|
||||
elementOf[argName1].add(typName);
|
||||
indexableElementOf[argName1] ??= new Set<String>();
|
||||
indexableElementOf[argName1].add(typName);
|
||||
indexedBy[typName] = argName0;
|
||||
indexableTypes.add(typName);
|
||||
// Check if type is floating point precision.
|
||||
if (fpTypes.contains(typName) ||
|
||||
fpTypes.contains(argName0) ||
|
||||
fpTypes.contains(argName1)) {
|
||||
fpTypes.add(typName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1085,7 +1088,8 @@ void getParameterizedTypes(
|
|||
Set<InterfaceType> iTypes) {
|
||||
// Out: types with no parameters.
|
||||
for (var tp in allTypes) {
|
||||
if (tp.typeArguments.length == 1 && tp.typeArguments[0].name == 'E')
|
||||
if (tp.typeArguments.length == 1 &&
|
||||
(tp.typeArguments[0].name == 'E' || tp.typeArguments[0].name == 'T'))
|
||||
pTypes1.add(tp);
|
||||
else if (tp.typeArguments.length == 2 &&
|
||||
tp.typeArguments[0].name == 'K' &&
|
||||
|
@ -1104,7 +1108,7 @@ Set<InterfaceType> instantiatePTypes(
|
|||
Set<InterfaceType> pTypes1, // Types with one parameter.
|
||||
Set<InterfaceType> pTypes2, // Types with two parameters.
|
||||
Set<InterfaceType> iTypes, // Types with no parameters.
|
||||
{double maxNew = 64.0}) {
|
||||
{double maxNew = 10000.0}) {
|
||||
// Maximum number of newly generated types.
|
||||
Set<InterfaceType> newITypes = new Set<InterfaceType>();
|
||||
|
||||
|
@ -1165,7 +1169,7 @@ Set<InterfaceType> instantiatePTypes(
|
|||
|
||||
Set<InterfaceType> instantiateAllTypes(
|
||||
Set<InterfaceType> allTypes, Set<String> iTypeFilter, int depth,
|
||||
{double maxNew = 64.0}) {
|
||||
{double maxNew = 10000.0}) {
|
||||
// Types with one parameter (List, Set).
|
||||
Set<InterfaceType> pTypes1 = new Set<InterfaceType>();
|
||||
// Types with two parameters (Map).
|
||||
|
@ -1196,7 +1200,7 @@ Set<InterfaceType> instantiateAllTypes(
|
|||
filteredITypes = filteredITypes
|
||||
.union(instantiatePTypes(pTypes1, pTypes2, filteredITypes, maxNew: mn));
|
||||
}
|
||||
// Return list of instantiated types.
|
||||
|
||||
return iTypes.union(filteredITypes);
|
||||
}
|
||||
|
||||
|
@ -1260,18 +1264,39 @@ visitCompilationUnit(CompilationUnitElement unit, Set<InterfaceType> allTypes) {
|
|||
// to visit typedefs, etc.
|
||||
for (ClassElement classElement in unit.types) {
|
||||
if (classElement.isPublic) {
|
||||
// Hack: Filter out some difficult types.
|
||||
// Hack: Filter out some difficult types, abstract types and types that
|
||||
// have methods with abstract type parameters.
|
||||
// TODO (felih): include filtered types.
|
||||
if (classElement.name.startsWith('Unmodifiable')) continue;
|
||||
if (classElement.name.startsWith('Iterable')) continue;
|
||||
if (classElement.name.startsWith('BigInt')) continue;
|
||||
if (classElement.name.startsWith('DateTime')) continue;
|
||||
if (classElement.name.startsWith('Uri')) continue;
|
||||
// Compute heuristic to decide whether to include the type.
|
||||
int no = countOperators(classElement);
|
||||
if (no > operatorCountThreshold) {
|
||||
allTypes.add(classElement.thisType);
|
||||
if (classElement.name.startsWith('Unmodifiable') ||
|
||||
classElement.name.startsWith('Iterable') ||
|
||||
classElement.name.startsWith('BigInt') ||
|
||||
classElement.name.startsWith('DateTime') ||
|
||||
classElement.name.startsWith('Uri') ||
|
||||
(classElement.name == 'Function') ||
|
||||
(classElement.name == 'Object') ||
|
||||
(classElement.name == 'Match') ||
|
||||
(classElement.name == 'RegExpMatch') ||
|
||||
(classElement.name == 'pragma') ||
|
||||
(classElement.name == 'LateInitializationError') ||
|
||||
(classElement.name == 'ByteBuffer') ||
|
||||
(classElement.name == 'TypedData') ||
|
||||
(classElement.name == 'Sink') ||
|
||||
(classElement.name == 'Pattern') ||
|
||||
(classElement.name == 'StackTrace') ||
|
||||
(classElement.name == 'StringSink') ||
|
||||
(classElement.name == 'Type') ||
|
||||
(classElement.name == 'Pattern') ||
|
||||
(classElement.name == 'Invocation') ||
|
||||
(classElement.name == 'StackTrace') ||
|
||||
(classElement.name == 'NoSuchMethodError') ||
|
||||
(classElement.name == 'Comparable') ||
|
||||
(classElement.name == 'BidirectionalIterator') ||
|
||||
(classElement.name == 'Iterator')) {
|
||||
continue;
|
||||
}
|
||||
;
|
||||
|
||||
allTypes.add(classElement.thisType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1337,7 +1362,8 @@ main(List<String> arguments) async {
|
|||
// Extract basic types from dart::core and dart::typed_data.
|
||||
await getDataTypes(allTypes, results['dart-top']);
|
||||
// Instantiate parameterized types like List<E>.
|
||||
allTypes = instantiateAllTypes(allTypes, iTypeFilter, depth, maxNew: 64);
|
||||
allTypes =
|
||||
instantiateAllTypes(allTypes, iTypeFilter, depth, maxNew: 10000.0);
|
||||
// Extract interface Relations between types.
|
||||
getInterfaceRels(allTypes);
|
||||
// Extract operators from instantiated types.
|
||||
|
|
Loading…
Reference in a new issue