| Index: tools/patch_sdk.dart
|
| diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
|
| index e9980eab858fc52d212d1ab8e4b1b2710547f4fc..04e3df84be2ea194679d744395c365f171fa579e 100644
|
| --- a/tools/patch_sdk.dart
|
| +++ b/tools/patch_sdk.dart
|
| @@ -257,6 +257,11 @@ List<String> _patchLibrary(String name,
|
| return new List<String>.from(results.map((e) => e.toString()));
|
| }
|
|
|
| +final injectedCidFields = [
|
| + 'Array', 'ExternalOneByteString', 'GrowableObjectArray',
|
| + 'ImmutableArray', 'OneByteString', 'TwoByteString', 'Bigint'
|
| +].map((name) => "static final int cid${name} = 0;").join('\n');
|
| +
|
| /// Merge `@patch` declarations into `external` declarations.
|
| class PatchApplier extends GeneralizingAstVisitor {
|
| final StringEditBuffer edits;
|
| @@ -274,6 +279,15 @@ class PatchApplier extends GeneralizingAstVisitor {
|
|
|
| void _merge(AstNode node, int pos) {
|
| var code = patch.contents.substring(node.offset, node.end);
|
| +
|
| + // We inject a number of static fields into dart:internal.ClassID class.
|
| + // These fields represent various VM class ids and are only used to
|
| + // make core libraries compile. Kernel reader will actually ignore this
|
| + // fields and instead inject concrete constants into this class.
|
| + if (node is ClassDeclaration && node.name.name == 'ClassID') {
|
| + code = code.replaceFirst(
|
| + new RegExp(r'}$'), injectedCidFields + '}');
|
| + }
|
| edits.insert(pos, '\n' + code);
|
| }
|
|
|
|
|