Version 2.17.0-4.0.dev
Merge commit '1bf93d73a1076223dad79c9af9113de368089436' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index e059e45..8804c02 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -1,6 +1,6 @@
{
"copyright": [
- "Copyright (c) 2021, the Dart project authors. Please see the AUTHORS ",
+ "Copyright (c) 2022, 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."
],
@@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
- "generated": "2021-12-22T16:24:00.538300",
+ "generated": "2022-01-11T09:53:34.372475",
"generator": "tools/generate_package_config.dart",
"packages": [
{
@@ -316,7 +316,7 @@
"name": "fixnum",
"rootUri": "../third_party/pkg/fixnum",
"packageUri": "lib/",
- "languageVersion": "2.10"
+ "languageVersion": "2.12"
},
{
"name": "front_end",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7428a56..b72adbc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,11 @@
- Add `Finalizer` and `WeakReference` which can potentially detect when
objects are "garbage collected".
+#### `dart:indexed_db`
+
+- `IdbFactory.supportsDatabaseNames` has been deprecated. It will always return
+ `false`.
+
## 2.16.0
### Core libraries
@@ -17,11 +22,6 @@
error with an existing stack trace, instead of creating
a new stack trace.
-#### `dart:indexed_db`
-
-- `IdbFactory.supportsDatabaseNames` has been deprecated. It will always return
- `false`.
-
#### `dart:io`
- **Breaking Change** [#47653](https://github.com/dart-lang/sdk/issues/47653):
diff --git a/DEPS b/DEPS
index f89e94c..9951d90 100644
--- a/DEPS
+++ b/DEPS
@@ -112,7 +112,7 @@
"dartdoc_rev" : "66ee9a81b3bab35adcda18274b7d69567c98c3c6",
"devtools_rev" : "85932bb66aa782c4b2c528be7718960bf256ffb7",
"ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
- "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
+ "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
"file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
"glob_rev": "a62acf590598f458d3198d9f2930c1c9dd4b1379",
"html_rev": "00cd3c22dac0e68e6ed9e7e4945101aedb1b3109",
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 9a4c5a3..2c3a578 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -307,14 +307,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 4)
- ..assertLibrariesToImport(includes: [
- 'dart:math',
- ], excludes: [
- 'dart:async',
- 'dart:core',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 4);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -338,10 +331,6 @@
check(response)
..assertIncomplete()
..hasReplacement(left: 4)
- ..assertLibrariesToImport(includes: [], excludes: [
- 'dart:core',
- 'dart:math',
- ])
..suggestions.withElementClass.isEmpty;
}
@@ -386,14 +375,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:aaa/f.dart',
- ], excludes: [
- 'dart:core',
- 'package:bbb/f.dart',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -447,14 +429,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:aaa/f.dart',
- 'package:bbb/f.dart',
- ], excludes: [
- 'dart:core',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -485,16 +460,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/a.dart',
- 'package:test/b.dart',
- ], excludes: [
- 'dart:async',
- 'dart:core',
- 'dart:math',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -528,16 +494,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/b.dart',
- ], excludes: [
- 'dart:async',
- 'dart:core',
- 'dart:math',
- 'package:test/a.dart',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -574,16 +531,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/a.dart',
- 'package:test/b.dart',
- ], excludes: [
- 'dart:async',
- 'dart:core',
- 'dart:math',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -607,7 +555,7 @@
class A01 {}
''');
- var b = newFile('$testPackageTestPath/b.dart', content: '''
+ newFile('$testPackageTestPath/b.dart', content: '''
class A02 {}
''');
@@ -621,14 +569,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/a.dart',
- ], excludes: [
- 'dart:core',
- 'package:test/test.dart',
- toUriStr(b.path),
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -660,14 +601,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/f.dart',
- 'package:test/src/f.dart',
- ], excludes: [
- 'dart:core',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -707,14 +641,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/a.dart',
- b_uriStr,
- ], excludes: [
- 'dart:core',
- toUriStr(test_path),
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
@@ -753,14 +680,7 @@
check(response)
..assertComplete()
- ..hasReplacement(left: 2)
- ..assertLibrariesToImport(includes: [
- 'package:test/f.dart',
- 'package:test/src/f.dart',
- ], excludes: [
- 'dart:core',
- 'package:test/test.dart',
- ]);
+ ..hasReplacement(left: 2);
check(response).suggestions.withElementClass.matches([
(suggestion) => suggestion
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_check.dart b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
index f963f06..4196283 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_check.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
@@ -4,7 +4,6 @@
import 'package:analysis_server/src/protocol_server.dart';
import 'package:analyzer_utilities/check/check.dart';
-import 'package:collection/collection.dart';
import 'package:meta/meta.dart';
class CompletionResponseForTesting {
@@ -67,18 +66,6 @@
);
}
- CheckTarget<List<String>> get librariesToImport {
- return nest(
- value.suggestions
- .where((e) => e.isNotImported == true)
- .map((e) => e.element?.libraryUri)
- .whereNotNull()
- .toSet()
- .toList(),
- (selected) => 'has librariesToImport ${valueStr(selected)}',
- );
- }
-
CheckTarget<int> get replacementLength {
return nest(
value.replacementLength,
@@ -114,24 +101,6 @@
isIncomplete.isTrue;
}
- void assertLibrariesToImport({
- required List<String> includes,
- List<String>? excludes,
- }) {
- librariesToImport.includesAll(
- includes.map(
- (e) => (v) => v.isEqualTo(e),
- ),
- );
- if (excludes != null) {
- librariesToImport.excludesAll(
- excludes.map(
- (e) => (v) => v.isEqualTo(e),
- ),
- );
- }
- }
-
/// Check that the replacement offset is the completion request offset,
/// and the length of the replacement is zero.
void hasEmptyReplacement() {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 66200d1..7c3972e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -82,7 +82,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 196;
+ static const int DATA_VERSION = 197;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 27fbe85..2e58795 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -73,6 +73,7 @@
void writeEnumElement(EnumElementImpl element) {
_write('enum ');
_write(element.displayName);
+ _writeTypeParameters(element.typeParameters);
}
void writeExecutableElement(ExecutableElement element, String name) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 1b45e50..92517cf5 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -46,6 +46,7 @@
/// A concrete implementation of a [ClassElement].
abstract class AbstractClassElementImpl extends _ExistingElementImpl
+ with TypeParameterizedElementMixin
implements ClassElement {
/// The type defined by the class.
InterfaceType? _thisType;
@@ -121,6 +122,13 @@
return _thisType!;
}
+ set typeParameters(List<TypeParameterElement> typeParameters) {
+ for (TypeParameterElement typeParameter in typeParameters) {
+ (typeParameter as TypeParameterElementImpl).enclosingElement = this;
+ }
+ _typeParameterElements = typeParameters;
+ }
+
@override
T? accept<T>(ElementVisitor<T> visitor) => visitor.visitClassElement(this);
@@ -411,8 +419,7 @@
}
/// An [AbstractClassElementImpl] which is a class.
-class ClassElementImpl extends AbstractClassElementImpl
- with TypeParameterizedElementMixin {
+class ClassElementImpl extends AbstractClassElementImpl {
/// The superclass of the class, or `null` for [Object].
InterfaceType? _supertype;
@@ -761,15 +768,6 @@
return super.typeParameters;
}
- /// Set the type parameters defined for this class to the given
- /// [typeParameters].
- set typeParameters(List<TypeParameterElement> typeParameters) {
- for (TypeParameterElement typeParameter in typeParameters) {
- (typeParameter as TypeParameterElementImpl).enclosingElement = this;
- }
- _typeParameterElements = typeParameters;
- }
-
@override
ConstructorElement? get unnamedConstructor {
for (ConstructorElement element in constructors) {
@@ -2766,8 +2764,10 @@
}
@override
- List<TypeParameterElement> get typeParameters =>
- const <TypeParameterElement>[];
+ List<TypeParameterElement> get typeParameters {
+ linkedData?.read(this);
+ return super.typeParameters;
+ }
@override
ConstructorElement? get unnamedConstructor => null;
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index ab6cf0e..418f064 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -277,6 +277,7 @@
element.metadata = reader._readAnnotationList(
unitElement: element.enclosingElement,
);
+ _readTypeParameters(reader, element.typeParameters);
var indexField = element.getField('index') as FieldElementImpl;
indexField.type = typeProvider.intType;
@@ -606,6 +607,8 @@
);
element.setLinkedData(reference, linkedData);
+ element.typeParameters = _readTypeParameters();
+
var accessors = <PropertyAccessorElement>[];
var fields = <FieldElement>[];
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 240ec16..e27a303 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -174,19 +174,21 @@
_sink._writeStringReference(element.name);
_resolutionSink._writeAnnotationList(element.metadata);
- var valuesField = element.getField('values') as ConstFieldElementImpl;
- _resolutionSink._writeNode(valuesField.constantInitializer!);
+ _writeTypeParameters(element.typeParameters, () {
+ var valuesField = element.getField('values') as ConstFieldElementImpl;
+ _resolutionSink._writeNode(valuesField.constantInitializer!);
- _writeList(
- element.fields.where((e) => !e.isSynthetic).toList(),
- _writeFieldElement,
- );
- _writeList(
- element.accessors.where((e) => !e.isSynthetic).toList(),
- _writePropertyAccessorElement,
- );
- _writeList(element.constructors, _writeConstructorElement);
- // _writeList(element.methods, _writeMethodElement);
+ _writeList(
+ element.fields.where((e) => !e.isSynthetic).toList(),
+ _writeFieldElement,
+ );
+ _writeList(
+ element.accessors.where((e) => !e.isSynthetic).toList(),
+ _writePropertyAccessorElement,
+ );
+ _writeList(element.constructors, _writeConstructorElement);
+ // _writeList(element.methods, _writeMethodElement);
+ });
}
void _writeExportElement(ExportElement element) {
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index d74903b..ec3ff9a 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -34,6 +34,11 @@
_breakSelfCycles(node.typeParameters);
_breakRawTypeCycles(element, node.typeParameters);
_computeBounds(element, node.typeParameters);
+ } else if (node is EnumDeclaration) {
+ var element = node.declaredElement!;
+ _breakSelfCycles(node.typeParameters);
+ _breakRawTypeCycles(element, node.typeParameters);
+ _computeBounds(element, node.typeParameters);
} else if (node is FunctionTypeAlias) {
var element = node.declaredElement!;
_breakSelfCycles(node.typeParameters);
@@ -56,6 +61,8 @@
_build(node.typeParameters);
} else if (node is ClassTypeAlias) {
_build(node.typeParameters);
+ } else if (node is EnumDeclaration) {
+ _build(node.typeParameters);
} else if (node is FunctionTypeAlias) {
_build(node.typeParameters);
} else if (node is GenericTypeAlias) {
diff --git a/pkg/analyzer/lib/src/summary2/default_value_resolver.dart b/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
index 9675fd4..8518555 100644
--- a/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/default_value_resolver.dart
@@ -16,61 +16,31 @@
final LibraryElementImpl _libraryElement;
final TypeSystemImpl _typeSystem;
- late CompilationUnitElementImpl _unitElement;
- ClassElement? _classElement;
- late ExecutableElement _executableElement;
- late Scope _scope;
-
DefaultValueResolver(this._linker, this._libraryElement)
: _typeSystem = _libraryElement.typeSystem;
void resolve() {
- for (var unit in _libraryElement.units) {
- _unitElement = unit as CompilationUnitElementImpl;
-
- for (var classElement in unit.classes) {
- _class(classElement);
- }
-
- for (var extensionElement in unit.extensions) {
- _extension(extensionElement);
- }
-
- for (var classElement in unit.mixins) {
- _class(classElement);
- }
-
- for (var element in unit.functions) {
- _function(element);
- }
+ for (var unitElement in _libraryElement.units.impl) {
+ _UnitContext(unitElement)
+ ..forEach(unitElement.classes, _class)
+ ..forEach(unitElement.extensions, _extension)
+ ..forEach(unitElement.functions, _executable)
+ ..forEach(unitElement.mixins, _class);
}
}
- void _class(ClassElement classElement) {
- _classElement = classElement;
-
- for (var element in classElement.constructors) {
- _constructor(element as ConstructorElementImpl);
- }
-
- for (var element in classElement.methods) {
- _setScopeFromElement(element);
- _method(element as MethodElementImpl);
- }
-
- _classElement = null;
+ void _class(_UnitContext context, ClassElement element) {
+ _ClassContext(context, element)
+ ..forEach(element.constructors, _constructor)
+ ..forEach(element.methods, _executable);
}
- void _constructor(ConstructorElementImpl element) {
+ void _constructor(_ClassContext context, ConstructorElement element) {
if (element.isSynthetic) return;
-
- _executableElement = element;
- _setScopeFromElement(element);
-
- _parameters(element.parameters);
+ _executable(context, element);
}
- DefaultFormalParameter? _defaultParameter(ParameterElementImpl element) {
+ DefaultFormalParameter? _defaultParameter(ParameterElement element) {
var node = _linker.getLinkingNode(element);
if (node is DefaultFormalParameter && node.defaultValue != null) {
return node;
@@ -79,32 +49,21 @@
}
}
- void _extension(ExtensionElement extensionElement) {
- for (var element in extensionElement.methods) {
- _setScopeFromElement(element);
- _method(element as MethodElementImpl);
- }
+ void _executable(_Context context, ExecutableElement element) {
+ _ExecutableContext(
+ enclosingContext: context,
+ executableElement: element,
+ scope: _scopeFromElement(element),
+ ).forEach(element.parameters, _parameter);
}
- void _function(FunctionElement element) {
- _executableElement = element;
- _setScopeFromElement(element);
-
- _parameters(element.parameters);
+ void _extension(_UnitContext context, ExtensionElement element) {
+ context.forEach(element.methods, _executable);
}
- void _method(MethodElementImpl element) {
- _executableElement = element;
- _setScopeFromElement(element);
-
- _parameters(element.parameters);
- }
-
- void _parameter(ParameterElementImpl parameter) {
+ void _parameter(_ExecutableContext context, ParameterElement parameter) {
// If a function typed parameter, process nested parameters.
- for (var localParameter in parameter.parameters) {
- _parameter(localParameter as ParameterElementImpl);
- }
+ context.forEach(parameter.parameters, _parameter);
var node = _defaultParameter(parameter);
if (node == null) return;
@@ -112,21 +71,83 @@
var contextType = _typeSystem.eliminateTypeVariables(parameter.type);
var astResolver = AstResolver(
- _linker, _unitElement, _scope, node.defaultValue!,
- enclosingClassElement: _classElement,
- enclosingExecutableElement: _executableElement);
+ _linker,
+ context.unitElement,
+ context.scope,
+ node.defaultValue!,
+ enclosingClassElement: context.classElement,
+ enclosingExecutableElement: context.executableElement,
+ );
astResolver.resolveExpression(() => node.defaultValue!,
contextType: contextType);
}
- void _parameters(List<ParameterElement> parameters) {
- for (var parameter in parameters) {
- _parameter(parameter as ParameterElementImpl);
- }
- }
-
- void _setScopeFromElement(Element element) {
+ Scope _scopeFromElement(Element element) {
var node = _linker.getLinkingNode(element)!;
- _scope = LinkingNodeContext.get(node).scope;
+ return LinkingNodeContext.get(node).scope;
+ }
+}
+
+class _ClassContext extends _Context {
+ final _UnitContext unitContext;
+
+ @override
+ final ClassElement classElement;
+
+ _ClassContext(this.unitContext, this.classElement);
+
+ @override
+ CompilationUnitElementImpl get unitElement {
+ return unitContext.unitElement;
+ }
+}
+
+abstract class _Context {
+ ClassElement? get classElement => null;
+
+ CompilationUnitElementImpl get unitElement;
+}
+
+class _ExecutableContext extends _Context {
+ final _Context enclosingContext;
+ final ExecutableElement executableElement;
+ final Scope scope;
+
+ _ExecutableContext({
+ required this.enclosingContext,
+ required this.executableElement,
+ required this.scope,
+ });
+
+ @override
+ ClassElement? get classElement => enclosingContext.classElement;
+
+ @override
+ CompilationUnitElementImpl get unitElement {
+ return enclosingContext.unitElement;
+ }
+}
+
+class _UnitContext extends _Context {
+ @override
+ final CompilationUnitElementImpl unitElement;
+
+ _UnitContext(this.unitElement);
+}
+
+extension on List<CompilationUnitElement> {
+ List<CompilationUnitElementImpl> get impl {
+ return cast();
+ }
+}
+
+extension _ContextExtension<C extends _Context> on C {
+ void forEach<T>(
+ List<T> elements,
+ void Function(C context, T element) f,
+ ) {
+ for (var element in elements) {
+ f(this, element);
+ }
}
}
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index ea24e67..44a2eb3 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -213,6 +213,31 @@
var reference = _enclosingContext.addEnum(name, element);
_libraryBuilder.localScope.declare(name, reference);
+
+ var holder = _EnclosingContext(reference, element);
+ _withEnclosing(holder, () {
+ var typeParameters = node.typeParameters;
+ if (typeParameters != null) {
+ typeParameters.accept(this);
+ element.typeParameters = holder.typeParameters;
+ }
+ });
+
+ // TODO(scheglov) implement
+ // node.extendsClause?.accept(this);
+ // node.withClause?.accept(this);
+ // node.implementsClause?.accept(this);
+
+ // TODO(scheglov) don't create a duplicate
+ {
+ var holder2 = _buildClassMembers(element, node.members);
+ element.accessors = holder2.propertyAccessors;
+ element.fields = holder2.properties.whereType<FieldElement>().toList();
+ // TODO(scheglov) implement
+ // element.methods = holder2.methods;
+ }
+
+ // TODO(scheglov) resolve field formals
}
@override
@@ -942,7 +967,7 @@
}
_EnclosingContext _buildClassMembers(
- ElementImpl element, NodeList<ClassMember> members) {
+ ElementImpl element, List<ClassMember> members) {
var hasConstConstructor = members.any((e) {
return e is ConstructorDeclaration && e.constKeyword != null;
});
@@ -956,6 +981,7 @@
void _buildClassOrMixin(ClassOrMixinDeclaration node) {
var element = node.declaredElement as ClassElementImpl;
+ // TODO(scheglov) don't create a duplicate
var holder = _buildClassMembers(element, node.members);
element.accessors = holder.propertyAccessors;
element.fields = holder.properties.whereType<FieldElement>().toList();
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index aa69ec9..1c3b927 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -280,6 +280,10 @@
element.setCodeRange(info.codeOffset, info.codeLength);
element.nameOffset = info.nameOffset;
element.documentationComment = info.documentationComment;
+ _applyToTypeParameters(
+ element.typeParameters_unresolved,
+ info.typeParameters,
+ );
forCorrespondingPairs<FieldElement, _InfoEnumConstantDeclaration>(
element.constants_unresolved,
@@ -794,6 +798,7 @@
final int codeLength;
final int nameOffset;
final String? documentationComment;
+ final List<_InfoTypeParameter> typeParameters;
final List<_InfoEnumConstantDeclaration> constants;
final Uint32List constantOffsets;
@@ -803,6 +808,9 @@
codeLength: reader.readUInt30(),
nameOffset: reader.readUInt30(),
documentationComment: reader.readStringUtf8().nullIfEmpty,
+ typeParameters: reader.readTypedList(
+ () => _InfoTypeParameter(reader),
+ ),
constants: reader.readTypedList(
() => _InfoEnumConstantDeclaration(reader),
),
@@ -815,6 +823,7 @@
required this.codeLength,
required this.nameOffset,
required this.documentationComment,
+ required this.typeParameters,
required this.constants,
required this.constantOffsets,
});
@@ -1163,6 +1172,7 @@
sink.writeUInt30(node.length);
sink.writeUInt30(node.name.offset);
_writeDocumentationComment(node);
+ _writeTypeParameters(node.typeParameters);
sink.writeList2<EnumConstantDeclaration>(node.constants, (node) {
sink.writeUInt30(node.offset);
sink.writeUInt30(node.length);
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 4208e83..dd5b4cc 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -114,7 +114,27 @@
}
@override
- void visitEnumDeclaration(EnumDeclaration node) {}
+ void visitEnumDeclaration(EnumDeclaration node) {
+ var outerScope = scope;
+
+ var element = node.declaredElement as EnumElementImpl;
+
+ scope = TypeParameterScope(scope, element.typeParameters);
+
+ node.typeParameters?.accept(this);
+ // TODO(scheglov) implement
+ // node.extendsClause?.accept(this);
+ // node.implementsClause?.accept(this);
+ // node.withClause?.accept(this);
+
+ scope = ClassScope(scope, element);
+ LinkingNodeContext(node, scope);
+
+ node.members.accept(this);
+ nodesToBuildType.addDeclaration(node);
+
+ scope = outerScope;
+ }
@override
void visitExpressionFunctionBody(ExpressionFunctionBody node) {}
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 53b27e3..795d229 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -167,6 +167,8 @@
_classDeclaration(node);
} else if (node is ClassTypeAlias) {
_classTypeAlias(node);
+ } else if (node is EnumDeclaration) {
+ _enumDeclaration(node);
} else if (node is ExtensionDeclaration) {
_extensionDeclaration(node);
} else if (node is FieldFormalParameter) {
@@ -220,6 +222,10 @@
}
}
+ void _enumDeclaration(EnumDeclaration node) {
+ // TODO(scheglov) implement
+ }
+
void _extensionDeclaration(ExtensionDeclaration node) {
var element = node.declaredElement as ExtensionElementImpl;
element.extendedType = node.extendedType.typeOrThrow;
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index c9017ca..fad5a0e 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -39,6 +39,8 @@
_typeParameters(node.typeParameters);
} else if (node is ClassDeclaration) {
_typeParameters(node.typeParameters);
+ } else if (node is EnumDeclaration) {
+ _typeParameters(node.typeParameters);
} else if (node is FunctionTypeAlias) {
_functionTypeAlias(node);
} else if (node is GenericTypeAlias) {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 358fed5..503b88a 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -100,6 +100,7 @@
sdkLanguageVersion: Version.parse('2.16.0'),
flags: [
EnableString.constructor_tearoffs,
+ EnableString.enhanced_enums,
EnableString.super_parameters,
],
);
@@ -17501,6 +17502,463 @@
''');
}
+ test_enum_typeParameters() async {
+ var library = await checkLibrary('''
+enum E<T> {
+ v
+}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @7
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ static const enumConstant v @14
+ type: E<T>
+ constantInitializer
+ InstanceCreationExpression
+ argumentList: ArgumentList
+ arguments
+ IntegerLiteral
+ literal: 0 @0
+ staticType: int
+ SimpleStringLiteral
+ literal: 'v' @0
+ leftParenthesis: ( @0
+ rightParenthesis: ) @0
+ constructorName: ConstructorName
+ staticElement: self::@enum::E::@constructor::_
+ type: NamedType
+ name: SimpleIdentifier
+ staticElement: self::@enum::E
+ staticType: null
+ token: E @-1
+ type: E<T>
+ staticType: E<T>
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ elements
+ SimpleIdentifier
+ staticElement: self::@enum::E::@getter::v
+ staticType: E<T>
+ token: v @-1
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get v @-1
+ returnType: E<T>
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_bound() async {
+ var library = await checkLibrary('''
+enum E<T extends num, U extends T> {
+ v
+}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @7
+ bound: num
+ defaultType: num
+ covariant U @22
+ bound: T
+ defaultType: num
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ static const enumConstant v @39
+ type: E<T, U>
+ constantInitializer
+ InstanceCreationExpression
+ argumentList: ArgumentList
+ arguments
+ IntegerLiteral
+ literal: 0 @0
+ staticType: int
+ SimpleStringLiteral
+ literal: 'v' @0
+ leftParenthesis: ( @0
+ rightParenthesis: ) @0
+ constructorName: ConstructorName
+ staticElement: self::@enum::E::@constructor::_
+ type: NamedType
+ name: SimpleIdentifier
+ staticElement: self::@enum::E
+ staticType: null
+ token: E @-1
+ type: E<T, U>
+ staticType: E<T, U>
+ synthetic static const values @-1
+ type: List<E<T, U>>
+ constantInitializer
+ ListLiteral
+ elements
+ SimpleIdentifier
+ staticElement: self::@enum::E::@getter::v
+ staticType: E<T, U>
+ token: v @-1
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T, U>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get v @-1
+ returnType: E<T, U>
+ synthetic static get values @-1
+ returnType: List<E<T, U>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_cycle_1of1() async {
+ var library = await checkLibrary('''
+enum E<T extends T> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @7
+ bound: dynamic
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_cycle_2of3() async {
+ var library = await checkLibrary(r'''
+enum E<T extends V, U extends num, V extends T> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @7
+ bound: dynamic
+ defaultType: dynamic
+ covariant U @20
+ bound: num
+ defaultType: num
+ covariant V @35
+ bound: dynamic
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T, U, V>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T, U, V>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T, U, V>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_defaultType_cycle_genericFunctionType() async {
+ var library = await checkLibrary(r'''
+enum E<T extends void Function(E)> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @7
+ bound: void Function(E<dynamic>)
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_variance_contravariant() async {
+ var library = await checkLibrary('''
+enum E<in T> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ contravariant T @10
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_variance_covariant() async {
+ var library = await checkLibrary('''
+enum E<out T> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ covariant T @11
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_variance_invariant() async {
+ var library = await checkLibrary('''
+enum E<inout T> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ invariant T @13
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
+ test_enum_typeParameters_variance_multiple() async {
+ var library = await checkLibrary('''
+enum E<inout T, in U, out V> {}
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ enums
+ enum E @5
+ typeParameters
+ invariant T @13
+ defaultType: dynamic
+ contravariant U @19
+ defaultType: dynamic
+ covariant V @26
+ defaultType: dynamic
+ supertype: Enum
+ fields
+ synthetic final index @-1
+ type: int
+ synthetic static const values @-1
+ type: List<E<T, U, V>>
+ constantInitializer
+ ListLiteral
+ leftBracket: [ @0
+ rightBracket: ] @0
+ staticType: List<E<T, U, V>>
+ constructors
+ synthetic const _ @-1
+ parameters
+ requiredPositional final this.index @-1
+ type: int
+ field: self::@enum::E::@field::index
+ requiredPositional name @-1
+ type: String
+ accessors
+ synthetic get index @-1
+ returnType: int
+ synthetic static get values @-1
+ returnType: List<E<T, U, V>>
+ methods
+ synthetic toString @-1
+ returnType: String
+''');
+ }
+
test_enum_value_documented() async {
var library = await checkLibrary('''
enum E {
diff --git a/pkg/dds/lib/src/client.dart b/pkg/dds/lib/src/client.dart
index 7aaeafd..5b3abdc 100644
--- a/pkg/dds/lib/src/client.dart
+++ b/pkg/dds/lib/src/client.dart
@@ -97,7 +97,13 @@
void _registerJsonRpcMethods() {
_clientPeer.registerMethod('streamListen', (parameters) async {
final streamId = parameters['streamId'].asString;
- await dds.streamManager.streamListen(this, streamId);
+ final includePrivates =
+ parameters['_includePrivateMembers'].asBoolOr(false);
+ await dds.streamManager.streamListen(
+ this,
+ streamId,
+ includePrivates: includePrivates,
+ );
return RPCResponses.success;
});
diff --git a/pkg/dds/lib/src/stream_manager.dart b/pkg/dds/lib/src/stream_manager.dart
index ee0bc49..cde830a 100644
--- a/pkg/dds/lib/src/stream_manager.dart
+++ b/pkg/dds/lib/src/stream_manager.dart
@@ -170,16 +170,19 @@
/// `streamListen` request for `stream` to the VM service.
Future<void> streamListen(
DartDevelopmentServiceClient? client,
- String stream,
- ) async {
+ String stream, {
+ bool? includePrivates,
+ }) async {
await _streamSubscriptionMutex.runGuarded(
() async {
assert(stream.isNotEmpty);
+ bool streamNewlySubscribed = false;
if (!streamListeners.containsKey(stream)) {
// Initialize the list of clients for the new stream before we do
// anything else to ensure multiple clients registering for the same
// stream in quick succession doesn't result in multiple streamListen
// requests being sent to the VM service.
+ streamNewlySubscribed = true;
streamListeners[stream] = <DartDevelopmentServiceClient>[];
if ((stream == kDebugStream && client == null) ||
stream != kDebugStream) {
@@ -188,12 +191,28 @@
final result =
await dds.vmServiceClient.sendRequest('streamListen', {
'streamId': stream,
+ if (includePrivates != null)
+ '_includePrivateMembers': includePrivates,
});
assert(result['type'] == 'Success');
}
}
if (streamListeners[stream]!.contains(client)) {
throw kStreamAlreadySubscribedException;
+ } else if (!streamNewlySubscribed && includePrivates != null) {
+ try {
+ await dds.vmServiceClient.sendRequest(
+ '_setStreamIncludePrivateMembers',
+ {'streamId': stream, 'includePrivateMembers': includePrivates});
+ } on json_rpc.RpcException catch (e) {
+ // This private RPC might not be present. If it's not, we're communicating with an older
+ // VM that doesn't support filtering private members, so they will always be included in
+ // responses. Handle the method not found exception so the streamListen call doesn't
+ // fail for older VMs.
+ if (e.code != RpcErrorCodes.kMethodNotFound) {
+ rethrow;
+ }
+ }
}
if (client != null) {
streamListeners[stream]!.add(client);
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.weak.expect b/pkg/front_end/testcases/general/ffi_sample.dart.weak.expect
index 6895041..54231c0 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.weak.expect
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.weak.expect
@@ -40,7 +40,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect b/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect
index 6895041..54231c0 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect
@@ -40,7 +40,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect b/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
index 57cc30b..dc06840 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.weak.transformed.expect
@@ -40,9 +40,9 @@
set y(core::double* #v) → void
return ffi::_storeDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C12.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #v);
get next() → ffi::Pointer<self::Coordinate*>*
- return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
+ return ffi::_fromAddress<self::Coordinate*>(ffi::_loadAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
set next(ffi::Pointer<self::Coordinate*>* #v) → void
- return ffi::_storeIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #v.{ffi::Pointer::address}{core::int});
+ return ffi::_storeAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #v.{ffi::Pointer::address}{core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → core::int*
return #C19.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
@@ -74,7 +74,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
index 2e5c180..72d79b8 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
@@ -33,9 +33,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
index a82af2e..6d9d90c 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
@@ -33,9 +33,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
index 68633a6..eb79aaf 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
@@ -33,9 +33,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
index e925f93..beb059f 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
@@ -12,17 +12,17 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get a1() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a1(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get a2() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a2(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get a3() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a3(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get blah() → a::NestedStruct
return new a::NestedStruct::#fromTypedDataBase( block {
dart.core::Object #typedDataBase = this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object};
@@ -43,17 +43,17 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get n1() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n1(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get n2() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n2(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get n3() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n3(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
@#C19
static get #sizeOf() → dart.core::int*
return #C17.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
index e925f93..beb059f 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
@@ -12,17 +12,17 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get a1() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a1(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get a2() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a2(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get a3() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set a3(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get blah() → a::NestedStruct
return new a::NestedStruct::#fromTypedDataBase( block {
dart.core::Object #typedDataBase = this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object};
@@ -43,17 +43,17 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get n1() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n1(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C9.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get n2() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n2(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get n3() → dart.ffi::Pointer<dart.ffi::Void>
- return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::Void>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set n3(dart.ffi::Pointer<dart.ffi::Void> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
@#C19
static get #sizeOf() → dart.core::int*
return #C17.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
index 2e5c180..72d79b8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
@@ -33,9 +33,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
index 9d91273..d4ce18c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
@@ -33,9 +33,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
index afef6e0..4bfcd2e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
@@ -34,9 +34,9 @@
set y(dart.core::double* #v) → void
return dart.ffi::_storeDouble(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C12.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v);
get next() → dart.ffi::Pointer<lib::Coordinate*>*
- return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C14.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #v.{dart.ffi::Pointer::address}{dart.core::int});
@#C16
static get /*isNonNullableByDefault*/ #sizeOf() → dart.core::int*
return #C19.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
index ffb841a..3c26667 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
@@ -76,8 +76,6 @@
ffi::Int8Array,
ffi::Int8Pointer,
ffi::IntPtr,
- ffi::IntPtrArray,
- ffi::IntPtrPointer,
ffi::NativeApi,
ffi::NativeFunction,
ffi::NativeFunctionPointer,
@@ -154,8 +152,6 @@
ffi::Int8Array,
ffi::Int8Pointer,
ffi::IntPtr,
- ffi::IntPtrArray,
- ffi::IntPtrPointer,
ffi::NativeApi,
ffi::NativeFunction,
ffi::NativeFunctionPointer,
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
index 40804c4..7c86d77 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
@@ -76,8 +76,6 @@
ffi::Int8Array,
ffi::Int8Pointer,
ffi::IntPtr,
- ffi::IntPtrArray,
- ffi::IntPtrPointer,
ffi::NativeApi,
ffi::NativeFunction,
ffi::NativeFunctionPointer,
@@ -154,8 +152,6 @@
ffi::Int8Array,
ffi::Int8Pointer,
ffi::IntPtr,
- ffi::IntPtrArray,
- ffi::IntPtrPointer,
ffi::NativeApi,
ffi::NativeFunction,
ffi::NativeFunctionPointer,
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
index 9cb7f28..1cb94e2 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
@@ -12,11 +12,11 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get lpVtbl() → dart.ffi::Pointer<dart.ffi::IntPtr>
- return dart.ffi::_fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set lpVtbl(dart.ffi::Pointer<dart.ffi::IntPtr> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get vtable() → dart.ffi::Pointer<dart.ffi::IntPtr>
- return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}));
+ return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}, #C7));
@#C10
static get #sizeOf() → dart.core::int*
return #C13.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
index 9cb7f28..1cb94e2 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
@@ -12,11 +12,11 @@
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
get lpVtbl() → dart.ffi::Pointer<dart.ffi::IntPtr>
- return dart.ffi::_fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
+ return dart.ffi::_fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}));
set lpVtbl(dart.ffi::Pointer<dart.ffi::IntPtr> #externalFieldValue) → void
- return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
+ return dart.ffi::_storeAbiSpecificInt<dart.ffi::IntPtr>(this.{dart.ffi::_Compound::_typedDataBase}{dart.core::Object}, #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*}, #externalFieldValue.{dart.ffi::Pointer::address}{dart.core::int});
get vtable() → dart.ffi::Pointer<dart.ffi::IntPtr>
- return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}));
+ return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::_loadAbiSpecificInt<dart.ffi::IntPtr>(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}, #C7));
@#C10
static get #sizeOf() → dart.core::int*
return #C13.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect
index 8fae114..f21662b 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect
@@ -34,7 +34,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
index 6b19c1d..5082fb7 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
@@ -24,9 +24,9 @@
set y(core::double #externalFieldValue) → void
return ffi::_storeDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C12.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
get next() → ffi::Pointer<self::Coordinate>
- return ffi::_fromAddress<self::Coordinate>(ffi::_loadIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
+ return ffi::_fromAddress<self::Coordinate>(ffi::_loadAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void
- return ffi::_storeIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Pointer::address}{core::int});
+ return ffi::_storeAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Pointer::address}{core::int});
static factory allocate(ffi::Allocator allocator, core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
return let final self::Coordinate #t1 = new self::Coordinate::#fromTypedDataBase(allocator.{ffi::Allocator::allocate}<self::Coordinate>(self::Coordinate::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Coordinate>}!) in block {
#t1.{self::Coordinate::x} = x;
@@ -65,7 +65,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect
index 8fae114..f21662b 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect
@@ -34,7 +34,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect
index 8fae114..f21662b 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect
@@ -34,7 +34,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
index 6b19c1d..5082fb7 100644
--- a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
@@ -24,9 +24,9 @@
set y(core::double #externalFieldValue) → void
return ffi::_storeDouble(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C12.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
get next() → ffi::Pointer<self::Coordinate>
- return ffi::_fromAddress<self::Coordinate>(ffi::_loadIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
+ return ffi::_fromAddress<self::Coordinate>(ffi::_loadAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void
- return ffi::_storeIntPtr(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Pointer::address}{core::int});
+ return ffi::_storeAbiSpecificInt<ffi::IntPtr>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C14.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Pointer::address}{core::int});
static factory allocate(ffi::Allocator allocator, core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
return let final self::Coordinate #t1 = new self::Coordinate::#fromTypedDataBase(allocator.{ffi::Allocator::allocate}<self::Coordinate>(self::Coordinate::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Coordinate>}!) in block {
#t1.{self::Coordinate::x} = x;
@@ -65,7 +65,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:142:9)
- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index b50d0a2..1152655 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -35,7 +35,6 @@
kUint16,
kUint32,
kUint64,
- kIntptr,
kFloat,
kDouble,
kVoid,
@@ -56,11 +55,6 @@
NativeType.kUint64,
};
-const Set<NativeType> nativeIntTypes = <NativeType>{
- ...nativeIntTypesFixedSize,
- NativeType.kIntptr,
-};
-
/// The [NativeType] class names.
const Map<NativeType, String> nativeTypeClassNames = <NativeType, String>{
NativeType.kNativeType: 'NativeType',
@@ -76,7 +70,6 @@
NativeType.kUint16: 'Uint16',
NativeType.kUint32: 'Uint32',
NativeType.kUint64: 'Uint64',
- NativeType.kIntptr: 'IntPtr',
NativeType.kFloat: 'Float',
NativeType.kDouble: 'Double',
NativeType.kVoid: 'Void',
@@ -104,7 +97,6 @@
NativeType.kUint16: 2,
NativeType.kUint32: 4,
NativeType.kUint64: 8,
- NativeType.kIntptr: WORD_SIZE,
NativeType.kFloat: 4,
NativeType.kDouble: 8,
NativeType.kVoid: UNKNOWN,
@@ -125,7 +117,6 @@
NativeType.kUint16,
NativeType.kUint32,
NativeType.kUint64,
- NativeType.kIntptr,
NativeType.kFloat,
NativeType.kDouble,
NativeType.kPointer,
@@ -249,6 +240,8 @@
final Procedure storeAbiSpecificIntAtIndexMethod;
final Procedure abiCurrentMethod;
final Map<Constant, Abi> constantAbis;
+ final Class intptrClass;
+ late AbiSpecificNativeTypeCfe intptrNativeTypeCfe;
final Procedure memCopy;
final Procedure allocationTearoff;
final Procedure asFunctionTearoff;
@@ -461,6 +454,7 @@
as ConstantExpression)
.constant,
abi)),
+ intptrClass = index.getClass('dart:ffi', 'IntPtr'),
memCopy = index.getTopLevelProcedure('dart:ffi', '_memCopy'),
allocationTearoff = index.getProcedure(
'dart:ffi', 'AllocatorAlloc', LibraryIndex.tearoffPrefix + 'call'),
@@ -482,6 +476,9 @@
.getThisType(coreTypes, Nullability.nonNullable);
pointerVoidType =
InterfaceType(pointerClass, Nullability.nonNullable, [voidType]);
+ intptrNativeTypeCfe =
+ NativeTypeCfe(this, InterfaceType(intptrClass, Nullability.nonNullable))
+ as AbiSpecificNativeTypeCfe;
}
@override
@@ -548,7 +545,7 @@
if (nativeType_ == NativeType.kPointer) {
return nativeType;
}
- if (nativeIntTypes.contains(nativeType_)) {
+ if (nativeIntTypesFixedSize.contains(nativeType_)) {
return InterfaceType(intClass, Nullability.legacy);
}
if (nativeType_ == NativeType.kFloat || nativeType_ == NativeType.kDouble) {
diff --git a/pkg/vm/lib/transformations/ffi/native_type_cfe.dart b/pkg/vm/lib/transformations/ffi/native_type_cfe.dart
index ebbfe3b..4a19480 100644
--- a/pkg/vm/lib/transformations/ffi/native_type_cfe.dart
+++ b/pkg/vm/lib/transformations/ffi/native_type_cfe.dart
@@ -285,7 +285,7 @@
/// Sample output for `Pointer<Int8> get x =>`:
///
/// ```
- /// _fromAddress<Int8>(_loadIntPtr(_typedDataBase, offset));
+ /// _fromAddress<Int8>(_loadAbiSpecificInt<IntPtr>(_typedDataBase, offset));
/// ```
@override
ReturnStatement generateGetterStatement(
@@ -297,14 +297,13 @@
ReturnStatement(StaticInvocation(
transformer.fromAddressInternal,
Arguments([
- StaticInvocation(
- transformer.loadMethods[NativeType.kIntptr]!,
- Arguments([
- transformer.getCompoundTypedDataBaseField(
- ThisExpression(), fileOffset),
- transformer.runtimeBranchOnLayout(offsets)
- ]))
- ..fileOffset = fileOffset
+ transformer.abiSpecificLoadOrStoreExpression(
+ transformer.intptrNativeTypeCfe,
+ typedDataBase: transformer.getCompoundTypedDataBaseField(
+ ThisExpression(), fileOffset),
+ offsetInBytes: transformer.runtimeBranchOnLayout(offsets),
+ fileOffset: fileOffset,
+ ),
], types: [
(dartType as InterfaceType).typeArguments.single
]))
@@ -313,7 +312,11 @@
/// Sample output for `set x(Pointer<Int8> #v) =>`:
///
/// ```
- /// _storeIntPtr(_typedDataBase, offset, (#v as Pointer<Int8>).address);
+ /// _storeAbiSpecificInt<IntPtr>(
+ /// _typedDataBase,
+ /// offset,
+ /// (#v as Pointer<Int8>).address,
+ /// );
/// ```
@override
ReturnStatement generateSetterStatement(
@@ -323,19 +326,22 @@
bool unalignedAccess,
VariableDeclaration argument,
FfiTransformer transformer) =>
- ReturnStatement(StaticInvocation(
- transformer.storeMethods[NativeType.kIntptr]!,
- Arguments([
- transformer.getCompoundTypedDataBaseField(
- ThisExpression(), fileOffset),
- transformer.runtimeBranchOnLayout(offsets),
- InstanceGet(InstanceAccessKind.Instance, VariableGet(argument),
- transformer.addressGetter.name,
- interfaceTarget: transformer.addressGetter,
- resultType: transformer.addressGetter.getterType)
- ..fileOffset = fileOffset
- ]))
- ..fileOffset = fileOffset);
+ ReturnStatement(
+ transformer.abiSpecificLoadOrStoreExpression(
+ transformer.intptrNativeTypeCfe,
+ typedDataBase: transformer.getCompoundTypedDataBaseField(
+ ThisExpression(), fileOffset),
+ offsetInBytes: transformer.runtimeBranchOnLayout(offsets),
+ value: InstanceGet(
+ InstanceAccessKind.Instance,
+ VariableGet(argument),
+ transformer.addressGetter.name,
+ interfaceTarget: transformer.addressGetter,
+ resultType: transformer.addressGetter.getterType,
+ )..fileOffset = fileOffset,
+ fileOffset: fileOffset,
+ ),
+ );
}
/// The layout of a `Struct` or `Union` in one [Abi].
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index e096691..dde0929 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## 8.2.0-dev
+- Update to version `3.56` of the spec.
+- Added optional `line` and `column` properties to `SourceLocation`.
+
## 8.1.0
- Update to version `3.55` of the spec.
- Added `streamCpuSamplesWithUserTag` RPC.
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index e465dc5..1c8ad22 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.55
+version=3.56
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 968a41f..7fda5c7 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -26,7 +26,7 @@
HeapSnapshotObjectNoData,
HeapSnapshotObjectNullData;
-const String vmServiceVersion = '3.55.0';
+const String vmServiceVersion = '3.56.0';
/// @optional
const String optional = 'optional';
@@ -7417,10 +7417,22 @@
@optional
int? endTokenPos;
+ /// The line associated with this location. Only provided for non-synthetic
+ /// token positions.
+ @optional
+ int? line;
+
+ /// The column associated with this location. Only provided for non-synthetic
+ /// token positions.
+ @optional
+ int? column;
+
SourceLocation({
required this.script,
required this.tokenPos,
this.endTokenPos,
+ this.line,
+ this.column,
});
SourceLocation._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
@@ -7428,6 +7440,8 @@
createServiceObject(json['script'], const ['ScriptRef']) as ScriptRef?;
tokenPos = json['tokenPos'] ?? -1;
endTokenPos = json['endTokenPos'];
+ line = json['line'];
+ column = json['column'];
}
@override
@@ -7442,6 +7456,8 @@
'tokenPos': tokenPos,
});
_setIfNotNull(json, 'endTokenPos', endTokenPos);
+ _setIfNotNull(json, 'line', line);
+ _setIfNotNull(json, 'column', column);
return json;
}
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index a01b273..99c5e18 100644
--- a/pkg/vm_service/pubspec.yaml
+++ b/pkg/vm_service/pubspec.yaml
@@ -3,7 +3,7 @@
A library to communicate with a service implementing the Dart VM
service protocol.
-version: 8.1.0
+version: 8.2.0-dev
homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
diff --git a/pkg/vm_service/test/add_breakpoint_rpc_kernel_test.dart b/pkg/vm_service/test/add_breakpoint_rpc_kernel_test.dart
index bead75c..0fa939b 100644
--- a/pkg/vm_service/test/add_breakpoint_rpc_kernel_test.dart
+++ b/pkg/vm_service/test/add_breakpoint_rpc_kernel_test.dart
@@ -71,13 +71,17 @@
expect(futureBpt1.resolved, isTrue);
expect(script.getLineNumberFromTokenPos(futureBpt1.location!.tokenPos!),
LINE_A);
+ expect(futureBpt1.location!.line, LINE_A);
expect(
script.getColumnNumberFromTokenPos(futureBpt1.location!.tokenPos!), 12);
+ expect(futureBpt1.location!.column, 12);
expect(futureBpt2.resolved, isTrue);
expect(script.getLineNumberFromTokenPos(futureBpt2.location!.tokenPos!),
LINE_A);
+ expect(futureBpt2.location!.line, LINE_A);
expect(
script.getColumnNumberFromTokenPos(futureBpt2.location!.tokenPos!), 3);
+ expect(futureBpt2.location!.column, 3);
// The first breakpoint hits before value is modified.
InstanceRef result =
@@ -121,13 +125,19 @@
print('$LINE_A:${col} -> ${resolvedLine}:${resolvedCol}');
if (col <= 12) {
expect(resolvedLine, LINE_A);
+ expect(bpt.location!.line, LINE_A);
expect(resolvedCol, 3);
+ expect(bpt.location!.column, 3);
} else if (col <= 36) {
expect(resolvedLine, LINE_A);
+ expect(bpt.location!.line, LINE_A);
expect(resolvedCol, 12);
+ expect(bpt.location!.column, 12);
} else {
expect(resolvedLine, LINE_B);
+ expect(bpt.location!.line, LINE_B);
expect(resolvedCol, 12);
+ expect(bpt.location!.column, 12);
}
expect(
(await service.removeBreakpoint(isolateId, bpt.id!)).type, 'Success');
diff --git a/pkg/vm_service/test/breakpoint_async_break_test.dart b/pkg/vm_service/test/breakpoint_async_break_test.dart
index d0c2443..b83e6ad 100644
--- a/pkg/vm_service/test/breakpoint_async_break_test.dart
+++ b/pkg/vm_service/test/breakpoint_async_break_test.dart
@@ -9,7 +9,8 @@
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
-const int LINE = 18;
+const int LINE = 19;
+const int COL = 7;
// Issue: https://github.com/dart-lang/sdk/issues/36622
Future<void> testMain() async {
@@ -62,7 +63,10 @@
expect(futureBpt.resolved, isTrue);
expect(
script.getLineNumberFromTokenPos(futureBpt.location!.tokenPos), LINE);
- expect(script.getColumnNumberFromTokenPos(futureBpt.location!.tokenPos), 7);
+ expect(futureBpt.location!.line, LINE);
+ expect(
+ script.getColumnNumberFromTokenPos(futureBpt.location!.tokenPos), COL);
+ expect(futureBpt.location!.column, COL);
// Remove the breakpoints.
expect((await service.removeBreakpoint(isolateId, futureBpt.id!)).type,
diff --git a/pkg/vm_service/test/debugging_test.dart b/pkg/vm_service/test/debugging_test.dart
index 1ddee02..cf56e3e 100644
--- a/pkg/vm_service/test/debugging_test.dart
+++ b/pkg/vm_service/test/debugging_test.dart
@@ -91,6 +91,7 @@
final SourceLocation location = bpt.location;
expect(location.script!.id, script.id);
expect(script.getLineNumberFromTokenPos(location.tokenPos!), 16);
+ expect(location.line, 16);
isolate = await service.getIsolate(isolateId);
expect(isolate.breakpoints!.length, 1);
@@ -103,13 +104,12 @@
final isolateId = isolateRef.id!;
final stack = await service.getStack(isolateId);
expect(stack.frames!.length, greaterThanOrEqualTo(1));
-
- Script script = (await service.getObject(
- isolateId, stack.frames![0].location!.script!.id!)) as Script;
+ final location = stack.frames![0].location!;
+ Script script =
+ (await service.getObject(isolateId, location.script!.id!)) as Script;
expect(script.uri, endsWith('debugging_test.dart'));
- expect(
- script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
- 16);
+ expect(script.getLineNumberFromTokenPos(location.tokenPos!), 16);
+ expect(location.line, 16);
},
// Stepping
@@ -136,13 +136,12 @@
final isolateId = isolateRef.id!;
final stack = await service.getStack(isolateId);
expect(stack.frames!.length, greaterThanOrEqualTo(1));
-
- final Script script = (await service.getObject(
- isolateId, stack.frames![0].location!.script!.id!)) as Script;
+ final location = stack.frames![0].location!;
+ final Script script =
+ (await service.getObject(isolateId, location.script!.id!)) as Script;
expect(script.uri, endsWith('debugging_test.dart'));
- expect(
- script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
- 17);
+ expect(script.getLineNumberFromTokenPos(location.tokenPos!), 17);
+ expect(location.line, 17);
},
// Remove breakpoint
(VmService service, IsolateRef isolateRef) async {
@@ -214,6 +213,7 @@
(await service.getObject(isolateId, bpt.location.script.id)) as Script;
expect(script.uri, endsWith('debugging_test.dart'));
expect(script.getLineNumberFromTokenPos(bpt.location.tokenPos), 14);
+ expect(bpt.location.line, 14);
// Refresh isolate state.
isolate = await service.getIsolate(isolateId);
@@ -226,13 +226,12 @@
final isolateId = isolateRef.id!;
final stack = await service.getStack(isolateId);
expect(stack.frames!.length, greaterThanOrEqualTo(1));
-
- final Script script = (await service.getObject(
- isolateId, stack.frames![0].location!.script!.id!)) as Script;
+ final location = stack.frames![0].location!;
+ final Script script =
+ (await service.getObject(isolateId, location.script!.id!)) as Script;
expect(script.uri, endsWith('debugging_test.dart'));
- expect(
- script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
- 14);
+ expect(script.getLineNumberFromTokenPos(location.tokenPos!), 14);
+ expect(location.line, 14);
},
];
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 1eccda2..0ac05bf 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -706,13 +706,6 @@
char** error);
/**
- * An isolate unhandled exception callback function.
- *
- * This callback has been DEPRECATED.
- */
-typedef void (*Dart_IsolateUnhandledExceptionCallback)(Dart_Handle error);
-
-/**
* An isolate shutdown callback function.
*
* This callback, provided by the embedder, is called before the vm
diff --git a/runtime/lib/ffi.cc b/runtime/lib/ffi.cc
index 2c54160..e1a6b24 100644
--- a/runtime/lib/ffi.cc
+++ b/runtime/lib/ffi.cc
@@ -44,7 +44,7 @@
#define DEFINE_NATIVE_ENTRY_LOAD(type) \
DEFINE_NATIVE_ENTRY(Ffi_load##type, 0, 2) { UNREACHABLE(); }
-CLASS_LIST_FFI_NUMERIC(DEFINE_NATIVE_ENTRY_LOAD)
+CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(DEFINE_NATIVE_ENTRY_LOAD)
#undef DEFINE_NATIVE_ENTRY_LOAD
DEFINE_NATIVE_ENTRY(Ffi_loadPointer, 1, 2) {
@@ -57,7 +57,7 @@
#define DEFINE_NATIVE_ENTRY_STORE(type) \
DEFINE_NATIVE_ENTRY(Ffi_store##type, 0, 3) { UNREACHABLE(); }
-CLASS_LIST_FFI_NUMERIC(DEFINE_NATIVE_ENTRY_STORE)
+CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(DEFINE_NATIVE_ENTRY_STORE)
#undef DEFINE_NATIVE_ENTRY_STORE
DEFINE_NATIVE_ENTRY(Ffi_storePointer, 0, 3) {
diff --git a/runtime/lib/vmservice.cc b/runtime/lib/vmservice.cc
index b99a955..16725ec 100644
--- a/runtime/lib/vmservice.cc
+++ b/runtime/lib/vmservice.cc
@@ -129,10 +129,13 @@
return Object::null();
}
-DEFINE_NATIVE_ENTRY(VMService_ListenStream, 0, 1) {
+DEFINE_NATIVE_ENTRY(VMService_ListenStream, 0, 2) {
#ifndef PRODUCT
GET_NON_NULL_NATIVE_ARGUMENT(String, stream_id, arguments->NativeArgAt(0));
- bool result = Service::ListenStream(stream_id.ToCString());
+ GET_NON_NULL_NATIVE_ARGUMENT(Bool, include_privates,
+ arguments->NativeArgAt(1));
+ bool result =
+ Service::ListenStream(stream_id.ToCString(), include_privates.value());
return Bool::Get(result).ptr();
#else
return Object::null();
diff --git a/runtime/observatory/lib/service_common.dart b/runtime/observatory/lib/service_common.dart
index 236343c..5c62c48 100644
--- a/runtime/observatory/lib/service_common.dart
+++ b/runtime/observatory/lib/service_common.dart
@@ -149,7 +149,11 @@
return new Future.error(exception);
}
String serial = (_requestSerial++).toString();
- var request = new _WebSocketRequest(method, params);
+ var request = new _WebSocketRequest(method, <String, dynamic>{
+ ...params,
+ // Include internal response data.
+ '_includePrivateMembers': true,
+ });
if ((_webSocket != null) && _webSocket!.isOpen) {
// Already connected, send request immediately.
_sendRequest(serial, request);
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 048b1e4..d9e8b70 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
final result = await vm.invokeRpcNoUpgrade('getVersion', {});
expect(result['type'], 'Version');
expect(result['major'], 3);
- expect(result['minor'], 55);
+ expect(result['minor'], 56);
expect(result['_privateMajor'], 0);
expect(result['_privateMinor'], 0);
},
diff --git a/runtime/observatory_2/lib/service_common.dart b/runtime/observatory_2/lib/service_common.dart
index b61f4a0..d6eba9b 100644
--- a/runtime/observatory_2/lib/service_common.dart
+++ b/runtime/observatory_2/lib/service_common.dart
@@ -149,7 +149,11 @@
return new Future.error(exception);
}
String serial = (_requestSerial++).toString();
- var request = new _WebSocketRequest(method, params);
+ var request = new _WebSocketRequest(method, <String, dynamic>{
+ ...params,
+ // Include internal response data.
+ '_includePrivateMembers': true,
+ });
if ((_webSocket != null) && _webSocket.isOpen) {
// Already connected, send request immediately.
_sendRequest(serial, request);
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index a3c7061..4e398bd 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
final result = await vm.invokeRpcNoUpgrade('getVersion', {});
expect(result['type'], equals('Version'));
expect(result['major'], equals(3));
- expect(result['minor'], equals(55));
+ expect(result['minor'], equals(56));
expect(result['_privateMajor'], equals(0));
expect(result['_privateMinor'], equals(0));
},
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index ca3d03c..69ed79e 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -361,7 +361,7 @@
V(VMService_OnStart, 0) \
V(VMService_OnExit, 0) \
V(VMService_OnServerAddressChange, 1) \
- V(VMService_ListenStream, 1) \
+ V(VMService_ListenStream, 2) \
V(VMService_CancelStream, 1) \
V(VMService_RequestAssets, 0) \
V(VMService_DecodeAssets, 1) \
@@ -375,7 +375,6 @@
V(Ffi_loadUint16, 2) \
V(Ffi_loadUint32, 2) \
V(Ffi_loadUint64, 2) \
- V(Ffi_loadIntPtr, 2) \
V(Ffi_loadFloat, 2) \
V(Ffi_loadDouble, 2) \
V(Ffi_loadPointer, 2) \
@@ -388,7 +387,6 @@
V(Ffi_storeUint16, 3) \
V(Ffi_storeUint32, 3) \
V(Ffi_storeUint64, 3) \
- V(Ffi_storeIntPtr, 3) \
V(Ffi_storeFloat, 3) \
V(Ffi_storeDouble, 3) \
V(Ffi_storePointer, 3) \
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 9b647b3..6edd6b9 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -152,12 +152,8 @@
V(Float) \
V(Double)
-#define CLASS_LIST_FFI_NUMERIC(V) \
- CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(V) \
- V(IntPtr)
-
#define CLASS_LIST_FFI_TYPE_MARKER(V) \
- CLASS_LIST_FFI_NUMERIC(V) \
+ CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(V) \
V(Void) \
V(Handle) \
V(Bool)
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index ac49f39..8902c9b 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -368,8 +368,6 @@
case kFfiInt64Cid:
case kFfiUint64Cid:
return kInt64;
- case kFfiIntPtrCid:
- return compiler::target::kWordSize == 4 ? kInt32 : kInt64;
case kFfiFloatCid:
return kFloat;
case kFfiDoubleCid:
diff --git a/runtime/vm/compiler/ffi/recognized_method.cc b/runtime/vm/compiler/ffi/recognized_method.cc
index 323fcc8..a0a6594 100644
--- a/runtime/vm/compiler/ffi/recognized_method.cc
+++ b/runtime/vm/compiler/ffi/recognized_method.cc
@@ -30,9 +30,6 @@
return kTypedDataInt64ArrayCid;
case kFfiUint64Cid:
return kTypedDataUint64ArrayCid;
- case kFfiIntPtrCid:
- return target::kWordSize == 4 ? kTypedDataInt32ArrayCid
- : kTypedDataInt64ArrayCid;
case kPointerCid:
return target::kWordSize == 4 ? kTypedDataUint32ArrayCid
: kTypedDataUint64ArrayCid;
@@ -78,7 +75,7 @@
case MethodRecognizer::kFfiLoad##type: \
case MethodRecognizer::kFfiStore##type: \
return kFfi##type##Cid;
- CLASS_LIST_FFI_NUMERIC(LOAD_STORE)
+ CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(LOAD_STORE)
#undef LOAD_STORE
case MethodRecognizer::kFfiLoadFloatUnaligned:
case MethodRecognizer::kFfiStoreFloatUnaligned:
@@ -105,7 +102,7 @@
case MethodRecognizer::kFfiLoad##type: \
case MethodRecognizer::kFfiStore##type: \
return kAlignedAccess;
- CLASS_LIST_FFI_NUMERIC(LOAD_STORE)
+ CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(LOAD_STORE)
LOAD_STORE(Pointer)
#undef LOAD_STORE
case MethodRecognizer::kFfiLoadFloatUnaligned:
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index dba179a..44a85cb 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -833,7 +833,6 @@
case MethodRecognizer::kFfiLoadUint16:
case MethodRecognizer::kFfiLoadUint32:
case MethodRecognizer::kFfiLoadUint64:
- case MethodRecognizer::kFfiLoadIntPtr:
case MethodRecognizer::kFfiLoadFloat:
case MethodRecognizer::kFfiLoadFloatUnaligned:
case MethodRecognizer::kFfiLoadDouble:
@@ -847,7 +846,6 @@
case MethodRecognizer::kFfiStoreUint16:
case MethodRecognizer::kFfiStoreUint32:
case MethodRecognizer::kFfiStoreUint64:
- case MethodRecognizer::kFfiStoreIntPtr:
case MethodRecognizer::kFfiStoreFloat:
case MethodRecognizer::kFfiStoreFloatUnaligned:
case MethodRecognizer::kFfiStoreDouble:
@@ -1352,7 +1350,6 @@
case MethodRecognizer::kFfiLoadUint16:
case MethodRecognizer::kFfiLoadUint32:
case MethodRecognizer::kFfiLoadUint64:
- case MethodRecognizer::kFfiLoadIntPtr:
case MethodRecognizer::kFfiLoadFloat:
case MethodRecognizer::kFfiLoadFloatUnaligned:
case MethodRecognizer::kFfiLoadDouble:
@@ -1431,7 +1428,6 @@
case MethodRecognizer::kFfiStoreUint16:
case MethodRecognizer::kFfiStoreUint32:
case MethodRecognizer::kFfiStoreUint64:
- case MethodRecognizer::kFfiStoreIntPtr:
case MethodRecognizer::kFfiStoreFloat:
case MethodRecognizer::kFfiStoreFloatUnaligned:
case MethodRecognizer::kFfiStoreDouble:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 5cb46fc..eb93990 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -201,7 +201,6 @@
V(::, _loadUint16, FfiLoadUint16, 0x0cd660ab) \
V(::, _loadUint32, FfiLoadUint32, 0xf66e9416) \
V(::, _loadUint64, FfiLoadUint64, 0x0506018d) \
- V(::, _loadIntPtr, FfiLoadIntPtr, 0xebd9b43e) \
V(::, _loadFloat, FfiLoadFloat, 0xf8d9845d) \
V(::, _loadFloatUnaligned, FfiLoadFloatUnaligned, 0xc8c8dfff) \
V(::, _loadDouble, FfiLoadDouble, 0xf70cc619) \
@@ -217,7 +216,6 @@
V(::, _storeUint16, FfiStoreUint16, 0xe2fdae9f) \
V(::, _storeUint32, FfiStoreUint32, 0xe5d7ec86) \
V(::, _storeUint64, FfiStoreUint64, 0xe2d935fa) \
- V(::, _storeIntPtr, FfiStoreIntPtr, 0x080266a8) \
V(::, _storeFloat, FfiStoreFloat, 0x6484f07e) \
V(::, _storeFloatUnaligned, FfiStoreFloatUnaligned, 0x600a9203) \
V(::, _storeDouble, FfiStoreDouble, 0x42998c64) \
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index dfac508..1d6e8ac 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -37,7 +37,9 @@
param_values_(NULL),
num_params_(0),
offset_(0),
- count_(-1) {
+ count_(-1),
+ include_private_members_(true),
+ ignore_object_depth_(0) {
ObjectIdRing* ring = NULL;
Isolate* isolate = Isolate::Current();
if (isolate != NULL) {
@@ -90,6 +92,10 @@
"request %s\n",
Dart::UptimeMillis(), main_port, isolate_name, method_);
}
+ const char* kIncludePrivateMembersKey = "_includePrivateMembers";
+ if (HasParam(kIncludePrivateMembersKey)) {
+ include_private_members_ = ParamIs(kIncludePrivateMembersKey, "true");
+ }
buffer()->Printf("{\"jsonrpc\":\"2.0\", \"result\":");
}
@@ -368,49 +374,61 @@
PrintProperty("id", id_zone_->GetServiceId(o));
}
+#define PRIVATE_NAME_CHECK() \
+ if (!IsAllowableKey(name) || ignore_object_depth_ > 0) return
+
void JSONStream::PrintProperty(const char* name, const ServiceEvent* event) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(event);
}
void JSONStream::PrintProperty(const char* name, Breakpoint* bpt) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(bpt);
}
void JSONStream::PrintProperty(const char* name, TokenPosition tp) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(tp);
}
void JSONStream::PrintProperty(const char* name, Metric* metric) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(metric);
}
void JSONStream::PrintProperty(const char* name, MessageQueue* queue) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(queue);
}
void JSONStream::PrintProperty(const char* name, Isolate* isolate) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(isolate);
}
void JSONStream::PrintProperty(const char* name,
const TimelineEvent* timeline_event) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(timeline_event);
}
void JSONStream::PrintProperty(const char* name,
const TimelineEventBlock* timeline_event_block) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(timeline_event_block);
}
void JSONStream::PrintfProperty(const char* name, const char* format, ...) {
+ PRIVATE_NAME_CHECK();
va_list args;
va_start(args, format);
writer_.VPrintfProperty(name, format, args);
@@ -462,11 +480,13 @@
}
void JSONStream::PrintProperty(const char* name, const Object& o, bool ref) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValue(o, ref);
}
void JSONStream::PrintPropertyVM(const char* name, bool ref) {
+ PRIVATE_NAME_CHECK();
PrintPropertyName(name);
PrintValueVM(ref);
}
@@ -503,6 +523,13 @@
if (end_token_pos.IsReal()) {
location.AddProperty("endTokenPos", end_token_pos);
}
+ intptr_t line = -1;
+ intptr_t column = -1;
+ // Add line and column information if token_pos is real.
+ if (script.GetTokenLocation(token_pos, &line, &column)) {
+ location.AddProperty("line", line);
+ location.AddProperty("column", column);
+ }
}
void JSONObject::AddLocation(const BreakpointLocation* bpt_loc) const {
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index a00f266..5b37379 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.h
@@ -9,6 +9,7 @@
#include "platform/allocation.h"
#include "platform/text_buffer.h"
#include "vm/json_writer.h"
+#include "vm/os.h"
#include "vm/service.h"
#include "vm/token_position.h"
@@ -102,6 +103,18 @@
void set_reply_port(Dart_Port port);
+ bool include_private_members() const { return include_private_members_; }
+ void set_include_private_members(bool include_private_members) {
+ include_private_members_ = include_private_members;
+ }
+
+ bool IsAllowableKey(const char* key) {
+ if (include_private_members_) {
+ return true;
+ }
+ return *key != '_';
+ }
+
void SetParams(const char** param_keys,
const char** param_values,
intptr_t num_params);
@@ -167,15 +180,41 @@
void PostNullReply(Dart_Port port);
void OpenObject(const char* property_name = NULL) {
+ if (ignore_object_depth_ > 0 ||
+ (property_name != nullptr && !IsAllowableKey(property_name))) {
+ ignore_object_depth_++;
+ return;
+ }
writer_.OpenObject(property_name);
}
- void CloseObject() { writer_.CloseObject(); }
- void UncloseObject() { writer_.UncloseObject(); }
+ void CloseObject() {
+ if (ignore_object_depth_ > 0) {
+ ignore_object_depth_--;
+ return;
+ }
+ writer_.CloseObject();
+ }
+ void UncloseObject() {
+ // This should be updated to handle unclosing a private object if we need
+ // to handle that case, which we don't currently.
+ writer_.UncloseObject();
+ }
void OpenArray(const char* property_name = NULL) {
+ if (ignore_object_depth_ > 0 ||
+ (property_name != nullptr && !IsAllowableKey(property_name))) {
+ ignore_object_depth_++;
+ return;
+ }
writer_.OpenArray(property_name);
}
- void CloseArray() { writer_.CloseArray(); }
+ void CloseArray() {
+ if (ignore_object_depth_ > 0) {
+ ignore_object_depth_--;
+ return;
+ }
+ writer_.CloseArray();
+ }
void PrintValueNull() { writer_.PrintValueNull(); }
void PrintValueBool(bool b) { writer_.PrintValueBool(b); }
@@ -211,46 +250,67 @@
void PrintServiceId(const Object& o);
+#define PRIVATE_NAME_CHECK() \
+ if (!IsAllowableKey(name) || ignore_object_depth_ > 0) { \
+ return; \
+ }
+
void PrintPropertyBool(const char* name, bool b) {
+ PRIVATE_NAME_CHECK();
writer_.PrintPropertyBool(name, b);
}
void PrintProperty(const char* name, intptr_t i) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty(name, i);
}
void PrintProperty64(const char* name, int64_t i) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty64(name, i);
}
void PrintPropertyTimeMillis(const char* name, int64_t millis) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty64(name, millis);
}
void PrintPropertyTimeMicros(const char* name, int64_t micros) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty64(name, micros);
}
void PrintProperty(const char* name, double d) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty(name, d);
}
void PrintPropertyBase64(const char* name,
const uint8_t* bytes,
intptr_t length) {
+ PRIVATE_NAME_CHECK();
writer_.PrintPropertyBase64(name, bytes, length);
}
void PrintProperty(const char* name, const char* s) {
+ PRIVATE_NAME_CHECK();
writer_.PrintProperty(name, s);
}
bool PrintPropertyStr(const char* name,
const String& s,
intptr_t offset,
intptr_t count) {
+ if (!IsAllowableKey(name)) {
+ return false;
+ }
return writer_.PrintPropertyStr(name, s, offset, count);
}
void PrintPropertyNoEscape(const char* name, const char* s) {
+ PRIVATE_NAME_CHECK();
writer_.PrintPropertyNoEscape(name, s);
}
void PrintfProperty(const char* name, const char* format, ...)
PRINTF_ATTRIBUTE(3, 4);
void VPrintfProperty(const char* name, const char* format, va_list args) {
+ PRIVATE_NAME_CHECK();
writer_.VPrintfProperty(name, format, args);
}
+
+#undef PRIVATE_NAME_CHECK
+
void PrintProperty(const char* name, const Object& o, bool ref = true);
void PrintProperty(const char* name, const ServiceEvent* event);
@@ -285,7 +345,8 @@
intptr_t offset_;
intptr_t count_;
int64_t setup_time_micros_;
-
+ bool include_private_members_;
+ intptr_t ignore_object_depth_;
friend class JSONObject;
friend class JSONArray;
friend class TimelineEvent;
diff --git a/runtime/vm/json_test.cc b/runtime/vm/json_test.cc
index ed619c2..672369c 100644
--- a/runtime/vm/json_test.cc
+++ b/runtime/vm/json_test.cc
@@ -182,7 +182,8 @@
"Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"Null\",\"location\":{"
"\"type\":\"SourceLocation\",\"script\":{\"type\":\"@Script\","
"\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core\\/null.dart\",\"_"
- "kind\":\"kernel\"},\"tokenPos\":925,\"endTokenPos\":1165},\"library\":{"
+ "kind\":\"kernel\"},\"tokenPos\":925,\"endTokenPos\":1165,\"line\":23,"
+ "\"column\":1},\"library\":{"
"\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\",\"name\":\"dart."
"core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\",\"fixedId\":true,"
"\"id\":\"\",\"valueAsString\":\"null\"},{\"object_key\":{\"type\":\"@"
@@ -190,7 +191,8 @@
"\"fixedId\":true,\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"dart:core\\/null.dart\",\"_kind\":\"kernel\"},"
- "\"tokenPos\":925,\"endTokenPos\":1165},\"library\":{\"type\":\"@"
+ "\"tokenPos\":925,\"endTokenPos\":1165,\"line\":23,\"column\":1},"
+ "\"library\":{\"type\":\"@"
"Library\",\"fixedId\":true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":"
"\"dart:core\"}},\"kind\":\"Null\",\"fixedId\":true,\"id\":\"\","
"\"valueAsString\":\"null\"}}]",
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 3cb390d..fa5e68f 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -417,7 +417,8 @@
&Service::timeline_stream, &Service::profiler_stream,
};
-bool Service::ListenStream(const char* stream_id) {
+bool Service::ListenStream(const char* stream_id,
+ bool include_private_members) {
if (FLAG_trace_service) {
OS::PrintErr("vm-service: starting stream '%s'\n", stream_id);
}
@@ -425,6 +426,7 @@
for (intptr_t i = 0; i < num_streams; i++) {
if (strcmp(stream_id, streams_[i]->id()) == 0) {
streams_[i]->set_enabled(true);
+ streams_[i]->set_include_private_members(include_private_members);
return true;
}
}
@@ -1215,7 +1217,7 @@
}
void Service::HandleEvent(ServiceEvent* event, bool enter_safepoint) {
- if (event->stream_info() != NULL && !event->stream_info()->enabled()) {
+ if (event->stream_info() != nullptr && !event->stream_info()->enabled()) {
if (FLAG_warn_on_pause_with_no_debugger && event->IsPause()) {
// If we are about to pause a running program which has no
// debugger connected, tell the user about it.
@@ -1223,7 +1225,7 @@
}
// Ignore events when no one is listening to the event stream.
return;
- } else if (event->stream_info() != NULL &&
+ } else if (event->stream_info() != nullptr &&
FLAG_warn_on_pause_with_no_debugger && event->IsPause()) {
ReportPauseOnConsole(event);
}
@@ -1231,8 +1233,12 @@
return;
}
JSONStream js;
+ if (event->stream_info() != nullptr) {
+ js.set_include_private_members(
+ event->stream_info()->include_private_members());
+ }
const char* stream_id = event->stream_id();
- ASSERT(stream_id != NULL);
+ ASSERT(stream_id != nullptr);
{
JSONObject jsobj(&js);
jsobj.AddProperty("jsonrpc", "2.0");
@@ -1548,6 +1554,31 @@
}
}
+static const MethodParameter* const
+ set_stream_include_private_members_params[] = {
+ NO_ISOLATE_PARAMETER,
+ new BoolParameter("includePrivateMembers", true),
+ nullptr,
+};
+
+static void SetStreamIncludePrivateMembers(Thread* thread, JSONStream* js) {
+ const char* stream_id = js->LookupParam("streamId");
+ if (stream_id == nullptr) {
+ PrintMissingParamError(js, "streamId");
+ return;
+ }
+ bool include_private_members =
+ BoolParameter::Parse(js->LookupParam("includePrivateMembers"), false);
+ intptr_t num_streams = sizeof(streams_) / sizeof(streams_[0]);
+ for (intptr_t i = 0; i < num_streams; i++) {
+ if (strcmp(stream_id, streams_[i]->id()) == 0) {
+ streams_[i]->set_include_private_members(include_private_members);
+ break;
+ }
+ }
+ PrintSuccess(js);
+}
+
static void ActOnIsolateGroup(JSONStream* js,
std::function<void(IsolateGroup*)> visitor) {
const String& prefix =
@@ -5679,6 +5710,8 @@
set_library_debuggable_params },
{ "setName", SetName,
set_name_params },
+ { "_setStreamIncludePrivateMembers", SetStreamIncludePrivateMembers,
+ set_stream_include_private_members_params },
{ "setTraceClassAllocation", SetTraceClassAllocation,
set_trace_class_allocation_params },
{ "setVMName", SetVMName,
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 97baa4b..6bf1e40 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
namespace dart {
#define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 55
+#define SERVICE_PROTOCOL_MINOR_VERSION 56
class Array;
class EmbedderServiceHandler;
@@ -68,16 +68,23 @@
class StreamInfo {
public:
- explicit StreamInfo(const char* id) : id_(id), enabled_(false) {}
+ explicit StreamInfo(const char* id)
+ : id_(id), enabled_(false), include_private_members_(false) {}
const char* id() const { return id_; }
void set_enabled(bool value) { enabled_ = value; }
bool enabled() const { return enabled_; }
+ void set_include_private_members(bool value) {
+ include_private_members_ = value;
+ }
+ bool include_private_members() const { return include_private_members_; }
+
private:
const char* id_;
bool enabled_;
+ bool include_private_members_;
};
class Service : public AllStatic {
@@ -174,7 +181,7 @@
static StreamInfo timeline_stream;
static StreamInfo profiler_stream;
- static bool ListenStream(const char* stream_id);
+ static bool ListenStream(const char* stream_id, bool include_privates);
static void CancelStream(const char* stream_id);
static ObjectPtr RequestAssets();
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 2c22e5f..64125ef 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1,8 +1,8 @@
-# Dart VM Service Protocol 3.55
+# Dart VM Service Protocol 3.56
> Please post feedback to the [observatory-discuss group][discuss-list]
-This document describes of _version 3.55_ of the Dart VM Service Protocol. This
+This document describes of _version 3.56_ of the Dart VM Service Protocol. This
protocol is used to communicate with a running Dart Virtual Machine.
To use the Service Protocol, start the VM with the *--observe* flag.
@@ -3878,6 +3878,14 @@
// The last token of the location if this is a range.
int endTokenPos [optional];
+
+ // The line associated with this location. Only provided for non-synthetic
+ // token positions.
+ int line [optional];
+
+ // The column associated with this location. Only provided for non-synthetic
+ // token positions.
+ int column [optional];
}
```
@@ -4319,5 +4327,6 @@
3.53 | Added `setIsolatePauseMode` RPC.
3.54 | Added `CpuSamplesEvent`, updated `cpuSamples` property on `Event` to have type `CpuSamplesEvent`.
3.55 | Added `streamCpuSamplesWithUserTag` RPC.
+3.56 | Added optional `line` and `column` properties to `SourceLocation`.
[discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index 2670ac6..b1af934 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -541,7 +541,8 @@
"\"_intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
- "\"tokenPos\":0,\"endTokenPos\":11}},\"count\":1}]}]}],"
+ "\"tokenPos\":0,\"endTokenPos\":11,\"line\":1,\"column\":1}},\"count\":1}"
+ "]}]}],"
// One script in the script table.
"\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\","
@@ -602,7 +603,8 @@
"\"script\":{\"type\":\"@Script\","
"\"fixedId\":true,\"id\":\"\","
"\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":0,\"endTokenPos\":27},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":0,\"endTokenPos\":27,\"line\":1,"
+ "\"column\":1},"
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}},"
@@ -614,7 +616,8 @@
"\"script\":{\"type\":\"@Script\","
"\"fixedId\":true,\"id\":\"\","
"\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":0,\"endTokenPos\":27},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":0,\"endTokenPos\":27,\"line\":1,"
+ "\"column\":1},"
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
"},\"_kind\":\"RegularFunction\","
@@ -624,7 +627,8 @@
"\"location\":{\"type\":\"SourceLocation\","
"\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":17,\"endTokenPos\":25}},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":17,\"endTokenPos\":25,\"line\":2,"
+ "\"column\":3}},"
"\"count\":2},"
@@ -635,7 +639,8 @@
"\"script\":{\"type\":\"@Script\","
"\"fixedId\":true,\"id\":\"\","
"\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":29,\"endTokenPos\":58},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":29,\"endTokenPos\":58,\"line\":4,"
+ "\"column\":1},"
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}},"
@@ -647,7 +652,8 @@
"\"script\":{\"type\":\"@Script\","
"\"fixedId\":true,\"id\":\"\","
"\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":29,\"endTokenPos\":58},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":29,\"endTokenPos\":58,\"line\":4,"
+ "\"column\":1},"
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
"},\"_kind\":\"RegularFunction\","
@@ -657,7 +663,8 @@
"\"location\":{\"type\":\"SourceLocation\","
"\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\","
- "\"_kind\":\"kernel\"},\"tokenPos\":48,\"endTokenPos\":56}},"
+ "\"_kind\":\"kernel\"},\"tokenPos\":48,\"endTokenPos\":56,\"line\":5,"
+ "\"column\":3}},"
"\"count\":1}]}]}],"
@@ -713,7 +720,8 @@
"intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
- "\"tokenPos\":0,\"endTokenPos\":11}},\"count\":1}]}],\"coverage\":{"
+ "\"tokenPos\":0,\"endTokenPos\":11,\"line\":1,\"column\":1}},\"count\":1}"
+ "]}],\"coverage\":{"
"\"hits\":[26,37],\"misses\":[]}}],"
// One script in the script table.
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index 73d08b7..cec0bfe 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -334,10 +334,6 @@
external int _loadUint64(Object typedDataBase, int offsetInBytes);
@pragma("vm:recognized", "other")
-@pragma("vm:external-name", "Ffi_loadIntPtr")
-external int _loadIntPtr(Object typedDataBase, int offsetInBytes);
-
-@pragma("vm:recognized", "other")
external int _loadAbiSpecificInt<T extends AbiSpecificInteger>(
Object typedDataBase, int offsetInBytes);
@@ -407,10 +403,6 @@
external void _storeUint64(Object typedDataBase, int offsetInBytes, int value);
@pragma("vm:recognized", "other")
-@pragma("vm:external-name", "Ffi_storeIntPtr")
-external void _storeIntPtr(Object typedDataBase, int offsetInBytes, int value);
-
-@pragma("vm:recognized", "other")
external int _storeAbiSpecificInt<T extends AbiSpecificInteger>(
Object typedDataBase, int offsetInBytes, int value);
@@ -476,9 +468,6 @@
Pointer<Uint64> _elementAtUint64(Pointer<Uint64> pointer, int index) =>
Pointer.fromAddress(pointer.address + 8 * index);
-Pointer<IntPtr> _elementAtIntPtr(Pointer<IntPtr> pointer, int index) =>
- Pointer.fromAddress(pointer.address + _intPtrSize * index);
-
Pointer<Float> _elementAtFloat(Pointer<Float> pointer, int index) =>
Pointer.fromAddress(pointer.address + 4 * index);
@@ -696,21 +685,6 @@
}
}
-extension IntPtrPointer on Pointer<IntPtr> {
- @patch
- int get value => _loadIntPtr(this, 0);
-
- @patch
- set value(int value) => _storeIntPtr(this, 0, value);
-
- @patch
- int operator [](int index) => _loadIntPtr(this, _intPtrSize * index);
-
- @patch
- operator []=(int index, int value) =>
- _storeIntPtr(this, _intPtrSize * index, value);
-}
-
extension FloatPointer on Pointer<Float> {
@patch
double get value => _loadFloat(this, 0);
@@ -883,20 +857,6 @@
}
}
-extension IntPtrArray on Array<IntPtr> {
- @patch
- int operator [](int index) {
- _checkIndex(index);
- return _loadIntPtr(_typedDataBase, _intPtrSize * index);
- }
-
- @patch
- operator []=(int index, int value) {
- _checkIndex(index);
- return _storeIntPtr(_typedDataBase, _intPtrSize * index, value);
- }
-}
-
extension FloatArray on Array<Float> {
@patch
double operator [](int index) {
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index b8673b1..e4a9357 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -125,9 +125,9 @@
}
void addAll(Map<K, V> other) {
- for (K key in other.keys) {
- this[key] = other[key] as V;
- }
+ other.forEach((K key, V value) {
+ this[key] = value;
+ });
}
bool containsValue(Object? value) {
diff --git a/sdk/lib/ffi/ffi.dart b/sdk/lib/ffi/ffi.dart
index eba4ea8..a94f104 100644
--- a/sdk/lib/ffi/ffi.dart
+++ b/sdk/lib/ffi/ffi.dart
@@ -448,50 +448,6 @@
external Uint64List asTypedList(int length);
}
-/// Extension on [Pointer] specialized for the type argument [IntPtr].
-extension IntPtrPointer on Pointer<IntPtr> {
- /// The 32 or 64-bit two's complement integer at [address].
- ///
- /// On 32-bit platforms this is a 32-bit integer, and on 64-bit platforms
- /// this is a 64-bit integer.
- ///
- /// On 32-bit platforms a Dart integer is truncated to 32 bits (as if by
- /// `.toSigned(32)`) before being stored, and the 32-bit value is
- /// sign-extended when it is loaded.
- ///
- /// On 32-bit platforms the [address] must be 4-byte aligned, and on 64-bit
- /// platforms the [address] must be 8-byte aligned.
- external int get value;
-
- external void set value(int value);
-
- /// The 32 or 64-bit two's complement integer at `address + (4 or 8) * index`.
- ///
- /// On 32-bit platforms this is a 32-bit integer, and on 64-bit platforms
- /// this is a 64-bit integer.
- ///
- /// On 32-bit platforms a Dart integer is truncated to 32 bits (as if by
- /// `.toSigned(32)`) before being stored, and the 32-bit value is
- /// sign-extended when it is loaded.
- ///
- /// On 32-bit platforms the [address] must be 4-byte aligned, and on 64-bit
- /// platforms the [address] must be 8-byte aligned.
- external int operator [](int index);
-
- /// The 32 or 64-bit two's complement integer at `address + (4 or 8) * index`.
- ///
- /// On 32-bit platforms this is a 32-bit integer, and on 64-bit platforms
- /// this is a 64-bit integer.
- ///
- /// On 32-bit platforms a Dart integer is truncated to 32 bits (as if by
- /// `.toSigned(32)`) before being stored, and the 32-bit value is
- /// sign-extended when it is loaded.
- ///
- /// On 32-bit platforms the [address] must be 4-byte aligned, and on 64-bit
- /// platforms the [address] must be 8-byte aligned.
- external void operator []=(int index, int value);
-}
-
/// Extension on [Pointer] specialized for the type argument [Float].
extension FloatPointer on Pointer<Float> {
/// The float at [address].
@@ -633,13 +589,6 @@
external void operator []=(int index, int value);
}
-/// Bounds checking indexing methods on [Array]s of [IntPtr].
-extension IntPtrArray on Array<IntPtr> {
- external int operator [](int index);
-
- external void operator []=(int index, int value);
-}
-
/// Bounds checking indexing methods on [Array]s of [Float].
extension FloatArray on Array<Float> {
external double operator [](int index);
diff --git a/sdk/lib/ffi/native_type.dart b/sdk/lib/ffi/native_type.dart
index 217a68a..01a68475 100644
--- a/sdk/lib/ffi/native_type.dart
+++ b/sdk/lib/ffi/native_type.dart
@@ -102,7 +102,27 @@
///
/// [IntPtr] is not constructible in the Dart code and serves purely as marker
/// in type signatures.
-class IntPtr extends _NativeInteger {
+@AbiSpecificIntegerMapping({
+ Abi.androidArm: Int32(),
+ Abi.androidArm64: Int64(),
+ Abi.androidIA32: Int32(),
+ Abi.androidX64: Int64(),
+ Abi.fuchsiaArm64: Int64(),
+ Abi.fuchsiaX64: Int64(),
+ Abi.iosArm: Int32(),
+ Abi.iosArm64: Int64(),
+ Abi.iosX64: Int64(),
+ Abi.linuxArm: Int32(),
+ Abi.linuxArm64: Int64(),
+ Abi.linuxIA32: Int32(),
+ Abi.linuxX64: Int64(),
+ Abi.macosArm64: Int64(),
+ Abi.macosX64: Int64(),
+ Abi.windowsArm64: Int64(),
+ Abi.windowsIA32: Int32(),
+ Abi.windowsX64: Int64(),
+})
+class IntPtr extends AbiSpecificInteger {
const IntPtr();
}
diff --git a/sdk/lib/vmservice/vmservice.dart b/sdk/lib/vmservice/vmservice.dart
index 5af3cfd..ae16c86 100644
--- a/sdk/lib/vmservice/vmservice.dart
+++ b/sdk/lib/vmservice/vmservice.dart
@@ -549,7 +549,9 @@
return encodeRpcError(message, kStreamAlreadySubscribed);
}
if (!_isAnyClientSubscribed(streamId)) {
- if (!serviceStreams.contains(streamId) && !_vmListenStream(streamId)) {
+ final includePrivates = message.params['_includePrivateMembers'] == true;
+ if (!serviceStreams.contains(streamId) &&
+ !_vmListenStream(streamId, includePrivates)) {
return encodeRpcError(message, kInvalidParams,
details: "streamListen: invalid 'streamId' parameter: ${streamId}");
}
@@ -831,7 +833,7 @@
/// Subscribe to a service stream.
@pragma("vm:external-name", "VMService_ListenStream")
-external bool _vmListenStream(String streamId);
+external bool _vmListenStream(String streamId, bool include_privates);
/// Cancel a subscription to a service stream.
@pragma("vm:external-name", "VMService_CancelStream")
diff --git a/tools/VERSION b/tools/VERSION
index 7e3b57f..df09db5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 3
+PRERELEASE 4
PRERELEASE_PATCH 0
\ No newline at end of file