Version 2.13.0-20.0.dev
Merge commit '31528c6327fe2a1a2b4a35445957fd3610be218f' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 75ddaaa..afa88f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 2.13.0
+
+### Language
+
+### Core libraries
+
+### Dart VM
+
+### Tools
+
+#### Dartanalyzer
+
+
## 2.12.0
### Language
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 125f605..7eb93df 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -289,10 +289,8 @@
void readStringTable(List<String> table) {
// Read the table of end offsets.
int length = readUInt30();
- List<int> endOffsets = new List<int>.filled(length, null);
- for (int i = 0; i < length; ++i) {
- endOffsets[i] = readUInt30();
- }
+ List<int> endOffsets =
+ new List<int>.generate(length, (_) => readUInt30(), growable: false);
// Read the WTF-8 encoded strings.
table.length = length;
int startOffset = 0;
@@ -376,12 +374,11 @@
final DartType valueType = readDartType();
final int length = readUInt30();
final List<ConstantMapEntry> entries =
- new List<ConstantMapEntry>.filled(length, null, growable: true);
- for (int i = 0; i < length; i++) {
+ new List<ConstantMapEntry>.generate(length, (_) {
final Constant key = readConstantReference();
final Constant value = readConstantReference();
- entries[i] = new ConstantMapEntry(key, value);
- }
+ return new ConstantMapEntry(key, value);
+ }, growable: true);
return new MapConstant(keyType, valueType, entries);
}
@@ -441,12 +438,8 @@
List<Constant> _readConstantReferenceList() {
final int length = readUInt30();
- final List<Constant> list =
- new List<Constant>.filled(length, null, growable: true);
- for (int i = 0; i < length; i++) {
- list[i] = readConstantReference();
- }
- return list;
+ return new List<Constant>.generate(length, (_) => readConstantReference(),
+ growable: true);
}
Uri readUriReference() {
@@ -459,11 +452,8 @@
List<String> readStringReferenceList() {
int length = readUInt30();
- List<String> result = new List<String>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readStringReference();
- }
- return result;
+ return new List<String>.generate(length, (_) => readStringReference(),
+ growable: true);
}
String readStringOrNullIfEmpty() {
@@ -485,12 +475,9 @@
List<Expression> readAnnotationList(TreeNode parent) {
int length = readUInt30();
if (length == 0) return const <Expression>[];
- List<Expression> list =
- new List<Expression>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- list[i] = readExpression()..parent = parent;
- }
- return list;
+ return new List<Expression>.generate(
+ length, (_) => readExpression()..parent = parent,
+ growable: true);
}
void _fillTreeNodeList(
@@ -528,7 +515,11 @@
void readLinkTable(CanonicalName linkRoot) {
int length = readUInt30();
- _linkTable = new List<CanonicalName>.filled(length, null);
+ _linkTable = new List<CanonicalName>.filled(
+ length,
+ // Use [linkRoot] as a dummy default value.
+ linkRoot,
+ growable: false);
for (int i = 0; i < length; ++i) {
int biasedParentIndex = readUInt30();
String name = readStringReference();
@@ -739,7 +730,11 @@
result.libraryCount = readUint32();
// Library offsets are used for start and end offsets, so there is one extra
// element that this the end offset of the last library
- result.libraryOffsets = new List<int>.filled(result.libraryCount + 1, null);
+ result.libraryOffsets = new List<int>.filled(
+ result.libraryCount + 1,
+ // Use `-1` as a dummy default value.
+ -1,
+ growable: false);
result.componentFileSizeInBytes = readUint32();
if (result.componentFileSizeInBytes != componentFileSize) {
throw "Malformed binary: This component file's component index indicates "
@@ -851,16 +846,16 @@
SubComponentView result;
if (createView) {
result = new SubComponentView(
- new List<Library>.filled(numberOfLibraries, null),
+ new List<Library>.generate(numberOfLibraries, (int i) {
+ _byteOffset = index.libraryOffsets[i];
+ return readLibrary(component, index.libraryOffsets[i + 1]);
+ }, growable: false),
_componentStartOffset,
componentFileSize);
- }
-
- for (int i = 0; i < numberOfLibraries; ++i) {
- _byteOffset = index.libraryOffsets[i];
- Library library = readLibrary(component, index.libraryOffsets[i + 1]);
- if (createView) {
- result.libraries[i] = library;
+ } else {
+ for (int i = 0; i < numberOfLibraries; ++i) {
+ _byteOffset = index.libraryOffsets[i];
+ readLibrary(component, index.libraryOffsets[i + 1]);
}
}
@@ -879,13 +874,8 @@
List<String> readListOfStrings() {
int length = readUInt30();
if (length == 0) return null;
- List<String> strings =
- new List<String>.filled(length, null, growable: true);
- for (int i = 0; i < length; i++) {
- String s = readString();
- strings[i] = s;
- }
- return strings;
+ return new List<String>.generate(length, (_) => readString(),
+ growable: true);
}
/// Read the uri-to-source part of the binary.
@@ -907,7 +897,11 @@
_sourceUriTable[i] = uri;
Uint8List sourceCode = readByteList();
int lineCount = readUInt30();
- List<int> lineStarts = new List<int>.filled(lineCount, null);
+ List<int> lineStarts = new List<int>.filled(
+ lineCount,
+ // Use `-1` as a dummy default value.
+ -1,
+ growable: false);
int previousLineStart = 0;
for (int j = 0; j < lineCount; ++j) {
int lineStart = readUInt30() + previousLineStart;
@@ -1067,7 +1061,11 @@
// There is a field for the procedure count.
_byteOffset = endOffset - (1) * 4;
int procedureCount = readUint32();
- List<int> procedureOffsets = new List<int>.filled(procedureCount + 1, null);
+ List<int> procedureOffsets = new List<int>.filled(
+ procedureCount + 1,
+ // Use `-1` as a dummy default value.
+ -1,
+ growable: false);
// There is a field for the procedure count, that number + 1 (for the end)
// offsets, and then the class count (i.e. procedure count + 3 fields).
@@ -1076,7 +1074,11 @@
for (int i = 0; i < procedureCount + 1; i++) {
procedureOffsets[i] = _componentStartOffset + readUint32();
}
- List<int> classOffsets = new List<int>.filled(classCount + 1, null);
+ List<int> classOffsets = new List<int>.filled(
+ classCount + 1,
+ // Use `-1` as a dummy default value.
+ -1,
+ growable: false);
// There is a field for the procedure count, that number + 1 (for the end)
// offsets, then the class count and that number + 1 (for the end) offsets.
@@ -1200,12 +1202,8 @@
List<Combinator> readCombinatorList() {
int length = readUInt30();
- List<Combinator> result =
- new List<Combinator>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readCombinator();
- }
- return result;
+ return new List<Combinator>.generate(length, (_) => readCombinator(),
+ growable: true);
}
void _readLibraryParts(Library library) {
@@ -1263,13 +1261,12 @@
// There is a field for the procedure count.
_byteOffset = endOffset - (1) * 4;
int procedureCount = readUint32();
- List<int> procedureOffsets = new List<int>.filled(procedureCount + 1, null);
// There is a field for the procedure count, that number + 1 (for the end)
// offsets (i.e. procedure count + 2 fields).
_byteOffset = endOffset - (procedureCount + 2) * 4;
- for (int i = 0; i < procedureCount + 1; i++) {
- procedureOffsets[i] = _componentStartOffset + readUint32();
- }
+ List<int> procedureOffsets = new List<int>.generate(
+ procedureCount + 1, (_) => _componentStartOffset + readUint32(),
+ growable: false);
_byteOffset = savedByteOffset;
CanonicalName canonicalName = readCanonicalNameReference();
@@ -1786,12 +1783,8 @@
List<Expression> readExpressionList() {
int length = readUInt30();
- List<Expression> result =
- new List<Expression>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readExpression();
- }
- return result;
+ return new List<Expression>.generate(length, (_) => readExpression(),
+ growable: true);
}
Expression readExpressionOption() {
@@ -2253,11 +2246,9 @@
fieldValues[fieldRef] = value;
}
int assertCount = readUInt30();
- List<AssertStatement> asserts =
- new List<AssertStatement>.filled(assertCount, null);
- for (int i = 0; i < assertCount; i++) {
- asserts[i] = readStatement();
- }
+ List<AssertStatement> asserts = new List<AssertStatement>.generate(
+ assertCount, (_) => readStatement(),
+ growable: false);
List<Expression> unusedArguments = readExpressionList();
return new InstanceCreation(
classReference, typeArguments, fieldValues, asserts, unusedArguments)
@@ -2438,12 +2429,8 @@
List<MapEntry> readMapEntryList() {
int length = readUInt30();
- List<MapEntry> result =
- new List<MapEntry>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readMapEntry();
- }
- return result;
+ return new List<MapEntry>.generate(length, (_) => readMapEntry(),
+ growable: true);
}
MapEntry readMapEntry() {
@@ -2452,12 +2439,8 @@
List<Statement> readStatementList() {
int length = readUInt30();
- List<Statement> result =
- new List<Statement>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readStatement();
- }
- return result;
+ return new List<Statement>.generate(length, (_) => readStatement(),
+ growable: true);
}
Statement readStatementOrNullIfEmpty() {
@@ -2594,11 +2577,9 @@
int offset = readOffset();
Expression expression = readExpression();
int count = readUInt30();
- List<SwitchCase> cases =
- new List<SwitchCase>.filled(count, null, growable: true);
- for (int i = 0; i < count; ++i) {
- cases[i] = new SwitchCase.empty();
- }
+ List<SwitchCase> cases = new List<SwitchCase>.generate(
+ count, (_) => new SwitchCase.empty(),
+ growable: true);
switchCaseStack.addAll(cases);
for (int i = 0; i < cases.length; ++i) {
readSwitchCaseInto(cases[i]);
@@ -2674,11 +2655,7 @@
List<Catch> readCatchList() {
int length = readUInt30();
- List<Catch> result = new List<Catch>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readCatch();
- }
- return result;
+ return new List<Catch>.generate(length, (_) => readCatch(), growable: true);
}
Catch readCatch() {
@@ -2727,32 +2704,20 @@
List<Supertype> readSupertypeList() {
int length = readUInt30();
- List<Supertype> result =
- new List<Supertype>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readSupertype();
- }
- return result;
+ return new List<Supertype>.generate(length, (_) => readSupertype(),
+ growable: true);
}
List<DartType> readDartTypeList() {
int length = readUInt30();
- List<DartType> result =
- new List<DartType>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readDartType();
- }
- return result;
+ return new List<DartType>.generate(length, (_) => readDartType(),
+ growable: true);
}
List<NamedType> readNamedTypeList() {
int length = readUInt30();
- List<NamedType> result =
- new List<NamedType>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readNamedType();
- }
- return result;
+ return new List<NamedType>.generate(length, (_) => readNamedType(),
+ growable: true);
}
NamedType readNamedType() {
@@ -2897,10 +2862,9 @@
int length = readUInt30();
if (length == 0) return list ?? <TypeParameter>[];
if (list == null) {
- list = new List<TypeParameter>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- list[i] = new TypeParameter(null, null)..parent = parent;
- }
+ list = new List<TypeParameter>.generate(
+ length, (_) => new TypeParameter(null, null)..parent = parent,
+ growable: true);
} else if (list.length != length) {
list.length = length;
for (int i = 0; i < length; ++i) {
@@ -2939,12 +2903,9 @@
List<NamedExpression> readNamedExpressionList() {
int length = readUInt30();
- List<NamedExpression> result =
- new List<NamedExpression>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readNamedExpression();
- }
- return result;
+ return new List<NamedExpression>.generate(
+ length, (_) => readNamedExpression(),
+ growable: true);
}
NamedExpression readNamedExpression() {
@@ -2953,12 +2914,9 @@
List<VariableDeclaration> readAndPushVariableDeclarationList() {
int length = readUInt30();
- List<VariableDeclaration> result =
- new List<VariableDeclaration>.filled(length, null, growable: true);
- for (int i = 0; i < length; ++i) {
- result[i] = readAndPushVariableDeclaration();
- }
- return result;
+ return new List<VariableDeclaration>.generate(
+ length, (_) => readAndPushVariableDeclaration(),
+ growable: true);
}
VariableDeclaration readAndPushVariableDeclarationOption() {
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 348954f..74ebc7c 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -166,30 +166,30 @@
V(::, _abi, FfiAbi, 0x7c4ab775) \
V(::, _asFunctionInternal, FfiAsFunctionInternal, 0xbbcb235a) \
V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3ff5ae9c) \
- V(::, _loadInt8, FfiLoadInt8, 0xa54bed8c) \
- V(::, _loadInt16, FfiLoadInt16, 0x828b3ee3) \
- V(::, _loadInt32, FfiLoadInt32, 0x84694d79) \
- V(::, _loadInt64, FfiLoadInt64, 0x7536cd59) \
- V(::, _loadUint8, FfiLoadUint8, 0x77952a87) \
- V(::, _loadUint16, FfiLoadUint16, 0xa31d6aa0) \
- V(::, _loadUint32, FfiLoadUint32, 0x8cb59e0b) \
- V(::, _loadUint64, FfiLoadUint64, 0x9b4d0b82) \
- V(::, _loadIntPtr, FfiLoadIntPtr, 0x8220c1f4) \
- V(::, _loadFloat, FfiLoadFloat, 0x8f209213) \
- V(::, _loadDouble, FfiLoadDouble, 0x8d53d3cf) \
- V(::, _loadPointer, FfiLoadPointer, 0xc50e1486) \
- V(::, _storeInt8, FfiStoreInt8, 0x000b2742) \
- V(::, _storeInt16, FfiStoreInt16, 0xf9086b68) \
- V(::, _storeInt32, FfiStoreInt32, 0x1ca0a493) \
- V(::, _storeInt64, FfiStoreInt64, 0x128e85b0) \
- V(::, _storeUint8, FfiStoreUint8, 0x26284b2c) \
- V(::, _storeUint16, FfiStoreUint16, 0x03b82314) \
- V(::, _storeUint32, FfiStoreUint32, 0x069260fb) \
- V(::, _storeUint64, FfiStoreUint64, 0x0393aa6f) \
- V(::, _storeIntPtr, FfiStoreIntPtr, 0x28bcdede) \
- V(::, _storeFloat, FfiStoreFloat, 0x853f68b4) \
- V(::, _storeDouble, FfiStoreDouble, 0x6354049a) \
- V(::, _storePointer, FfiStorePointer, 0x0cfd005b) \
+ V(::, _loadInt8, FfiLoadInt8, 0x0f04dfd6) \
+ V(::, _loadInt16, FfiLoadInt16, 0xec44312d) \
+ V(::, _loadInt32, FfiLoadInt32, 0xee223fc3) \
+ V(::, _loadInt64, FfiLoadInt64, 0xdeefbfa3) \
+ V(::, _loadUint8, FfiLoadUint8, 0xe14e1cd1) \
+ V(::, _loadUint16, FfiLoadUint16, 0x0cd65cea) \
+ V(::, _loadUint32, FfiLoadUint32, 0xf66e9055) \
+ V(::, _loadUint64, FfiLoadUint64, 0x0505fdcc) \
+ V(::, _loadIntPtr, FfiLoadIntPtr, 0xebd9b43e) \
+ V(::, _loadFloat, FfiLoadFloat, 0xf8d9845d) \
+ V(::, _loadDouble, FfiLoadDouble, 0xf70cc619) \
+ V(::, _loadPointer, FfiLoadPointer, 0x4e79d0fc) \
+ V(::, _storeInt8, FfiStoreInt8, 0xdf50af0c) \
+ V(::, _storeInt16, FfiStoreInt16, 0xd84df332) \
+ V(::, _storeInt32, FfiStoreInt32, 0xfbe62c5d) \
+ V(::, _storeInt64, FfiStoreInt64, 0xf1d40d7a) \
+ V(::, _storeUint8, FfiStoreUint8, 0x056dd2f6) \
+ V(::, _storeUint16, FfiStoreUint16, 0xe2fdaade) \
+ V(::, _storeUint32, FfiStoreUint32, 0xe5d7e8c5) \
+ V(::, _storeUint64, FfiStoreUint64, 0xe2d93239) \
+ V(::, _storeIntPtr, FfiStoreIntPtr, 0x080266a8) \
+ V(::, _storeFloat, FfiStoreFloat, 0x6484f07e) \
+ V(::, _storeDouble, FfiStoreDouble, 0x42998c64) \
+ V(::, _storePointer, FfiStorePointer, 0xea6b7751) \
V(::, _fromAddress, FfiFromAddress, 0xfd8cb1cc) \
V(Pointer, get:address, FfiGetAddress, 0x7cde87be) \
V(::, reachabilityFence, ReachabilityFence, 0x619235c1) \
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index 3a43c2b..4c69e41 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -168,89 +168,95 @@
// and GCing new spaces takes a lot of the benchmark time. The next speedup is
// getting rid of these allocations by inlining these functions.
@pragma("vm:recognized", "other")
-int _loadInt8(Pointer pointer, int offsetInBytes) native "Ffi_loadInt8";
+int _loadInt8(Object typedDataBase, int offsetInBytes) native "Ffi_loadInt8";
@pragma("vm:recognized", "other")
-int _loadInt16(Pointer pointer, int offsetInBytes) native "Ffi_loadInt16";
+int _loadInt16(Object typedDataBase, int offsetInBytes) native "Ffi_loadInt16";
@pragma("vm:recognized", "other")
-int _loadInt32(Pointer pointer, int offsetInBytes) native "Ffi_loadInt32";
+int _loadInt32(Object typedDataBase, int offsetInBytes) native "Ffi_loadInt32";
@pragma("vm:recognized", "other")
-int _loadInt64(Pointer pointer, int offsetInBytes) native "Ffi_loadInt64";
+int _loadInt64(Object typedDataBase, int offsetInBytes) native "Ffi_loadInt64";
@pragma("vm:recognized", "other")
-int _loadUint8(Pointer pointer, int offsetInBytes) native "Ffi_loadUint8";
+int _loadUint8(Object typedDataBase, int offsetInBytes) native "Ffi_loadUint8";
@pragma("vm:recognized", "other")
-int _loadUint16(Pointer pointer, int offsetInBytes) native "Ffi_loadUint16";
+int _loadUint16(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadUint16";
@pragma("vm:recognized", "other")
-int _loadUint32(Pointer pointer, int offsetInBytes) native "Ffi_loadUint32";
+int _loadUint32(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadUint32";
@pragma("vm:recognized", "other")
-int _loadUint64(Pointer pointer, int offsetInBytes) native "Ffi_loadUint64";
+int _loadUint64(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadUint64";
@pragma("vm:recognized", "other")
-int _loadIntPtr(Pointer pointer, int offsetInBytes) native "Ffi_loadIntPtr";
+int _loadIntPtr(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadIntPtr";
@pragma("vm:recognized", "other")
-double _loadFloat(Pointer pointer, int offsetInBytes) native "Ffi_loadFloat";
+double _loadFloat(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadFloat";
@pragma("vm:recognized", "other")
-double _loadDouble(Pointer pointer, int offsetInBytes) native "Ffi_loadDouble";
+double _loadDouble(Object typedDataBase, int offsetInBytes)
+ native "Ffi_loadDouble";
@pragma("vm:recognized", "other")
Pointer<S> _loadPointer<S extends NativeType>(
- Pointer pointer, int offsetInBytes) native "Ffi_loadPointer";
+ Object typedDataBase, int offsetInBytes) native "Ffi_loadPointer";
@pragma("vm:recognized", "other")
-void _storeInt8(Pointer pointer, int offsetInBytes, int value)
+void _storeInt8(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeInt8";
@pragma("vm:recognized", "other")
-void _storeInt16(Pointer pointer, int offsetInBytes, int value)
+void _storeInt16(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeInt16";
@pragma("vm:recognized", "other")
-void _storeInt32(Pointer pointer, int offsetInBytes, int value)
+void _storeInt32(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeInt32";
@pragma("vm:recognized", "other")
-void _storeInt64(Pointer pointer, int offsetInBytes, int value)
+void _storeInt64(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeInt64";
@pragma("vm:recognized", "other")
-void _storeUint8(Pointer pointer, int offsetInBytes, int value)
+void _storeUint8(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeUint8";
@pragma("vm:recognized", "other")
-void _storeUint16(Pointer pointer, int offsetInBytes, int value)
+void _storeUint16(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeUint16";
@pragma("vm:recognized", "other")
-void _storeUint32(Pointer pointer, int offsetInBytes, int value)
+void _storeUint32(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeUint32";
@pragma("vm:recognized", "other")
-void _storeUint64(Pointer pointer, int offsetInBytes, int value)
+void _storeUint64(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeUint64";
@pragma("vm:recognized", "other")
-void _storeIntPtr(Pointer pointer, int offsetInBytes, int value)
+void _storeIntPtr(Object typedDataBase, int offsetInBytes, int value)
native "Ffi_storeIntPtr";
@pragma("vm:recognized", "other")
-void _storeFloat(Pointer pointer, int offsetInBytes, double value)
+void _storeFloat(Object typedDataBase, int offsetInBytes, double value)
native "Ffi_storeFloat";
@pragma("vm:recognized", "other")
-void _storeDouble(Pointer pointer, int offsetInBytes, double value)
+void _storeDouble(Object typedDataBase, int offsetInBytes, double value)
native "Ffi_storeDouble";
@pragma("vm:recognized", "other")
-void _storePointer<S extends NativeType>(Pointer pointer, int offsetInBytes,
- Pointer<S> value) native "Ffi_storePointer";
+void _storePointer<S extends NativeType>(Object typedDataBase,
+ int offsetInBytes, Pointer<S> value) native "Ffi_storePointer";
Pointer<Int8> _elementAtInt8(Pointer<Int8> pointer, int index) =>
Pointer.fromAddress(pointer.address + 1 * index);
diff --git a/tools/VERSION b/tools/VERSION
index ffe0133..75028e0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 19
+PRERELEASE 20
PRERELEASE_PATCH 0
\ No newline at end of file