Version 3.0.0-360.0.dev
Merge 2459634762075a640e76f57440d050bf2e8e00a7 into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57b4052..64cd46a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -163,12 +163,21 @@
- `jsify` is now permissive and has inverse semantics to `dartify`.
- `jsify` and `dartify` both handle types they understand natively more
efficiently.
+- Signature of `callMethod` has been aligned with the other methods and
+ now takes `Object` instead of `String`.
### Tools
#### Web Dev Compiler (DDC)
- Removed deprecated command line flags `-k`, `--kernel`, and `--dart-sdk`.
+#### Dart2js
+
+- Cleanup related to [#46100](https://github.com/dart-lang/sdk/issues/46100):
+ the internal dart2js snapshot fails unless it is called from a supported
+ interface, such as `dart compile js`, `flutter build`, or
+ `build_web_compilers`. This is not expected to be a visible change.
+
#### Formatter
* Format `sync*` and `async*` functions with `=>` bodies.
diff --git a/pkg/analyzer/TRIAGE.md b/pkg/analyzer/TRIAGE.md
index 8b039c1..83bb51b 100644
--- a/pkg/analyzer/TRIAGE.md
+++ b/pkg/analyzer/TRIAGE.md
@@ -58,10 +58,10 @@
### P2
-* Incorrect analysis errors or warnings, on edge cases with simple workaround
+* Incorrect analysis errors, on edge cases with simple workaround
* EXAMPLE: Disabling the error or warning 'fixes' the issue and unblocks
users.
-* Incorrect analysis infos/hints, on edge cases
+* Incorrect analysis warnings, on edge cases
* Incorrect resolution of symbols or libraries, edge cases only with workarounds
* Incorrect data from analyzer API, edge cases without workaround
* Automation resulting in incorrect code, edge cases
@@ -75,8 +75,8 @@
* Uncaught exceptions caught by a fuzzer, but believed to be theoretical
situations only
-* Incorrect analysis errors or warnings, theoretical
-* Incorrect analysis infos/hints, on edge cases with workaround
+* Incorrect analysis errors, theoretical
+* Incorrect analysis warnings, on edge cases with workaround
* Incorrect resolution of symbols or libraries, theoretical
* Incorrect data from analyzer API, edge case with workaround available
* Performance regression impacting edge cases with workaround or without
@@ -89,7 +89,7 @@
### P4
-* Incorrect analysis infos/hints, theoretical
+* Incorrect analysis warnings, theoretical
* Incorrect data from analyzer API, theoretical
* Theoretical performance problems
* An enhancement that may have some evidence that it isn't a good idea to
@@ -122,8 +122,7 @@
* "corrupted code" - Modification of source code in such a way that it is
more than just a bit wrong or having some symbols that don't exist, but is
not valid Dart and would be painful to manually correct.
-* "diagnostic" - An error, warning, hint, or lint generated by the analyzer
- or linter.
+* "diagnostic" - An error, warning, or lint generated by the analyzer.
* "incorrect code" - Modification of code in a way that is known to be wrong,
but would be trivial to figure out how to fix for the human using the tool.
* "key users" - Flutter, Pub, Fuchsia, Dart, Google/1P
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_options.dart b/pkg/analyzer/lib/dart/analysis/analysis_options.dart
index 05fbbaf..ddeab65 100644
--- a/pkg/analyzer/lib/dart/analysis/analysis_options.dart
+++ b/pkg/analyzer/lib/dart/analysis/analysis_options.dart
@@ -35,8 +35,8 @@
/// analysis.
List<String> get excludePatterns;
- /// Return `true` if analysis is to generate hint results (e.g. type inference
- /// based information and pub best practices).
+ /// Return `true` if analysis is to generate hint results (e.g. best practices
+ /// and analysis based on certain annotations).
bool get hint;
/// Return `true` if analysis is to generate lint warnings.
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index 207f15a..e34dad3 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -24,7 +24,7 @@
/// Create an error config for the given error code map.
/// For example:
/// new ErrorConfig({'missing_return' : 'error'});
- /// will create a processor config that turns `missing_return` hints into
+ /// will create a processor config that turns `missing_return` warnings into
/// errors.
ErrorConfig(YamlNode? codeMap) {
_processMap(codeMap);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index eede372..accd399 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -250,7 +250,7 @@
);
}
- /// Compute diagnostics in [units], including errors and warnings, hints,
+ /// Compute diagnostics in [units], including errors and warnings,
/// lints, and a few other cases.
void _computeDiagnostics(Map<FileState, CompilationUnitImpl> units) {
units.forEach((file, unit) {
@@ -274,7 +274,7 @@
}
var usedElements = UsedLocalElements.merge(usedLocalElements);
units.forEach((file, unit) {
- _computeHints(
+ _computeWarnings(
file,
unit,
usedImportedElements: usedImportedElements,
@@ -322,85 +322,6 @@
}
}
- void _computeHints(
- FileState file,
- CompilationUnit unit, {
- required List<UsedImportedElements> usedImportedElements,
- required UsedLocalElements usedElements,
- }) {
- AnalysisErrorListener errorListener = _getErrorListener(file);
- ErrorReporter errorReporter = _getErrorReporter(file);
-
- if (!_libraryElement.isNonNullableByDefault) {
- unit.accept(
- LegacyDeadCodeVerifier(
- errorReporter,
- typeSystem: _typeSystem,
- ),
- );
- }
-
- UnicodeTextVerifier(errorReporter).verify(unit, file.content);
-
- unit.accept(DeadCodeVerifier(errorReporter));
-
- unit.accept(
- BestPracticesVerifier(
- errorReporter,
- _typeProvider,
- _libraryElement,
- unit,
- file.content,
- declaredVariables: _declaredVariables,
- typeSystem: _typeSystem,
- inheritanceManager: _inheritance,
- analysisOptions: _analysisOptions,
- workspacePackage: _library.file.workspacePackage,
- ),
- );
-
- unit.accept(OverrideVerifier(
- _inheritance,
- _libraryElement,
- errorReporter,
- ));
-
- TodoFinder(errorReporter).findIn(unit);
- LanguageVersionOverrideVerifier(errorReporter).verify(unit);
-
- // Verify imports.
- {
- ImportsVerifier verifier = ImportsVerifier();
- verifier.addImports(unit);
- usedImportedElements.forEach(verifier.removeUsedElements);
- verifier.generateDuplicateExportHints(errorReporter);
- verifier.generateDuplicateImportHints(errorReporter);
- verifier.generateDuplicateShownHiddenNameHints(errorReporter);
- verifier.generateUnusedImportHints(errorReporter);
- verifier.generateUnusedShownNameHints(errorReporter);
- verifier.generateUnnecessaryImportHints(
- errorReporter, usedImportedElements);
- }
-
- // Unused local elements.
- {
- UnusedLocalElementsVerifier visitor = UnusedLocalElementsVerifier(
- errorListener, usedElements, _inheritance, _libraryElement);
- unit.accept(visitor);
- }
-
- //
- // Find code that uses features from an SDK version that does not satisfy
- // the SDK constraints specified in analysis options.
- //
- var sdkVersionConstraint = _analysisOptions.sdkVersionConstraint;
- if (sdkVersionConstraint != null) {
- SdkConstraintVerifier verifier = SdkConstraintVerifier(
- errorReporter, _libraryElement, _typeProvider, sdkVersionConstraint);
- unit.accept(verifier);
- }
- }
-
void _computeLints(
FileState file,
LinterContextUnit currentUnit,
@@ -478,6 +399,85 @@
unit.accept(FfiVerifier(_typeSystem, errorReporter));
}
+ void _computeWarnings(
+ FileState file,
+ CompilationUnit unit, {
+ required List<UsedImportedElements> usedImportedElements,
+ required UsedLocalElements usedElements,
+ }) {
+ AnalysisErrorListener errorListener = _getErrorListener(file);
+ ErrorReporter errorReporter = _getErrorReporter(file);
+
+ if (!_libraryElement.isNonNullableByDefault) {
+ unit.accept(
+ LegacyDeadCodeVerifier(
+ errorReporter,
+ typeSystem: _typeSystem,
+ ),
+ );
+ }
+
+ UnicodeTextVerifier(errorReporter).verify(unit, file.content);
+
+ unit.accept(DeadCodeVerifier(errorReporter));
+
+ unit.accept(
+ BestPracticesVerifier(
+ errorReporter,
+ _typeProvider,
+ _libraryElement,
+ unit,
+ file.content,
+ declaredVariables: _declaredVariables,
+ typeSystem: _typeSystem,
+ inheritanceManager: _inheritance,
+ analysisOptions: _analysisOptions,
+ workspacePackage: _library.file.workspacePackage,
+ ),
+ );
+
+ unit.accept(OverrideVerifier(
+ _inheritance,
+ _libraryElement,
+ errorReporter,
+ ));
+
+ TodoFinder(errorReporter).findIn(unit);
+ LanguageVersionOverrideVerifier(errorReporter).verify(unit);
+
+ // Verify imports.
+ {
+ ImportsVerifier verifier = ImportsVerifier();
+ verifier.addImports(unit);
+ usedImportedElements.forEach(verifier.removeUsedElements);
+ verifier.generateDuplicateExportWarnings(errorReporter);
+ verifier.generateDuplicateImportWarnings(errorReporter);
+ verifier.generateDuplicateShownHiddenNameWarnings(errorReporter);
+ verifier.generateUnusedImportHints(errorReporter);
+ verifier.generateUnusedShownNameHints(errorReporter);
+ verifier.generateUnnecessaryImportHints(
+ errorReporter, usedImportedElements);
+ }
+
+ // Unused local elements.
+ {
+ UnusedLocalElementsVerifier visitor = UnusedLocalElementsVerifier(
+ errorListener, usedElements, _inheritance, _libraryElement);
+ unit.accept(visitor);
+ }
+
+ //
+ // Find code that uses features from an SDK version that does not satisfy
+ // the SDK constraints specified in analysis options.
+ //
+ var sdkVersionConstraint = _analysisOptions.sdkVersionConstraint;
+ if (sdkVersionConstraint != null) {
+ SdkConstraintVerifier verifier = SdkConstraintVerifier(
+ errorReporter, _libraryElement, _typeProvider, sdkVersionConstraint);
+ unit.accept(verifier);
+ }
+ }
+
/// Return a subset of the given [errors] that are not marked as ignored in
/// the [file].
List<AnalysisError> _filterIgnoredErrors(
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index c693202..3adb6dc 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -794,10 +794,10 @@
// If the subtype relation goes the other way, allow the implicit downcast.
if (isSubtypeOf(toType, fromType)) {
- // TODO(leafp,jmesserly): we emit warnings/hints for these in
- // src/task/strong/checker.dart, which is a bit inconsistent. That
- // code should be handled into places that use isAssignableTo, such as
- // ErrorVerifier.
+ // TODO(leafp,jmesserly): we emit warnings for these in
+ // `src/task/strong/checker.dart`, which is a bit inconsistent. That code
+ // should be handled into places that use `isAssignableTo`, such as
+ // [ErrorVerifier].
return true;
}
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 5b2cb5e..5cfaea2 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -292,8 +292,9 @@
}
} else {
// Something other than a declaration was annotated. Whatever this is,
- // it probably warrants a Hint, but this has not been specified on
- // visibleForTemplate or visibleForTesting, so leave it alone for now.
+ // it probably warrants a Warning, but this has not been specified on
+ // `visibleForTemplate` or `visibleForTesting`, so leave it alone for
+ // now.
}
}
@@ -412,8 +413,6 @@
}
try {
- // Commented out until we decide that we want this hint in the analyzer
- // checkForOverrideEqualsButNotHashCode(node);
_checkForImmutable(node);
_checkForInvalidSealedSuperclass(node);
super.visitClassDeclaration(node);
@@ -444,11 +443,22 @@
}
@override
+ void visitConstantPattern(ConstantPattern node) {
+ if (node.expression.isDoubleNan) {
+ _errorReporter.reportErrorForNode(
+ WarningCode.UNNECESSARY_NAN_COMPARISON_FALSE,
+ node,
+ );
+ }
+ super.visitConstantPattern(node);
+ }
+
+ @override
void visitConstructorDeclaration(ConstructorDeclaration node) {
var element = node.declaredElement as ConstructorElementImpl;
if (!_isNonNullableByDefault && element.isFactory) {
if (node.body is BlockFunctionBody) {
- // Check the block for a return statement, if not, create the hint.
+ // Check the block for a return statement.
if (!ExitDetector.exits(node.body)) {
_errorReporter.reportErrorForNode(
WarningCode.MISSING_RETURN, node, [node.returnType.name]);
@@ -718,8 +728,6 @@
_inDoNotStoreMember = true;
}
try {
- // This was determined to not be a good hint, see: dartbug.com/16029
- //checkForOverridingPrivateMember(node);
_checkForMissingReturn(node.body, node);
_mustCallSuperVerifier.checkMethodDeclaration(node);
_checkForUnnecessaryNoSuchMethod(node);
@@ -764,7 +772,7 @@
@override
void visitMethodInvocation(MethodInvocation node) {
_deprecatedVerifier.methodInvocation(node);
- _checkForNullAwareHints(node, node.operator);
+ _checkForNullAwareWarnings(node, node.operator);
_errorHandlerVerifier.verifyMethodInvocation(node);
_nullSafeApiVerifier.methodInvocation(node);
super.visitMethodInvocation(node);
@@ -832,7 +840,7 @@
@override
void visitPropertyAccess(PropertyAccess node) {
- _checkForNullAwareHints(node, node.operator);
+ _checkForNullAwareWarnings(node, node.operator);
super.visitPropertyAccess(node);
}
@@ -894,14 +902,15 @@
}
}
- /// Check for the passed is expression for the unnecessary type check hint
- /// codes as well as null checks expressed using an is expression.
+ /// Checks for the passed [IsExpression] for the unnecessary type check
+ /// warning codes as well as null checks expressed using an
+ /// [IsExpression].
///
- /// @param node the is expression to check
- /// @return `true` if and only if a hint code is generated on the passed node
- /// See [HintCode.TYPE_CHECK_IS_NOT_NULL], [HintCode.TYPE_CHECK_IS_NULL],
- /// [HintCode.UNNECESSARY_TYPE_CHECK_TRUE], and
- /// [HintCode.UNNECESSARY_TYPE_CHECK_FALSE].
+ /// Returns `true` if a warning code is generated on [node].
+ /// See [WarningCode.TYPE_CHECK_IS_NOT_NULL],
+ /// [WarningCode.TYPE_CHECK_IS_NULL],
+ /// [WarningCode.UNNECESSARY_TYPE_CHECK_TRUE], and
+ /// [WarningCode.UNNECESSARY_TYPE_CHECK_FALSE].
bool _checkAllTypeChecks(IsExpression node) {
var leftNode = node.expression;
var rightNode = node.type;
@@ -910,8 +919,8 @@
void report() {
_errorReporter.reportErrorForNode(
node.notOperator == null
- ? HintCode.UNNECESSARY_TYPE_CHECK_TRUE
- : HintCode.UNNECESSARY_TYPE_CHECK_FALSE,
+ ? WarningCode.UNNECESSARY_TYPE_CHECK_TRUE
+ : WarningCode.UNNECESSARY_TYPE_CHECK_FALSE,
node,
);
}
@@ -1050,7 +1059,7 @@
///
/// If [node] is marked with [immutable] or inherits from a class or mixin
/// marked with [immutable], this function searches the fields of [node] and
- /// its superclasses, reporting a hint if any non-final instance fields are
+ /// its superclasses, reporting a warning if any non-final instance fields are
/// found.
void _checkForImmutable(NamedCompilationUnitMember node) {
/// Return `true` if the given class [element] is annotated with the
@@ -1274,15 +1283,10 @@
);
}
- bool isDoubleNan(Expression expression) =>
- expression is PrefixedIdentifier &&
- expression.prefix.name == 'double' &&
- expression.identifier.name == 'nan';
-
void checkLeftRight(ErrorCode errorCode) {
- if (isDoubleNan(node.leftOperand)) {
+ if (node.leftOperand.isDoubleNan) {
reportStartEnd(errorCode, node.leftOperand, node.operator);
- } else if (isDoubleNan(node.rightOperand)) {
+ } else if (node.rightOperand.isDoubleNan) {
reportStartEnd(errorCode, node.operator, node.rightOperand);
}
}
@@ -1352,10 +1356,10 @@
if (constructorName.name != null) {
fullConstructorName = '$fullConstructorName.${constructorName.name}';
}
- var hint = node.keyword?.keyword == Keyword.NEW
+ var warning = node.keyword?.keyword == Keyword.NEW
? WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW
: WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR;
- _errorReporter.reportErrorForNode(hint, node, [fullConstructorName]);
+ _errorReporter.reportErrorForNode(warning, node, [fullConstructorName]);
}
}
@@ -1385,13 +1389,10 @@
return false;
}
- /// Generate a hint for functions or methods that have a return type, but do
- /// not have a return statement on all branches. At the end of blocks with no
- /// return, Dart implicitly returns `null`. Avoiding these implicit returns
- /// is considered a best practice.
- ///
- /// Note: for async functions/methods, this hint only applies when the
- /// function has a return type that Future<Null> is not assignable to.
+ /// Generates a warning for functions that have a potentially non-nullable
+ /// return type, but do not have a return statement on all branches. At the
+ /// end of blocks with no return, Dart implicitly returns `null`. Avoiding
+ /// these implicit returns is considered a best practice.
///
/// See [WarningCode.MISSING_RETURN].
void _checkForMissingReturn(FunctionBody body, AstNode functionNode) {
@@ -1459,8 +1460,8 @@
}
}
- /// Produce several null-aware related hints.
- void _checkForNullAwareHints(Expression node, Token? operator) {
+ /// Produce several null-aware related warnings.
+ void _checkForNullAwareWarnings(Expression node, Token? operator) {
if (_isNonNullableByDefault) {
return;
}
@@ -1559,10 +1560,10 @@
}
}
- /// Generate a hint for `noSuchMethod` methods that do nothing except of
- /// calling another `noSuchMethod` that is not defined by `Object`.
+ /// Generates a warning for `noSuchMethod` methods that do nothing except of
+ /// calling another `noSuchMethod` which is not defined by `Object`.
///
- /// Return `true` if and only if a hint code is generated on the passed node.
+ /// Returns `true` if a warning code is generated for [node].
bool _checkForUnnecessaryNoSuchMethod(MethodDeclaration node) {
if (node.name.lexeme != FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
return false;
@@ -2008,18 +2009,18 @@
: _inTemplateSource =
_library.source.fullName.contains(_templateExtension);
- /// Produces a hint if [identifier] is accessed from an invalid location.
+ /// Produces a warning if [identifier] is accessed from an invalid location.
///
- /// In particular, a hint is produced in either of the two following cases:
+ /// In particular, a warning is produced in either of the two following cases:
///
/// * The element associated with [identifier] is annotated with [internal],
/// and is accessed from outside the package in which the element is
/// declared.
/// * The element associated with [identifier] is annotated with [protected],
- /// [visibleForTesting], and/or [visibleForTemplate], and is accessed from a
+ /// [visibleForTesting], and/or `visibleForTemplate`, and is accessed from a
/// location which is invalid as per the rules of each such annotation.
/// Conversely, if the element is annotated with more than one of these
- /// annotations, the access is valid (and no hint will be produced) if it
+ /// annotations, the access is valid (and no warning is produced) if it
/// conforms to the rules of at least one of the annotations.
void verify(SimpleIdentifier identifier) {
if (identifier.inDeclarationContext() || _inCommentReference(identifier)) {
@@ -2375,3 +2376,15 @@
}
}
}
+
+extension on Expression {
+ /// Whether this is the [PrefixedIdentifier] referring to `double.nan`.
+ // TODO(srawlins): This will return the wrong answer for `prefixed.double.nan`
+ // and for `import 'foo.dart' as double; double.nan`.
+ bool get isDoubleNan {
+ final self = this;
+ return self is PrefixedIdentifier &&
+ self.prefix.name == 'double' &&
+ self.identifier.name == 'nan';
+ }
+}
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index bb8bcbd..2ffda66 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -6090,8 +6090,8 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere a @factory annotation is associated with
- /// anything other than a method.
+ /// This warning is generated anywhere a @factory annotation is associated
+ /// with anything other than a method.
static const WarningCode INVALID_FACTORY_ANNOTATION = WarningCode(
'INVALID_FACTORY_ANNOTATION',
"Only methods can be annotated as factories.",
@@ -6113,8 +6113,8 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere an @immutable annotation is associated with
- /// anything other than a class.
+ /// This warning is generated anywhere an @immutable annotation is associated
+ /// with anything other than a class.
static const WarningCode INVALID_IMMUTABLE_ANNOTATION = WarningCode(
'INVALID_IMMUTABLE_ANNOTATION',
"Only classes can be annotated as being immutable.",
@@ -6249,7 +6249,7 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where `@nonVirtual` annotates something
+ /// This warning is generated anywhere where `@nonVirtual` annotates something
/// other than a non-abstract instance member in a class or mixin.
///
/// No Parameters.
@@ -6261,7 +6261,7 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where an instance member annotated with
+ /// This warning is generated anywhere where an instance member annotated with
/// `@nonVirtual` is overridden in a subclass.
///
/// Parameters:
@@ -6274,7 +6274,7 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where `@required` annotates a named
+ /// This warning is generated anywhere where `@required` annotates a named
/// parameter with a default value.
///
/// Parameters:
@@ -6286,7 +6286,7 @@
correctionMessage: "Remove @required.",
);
- /// This hint is generated anywhere where `@required` annotates an optional
+ /// This warning is generated anywhere where `@required` annotates an optional
/// positional parameter.
///
/// Parameters:
@@ -6299,8 +6299,8 @@
correctionMessage: "Remove @required.",
);
- /// This hint is generated anywhere where `@required` annotates a non optional
- /// positional parameter.
+ /// This warning is generated anywhere where `@required` annotates a
+ /// non-optional positional parameter.
///
/// Parameters:
/// 0: the name of the member
@@ -6311,8 +6311,8 @@
correctionMessage: "Remove @required.",
);
- /// This hint is generated anywhere where `@sealed` annotates something other
- /// than a class.
+ /// This warning is generated anywhere where `@sealed` annotates something
+ /// other than a class.
///
/// No parameters.
static const WarningCode INVALID_SEALED_ANNOTATION = WarningCode(
@@ -6330,8 +6330,8 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where a member annotated with `@protected`
- /// is used outside of an instance member of a subclass.
+ /// This warning is generated anywhere where a member annotated with
+ /// `@protected` is used outside of an instance member of a subclass.
///
/// Parameters:
/// 0: the name of the member
@@ -6351,7 +6351,7 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where a member annotated with
+ /// This warning is generated anywhere where a member annotated with
/// `@visibleForTemplate` is used outside of a "template" Dart file.
///
/// Parameters:
@@ -6363,7 +6363,7 @@
"The member '{0}' can only be used within '{1}' or a template library.",
);
- /// This hint is generated anywhere where a member annotated with
+ /// This warning is generated anywhere where a member annotated with
/// `@visibleForTesting` is used outside the defining library, or a test.
///
/// Parameters:
@@ -6376,8 +6376,8 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where a private declaration is annotated
- /// with `@visibleForTemplate` or `@visibleForTesting`.
+ /// This warning is generated anywhere where a private declaration is
+ /// annotated with `@visibleForTemplate` or `@visibleForTesting`.
///
/// Parameters:
/// 0: the name of the member
@@ -6434,8 +6434,8 @@
uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO',
);
- /// Generate a hint for a constructor, function or method invocation where a
- /// required parameter is missing.
+ /// Generates a warning for a constructor, function or method invocation where
+ /// a required parameter is missing.
///
/// Parameters:
/// 0: the name of the parameter
@@ -6445,8 +6445,8 @@
hasPublishedDocs: true,
);
- /// Generate a hint for a constructor, function or method invocation where a
- /// required parameter is missing.
+ /// Generates a warning for a constructor, function or method invocation where
+ /// a required parameter is missing.
///
/// Parameters:
/// 0: the name of the parameter
@@ -6469,7 +6469,7 @@
hasPublishedDocs: true,
);
- /// This hint is generated anywhere where a `@sealed` class is used as a
+ /// This warning is generated anywhere where a `@sealed` class is used as a
/// a superclass constraint of a mixin.
///
/// Parameters:
@@ -6485,7 +6485,7 @@
hasPublishedDocs: true,
);
- /// Generate a hint for classes that inherit from classes annotated with
+ /// Generates a warning for classes that inherit from classes annotated with
/// `@immutable` but that are not immutable.
///
/// Parameters:
@@ -6507,7 +6507,7 @@
hasPublishedDocs: true,
);
- /// Generate a hint for non-const instance creation using a constructor
+ /// Generates a warning for non-const instance creation using a constructor
/// annotated with `@literal`.
///
/// Parameters:
@@ -6520,7 +6520,7 @@
hasPublishedDocs: true,
);
- /// Generate a hint for non-const instance creation (with the `new` keyword)
+ /// Generate a warning for non-const instance creation (with the `new` keyword)
/// using a constructor annotated with `@literal`.
///
/// Parameters:
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index b963c43..70975a7 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -102,21 +102,21 @@
Namespace namespace =
NamespaceBuilder().createExportNamespaceForLibrary(library);
NodeList<SimpleIdentifier> names;
- ErrorCode hintCode;
+ ErrorCode warningCode;
if (combinator is HideCombinator) {
names = combinator.hiddenNames;
- hintCode = WarningCode.UNDEFINED_HIDDEN_NAME;
+ warningCode = WarningCode.UNDEFINED_HIDDEN_NAME;
} else {
names = (combinator as ShowCombinator).shownNames;
- hintCode = WarningCode.UNDEFINED_SHOWN_NAME;
+ warningCode = WarningCode.UNDEFINED_SHOWN_NAME;
}
for (SimpleIdentifier name in names) {
String nameStr = name.name;
Element? element = namespace.get(nameStr);
element ??= namespace.get("$nameStr=");
if (element == null) {
- _errorReporter
- .reportErrorForNode(hintCode, name, [library.identifier, nameStr]);
+ _errorReporter.reportErrorForNode(
+ warningCode, name, [library.identifier, nameStr]);
}
}
}
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index baca24c..9db227a 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -189,7 +189,7 @@
/// otherwise a [HintCode.UNUSED_IMPORT] hint is generated with
/// [generateUnusedImportHints].
///
-/// Additionally, [generateDuplicateImportHints] generates
+/// Additionally, [generateDuplicateImportWarnings] generates
/// [HintCode.DUPLICATE_IMPORT] hints and [HintCode.UNUSED_SHOWN_NAME] hints.
///
/// While this class does not yet have support for an "Organize Imports" action,
@@ -316,9 +316,9 @@
/// Any time after the defining compilation unit has been visited by this
/// visitor, this method can be called to report an
- /// [StaticWarningCode.DUPLICATE_EXPORT] hint for each of the export
+ /// [WarningCode.DUPLICATE_EXPORT] hint for each of the export
/// directives in the [_duplicateExports] list.
- void generateDuplicateExportHints(ErrorReporter errorReporter) {
+ void generateDuplicateExportWarnings(ErrorReporter errorReporter) {
var length = _duplicateExports.length;
for (var i = 0; i < length; i++) {
errorReporter.reportErrorForNode(
@@ -328,9 +328,9 @@
/// Any time after the defining compilation unit has been visited by this
/// visitor, this method can be called to report an
- /// [StaticWarningCode.DUPLICATE_IMPORT] hint for each of the import
+ /// [WarningCode.DUPLICATE_IMPORT] hint for each of the import
/// directives in the [_duplicateImports] list.
- void generateDuplicateImportHints(ErrorReporter errorReporter) {
+ void generateDuplicateImportWarnings(ErrorReporter errorReporter) {
var length = _duplicateImports.length;
for (var i = 0; i < length; i++) {
errorReporter.reportErrorForNode(
@@ -338,13 +338,13 @@
}
}
- /// Report a [StaticWarningCode.DUPLICATE_SHOWN_NAME] and
- /// [StaticWarningCode.DUPLICATE_HIDDEN_NAME] hints for each duplicate shown
- /// or hidden name.
+ /// Report a [WarningCode.DUPLICATE_SHOWN_NAME] and
+ /// [WarningCode.DUPLICATE_HIDDEN_NAME] hints for each duplicate shown or
+ /// hidden name.
///
/// Only call this method after all of the compilation units have been visited
/// by this visitor.
- void generateDuplicateShownHiddenNameHints(ErrorReporter reporter) {
+ void generateDuplicateShownHiddenNameWarnings(ErrorReporter reporter) {
_duplicateHiddenNamesMap.forEach(
(NamespaceDirective directive, List<SimpleIdentifier> identifiers) {
int length = identifiers.length;
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index e477bf6..0be9aef 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -22328,8 +22328,8 @@
INVALID_FACTORY_ANNOTATION:
problemMessage: Only methods can be annotated as factories.
comment: |-
- This hint is generated anywhere a @factory annotation is associated with
- anything other than a method.
+ This warning is generated anywhere a @factory annotation is associated
+ with anything other than a method.
INVALID_FACTORY_METHOD_DECL:
problemMessage: "Factory method '{0}' must have a return type."
comment: |-
@@ -22421,8 +22421,8 @@
INVALID_IMMUTABLE_ANNOTATION:
problemMessage: Only classes can be annotated as being immutable.
comment: |-
- This hint is generated anywhere an @immutable annotation is associated with
- anything other than a class.
+ This warning is generated anywhere an @immutable annotation is associated
+ with anything other than a class.
INVALID_INTERNAL_ANNOTATION:
problemMessage: "Only public elements in a package's private API can be annotated as being internal."
comment: |-
@@ -22631,7 +22631,7 @@
correctionMessage: Try removing '@nonVirtual'.
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where `@nonVirtual` annotates something
+ This warning is generated anywhere where `@nonVirtual` annotates something
other than a non-abstract instance member in a class or mixin.
No Parameters.
@@ -22711,7 +22711,7 @@
problemMessage: "The member '{0}' is declared non-virtual in '{1}' and can't be overridden in subclasses."
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where an instance member annotated with
+ This warning is generated anywhere where an instance member annotated with
`@nonVirtual` is overridden in a subclass.
Parameters:
@@ -22777,7 +22777,7 @@
problemMessage: "The type parameter '{0}' is annotated with @required but only named parameters without a default value can be annotated with it."
correctionMessage: Remove @required.
comment: |-
- This hint is generated anywhere where `@required` annotates a named
+ This warning is generated anywhere where `@required` annotates a named
parameter with a default value.
Parameters:
@@ -22786,7 +22786,7 @@
problemMessage: "Incorrect use of the annotation @required on the optional positional parameter '{0}'. Optional positional parameters cannot be required."
correctionMessage: Remove @required.
comment: |-
- This hint is generated anywhere where `@required` annotates an optional
+ This warning is generated anywhere where `@required` annotates an optional
positional parameter.
Parameters:
@@ -22795,8 +22795,8 @@
problemMessage: "Redundant use of the annotation @required on the required positional parameter '{0}'."
correctionMessage: Remove @required.
comment: |-
- This hint is generated anywhere where `@required` annotates a non optional
- positional parameter.
+ This warning is generated anywhere where `@required` annotates a
+ non-optional positional parameter.
Parameters:
0: the name of the member
@@ -22841,8 +22841,8 @@
INVALID_USE_OF_PROTECTED_MEMBER:
problemMessage: "The member '{0}' can only be used within instance members of subclasses of '{1}'."
comment: |-
- This hint is generated anywhere where a member annotated with `@protected`
- is used outside of an instance member of a subclass.
+ This warning is generated anywhere where a member annotated with
+ `@protected` is used outside of an instance member of a subclass.
Parameters:
0: the name of the member
@@ -22895,7 +22895,7 @@
INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
problemMessage: "The member '{0}' can only be used within '{1}' or a template library."
comment: |-
- This hint is generated anywhere where a member annotated with
+ This warning is generated anywhere where a member annotated with
`@visibleForTemplate` is used outside of a "template" Dart file.
Parameters:
@@ -22905,7 +22905,7 @@
problemMessage: "The member '{0}' can only be used within '{1}' or a test."
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where a member annotated with
+ This warning is generated anywhere where a member annotated with
`@visibleForTesting` is used outside the defining library, or a test.
Parameters:
@@ -22967,8 +22967,8 @@
problemMessage: "The member '{0}' is annotated with '{1}', but this annotation is only meaningful on declarations of public members."
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where a private declaration is annotated
- with `@visibleForTemplate` or `@visibleForTesting`.
+ This warning is generated anywhere where a private declaration is
+ annotated with `@visibleForTemplate` or `@visibleForTesting`.
Parameters:
0: the name of the member
@@ -23117,8 +23117,8 @@
correctionMessage: Try removing the '@sealed' annotation.
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where `@sealed` annotates something other
- than a class.
+ This warning is generated anywhere where `@sealed` annotates something
+ other than a class.
No parameters.
documentation: |-
@@ -23233,8 +23233,8 @@
problemMessage: "The parameter '{0}' is required."
hasPublishedDocs: true
comment: |-
- Generate a hint for a constructor, function or method invocation where a
- required parameter is missing.
+ Generates a warning for a constructor, function or method invocation where
+ a required parameter is missing.
Parameters:
0: the name of the parameter
@@ -23280,8 +23280,8 @@
problemMessage: "The parameter '{0}' is required. {1}."
hasPublishedDocs: true
comment: |-
- Generate a hint for a constructor, function or method invocation where a
- required parameter is missing.
+ Generates a warning for a constructor, function or method invocation where
+ a required parameter is missing.
Parameters:
0: the name of the parameter
@@ -23323,7 +23323,7 @@
correctionMessage: Try composing with this class, or refer to its documentation for more information.
hasPublishedDocs: true
comment: |-
- This hint is generated anywhere where a `@sealed` class is used as a
+ This warning is generated anywhere where a `@sealed` class is used as a
a superclass constraint of a mixin.
Parameters:
@@ -23366,7 +23366,7 @@
problemMessage: "This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: {0}"
hasPublishedDocs: true
comment: |-
- Generate a hint for classes that inherit from classes annotated with
+ Generates a warning for classes that inherit from classes annotated with
`@immutable` but that are not immutable.
Parameters:
@@ -23479,7 +23479,7 @@
correctionMessage: "Try replacing the 'new' keyword with 'const'."
hasPublishedDocs: true
comment: |-
- Generate a hint for non-const instance creation (with the `new` keyword)
+ Generate a warning for non-const instance creation (with the `new` keyword)
using a constructor annotated with `@literal`.
Parameters:
@@ -23489,7 +23489,7 @@
correctionMessage: "Try adding a 'const' keyword."
hasPublishedDocs: true
comment: |-
- Generate a hint for non-const instance creation using a constructor
+ Generates a warning for non-const instance creation using a constructor
annotated with `@literal`.
Parameters:
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart
index 548d352..845ec1d 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart
@@ -15,6 +15,18 @@
@reflectiveTest
class UnnecessaryNanComparisonTest extends PubPackageResolutionTest {
+ test_constantPattern() async {
+ await assertErrorsInCode('''
+void f(List<double> list) {
+ switch (list) {
+ case [double.nan]:
+ }
+}
+''', [
+ error(WarningCode.UNNECESSARY_NAN_COMPARISON_FALSE, 56, 10),
+ ]);
+ }
+
test_equal() async {
await assertErrorsInCode('''
void f(double d) {
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f99409b..2615a08 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -732,13 +732,6 @@
parseCommandLine(handlers, argv);
- if (invoker == null) {
- warning("The 'dart2js' entrypoint script is deprecated, "
- "please use 'dart compile js' instead.");
- } else if (verbose != null && !wantHelp) {
- print("Compiler invoked from: '$invoker'");
- }
-
final diagnostic = diagnosticHandler = FormattingDiagnosticHandler();
if (verbose != null) {
diagnostic.verbose = verbose!;
@@ -778,6 +771,22 @@
helpAndExit(wantHelp, wantVersion, diagnostic.verbose);
}
+ if (invoker == null) {
+ final message = "The 'dart2js' entrypoint script is deprecated, "
+ "please use 'dart compile js' instead.";
+ // Aside from asking for `-h`, dart2js fails when it is invoked from its
+ // snapshot directly and not using the supported workflows. However, we
+ // allow invoking dart2js from Dart sources to support the dart2js team
+ // local workflows and testing.
+ if (!Platform.script.path.endsWith(".dart")) {
+ _fail(message);
+ } else {
+ warning(message);
+ }
+ } else if (verbose != null) {
+ print("Compiler invoked from: '$invoker'");
+ }
+
if (arguments.isEmpty &&
entryUri == null &&
inputDillUri == null &&
diff --git a/pkg/compiler/lib/src/inferrer/work_queue.dart b/pkg/compiler/lib/src/inferrer/work_queue.dart
index e7923d8..9accd91 100644
--- a/pkg/compiler/lib/src/inferrer/work_queue.dart
+++ b/pkg/compiler/lib/src/inferrer/work_queue.dart
@@ -5,40 +5,18 @@
import 'dart:collection' show Queue;
import 'type_graph_nodes.dart';
-const _numBuckets = 2;
-
-/// This function applies a bucket index to each type information.
-///
-/// Current strategy:
-/// Process call sites together effectively splitting intraprocedural type
-/// refinement and local type refinement.
-int _bucketForInfo(TypeInformation info) {
- if (info is! CallSiteTypeInformation) return 0;
- return 1;
-}
-
/// A work queue for the inferrer. It filters out nodes that are tagged as
/// [TypeInformation.doNotEnqueue], as well as ensures through
/// [TypeInformation.inQueue] that a node is in the queue only once at
/// a time.
-///
-/// The queue uses a bucketed approach to allow the inferrer to make progress
-/// on certain categories of types while also ensuring no category is starved
-/// of resources. The queue draws work items from a bucket until it is empty
-/// and then proceeds onto the next bucket with work remaining. This allows
-/// related work items to be processed closer to each other.
class WorkQueue {
- final List<Queue<TypeInformation>> buckets =
- List.generate(_numBuckets, (_) => Queue());
- int _length = 0;
- int _activeBucket = 0;
+ final Queue<TypeInformation> queue = Queue<TypeInformation>();
void add(TypeInformation element) {
if (element.doNotEnqueue) return;
if (element.inQueue) return;
- buckets[_bucketForInfo(element)].addLast(element);
+ queue.addLast(element);
element.inQueue = true;
- _length++;
}
void addAll(Iterable<TypeInformation> all) {
@@ -46,18 +24,12 @@
}
TypeInformation remove() {
- var bucket = buckets[_activeBucket];
- while (bucket.isEmpty) {
- if (++_activeBucket == buckets.length) _activeBucket = 0;
- bucket = buckets[_activeBucket];
- }
- TypeInformation element = bucket.removeFirst();
+ TypeInformation element = queue.removeFirst();
element.inQueue = false;
- _length--;
return element;
}
- bool get isEmpty => _length == 0;
+ bool get isEmpty => queue.isEmpty;
- int get length => _length;
+ int get length => queue.length;
}
diff --git a/pkg/compiler/lib/src/inferrer_experimental/work_queue.dart b/pkg/compiler/lib/src/inferrer_experimental/work_queue.dart
index e7923d8..6e02e81 100644
--- a/pkg/compiler/lib/src/inferrer_experimental/work_queue.dart
+++ b/pkg/compiler/lib/src/inferrer_experimental/work_queue.dart
@@ -24,19 +24,23 @@
///
/// The queue uses a bucketed approach to allow the inferrer to make progress
/// on certain categories of types while also ensuring no category is starved
-/// of resources. The queue draws work items from a bucket until it is empty
-/// and then proceeds onto the next bucket with work remaining. This allows
-/// related work items to be processed closer to each other.
+/// of resources. We grab a "snapshot" of the active bucket and process elements
+/// from it until it is empty. Anything added to the bucket after we have
+/// grabbed the snapshot is not processed immediately. Instead once the snapshot
+/// is empty we move on to the next bucket. By ignoring elements after the
+/// snapshot we prevent the queue from getting stuck on loops within the same
+/// bucket.
class WorkQueue {
final List<Queue<TypeInformation>> buckets =
- List.generate(_numBuckets, (_) => Queue());
+ List.generate(_numBuckets, (_) => Queue(), growable: false);
int _length = 0;
- int _activeBucket = 0;
+ Queue<TypeInformation> _activeQueue = Queue();
+ int _activeBucketIndex = 0;
void add(TypeInformation element) {
if (element.doNotEnqueue) return;
if (element.inQueue) return;
- buckets[_bucketForInfo(element)].addLast(element);
+ buckets[_bucketForInfo(element)].add(element);
element.inQueue = true;
_length++;
}
@@ -46,17 +50,27 @@
}
TypeInformation remove() {
- var bucket = buckets[_activeBucket];
- while (bucket.isEmpty) {
- if (++_activeBucket == buckets.length) _activeBucket = 0;
- bucket = buckets[_activeBucket];
+ while (_activeQueue.isEmpty) {
+ assert(_length != 0);
+ final bucket = buckets[_activeBucketIndex];
+ if (bucket.isNotEmpty) {
+ final tmp = _activeQueue;
+ _activeQueue = buckets[_activeBucketIndex];
+ buckets[_activeBucketIndex] = tmp;
+ }
+ _incrementBucketIndex();
}
- TypeInformation element = bucket.removeFirst();
- element.inQueue = false;
+ final element = _activeQueue.removeFirst();
_length--;
+ element.inQueue = false;
return element;
}
+ void _incrementBucketIndex() {
+ _activeBucketIndex =
+ _activeBucketIndex == buckets.length - 1 ? 0 : _activeBucketIndex + 1;
+ }
+
bool get isEmpty => _length == 0;
int get length => _length;
diff --git a/pkg/compiler/tool/modular_test_suite_helper.dart b/pkg/compiler/tool/modular_test_suite_helper.dart
index 566cf76..66c4861 100644
--- a/pkg/compiler/tool/modular_test_suite_helper.dart
+++ b/pkg/compiler/tool/modular_test_suite_helper.dart
@@ -269,6 +269,7 @@
_dart2jsScript,
Flags.soundNullSafety,
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
// If we have sources, then we aren't building the SDK, otherwise we
// assume we are building the sdk and pass in a full dill.
if (sources.isNotEmpty)
@@ -344,6 +345,7 @@
_dart2jsScript,
// TODO(sigmund): remove this dependency on libraries.json
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
Flags.soundNullSafety,
'${Flags.entryUri}=$fakeRoot${module.mainSource}',
'${Flags.inputDill}=${toUri(module, dillId)}',
@@ -405,6 +407,7 @@
_dart2jsScript,
// TODO(sigmund): remove this dependency on libraries.json
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
Flags.soundNullSafety,
'${Flags.entryUri}=$fakeRoot${module.mainSource}',
'${Flags.inputDill}=${toUri(module, fullDillId)}',
@@ -455,6 +458,7 @@
_dart2jsScript,
// TODO(sigmund): remove this dependency on libraries.json
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
Flags.soundNullSafety,
'${Flags.entryUri}=$fakeRoot${module.mainSource}',
'${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
@@ -509,6 +513,7 @@
'--packages=${sdkRoot.toFilePath()}/$packageConfigJsonPath',
_dart2jsScript,
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
Flags.soundNullSafety,
'${Flags.entryUri}=$fakeRoot${module.mainSource}',
'${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
@@ -563,6 +568,7 @@
'--packages=${sdkRoot.toFilePath()}/$packageConfigJsonPath',
_dart2jsScript,
if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+ if (_options.useSdk) '--invoker=modular_test',
Flags.soundNullSafety,
'${Flags.entryUri}=$fakeRoot${module.mainSource}',
'${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
diff --git a/pkg/js/CHANGELOG.md b/pkg/js/CHANGELOG.md
index 027e056..b580d15 100644
--- a/pkg/js/CHANGELOG.md
+++ b/pkg/js/CHANGELOG.md
@@ -1,6 +1,7 @@
-## 0.6.8
+## 0.6.9-dev
- Remove dependency on `dart:js`.
+- Update SDK lower constraint to 3.0.0-217.0.dev.
- Update SDK upper constraint to 4.0.0.
## 0.6.7
diff --git a/pkg/js/pubspec.yaml b/pkg/js/pubspec.yaml
index fbbe092..b746a97 100644
--- a/pkg/js/pubspec.yaml
+++ b/pkg/js/pubspec.yaml
@@ -1,10 +1,10 @@
name: js
-version: 0.6.8
+version: 0.6.9-dev
description: Annotations to create static Dart interfaces for JavaScript APIs.
repository: https://github.com/dart-lang/sdk/tree/main/pkg/js
environment:
- sdk: ">=2.19.0 <4.0.0"
+ sdk: ">=3.0.0-217.0.dev <4.0.0"
dependencies:
meta: ^1.7.0
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index 4df6db1..2bd4b6b 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -38,7 +38,7 @@
return slots_from_fp;
}
-void StubCodeCompiler::GenerateInitStaticFieldStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInitStaticFieldStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for result.
__ PushRegister(InitStaticFieldABI::kFieldReg);
@@ -49,8 +49,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateInitLateStaticFieldStub(Assembler* assembler,
- bool is_final) {
+void StubCodeCompiler::GenerateInitLateStaticFieldStub(bool is_final) {
const Register kResultReg = InitStaticFieldABI::kResultReg;
const Register kFieldReg = InitStaticFieldABI::kFieldReg;
const Register kAddressReg = InitLateStaticFieldInternalRegs::kAddressReg;
@@ -100,16 +99,15 @@
}
}
-void StubCodeCompiler::GenerateInitLateStaticFieldStub(Assembler* assembler) {
- GenerateInitLateStaticFieldStub(assembler, /*is_final=*/false);
+void StubCodeCompiler::GenerateInitLateStaticFieldStub() {
+ GenerateInitLateStaticFieldStub(/*is_final=*/false);
}
-void StubCodeCompiler::GenerateInitLateFinalStaticFieldStub(
- Assembler* assembler) {
- GenerateInitLateStaticFieldStub(assembler, /*is_final=*/true);
+void StubCodeCompiler::GenerateInitLateFinalStaticFieldStub() {
+ GenerateInitLateStaticFieldStub(/*is_final=*/true);
}
-void StubCodeCompiler::GenerateInitInstanceFieldStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInitInstanceFieldStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for result.
__ PushRegistersInOrder(
@@ -121,8 +119,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateInitLateInstanceFieldStub(Assembler* assembler,
- bool is_final) {
+void StubCodeCompiler::GenerateInitLateInstanceFieldStub(bool is_final) {
const Register kInstanceReg = InitInstanceFieldABI::kInstanceReg;
const Register kFieldReg = InitInstanceFieldABI::kFieldReg;
const Register kAddressReg = InitLateInstanceFieldInternalRegs::kAddressReg;
@@ -196,16 +193,15 @@
}
}
-void StubCodeCompiler::GenerateInitLateInstanceFieldStub(Assembler* assembler) {
- GenerateInitLateInstanceFieldStub(assembler, /*is_final=*/false);
+void StubCodeCompiler::GenerateInitLateInstanceFieldStub() {
+ GenerateInitLateInstanceFieldStub(/*is_final=*/false);
}
-void StubCodeCompiler::GenerateInitLateFinalInstanceFieldStub(
- Assembler* assembler) {
- GenerateInitLateInstanceFieldStub(assembler, /*is_final=*/true);
+void StubCodeCompiler::GenerateInitLateFinalInstanceFieldStub() {
+ GenerateInitLateInstanceFieldStub(/*is_final=*/true);
}
-void StubCodeCompiler::GenerateThrowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateThrowStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for (unused) result.
__ PushRegister(ThrowABI::kExceptionReg);
@@ -213,7 +209,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateReThrowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateReThrowStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for (unused) result.
__ PushRegistersInOrder(
@@ -222,7 +218,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateAssertBooleanStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAssertBooleanStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for (unused) result.
__ PushRegister(AssertBooleanABI::kObjectReg);
@@ -230,7 +226,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateAssertSubtypeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAssertSubtypeStub() {
__ EnterStubFrame();
__ PushRegistersInOrder({AssertSubtypeABI::kInstantiatorTypeArgumentsReg,
AssertSubtypeABI::kFunctionTypeArgumentsReg,
@@ -243,7 +239,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateAssertAssignableStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAssertAssignableStub() {
#if !defined(TARGET_ARCH_IA32)
__ Breakpoint();
#else
@@ -277,8 +273,7 @@
// - InstantiationABI::kResultTypeArgumentsReg: instantiated tav
// Clobbers:
// - InstantiationABI::kScratchReg
-void StubCodeCompiler::GenerateInstantiateTypeArgumentsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateInstantiateTypeArgumentsStub() {
// We only need the offset of the current entry up until we either call
// the runtime or until we retrieve the instantiated type arguments out of it
// to put in the result register, so we use the result register to store it.
@@ -495,8 +490,7 @@
}
void StubCodeCompiler::
- GenerateInstantiateTypeArgumentsMayShareInstantiatorTAStub(
- Assembler* assembler) {
+ GenerateInstantiateTypeArgumentsMayShareInstantiatorTAStub() {
const Register kScratch1Reg = InstantiationABI::kResultTypeArgumentsReg;
const Register kScratch2Reg = InstantiationABI::kScratchReg;
// Return the instantiator type arguments if its nullability is compatible for
@@ -518,11 +512,11 @@
__ Ret();
__ Bind(&cache_lookup);
- GenerateInstantiateTypeArgumentsStub(assembler);
+ GenerateInstantiateTypeArgumentsStub();
}
-void StubCodeCompiler::GenerateInstantiateTypeArgumentsMayShareFunctionTAStub(
- Assembler* assembler) {
+void StubCodeCompiler::
+ GenerateInstantiateTypeArgumentsMayShareFunctionTAStub() {
const Register kScratch1Reg = InstantiationABI::kResultTypeArgumentsReg;
const Register kScratch2Reg = InstantiationABI::kScratchReg;
// Return the function type arguments if its nullability is compatible for
@@ -544,7 +538,7 @@
__ Ret();
__ Bind(&cache_lookup);
- GenerateInstantiateTypeArgumentsStub(assembler);
+ GenerateInstantiateTypeArgumentsStub();
}
static void BuildInstantiateTypeRuntimeCall(Assembler* assembler) {
@@ -626,48 +620,45 @@
BuildInstantiateTypeRuntimeCall(assembler);
}
-void StubCodeCompiler::GenerateInstantiateTypeNonNullableClassTypeParameterStub(
- Assembler* assembler) {
+void StubCodeCompiler::
+ GenerateInstantiateTypeNonNullableClassTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kNonNullable,
/*is_function_parameter=*/false);
}
-void StubCodeCompiler::GenerateInstantiateTypeNullableClassTypeParameterStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateInstantiateTypeNullableClassTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kNullable,
/*is_function_parameter=*/false);
}
-void StubCodeCompiler::GenerateInstantiateTypeLegacyClassTypeParameterStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateInstantiateTypeLegacyClassTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kLegacy,
/*is_function_parameter=*/false);
}
void StubCodeCompiler::
- GenerateInstantiateTypeNonNullableFunctionTypeParameterStub(
- Assembler* assembler) {
+ GenerateInstantiateTypeNonNullableFunctionTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kNonNullable,
/*is_function_parameter=*/true);
}
-void StubCodeCompiler::GenerateInstantiateTypeNullableFunctionTypeParameterStub(
- Assembler* assembler) {
+void StubCodeCompiler::
+ GenerateInstantiateTypeNullableFunctionTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kNullable,
/*is_function_parameter=*/true);
}
-void StubCodeCompiler::GenerateInstantiateTypeLegacyFunctionTypeParameterStub(
- Assembler* assembler) {
+void StubCodeCompiler::
+ GenerateInstantiateTypeLegacyFunctionTypeParameterStub() {
BuildInstantiateTypeParameterStub(assembler, Nullability::kLegacy,
/*is_function_parameter=*/true);
}
-void StubCodeCompiler::GenerateInstantiateTypeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInstantiateTypeStub() {
BuildInstantiateTypeRuntimeCall(assembler);
}
-void StubCodeCompiler::GenerateInstanceOfStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInstanceOfStub() {
__ EnterStubFrame();
__ PushObject(NullObject()); // Make room for the result.
__ PushRegistersInOrder({TypeTestABI::kInstanceReg, TypeTestABI::kDstTypeReg,
@@ -806,16 +797,12 @@
__ Jump(&check_top_type, compiler::Assembler::kNearJump);
}
-void StubCodeCompiler::GenerateTypeIsTopTypeForSubtypingStub(
- Assembler* assembler) {
- GenerateTypeIsTopTypeForSubtyping(assembler,
- /*null_safety=*/false);
+void StubCodeCompiler::GenerateTypeIsTopTypeForSubtypingStub() {
+ GenerateTypeIsTopTypeForSubtyping(assembler, /*null_safety=*/false);
}
-void StubCodeCompiler::GenerateTypeIsTopTypeForSubtypingNullSafeStub(
- Assembler* assembler) {
- GenerateTypeIsTopTypeForSubtyping(assembler,
- /*null_safety=*/true);
+void StubCodeCompiler::GenerateTypeIsTopTypeForSubtypingNullSafeStub() {
+ GenerateTypeIsTopTypeForSubtyping(assembler, /*null_safety=*/true);
}
// Version of Instance::NullIsAssignableTo(other, inst_tav, fun_tav) used when
@@ -955,16 +942,12 @@
__ Ret();
}
-void StubCodeCompiler::GenerateNullIsAssignableToTypeStub(
- Assembler* assembler) {
- GenerateNullIsAssignableToType(assembler,
- /*null_safety=*/false);
+void StubCodeCompiler::GenerateNullIsAssignableToTypeStub() {
+ GenerateNullIsAssignableToType(assembler, /*null_safety=*/false);
}
-void StubCodeCompiler::GenerateNullIsAssignableToTypeNullSafeStub(
- Assembler* assembler) {
- GenerateNullIsAssignableToType(assembler,
- /*null_safety=*/true);
+void StubCodeCompiler::GenerateNullIsAssignableToTypeNullSafeStub() {
+ GenerateNullIsAssignableToType(assembler, /*null_safety=*/true);
}
#if !defined(TARGET_ARCH_IA32)
// The <X>TypeTestStubs are used to test whether a given value is of a given
@@ -986,15 +969,14 @@
//
// Note of warning: The caller will not populate CODE_REG and we have therefore
// no access to the pool.
-void StubCodeCompiler::GenerateDefaultTypeTestStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDefaultTypeTestStub() {
__ LoadFromOffset(CODE_REG, THR,
target::Thread::slow_type_test_stub_offset());
__ Jump(FieldAddress(CODE_REG, target::Code::entry_point_offset()));
}
// Used instead of DefaultTypeTestStub when null is assignable.
-void StubCodeCompiler::GenerateDefaultNullableTypeTestStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDefaultNullableTypeTestStub() {
Label done;
// Fast case for 'null'.
@@ -1009,11 +991,11 @@
__ Ret();
}
-void StubCodeCompiler::GenerateTopTypeTypeTestStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateTopTypeTypeTestStub() {
__ Ret();
}
-void StubCodeCompiler::GenerateUnreachableTypeTestStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateUnreachableTypeTestStub() {
__ Breakpoint();
}
@@ -1057,12 +1039,11 @@
__ Ret();
}
-void StubCodeCompiler::GenerateNullableTypeParameterTypeTestStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullableTypeParameterTypeTestStub() {
BuildTypeParameterTypeTestStub(assembler, /*allow_null=*/true);
}
-void StubCodeCompiler::GenerateTypeParameterTypeTestStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateTypeParameterTypeTestStub() {
BuildTypeParameterTypeTestStub(assembler, /*allow_null=*/false);
}
@@ -1086,8 +1067,7 @@
__ Drop(1); // Discard return value.
}
-void StubCodeCompiler::GenerateLazySpecializeTypeTestStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateLazySpecializeTypeTestStub() {
__ LoadFromOffset(CODE_REG, THR,
target::Thread::lazy_specialize_type_test_stub_offset());
__ EnterStubFrame();
@@ -1097,8 +1077,7 @@
}
// Used instead of LazySpecializeTypeTestStub when null is assignable.
-void StubCodeCompiler::GenerateLazySpecializeNullableTypeTestStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateLazySpecializeNullableTypeTestStub() {
Label done;
__ CompareObject(TypeTestABI::kInstanceReg, NullObject());
@@ -1114,7 +1093,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateSlowTypeTestStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSlowTypeTestStub() {
Label done, call_runtime;
if (!FLAG_precompiled_mode) {
@@ -1188,7 +1167,7 @@
#else
// Type testing stubs are not implemented on IA32.
#define GENERATE_BREAKPOINT_STUB(Name) \
- void StubCodeCompiler::Generate##Name##Stub(Assembler* assembler) { \
+ void StubCodeCompiler::Generate##Name##Stub() { \
__ Breakpoint(); \
}
@@ -1204,7 +1183,7 @@
// AllocateClosureABI::kResultReg: new allocated Closure object.
// Clobbered:
// AllocateClosureABI::kScratchReg
-void StubCodeCompiler::GenerateAllocateClosureStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateClosureStub() {
const intptr_t instance_size =
target::RoundedAllocationSize(target::Closure::InstanceSize());
__ EnsureHasClassIdInDEBUG(kFunctionCid, AllocateClosureABI::kFunctionReg,
@@ -1280,7 +1259,7 @@
__ PopRegister(AllocateClosureABI::kFunctionReg);
__ PopRegister(AllocateClosureABI::kResultReg);
ASSERT(target::WillAllocateNewOrRememberedObject(instance_size));
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveStubFrame();
// AllocateClosureABI::kResultReg: new object
@@ -1290,7 +1269,7 @@
// Generates allocation stub for _GrowableList class.
// This stub exists solely for performance reasons: default allocation
// stub is slower as it doesn't use specialized inline allocation.
-void StubCodeCompiler::GenerateAllocateGrowableArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateGrowableArrayStub() {
#if defined(TARGET_ARCH_IA32)
// This stub is not used on IA32 because IA32 version of
// StubCodeCompiler::GenerateAllocationStubForClass uses inline
@@ -1324,7 +1303,7 @@
#endif // defined(TARGET_ARCH_IA32)
}
-void StubCodeCompiler::GenerateAllocateRecordStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateRecordStub() {
const Register result_reg = AllocateRecordABI::kResultReg;
const Register shape_reg = AllocateRecordABI::kShapeReg;
const Register temp_reg = AllocateRecordABI::kTemp1Reg;
@@ -1428,13 +1407,12 @@
__ Drop(1);
__ PopRegister(AllocateRecordABI::kResultReg);
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveStubFrame();
__ Ret();
}
-void StubCodeCompiler::GenerateAllocateSmallRecordStub(Assembler* assembler,
- intptr_t num_fields,
+void StubCodeCompiler::GenerateAllocateSmallRecordStub(intptr_t num_fields,
bool has_named_fields) {
ASSERT(num_fields == 2 || num_fields == 3);
const Register result_reg = AllocateSmallRecordABI::kResultReg;
@@ -1505,31 +1483,30 @@
__ Drop(4);
__ PopRegister(result_reg);
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveStubFrame();
__ Ret();
}
-void StubCodeCompiler::GenerateAllocateRecord2Stub(Assembler* assembler) {
- GenerateAllocateSmallRecordStub(assembler, 2, /*has_named_fields=*/false);
+void StubCodeCompiler::GenerateAllocateRecord2Stub() {
+ GenerateAllocateSmallRecordStub(2, /*has_named_fields=*/false);
}
-void StubCodeCompiler::GenerateAllocateRecord2NamedStub(Assembler* assembler) {
- GenerateAllocateSmallRecordStub(assembler, 2, /*has_named_fields=*/true);
+void StubCodeCompiler::GenerateAllocateRecord2NamedStub() {
+ GenerateAllocateSmallRecordStub(2, /*has_named_fields=*/true);
}
-void StubCodeCompiler::GenerateAllocateRecord3Stub(Assembler* assembler) {
- GenerateAllocateSmallRecordStub(assembler, 3, /*has_named_fields=*/false);
+void StubCodeCompiler::GenerateAllocateRecord3Stub() {
+ GenerateAllocateSmallRecordStub(3, /*has_named_fields=*/false);
}
-void StubCodeCompiler::GenerateAllocateRecord3NamedStub(Assembler* assembler) {
- GenerateAllocateSmallRecordStub(assembler, 3, /*has_named_fields=*/true);
+void StubCodeCompiler::GenerateAllocateRecord3NamedStub() {
+ GenerateAllocateSmallRecordStub(3, /*has_named_fields=*/true);
}
// The UnhandledException class lives in the VM isolate, so it cannot cache
// an allocation stub for itself. Instead, we cache it in the stub code list.
-void StubCodeCompiler::GenerateAllocateUnhandledExceptionStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateUnhandledExceptionStub() {
Thread* thread = Thread::Current();
auto class_table = thread->isolate_group()->class_table();
ASSERT(class_table->HasValidClassAt(kUnhandledExceptionCid));
@@ -1537,27 +1514,25 @@
class_table->At(kUnhandledExceptionCid));
ASSERT(!cls.IsNull());
- GenerateAllocationStubForClass(assembler, nullptr, cls,
- Code::Handle(Code::null()),
+ GenerateAllocationStubForClass(nullptr, cls, Code::Handle(Code::null()),
Code::Handle(Code::null()));
}
#define TYPED_DATA_ALLOCATION_STUB(clazz) \
- void StubCodeCompiler::GenerateAllocate##clazz##Stub(Assembler* assembler) { \
- GenerateAllocateTypedDataArrayStub(assembler, kTypedData##clazz##Cid); \
+ void StubCodeCompiler::GenerateAllocate##clazz##Stub() { \
+ GenerateAllocateTypedDataArrayStub(kTypedData##clazz##Cid); \
}
CLASS_LIST_TYPED_DATA(TYPED_DATA_ALLOCATION_STUB)
#undef TYPED_DATA_ALLOCATION_STUB
-void StubCodeCompiler::GenerateLateInitializationError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateLateInitializationError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
__ PushRegister(LateInitializationErrorABI::kFieldReg);
__ CallRuntime(kLateFieldNotInitializedErrorRuntimeEntry,
/*argument_count=*/1);
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::
late_initialization_error_shared_with_fpu_regs_stub_offset()
@@ -1566,125 +1541,109 @@
/*allow_return=*/false, perform_runtime_call);
}
-void StubCodeCompiler::GenerateLateInitializationErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
- GenerateLateInitializationError(assembler, /*with_fpu_regs=*/false);
+void StubCodeCompiler::
+ GenerateLateInitializationErrorSharedWithoutFPURegsStub() {
+ GenerateLateInitializationError(/*with_fpu_regs=*/false);
}
-void StubCodeCompiler::GenerateLateInitializationErrorSharedWithFPURegsStub(
- Assembler* assembler) {
- GenerateLateInitializationError(assembler, /*with_fpu_regs=*/true);
+void StubCodeCompiler::GenerateLateInitializationErrorSharedWithFPURegsStub() {
+ GenerateLateInitializationError(/*with_fpu_regs=*/true);
}
-void StubCodeCompiler::GenerateNullErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullErrorSharedWithoutFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kNullErrorRuntimeEntry,
+ /*save_fpu_registers=*/false, &kNullErrorRuntimeEntry,
target::Thread::null_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateNullErrorSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullErrorSharedWithFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/true, &kNullErrorRuntimeEntry,
+ /*save_fpu_registers=*/true, &kNullErrorRuntimeEntry,
target::Thread::null_error_shared_with_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateNullArgErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullArgErrorSharedWithoutFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kArgumentNullErrorRuntimeEntry,
+ /*save_fpu_registers=*/false, &kArgumentNullErrorRuntimeEntry,
target::Thread::null_arg_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateNullArgErrorSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullArgErrorSharedWithFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/true, &kArgumentNullErrorRuntimeEntry,
+ /*save_fpu_registers=*/true, &kArgumentNullErrorRuntimeEntry,
target::Thread::null_arg_error_shared_with_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateNullCastErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullCastErrorSharedWithoutFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kNullCastErrorRuntimeEntry,
+ /*save_fpu_registers=*/false, &kNullCastErrorRuntimeEntry,
target::Thread::null_cast_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateNullCastErrorSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNullCastErrorSharedWithFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/true, &kNullCastErrorRuntimeEntry,
+ /*save_fpu_registers=*/true, &kNullCastErrorRuntimeEntry,
target::Thread::null_cast_error_shared_with_fpu_regs_stub_offset(),
/*allow_return=*/false);
}
-void StubCodeCompiler::GenerateStackOverflowSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateStackOverflowSharedWithoutFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false,
- &kInterruptOrStackOverflowRuntimeEntry,
+ /*save_fpu_registers=*/false, &kInterruptOrStackOverflowRuntimeEntry,
target::Thread::stack_overflow_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/true);
}
-void StubCodeCompiler::GenerateStackOverflowSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateStackOverflowSharedWithFPURegsStub() {
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/true,
- &kInterruptOrStackOverflowRuntimeEntry,
+ /*save_fpu_registers=*/true, &kInterruptOrStackOverflowRuntimeEntry,
target::Thread::stack_overflow_shared_with_fpu_regs_stub_offset(),
/*allow_return=*/true);
}
-void StubCodeCompiler::GenerateRangeErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
- GenerateRangeError(assembler, /*with_fpu_regs=*/false);
+void StubCodeCompiler::GenerateRangeErrorSharedWithoutFPURegsStub() {
+ GenerateRangeError(/*with_fpu_regs=*/false);
}
-void StubCodeCompiler::GenerateRangeErrorSharedWithFPURegsStub(
- Assembler* assembler) {
- GenerateRangeError(assembler, /*with_fpu_regs=*/true);
+void StubCodeCompiler::GenerateRangeErrorSharedWithFPURegsStub() {
+ GenerateRangeError(/*with_fpu_regs=*/true);
}
-void StubCodeCompiler::GenerateWriteErrorSharedWithoutFPURegsStub(
- Assembler* assembler) {
- GenerateWriteError(assembler, /*with_fpu_regs=*/false);
+void StubCodeCompiler::GenerateWriteErrorSharedWithoutFPURegsStub() {
+ GenerateWriteError(/*with_fpu_regs=*/false);
}
-void StubCodeCompiler::GenerateWriteErrorSharedWithFPURegsStub(
- Assembler* assembler) {
- GenerateWriteError(assembler, /*with_fpu_regs=*/true);
+void StubCodeCompiler::GenerateWriteErrorSharedWithFPURegsStub() {
+ GenerateWriteError(/*with_fpu_regs=*/true);
}
-void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub() {
__ Breakpoint(); // Marker stub.
}
-void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAsynchronousGapMarkerStub() {
__ Breakpoint(); // Marker stub.
}
-void StubCodeCompiler::GenerateUnknownDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateUnknownDartCodeStub() {
// Enter frame to include caller into the backtrace.
__ EnterStubFrame();
__ Breakpoint(); // Marker stub.
}
-void StubCodeCompiler::GenerateNotLoadedStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateNotLoadedStub() {
__ EnterStubFrame();
__ CallRuntime(kNotLoadedRuntimeEntry, 0);
__ Breakpoint();
}
#define EMIT_BOX_ALLOCATION(Name) \
- void StubCodeCompiler::GenerateAllocate##Name##Stub(Assembler* assembler) { \
+ void StubCodeCompiler::GenerateAllocate##Name##Stub() { \
Label call_runtime; \
if (!FLAG_use_slow_path && FLAG_inline_alloc) { \
__ TryAllocate(compiler::Name##Class(), &call_runtime, \
@@ -1735,13 +1694,13 @@
__ Ret();
}
-void StubCodeCompiler::GenerateBoxDoubleStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateBoxDoubleStub() {
GenerateBoxFpuValueStub(assembler, compiler::DoubleClass(),
kBoxDoubleRuntimeEntry,
&Assembler::StoreUnboxedDouble);
}
-void StubCodeCompiler::GenerateBoxFloat32x4Stub(Assembler* assembler) {
+void StubCodeCompiler::GenerateBoxFloat32x4Stub() {
#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
GenerateBoxFpuValueStub(assembler, compiler::Float32x4Class(),
kBoxFloat32x4RuntimeEntry,
@@ -1751,7 +1710,7 @@
#endif
}
-void StubCodeCompiler::GenerateBoxFloat64x2Stub(Assembler* assembler) {
+void StubCodeCompiler::GenerateBoxFloat64x2Stub() {
#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
GenerateBoxFpuValueStub(assembler, compiler::Float64x2Class(),
kBoxFloat64x2RuntimeEntry,
@@ -1761,7 +1720,7 @@
#endif
}
-void StubCodeCompiler::GenerateDoubleToIntegerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDoubleToIntegerStub() {
__ EnterStubFrame();
__ StoreUnboxedDouble(DoubleToIntegerStubABI::kInputReg, THR,
target::Thread::unboxed_runtime_arg_offset());
@@ -1884,7 +1843,6 @@
}
void StubCodeCompiler::GenerateSuspendStub(
- Assembler* assembler,
bool call_suspend_function,
bool pass_type_arguments,
intptr_t suspend_entry_point_offset_in_thread,
@@ -2140,36 +2098,35 @@
__ Jump(&call_dart);
}
-void StubCodeCompiler::GenerateAwaitStub(Assembler* assembler) {
- GenerateSuspendStub(assembler,
- /*call_suspend_function=*/true,
- /*pass_type_arguments=*/false,
- target::Thread::suspend_state_await_entry_point_offset(),
- target::ObjectStore::suspend_state_await_offset());
+void StubCodeCompiler::GenerateAwaitStub() {
+ GenerateSuspendStub(
+ /*call_suspend_function=*/true,
+ /*pass_type_arguments=*/false,
+ target::Thread::suspend_state_await_entry_point_offset(),
+ target::ObjectStore::suspend_state_await_offset());
}
-void StubCodeCompiler::GenerateAwaitWithTypeCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAwaitWithTypeCheckStub() {
GenerateSuspendStub(
- assembler,
+
/*call_suspend_function=*/true,
/*pass_type_arguments=*/true,
target::Thread::suspend_state_await_with_type_check_entry_point_offset(),
target::ObjectStore::suspend_state_await_with_type_check_offset());
}
-void StubCodeCompiler::GenerateYieldAsyncStarStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateYieldAsyncStarStub() {
GenerateSuspendStub(
- assembler,
+
/*call_suspend_function=*/true,
/*pass_type_arguments=*/false,
target::Thread::suspend_state_yield_async_star_entry_point_offset(),
target::ObjectStore::suspend_state_yield_async_star_offset());
}
-void StubCodeCompiler::GenerateSuspendSyncStarAtStartStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateSuspendSyncStarAtStartStub() {
GenerateSuspendStub(
- assembler,
+
/*call_suspend_function=*/true,
/*pass_type_arguments=*/false,
target::Thread::
@@ -2177,15 +2134,13 @@
target::ObjectStore::suspend_state_suspend_sync_star_at_start_offset());
}
-void StubCodeCompiler::GenerateSuspendSyncStarAtYieldStub(
- Assembler* assembler) {
- GenerateSuspendStub(assembler,
- /*call_suspend_function=*/false,
- /*pass_type_arguments=*/false, -1, -1);
+void StubCodeCompiler::GenerateSuspendSyncStarAtYieldStub() {
+ GenerateSuspendStub(
+ /*call_suspend_function=*/false,
+ /*pass_type_arguments=*/false, -1, -1);
}
void StubCodeCompiler::GenerateInitSuspendableFunctionStub(
- Assembler* assembler,
intptr_t init_entry_point_offset_in_thread,
intptr_t init_function_offset_in_object_store) {
const Register kTypeArgs = InitSuspendableFunctionStubABI::kTypeArgsReg;
@@ -2205,27 +2160,25 @@
__ Ret();
}
-void StubCodeCompiler::GenerateInitAsyncStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInitAsyncStub() {
GenerateInitSuspendableFunctionStub(
- assembler, target::Thread::suspend_state_init_async_entry_point_offset(),
+ target::Thread::suspend_state_init_async_entry_point_offset(),
target::ObjectStore::suspend_state_init_async_offset());
}
-void StubCodeCompiler::GenerateInitAsyncStarStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInitAsyncStarStub() {
GenerateInitSuspendableFunctionStub(
- assembler,
target::Thread::suspend_state_init_async_star_entry_point_offset(),
target::ObjectStore::suspend_state_init_async_star_offset());
}
-void StubCodeCompiler::GenerateInitSyncStarStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInitSyncStarStub() {
GenerateInitSuspendableFunctionStub(
- assembler,
target::Thread::suspend_state_init_sync_star_entry_point_offset(),
target::ObjectStore::suspend_state_init_sync_star_offset());
}
-void StubCodeCompiler::GenerateResumeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateResumeStub() {
const Register kSuspendState = ResumeStubABI::kSuspendStateReg;
const Register kTemp = ResumeStubABI::kTempReg;
const Register kFrameSize = ResumeStubABI::kFrameSizeReg;
@@ -2406,7 +2359,6 @@
}
void StubCodeCompiler::GenerateReturnStub(
- Assembler* assembler,
intptr_t return_entry_point_offset_in_thread,
intptr_t return_function_offset_in_object_store,
intptr_t return_stub_offset_in_thread) {
@@ -2438,32 +2390,29 @@
__ Ret();
}
-void StubCodeCompiler::GenerateReturnAsyncStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateReturnAsyncStub() {
GenerateReturnStub(
- assembler,
target::Thread::suspend_state_return_async_entry_point_offset(),
target::ObjectStore::suspend_state_return_async_offset(),
target::Thread::return_async_stub_offset());
}
-void StubCodeCompiler::GenerateReturnAsyncNotFutureStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateReturnAsyncNotFutureStub() {
GenerateReturnStub(
- assembler,
target::Thread::
suspend_state_return_async_not_future_entry_point_offset(),
target::ObjectStore::suspend_state_return_async_not_future_offset(),
target::Thread::return_async_not_future_stub_offset());
}
-void StubCodeCompiler::GenerateReturnAsyncStarStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateReturnAsyncStarStub() {
GenerateReturnStub(
- assembler,
target::Thread::suspend_state_return_async_star_entry_point_offset(),
target::ObjectStore::suspend_state_return_async_star_offset(),
target::Thread::return_async_star_stub_offset());
}
-void StubCodeCompiler::GenerateAsyncExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAsyncExceptionHandlerStub() {
const Register kSuspendState = AsyncExceptionHandlerStubABI::kSuspendStateReg;
ASSERT(kSuspendState != kExceptionObjectReg);
ASSERT(kSuspendState != kStackTraceObjectReg);
@@ -2514,7 +2463,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateCloneSuspendStateStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneSuspendStateStub() {
const Register kSource = CloneSuspendStateStubABI::kSourceReg;
const Register kDestination = CloneSuspendStateStubABI::kDestinationReg;
const Register kTemp = CloneSuspendStateStubABI::kTempReg;
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index 73e2027..6a6613a 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -48,29 +48,28 @@
using UnresolvedPcRelativeCalls = GrowableArray<UnresolvedPcRelativeCall*>;
-class StubCodeCompiler : public AllStatic {
+class StubCodeCompiler {
public:
+ StubCodeCompiler(Assembler* assembler_) : assembler(assembler_) {}
+
+ Assembler* assembler;
+
#if !defined(TARGET_ARCH_IA32)
- static void GenerateBuildMethodExtractorStub(
- Assembler* assembler,
- const Code& closure_allocation_stub,
- const Code& context_allocation_stub,
- bool generic);
+ void GenerateBuildMethodExtractorStub(const Code& closure_allocation_stub,
+ const Code& context_allocation_stub,
+ bool generic);
#endif
- static void EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers = true);
+ void EnsureIsNewOrRemembered(bool preserve_registers = true);
static ArrayPtr BuildStaticCallsTable(
Zone* zone,
compiler::UnresolvedPcRelativeCalls* unresolved_calls);
-#define STUB_CODE_GENERATE(name) \
- static void Generate##name##Stub(Assembler* assembler);
+#define STUB_CODE_GENERATE(name) void Generate##name##Stub();
VM_STUB_CODE_LIST(STUB_CODE_GENERATE)
#undef STUB_CODE_GENERATE
- static void GenerateAllocationStubForClass(
- Assembler* assembler,
+ void GenerateAllocationStubForClass(
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const dart::Code& allocate_object,
@@ -88,16 +87,13 @@
kCheckExactness,
kIgnoreExactness,
};
- static void GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
- intptr_t num_args,
- const RuntimeEntry& handle_ic_miss,
- Token::Kind kind,
- Optimized optimized,
- CallType type,
- Exactness exactness);
- static void GenerateNArgsCheckInlineCacheStubForEntryKind(
- Assembler* assembler,
+ void GenerateNArgsCheckInlineCacheStub(intptr_t num_args,
+ const RuntimeEntry& handle_ic_miss,
+ Token::Kind kind,
+ Optimized optimized,
+ CallType type,
+ Exactness exactness);
+ void GenerateNArgsCheckInlineCacheStubForEntryKind(
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -105,9 +101,8 @@
CallType type,
Exactness exactness,
CodeEntryKind entry_kind);
- static void GenerateUsageCounterIncrement(Assembler* assembler,
- Register temp_reg);
- static void GenerateOptimizedUsageCounterIncrement(Assembler* assembler);
+ void GenerateUsageCounterIncrement(Register temp_reg);
+ void GenerateOptimizedUsageCounterIncrement();
#if defined(TARGET_ARCH_X64)
static constexpr intptr_t kNativeCallbackTrampolineSize = 10;
@@ -145,8 +140,7 @@
#error What architecture?
#endif
- static void GenerateJITCallbackTrampolines(Assembler* assembler,
- intptr_t next_callback_id);
+ void GenerateJITCallbackTrampolines(intptr_t next_callback_id);
// Calculates the offset (in words) from FP to the provided [cpu_register].
//
@@ -161,64 +155,52 @@
static intptr_t WordOffsetFromFpToCpuRegister(Register cpu_register);
private:
+ DISALLOW_COPY_AND_ASSIGN(StubCodeCompiler);
+
// Common function for generating InitLateStaticField and
// InitLateFinalStaticField stubs.
- static void GenerateInitLateStaticFieldStub(Assembler* assembler,
- bool is_final);
+ void GenerateInitLateStaticFieldStub(bool is_final);
// Common function for generating InitLateInstanceField and
// InitLateFinalInstanceField stubs.
- static void GenerateInitLateInstanceFieldStub(Assembler* assembler,
- bool is_final);
+ void GenerateInitLateInstanceFieldStub(bool is_final);
// Common function for generating Allocate<TypedData>Array stubs.
- static void GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid);
+ void GenerateAllocateTypedDataArrayStub(intptr_t cid);
- static void GenerateAllocateSmallRecordStub(Assembler* assembler,
- intptr_t num_fields,
- bool has_named_fields);
+ void GenerateAllocateSmallRecordStub(intptr_t num_fields,
+ bool has_named_fields);
- static void GenerateSharedStubGeneric(
- Assembler* assembler,
- bool save_fpu_registers,
- intptr_t self_code_stub_offset_from_thread,
- bool allow_return,
- std::function<void()> perform_runtime_call);
+ void GenerateSharedStubGeneric(bool save_fpu_registers,
+ intptr_t self_code_stub_offset_from_thread,
+ bool allow_return,
+ std::function<void()> perform_runtime_call);
// Generates shared slow path stub which saves registers and calls
// [target] runtime entry.
// If [store_runtime_result_in_result_register], then stub puts result into
// SharedSlowPathStubABI::kResultReg.
- static void GenerateSharedStub(
- Assembler* assembler,
- bool save_fpu_registers,
- const RuntimeEntry* target,
- intptr_t self_code_stub_offset_from_thread,
- bool allow_return,
- bool store_runtime_result_in_result_register = false);
+ void GenerateSharedStub(bool save_fpu_registers,
+ const RuntimeEntry* target,
+ intptr_t self_code_stub_offset_from_thread,
+ bool allow_return,
+ bool store_runtime_result_in_result_register = false);
- static void GenerateLateInitializationError(Assembler* assembler,
- bool with_fpu_regs);
+ void GenerateLateInitializationError(bool with_fpu_regs);
- static void GenerateRangeError(Assembler* assembler, bool with_fpu_regs);
- static void GenerateWriteError(Assembler* assembler, bool with_fpu_regs);
+ void GenerateRangeError(bool with_fpu_regs);
+ void GenerateWriteError(bool with_fpu_regs);
- static void GenerateSuspendStub(
- Assembler* assembler,
- bool call_suspend_function,
- bool pass_type_arguments,
- intptr_t suspend_entry_point_offset_in_thread,
- intptr_t suspend_function_offset_in_object_store);
- static void GenerateInitSuspendableFunctionStub(
- Assembler* assembler,
+ void GenerateSuspendStub(bool call_suspend_function,
+ bool pass_type_arguments,
+ intptr_t suspend_entry_point_offset_in_thread,
+ intptr_t suspend_function_offset_in_object_store);
+ void GenerateInitSuspendableFunctionStub(
intptr_t init_entry_point_offset_in_thread,
intptr_t init_function_offset_in_object_store);
- static void GenerateReturnStub(
- Assembler* assembler,
- intptr_t return_entry_point_offset_in_thread,
- intptr_t return_function_offset_in_object_store,
- intptr_t return_stub_offset_in_thread);
+ void GenerateReturnStub(intptr_t return_entry_point_offset_in_thread,
+ intptr_t return_function_offset_in_object_store,
+ intptr_t return_stub_offset_in_thread);
};
} // namespace compiler
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index eb1d027..23af363 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -35,8 +35,7 @@
//
// WARNING: This might clobber all registers except for [R0], [THR] and [FP].
// The caller should simply call LeaveStubFrame() and return.
-void StubCodeCompiler::EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers) {
+void StubCodeCompiler::EnsureIsNewOrRemembered(bool preserve_registers) {
// If the object is not remembered we call a leaf-runtime to add it to the
// remembered set.
Label done;
@@ -62,7 +61,7 @@
// SP + 4*R4 : address of return value.
// R9 : address of the runtime function to call.
// R4 : number of arguments to the call.
-void StubCodeCompiler::GenerateCallToRuntimeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallToRuntimeStub() {
const intptr_t thread_offset = target::NativeArguments::thread_offset();
const intptr_t argc_tag_offset = target::NativeArguments::argc_tag_offset();
const intptr_t argv_offset = target::NativeArguments::argv_offset();
@@ -153,7 +152,6 @@
}
void StubCodeCompiler::GenerateSharedStubGeneric(
- Assembler* assembler,
bool save_fpu_registers,
intptr_t self_code_stub_offset_from_thread,
bool allow_return,
@@ -181,7 +179,6 @@
}
void StubCodeCompiler::GenerateSharedStub(
- Assembler* assembler,
bool save_fpu_registers,
const RuntimeEntry* target,
intptr_t self_code_stub_offset_from_thread,
@@ -203,7 +200,7 @@
SharedSlowPathStubABI::kResultReg)));
}
};
- GenerateSharedStubGeneric(assembler, save_fpu_registers,
+ GenerateSharedStubGeneric(save_fpu_registers,
self_code_stub_offset_from_thread, allow_return,
perform_runtime_call);
}
@@ -212,7 +209,6 @@
// R4: The type_arguments_field_offset (or 0)
// SP+0: The object from which we are tearing a method off.
void StubCodeCompiler::GenerateBuildMethodExtractorStub(
- Assembler* assembler,
const Code& closure_allocation_stub,
const Code& context_allocation_stub,
bool generic) {
@@ -300,7 +296,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateEnterSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateEnterSafepointStub() {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
__ PushRegisters(all_registers);
@@ -338,13 +334,12 @@
__ Ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointStub() {
GenerateExitSafepointStubCommon(
assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
}
-void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub() {
GenerateExitSafepointStubCommon(
assembler,
kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
@@ -359,8 +354,7 @@
// On exit:
// Stack: preserved
// NOTFP, R4: clobbered, although normally callee-saved
-void StubCodeCompiler::GenerateCallNativeThroughSafepointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNativeThroughSafepointStub() {
COMPILE_ASSERT(IsAbiPreservedRegister(R4));
// TransitionGeneratedToNative might clobber LR if it takes the slow path.
@@ -380,7 +374,6 @@
#if !defined(DART_PRECOMPILER)
void StubCodeCompiler::GenerateJITCallbackTrampolines(
- Assembler* assembler,
intptr_t next_callback_id) {
#if defined(USING_SIMULATOR)
// TODO(37299): FFI is not support in SIMARM.
@@ -493,8 +486,7 @@
}
#endif // !defined(DART_PRECOMPILER)
-void StubCodeCompiler::GenerateDispatchTableNullErrorStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDispatchTableNullErrorStub() {
__ EnterStubFrame();
__ SmiTag(DispatchTableNullErrorABI::kClassIdReg);
__ PushRegister(DispatchTableNullErrorABI::kClassIdReg);
@@ -503,8 +495,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateRangeError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateRangeError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
ASSERT(!GenericCheckBoundInstr::UseUnboxedRepresentation());
__ PushRegistersInOrder(
@@ -514,22 +505,21 @@
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::range_error_shared_with_fpu_regs_stub_offset()
: target::Thread::range_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false, perform_runtime_call);
}
-void StubCodeCompiler::GenerateWriteError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateWriteError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
__ CallRuntime(kWriteErrorRuntimeEntry, /*argument_count=*/0);
__ Breakpoint();
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::write_error_shared_with_fpu_regs_stub_offset()
: target::Thread::write_error_shared_without_fpu_regs_stub_offset(),
@@ -632,14 +622,14 @@
__ Ret();
}
-void StubCodeCompiler::GenerateCallNoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
target::Thread::no_scope_native_wrapper_entry_point_offset()));
}
-void StubCodeCompiler::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallAutoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -652,7 +642,7 @@
// R9 : address of the native function to call.
// R2 : address of first argument in argument array.
// R1 : argc_tag including number of arguments and function kind.
-void StubCodeCompiler::GenerateCallBootstrapNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallBootstrapNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -661,7 +651,7 @@
// Input parameters:
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateCallStaticFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallStaticFunctionStub() {
// Create a stub frame as we are pushing some objects on the stack before
// calling into the runtime.
__ EnterStubFrame();
@@ -681,7 +671,7 @@
// Called from a static call only when an invalid code has been entered
// (invalid because its function was optimized or deoptimized).
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateFixCallersTargetStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateFixCallersTargetStub() {
Label monomorphic;
__ BranchOnMonomorphicCheckedEntryJIT(&monomorphic);
@@ -731,8 +721,7 @@
// Called from object allocate instruction when the allocation stub has been
// disabled.
-void StubCodeCompiler::GenerateFixAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -754,8 +743,7 @@
// Called from object allocate instruction when the allocation stub for a
// generic class has been disabled.
-void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -965,8 +953,7 @@
}
// R0: result, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(IP, kZapCodeReg);
__ Push(IP);
@@ -980,8 +967,7 @@
// R0: exception, must be preserved
// R1: stacktrace, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(IP, kZapCodeReg);
__ Push(IP);
@@ -993,7 +979,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateDeoptimizeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeStub() {
__ Push(CODE_REG);
__ ldr(CODE_REG, Address(THR, target::Thread::deoptimize_stub_offset()));
GenerateDeoptimizationSequence(assembler, kEagerDeopt);
@@ -1051,8 +1037,7 @@
// Input:
// ARGS_DESC_REG - arguments descriptor
// IC_DATA_REG - icdata/megamorphic_cache
-void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub() {
GenerateNoSuchMethodDispatcherBody(assembler);
}
@@ -1065,7 +1050,7 @@
// AllocateArrayABI::kResultReg: newly allocated array.
// Clobbered:
// R3, R4, R8, R9
-void StubCodeCompiler::GenerateAllocateArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateArrayStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
// Compute the size to be allocated, it is based on the array length
@@ -1196,8 +1181,7 @@
}
// Called for allocation of Mint.
-void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1209,16 +1193,14 @@
}
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
- GenerateSharedStub(assembler, /*save_fpu_registers=*/true,
- &kAllocateMintRuntimeEntry,
+ GenerateSharedStub(/*save_fpu_registers=*/true, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_with_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
}
// Called for allocation of Mint.
-void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1231,7 +1213,7 @@
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
+ /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_without_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
@@ -1244,7 +1226,7 @@
// R1 : arguments descriptor array.
// R2 : arguments array.
// R3 : current thread.
-void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInvokeDartCodeStub() {
SPILLS_LR_TO_FRAME(__ EnterFrame((1 << FP) | (1 << LR), 0));
// Push code object to PC marker slot.
@@ -1449,7 +1431,7 @@
// R0: new allocated Context object.
// Clobbered:
// Potentially any since is can go to runtime.
-void StubCodeCompiler::GenerateAllocateContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1494,7 +1476,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// R0: new object
// Restore the frame pointer.
@@ -1510,7 +1492,7 @@
// R0: new allocated Context object.
// Clobbered:
// Potentially any since it can go to runtime.
-void StubCodeCompiler::GenerateCloneContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1569,7 +1551,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// R0: new object
// Restore the frame pointer.
@@ -1577,7 +1559,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateWriteBarrierWrappersStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierWrappersStub() {
for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
if ((kDartAvailableCpuRegs & (1 << i)) == 0) continue;
@@ -1750,11 +1732,11 @@
}
}
-void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, false);
}
-void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateArrayWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, true);
}
@@ -1866,16 +1848,15 @@
}
// Called for inline allocation of objects (any class).
-void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/false);
}
-void StubCodeCompiler::GenerateAllocateObjectParameterizedStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectParameterizedStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/true);
}
-void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectSlowStub() {
const Register kClsReg = R1;
if (!FLAG_precompiled_mode) {
@@ -1905,14 +1886,13 @@
// Write-barrier elimination is enabled for [cls] and we therefore need to
// ensure that the object is in new-space or has remembered bit set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveDartFrameAndReturn();
}
// Called for inline allocation of objects.
void StubCodeCompiler::GenerateAllocationStubForClass(
- Assembler* assembler,
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const Code& allocate_object,
@@ -1981,8 +1961,7 @@
// LR : return address.
// SP : address of last argument.
// R4: arguments descriptor array.
-void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub() {
__ EnterStubFrame();
// Load the receiver.
@@ -2020,8 +1999,7 @@
// R9: inline cache data object.
// Cannot use function object from ICData as it may be the inlined
// function and not the top-scope function.
-void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement() {
Register ic_reg = R9;
Register func_reg = R8;
if (FLAG_precompiled_mode) {
@@ -2044,8 +2022,7 @@
}
// Loads function into 'temp_reg'.
-void StubCodeCompiler::GenerateUsageCounterIncrement(Assembler* assembler,
- Register temp_reg) {
+void StubCodeCompiler::GenerateUsageCounterIncrement(Register temp_reg) {
if (FLAG_precompiled_mode) {
__ Breakpoint();
return;
@@ -2156,7 +2133,6 @@
// - Match found -> jump to target.
// - Match not found -> jump to IC miss.
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -2174,9 +2150,9 @@
}
if (optimized == kOptimized) {
- GenerateOptimizedUsageCounterIncrement(assembler);
+ GenerateOptimizedUsageCounterIncrement();
} else {
- GenerateUsageCounterIncrement(assembler, /* scratch */ R8);
+ GenerateUsageCounterIncrement(/* scratch */ R8);
}
ASSERT(exactness == kIgnoreExactness); // Unimplemented.
@@ -2401,67 +2377,63 @@
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiAddInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiLessInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiLessInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiEqualInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R9: ICData
// R8: Function
// LR: return address
-void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kIgnoreExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
@@ -2469,8 +2441,7 @@
// R8: Function
// LR: return address
void StubCodeCompiler::
- GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+ GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
@@ -2478,19 +2449,17 @@
// R9: ICData
// R8: Function
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kOptimized, kInstanceCall, kIgnoreExactness);
}
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub() {
GenerateRecordEntryPoint(assembler);
- GenerateUsageCounterIncrement(assembler, /* scratch */ R8);
+ GenerateUsageCounterIncrement(/* scratch */ R8);
#if defined(DEBUG)
{
Label ok;
@@ -2559,28 +2528,26 @@
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ R8);
- GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kUnoptimized, kStaticCall, kIgnoreExactness);
+void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ R8);
+ GenerateNArgsCheckInlineCacheStub(1, kStaticCallMissHandlerOneArgRuntimeEntry,
+ Token::kILLEGAL, kUnoptimized, kStaticCall,
+ kIgnoreExactness);
}
// R9: ICData
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ R8);
+void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ R8);
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// Stub for compiling a function and jumping to the compiled code.
// ARGS_DESC_REG: Arguments descriptor.
// FUNCTION_REG: Function.
-void StubCodeCompiler::GenerateLazyCompileStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateLazyCompileStub() {
__ EnterStubFrame();
// Preserve arg desc, pass function.
COMPILE_ASSERT(FUNCTION_REG < ARGS_DESC_REG);
@@ -2594,7 +2561,7 @@
}
// R9: Contains an ICData.
-void StubCodeCompiler::GenerateICCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2611,8 +2578,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2627,7 +2593,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRuntimeCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2643,7 +2609,7 @@
}
// Called only from unoptimized code. All relevant registers have been saved.
-void StubCodeCompiler::GenerateDebugStepCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDebugStepCheckStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2894,27 +2860,27 @@
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype1TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 1);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype3TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 3);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype5TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype5TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 5);
}
// See comment on[GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype7TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype7TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 7);
}
// Return the current stack pointer address, used to do stack alignment checks.
-void StubCodeCompiler::GenerateGetCStackPointerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateGetCStackPointerStub() {
__ mov(R0, Operand(SP));
__ Ret();
}
@@ -2928,7 +2894,7 @@
// Does not return.
//
// Notice: We need to keep this in sync with `Simulator::JumpToFrame()`.
-void StubCodeCompiler::GenerateJumpToFrameStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateJumpToFrameStub() {
COMPILE_ASSERT(kExceptionObjectReg == R0);
COMPILE_ASSERT(kStackTraceObjectReg == R1);
COMPILE_ASSERT(IsAbiPreservedRegister(R4));
@@ -2982,7 +2948,7 @@
//
// The arguments are stored in the Thread object.
// Does not return.
-void StubCodeCompiler::GenerateRunExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRunExceptionHandlerStub() {
WRITES_RETURN_ADDRESS_TO_LR(
__ LoadFromOffset(LR, THR, target::Thread::resume_pc_offset()));
@@ -3006,7 +2972,7 @@
// Deoptimize a frame on the call stack before rewinding.
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateDeoptForRewindStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptForRewindStub() {
// Push zap value instead of CODE_REG.
__ LoadImmediate(IP, kZapCodeReg);
__ Push(IP);
@@ -3026,7 +2992,7 @@
// Calls to the runtime to optimize the given function.
// R8: function to be reoptimized.
// ARGS_DESC_REG: argument descriptor (preserved).
-void StubCodeCompiler::GenerateOptimizeFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizeFunctionStub() {
__ ldr(CODE_REG, Address(THR, target::Thread::optimize_stub_offset()));
__ EnterStubFrame();
__ Push(ARGS_DESC_REG);
@@ -3107,8 +3073,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return Zero condition flag set if equal.
-void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub() {
#if !defined(PRODUCT)
// Check single stepping.
Label stepping, done_stepping;
@@ -3142,8 +3107,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return Zero condition flag set if equal.
-void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub() {
const Register temp = R2;
const Register left = R1;
const Register right = R0;
@@ -3160,7 +3124,7 @@
// FUNCTION_REG: target function
// ARGS_DESC_REG: arguments descriptor
// CODE_REG: target Code
-void StubCodeCompiler::GenerateMegamorphicCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateMegamorphicCallStub() {
__ LoadTaggedClassIdMayBeSmi(R8, R0);
// R8: receiver cid as Smi.
__ ldr(R2,
@@ -3215,10 +3179,10 @@
__ b(&loop);
__ Bind(&miss);
- GenerateSwitchableCallMissStub(assembler);
+ GenerateSwitchableCallMissStub();
}
-void StubCodeCompiler::GenerateICCallThroughCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallThroughCodeStub() {
Label loop, found, miss;
__ ldr(R8, FieldAddress(IC_DATA_REG, target::ICData::entries_offset()));
__ ldr(R4, FieldAddress(IC_DATA_REG,
@@ -3267,8 +3231,7 @@
// R9: MonomorphicSmiableCall object
//
// R2, R3: clobbered
-void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub() {
__ LoadClassIdMayBeSmi(IP, R0);
// entrypoint_ should come right after expected_cid_
@@ -3301,7 +3264,7 @@
// Called from switchable IC calls.
// R0: receiver
-void StubCodeCompiler::GenerateSwitchableCallMissStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSwitchableCallMissStub() {
__ ldr(CODE_REG,
Address(THR, target::Thread::switchable_call_miss_stub_offset()));
__ EnterStubFrame();
@@ -3317,7 +3280,7 @@
// R9: SingleTargetCache
// Passed to target:
// CODE_REG: target Code object
-void StubCodeCompiler::GenerateSingleTargetCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSingleTargetCallStub() {
Label miss;
__ LoadClassIdMayBeSmi(R1, R0);
__ ldrh(R2,
@@ -3360,8 +3323,7 @@
return -1;
}
-void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid) {
+void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(intptr_t cid) {
const intptr_t element_size = TypedDataElementSizeInBytes(cid);
const intptr_t max_len = TypedDataMaxNewSpaceElements(cid);
const intptr_t scale_shift = GetScaleFactor(element_size);
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index ba3f7a6..085253f 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -34,8 +34,7 @@
//
// WARNING: This might clobber all registers except for [R0], [THR] and [FP].
// The caller should simply call LeaveStubFrame() and return.
-void StubCodeCompiler::EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers) {
+void StubCodeCompiler::EnsureIsNewOrRemembered(bool preserve_registers) {
// If the object is not remembered we call a leaf-runtime to add it to the
// remembered set.
Label done;
@@ -154,7 +153,7 @@
// SP + 8*R4 : address of return value.
// R5 : address of the runtime function to call.
// R4 : number of arguments to the call.
-void StubCodeCompiler::GenerateCallToRuntimeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallToRuntimeStub() {
const intptr_t thread_offset = target::NativeArguments::thread_offset();
const intptr_t argc_tag_offset = target::NativeArguments::argc_tag_offset();
const intptr_t argv_offset = target::NativeArguments::argv_offset();
@@ -270,7 +269,6 @@
}
void StubCodeCompiler::GenerateSharedStubGeneric(
- Assembler* assembler,
bool save_fpu_registers,
intptr_t self_code_stub_offset_from_thread,
bool allow_return,
@@ -298,7 +296,6 @@
}
void StubCodeCompiler::GenerateSharedStub(
- Assembler* assembler,
bool save_fpu_registers,
const RuntimeEntry* target,
intptr_t self_code_stub_offset_from_thread,
@@ -318,12 +315,12 @@
SharedSlowPathStubABI::kResultReg)));
}
};
- GenerateSharedStubGeneric(assembler, save_fpu_registers,
+ GenerateSharedStubGeneric(save_fpu_registers,
self_code_stub_offset_from_thread, allow_return,
perform_runtime_call);
}
-void StubCodeCompiler::GenerateEnterSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateEnterSafepointStub() {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
@@ -378,13 +375,12 @@
__ Ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointStub() {
GenerateExitSafepointStubCommon(
assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
}
-void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub() {
GenerateExitSafepointStubCommon(
assembler,
kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
@@ -399,8 +395,7 @@
// On exit:
// R19: clobbered, although normally callee-saved
// Stack: preserved, CSP == SP
-void StubCodeCompiler::GenerateCallNativeThroughSafepointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNativeThroughSafepointStub() {
COMPILE_ASSERT(IsAbiPreservedRegister(R19));
SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(__ mov(R19, LR));
@@ -432,7 +427,6 @@
#if !defined(DART_PRECOMPILER)
void StubCodeCompiler::GenerateJITCallbackTrampolines(
- Assembler* assembler,
intptr_t next_callback_id) {
#if !defined(HOST_ARCH_ARM64)
// TODO(37299): FFI is not support in SIMARM64.
@@ -577,7 +571,6 @@
// R1: The extracted method.
// R4: The type_arguments_field_offset (or 0)
void StubCodeCompiler::GenerateBuildMethodExtractorStub(
- Assembler* assembler,
const Code& closure_allocation_stub,
const Code& context_allocation_stub,
bool generic) {
@@ -670,8 +663,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateDispatchTableNullErrorStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDispatchTableNullErrorStub() {
__ EnterStubFrame();
__ SmiTag(DispatchTableNullErrorABI::kClassIdReg);
__ PushRegister(DispatchTableNullErrorABI::kClassIdReg);
@@ -680,8 +672,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateRangeError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateRangeError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
// If the generated code has unboxed index/length we need to box them before
// calling the runtime entry.
@@ -730,22 +721,21 @@
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::range_error_shared_with_fpu_regs_stub_offset()
: target::Thread::range_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false, perform_runtime_call);
}
-void StubCodeCompiler::GenerateWriteError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateWriteError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
__ CallRuntime(kWriteErrorRuntimeEntry, /*argument_count=*/0);
__ Breakpoint();
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::write_error_shared_with_fpu_regs_stub_offset()
: target::Thread::write_error_shared_without_fpu_regs_stub_offset(),
@@ -865,14 +855,14 @@
__ ret();
}
-void StubCodeCompiler::GenerateCallNoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
target::Thread::no_scope_native_wrapper_entry_point_offset()));
}
-void StubCodeCompiler::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallAutoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -885,7 +875,7 @@
// R5 : address of the native function to call.
// R2 : address of first argument in argument array.
// R1 : argc_tag including number of arguments and function kind.
-void StubCodeCompiler::GenerateCallBootstrapNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallBootstrapNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -894,7 +884,7 @@
// Input parameters:
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateCallStaticFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallStaticFunctionStub() {
// Create a stub frame as we are pushing some objects on the stack before
// calling into the runtime.
__ EnterStubFrame();
@@ -915,7 +905,7 @@
// Called from a static call only when an invalid code has been entered
// (invalid because its function was optimized or deoptimized).
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateFixCallersTargetStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateFixCallersTargetStub() {
Label monomorphic;
__ BranchOnMonomorphicCheckedEntryJIT(&monomorphic);
@@ -967,8 +957,7 @@
// Called from object allocate instruction when the allocation stub has been
// disabled.
-void StubCodeCompiler::GenerateFixAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -989,8 +978,7 @@
// Called from object allocate instruction when the allocation stub for a
// generic class has been disabled.
-void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -1210,8 +1198,7 @@
}
// R0: result, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(TMP, kZapCodeReg);
__ Push(TMP);
@@ -1225,8 +1212,7 @@
// R0: exception, must be preserved
// R1: stacktrace, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(TMP, kZapCodeReg);
__ Push(TMP);
@@ -1238,7 +1224,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateDeoptimizeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeStub() {
__ Push(CODE_REG);
__ ldr(CODE_REG, Address(THR, target::Thread::deoptimize_stub_offset()));
GenerateDeoptimizationSequence(assembler, kEagerDeopt);
@@ -1296,8 +1282,7 @@
// Input:
// ARGS_DESC_REG - arguments descriptor
// IC_DATA_REG - icdata/megamorphic_cache
-void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub() {
GenerateNoSuchMethodDispatcherBody(assembler);
}
@@ -1310,7 +1295,7 @@
// AllocateArrayABI::kResultReg: newly allocated array.
// Clobbered:
// R3, R7
-void StubCodeCompiler::GenerateAllocateArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateArrayStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
// Compute the size to be allocated, it is based on the array length
@@ -1467,8 +1452,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1480,15 +1464,13 @@
}
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
- GenerateSharedStub(assembler, /*save_fpu_registers=*/true,
- &kAllocateMintRuntimeEntry,
+ GenerateSharedStub(/*save_fpu_registers=*/true, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_with_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1501,7 +1483,7 @@
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
+ /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_without_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
@@ -1514,7 +1496,7 @@
// R1 : arguments descriptor array.
// R2 : arguments array.
// R3 : current thread.
-void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInvokeDartCodeStub() {
__ Comment("InvokeDartCodeStub");
// Copy the C stack pointer (CSP/R31) into the stack pointer we'll actually
@@ -1731,7 +1713,7 @@
// R0: new allocated Context object.
// Clobbered:
// R2, R3, R4, TMP
-void StubCodeCompiler::GenerateAllocateContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1786,7 +1768,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// R0: new object
// Restore the frame pointer.
@@ -1802,7 +1784,7 @@
// R0: new allocated Context object.
// Clobbered:
// R1, (R2), R3, R4, (TMP)
-void StubCodeCompiler::GenerateCloneContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1862,7 +1844,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// R0: new object
// Restore the frame pointer.
@@ -1870,7 +1852,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateWriteBarrierWrappersStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierWrappersStub() {
for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
if ((kDartAvailableCpuRegs & (1 << i)) == 0) continue;
@@ -2068,11 +2050,11 @@
}
}
-void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, false);
}
-void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateArrayWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, true);
}
@@ -2182,16 +2164,15 @@
}
// Called for inline allocation of objects (any class).
-void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/false);
}
-void StubCodeCompiler::GenerateAllocateObjectParameterizedStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectParameterizedStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/true);
}
-void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectSlowStub() {
if (!FLAG_precompiled_mode) {
__ ldr(CODE_REG,
Address(THR, target::Thread::call_to_runtime_stub_offset()));
@@ -2217,7 +2198,7 @@
// Write-barrier elimination is enabled for [cls] and we therefore need to
// ensure that the object is in new-space or has remembered bit set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveStubFrame();
@@ -2226,7 +2207,6 @@
// Called for inline allocation of objects.
void StubCodeCompiler::GenerateAllocationStubForClass(
- Assembler* assembler,
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const Code& allocate_object,
@@ -2299,8 +2279,7 @@
// LR : return address.
// SP : address of last argument.
// R4: arguments descriptor array.
-void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub() {
__ EnterStubFrame();
// Load the receiver.
@@ -2339,8 +2318,7 @@
// R5: inline cache data object.
// Cannot use function object from ICData as it may be the inlined
// function and not the top-scope function.
-void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement() {
Register ic_reg = R5;
Register func_reg = R6;
if (FLAG_precompiled_mode) {
@@ -2367,8 +2345,7 @@
}
// Loads function into 'temp_reg'.
-void StubCodeCompiler::GenerateUsageCounterIncrement(Assembler* assembler,
- Register temp_reg) {
+void StubCodeCompiler::GenerateUsageCounterIncrement(Register temp_reg) {
if (FLAG_precompiled_mode) {
__ Breakpoint();
return;
@@ -2482,7 +2459,6 @@
// - Match found -> jump to target.
// - Match not found -> jump to IC miss.
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -2500,9 +2476,9 @@
}
if (optimized == kOptimized) {
- GenerateOptimizedUsageCounterIncrement(assembler);
+ GenerateOptimizedUsageCounterIncrement();
} else {
- GenerateUsageCounterIncrement(assembler, /*scratch=*/R6);
+ GenerateUsageCounterIncrement(/*scratch=*/R6);
}
ASSERT(exactness == kIgnoreExactness); // Unimplemented.
@@ -2735,67 +2711,63 @@
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiAddInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiLessInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiLessInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiEqualInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
// R5: ICData
// R6: Function
// LR: return address
-void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kIgnoreExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kIgnoreExactness);
}
// R0: receiver
@@ -2803,8 +2775,7 @@
// R6: Function
// LR: return address
void StubCodeCompiler::
- GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+ GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
@@ -2812,19 +2783,17 @@
// R5: ICData
// R6: Function
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kOptimized, kInstanceCall, kIgnoreExactness);
}
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub() {
GenerateRecordEntryPoint(assembler);
- GenerateUsageCounterIncrement(assembler, /* scratch */ R6);
+ GenerateUsageCounterIncrement(/* scratch */ R6);
#if defined(DEBUG)
{
Label ok;
@@ -2900,28 +2869,26 @@
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ R6);
- GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kUnoptimized, kStaticCall, kIgnoreExactness);
+void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ R6);
+ GenerateNArgsCheckInlineCacheStub(1, kStaticCallMissHandlerOneArgRuntimeEntry,
+ Token::kILLEGAL, kUnoptimized, kStaticCall,
+ kIgnoreExactness);
}
// R5: ICData
// LR: return address
-void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ R6);
+void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ R6);
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// Stub for compiling a function and jumping to the compiled code.
// ARGS_DESC_REG: Arguments descriptor.
// FUNCTION_REG: Function.
-void StubCodeCompiler::GenerateLazyCompileStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateLazyCompileStub() {
// Preserve arg desc.
__ EnterStubFrame();
__ Push(ARGS_DESC_REG); // Save arg. desc.
@@ -2939,7 +2906,7 @@
}
// R5: Contains an ICData.
-void StubCodeCompiler::GenerateICCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2957,8 +2924,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2974,7 +2940,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRuntimeCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2989,7 +2955,7 @@
}
// Called only from unoptimized code. All relevant registers have been saved.
-void StubCodeCompiler::GenerateDebugStepCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDebugStepCheckStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -3219,26 +3185,26 @@
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype1TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 1);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype3TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 3);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype5TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype5TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 5);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype7TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype7TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 7);
}
-void StubCodeCompiler::GenerateGetCStackPointerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateGetCStackPointerStub() {
__ mov(R0, CSP);
__ ret();
}
@@ -3252,7 +3218,7 @@
// Does not return.
//
// Notice: We need to keep this in sync with `Simulator::JumpToFrame()`.
-void StubCodeCompiler::GenerateJumpToFrameStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateJumpToFrameStub() {
ASSERT(kExceptionObjectReg == R0);
ASSERT(kStackTraceObjectReg == R1);
__ set_lr_state(compiler::LRState::Clobbered());
@@ -3305,7 +3271,7 @@
//
// The arguments are stored in the Thread object.
// Does not return.
-void StubCodeCompiler::GenerateRunExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRunExceptionHandlerStub() {
WRITES_RETURN_ADDRESS_TO_LR(
__ LoadFromOffset(LR, THR, target::Thread::resume_pc_offset()));
@@ -3328,7 +3294,7 @@
// Deoptimize a frame on the call stack before rewinding.
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateDeoptForRewindStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptForRewindStub() {
// Push zap value instead of CODE_REG.
__ LoadImmediate(TMP, kZapCodeReg);
__ Push(TMP);
@@ -3348,7 +3314,7 @@
// Calls to the runtime to optimize the given function.
// R6: function to be re-optimized.
// ARGS_DESC_REG: argument descriptor (preserved).
-void StubCodeCompiler::GenerateOptimizeFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizeFunctionStub() {
__ LoadFromOffset(CODE_REG, THR, target::Thread::optimize_stub_offset());
__ EnterStubFrame();
__ Push(ARGS_DESC_REG);
@@ -3416,8 +3382,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return Zero condition flag set if equal.
-void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub() {
#if !defined(PRODUCT)
// Check single stepping.
Label stepping, done_stepping;
@@ -3450,8 +3415,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return Zero condition flag set if equal.
-void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub() {
const Register left = R1;
const Register right = R0;
__ LoadFromOffset(left, SP, 1 * target::kWordSize);
@@ -3466,7 +3430,7 @@
// FUNCTION_REG: target function
// CODE_REG: target Code
// ARGS_DESC_REG: arguments descriptor
-void StubCodeCompiler::GenerateMegamorphicCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateMegamorphicCallStub() {
// Jump if receiver is a smi.
Label smi_case;
__ BranchIfSmi(R0, &smi_case);
@@ -3541,13 +3505,13 @@
__ b(&cid_loaded);
__ Bind(&miss);
- GenerateSwitchableCallMissStub(assembler);
+ GenerateSwitchableCallMissStub();
}
// Input:
// R0 - receiver
// IC_DATA_REG - icdata
-void StubCodeCompiler::GenerateICCallThroughCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallThroughCodeStub() {
Label loop, found, miss;
__ ldr(R8, FieldAddress(IC_DATA_REG, target::ICData::entries_offset()));
__ ldr(ARGS_DESC_REG,
@@ -3599,8 +3563,7 @@
// R5: MonomorphicSmiableCall object
//
// R1: clobbered
-void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub() {
Label miss;
__ LoadClassIdMayBeSmi(IP0, R0);
@@ -3623,7 +3586,7 @@
// Called from switchable IC calls.
// R0: receiver
-void StubCodeCompiler::GenerateSwitchableCallMissStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSwitchableCallMissStub() {
__ ldr(CODE_REG,
Address(THR, target::Thread::switchable_call_miss_stub_offset()));
__ EnterStubFrame();
@@ -3650,7 +3613,7 @@
// R5: SingleTargetCache
// Passed to target:
// CODE_REG: target Code object
-void StubCodeCompiler::GenerateSingleTargetCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSingleTargetCallStub() {
Label miss;
__ LoadClassIdMayBeSmi(R1, R0);
__ ldr(R2, FieldAddress(R5, target::SingleTargetCache::lower_limit_offset()),
@@ -3705,8 +3668,7 @@
return -1;
}
-void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid) {
+void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(intptr_t cid) {
const intptr_t element_size = TypedDataElementSizeInBytes(cid);
const intptr_t max_len = TypedDataMaxNewSpaceElements(cid);
const intptr_t scale_shift = GetScaleFactor(element_size);
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 58d571e..2b5fbe9 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -33,8 +33,7 @@
//
// WARNING: This might clobber all registers except for [EAX], [THR] and [FP].
// The caller should simply call LeaveFrame() and return.
-void StubCodeCompiler::EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers) {
+void StubCodeCompiler::EnsureIsNewOrRemembered(bool preserve_registers) {
// If the object is not remembered we call a leaf-runtime to add it to the
// remembered set.
Label done;
@@ -61,7 +60,7 @@
// ECX : address of the runtime function to call.
// EDX : number of arguments to the call.
// Must preserve callee saved registers EDI and EBX.
-void StubCodeCompiler::GenerateCallToRuntimeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallToRuntimeStub() {
const intptr_t thread_offset = target::NativeArguments::thread_offset();
const intptr_t argc_tag_offset = target::NativeArguments::argc_tag_offset();
const intptr_t argv_offset = target::NativeArguments::argv_offset();
@@ -137,7 +136,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateEnterSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateEnterSafepointStub() {
__ pushal();
__ subl(SPREG, Immediate(8));
__ movsd(Address(SPREG, 0), XMM0);
@@ -179,13 +178,12 @@
__ ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointStub() {
GenerateExitSafepointStubCommon(
assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
}
-void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub() {
GenerateExitSafepointStubCommon(
assembler,
kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
@@ -200,8 +198,7 @@
// On exit:
// Stack: preserved
// EBX: clobbered (even though it's normally callee-saved)
-void StubCodeCompiler::GenerateCallNativeThroughSafepointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNativeThroughSafepointStub() {
__ popl(EBX);
__ movl(ECX, compiler::Immediate(target::Thread::exit_through_ffi()));
@@ -214,7 +211,6 @@
}
void StubCodeCompiler::GenerateJITCallbackTrampolines(
- Assembler* assembler,
intptr_t next_callback_id) {
Label done, ret_4;
@@ -346,7 +342,6 @@
}
void StubCodeCompiler::GenerateSharedStubGeneric(
- Assembler* assembler,
bool save_fpu_registers,
intptr_t self_code_stub_offset_from_thread,
bool allow_return,
@@ -356,7 +351,6 @@
}
void StubCodeCompiler::GenerateSharedStub(
- Assembler* assembler,
bool save_fpu_registers,
const RuntimeEntry* target,
intptr_t self_code_stub_offset_from_thread,
@@ -366,20 +360,17 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateRangeError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateRangeError(bool with_fpu_regs) {
// Only used in AOT.
__ Breakpoint();
}
-void StubCodeCompiler::GenerateWriteError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateWriteError(bool with_fpu_regs) {
// Only used in AOT.
__ Breakpoint();
}
-void StubCodeCompiler::GenerateDispatchTableNullErrorStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDispatchTableNullErrorStub() {
// Only used in AOT.
__ Breakpoint();
}
@@ -472,14 +463,14 @@
__ ret();
}
-void StubCodeCompiler::GenerateCallNoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
target::Thread::no_scope_native_wrapper_entry_point_offset()));
}
-void StubCodeCompiler::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallAutoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -492,7 +483,7 @@
// EAX : address of first argument in argument array.
// ECX : address of the native function to call.
// EDX : argc_tag including number of arguments and function kind.
-void StubCodeCompiler::GenerateCallBootstrapNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallBootstrapNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -501,7 +492,7 @@
// Input parameters:
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateCallStaticFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallStaticFunctionStub() {
__ EnterStubFrame();
__ pushl(ARGS_DESC_REG); // Preserve arguments descriptor array.
__ pushl(Immediate(0)); // Setup space on stack for return value.
@@ -517,7 +508,7 @@
// Called from a static call only when an invalid code has been entered
// (invalid because its function was optimized or deoptimized).
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateFixCallersTargetStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateFixCallersTargetStub() {
Label monomorphic;
__ BranchOnMonomorphicCheckedEntryJIT(&monomorphic);
@@ -552,8 +543,7 @@
// Called from object allocate instruction when the allocation stub has been
// disabled.
-void StubCodeCompiler::GenerateFixAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixAllocationStubTargetStub() {
__ EnterStubFrame();
__ pushl(Immediate(0)); // Setup space on stack for return value.
__ CallRuntime(kFixAllocationStubTargetRuntimeEntry, 0);
@@ -566,8 +556,7 @@
// Called from object allocate instruction when the allocation stub for a
// generic class has been disabled.
-void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub() {
__ EnterStubFrame();
// Preserve type arguments register.
__ pushl(AllocateObjectABI::kTypeArgumentsReg);
@@ -763,8 +752,7 @@
}
// EAX: result, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub() {
// Return address for "call" to deopt stub.
__ pushl(Immediate(kZapReturnAddress));
GenerateDeoptimizationSequence(assembler, kLazyDeoptFromReturn);
@@ -773,15 +761,14 @@
// EAX: exception, must be preserved
// EDX: stacktrace, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub() {
// Return address for "call" to deopt stub.
__ pushl(Immediate(kZapReturnAddress));
GenerateDeoptimizationSequence(assembler, kLazyDeoptFromThrow);
__ ret();
}
-void StubCodeCompiler::GenerateDeoptimizeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeStub() {
GenerateDeoptimizationSequence(assembler, kEagerDeopt);
__ ret();
}
@@ -832,8 +819,7 @@
GenerateNoSuchMethodDispatcherCode(assembler);
}
-void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub() {
GenerateNoSuchMethodDispatcherCode(assembler);
}
@@ -845,7 +831,7 @@
// AllocateArrayABI::kResultReg: newly allocated array.
// Clobbered:
// EBX, EDI
-void StubCodeCompiler::GenerateAllocateArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateArrayStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
// Compute the size to be allocated, it is based on the array length
@@ -998,7 +984,7 @@
// ESP + 12 : arguments array.
// ESP + 16 : current thread.
// Uses EAX, EDX, ECX, EDI as temporary registers.
-void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInvokeDartCodeStub() {
const intptr_t kTargetCodeOffset = 2 * target::kWordSize;
const intptr_t kArgumentsDescOffset = 3 * target::kWordSize;
const intptr_t kArgumentsOffset = 4 * target::kWordSize;
@@ -1207,7 +1193,7 @@
// EAX: new allocated Context object.
// Clobbered:
// EBX, EDX
-void StubCodeCompiler::GenerateAllocateContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1257,7 +1243,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// EAX: new object
// Restore the frame pointer.
@@ -1273,7 +1259,7 @@
// EAX: new allocated Context object.
// Clobbered:
// EBX, ECX, EDX
-void StubCodeCompiler::GenerateCloneContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1331,7 +1317,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// EAX: new object
// Restore the frame pointer.
@@ -1339,7 +1325,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateWriteBarrierWrappersStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierWrappersStub() {
for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
if ((kDartAvailableCpuRegs & (1 << i)) == 0) continue;
@@ -1367,8 +1353,7 @@
COMPILE_ASSERT(kWriteBarrierObjectReg == EDX);
COMPILE_ASSERT(kWriteBarrierValueReg == EBX);
COMPILE_ASSERT(kWriteBarrierSlotReg == EDI);
-static void GenerateWriteBarrierStubHelper(Assembler* assembler,
- bool cards) {
+static void GenerateWriteBarrierStubHelper(Assembler* assembler, bool cards) {
// Save values being destroyed.
__ pushl(EAX);
__ pushl(ECX);
@@ -1524,24 +1509,23 @@
}
}
-void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, false);
}
-void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateArrayWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, true);
}
-void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectStub() {
__ int3();
}
-void StubCodeCompiler::GenerateAllocateObjectParameterizedStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectParameterizedStub() {
__ int3();
}
-void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectSlowStub() {
__ int3();
}
@@ -1554,7 +1538,6 @@
// Returns patch_code_pc offset where patching code for disabling the stub
// has been generated (similar to regularly generated Dart code).
void StubCodeCompiler::GenerateAllocationStubForClass(
- Assembler* assembler,
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const Code& allocate_object,
@@ -1682,7 +1665,7 @@
if (AllocateObjectInstr::WillAllocateNewOrRemembered(cls)) {
// Write-barrier elimination is enabled for [cls] and we therefore need to
// ensure that the object is in new-space or has remembered bit set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
}
// AllocateObjectABI::kResultReg: new object
@@ -1699,8 +1682,7 @@
// ESP + 4 : address of last argument.
// EDX : arguments descriptor array.
// Uses EAX, EBX, EDI as temporary registers.
-void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub() {
__ EnterStubFrame();
// Load the receiver.
@@ -1738,8 +1720,7 @@
// Cannot use function object from ICData as it may be the inlined
// function and not the top-scope function.
-void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement() {
Register ic_reg = ECX;
Register func_reg = EAX;
if (FLAG_trace_optimized_ic_calls) {
@@ -1759,8 +1740,7 @@
}
// Loads function into 'temp_reg'.
-void StubCodeCompiler::GenerateUsageCounterIncrement(Assembler* assembler,
- Register temp_reg) {
+void StubCodeCompiler::GenerateUsageCounterIncrement(Register temp_reg) {
if (FLAG_optimization_counter_threshold >= 0) {
Register func_reg = temp_reg;
ASSERT(func_reg != IC_DATA_REG);
@@ -1856,24 +1836,22 @@
// - Match found -> jump to target.
// - Match not found -> jump to IC miss.
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
Optimized optimized,
CallType type,
Exactness exactness) {
- GenerateNArgsCheckInlineCacheStubForEntryKind(
- assembler, num_args, handle_ic_miss, kind, optimized, type, exactness,
- CodeEntryKind::kNormal);
+ GenerateNArgsCheckInlineCacheStubForEntryKind(num_args, handle_ic_miss, kind,
+ optimized, type, exactness,
+ CodeEntryKind::kNormal);
__ BindUncheckedEntryPoint();
- GenerateNArgsCheckInlineCacheStubForEntryKind(
- assembler, num_args, handle_ic_miss, kind, optimized, type, exactness,
- CodeEntryKind::kUnchecked);
+ GenerateNArgsCheckInlineCacheStubForEntryKind(num_args, handle_ic_miss, kind,
+ optimized, type, exactness,
+ CodeEntryKind::kUnchecked);
}
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStubForEntryKind(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -1882,9 +1860,9 @@
Exactness exactness,
CodeEntryKind entry_kind) {
if (optimized == kOptimized) {
- GenerateOptimizedUsageCounterIncrement(assembler);
+ GenerateOptimizedUsageCounterIncrement();
} else {
- GenerateUsageCounterIncrement(assembler, /* scratch */ EAX);
+ GenerateUsageCounterIncrement(/* scratch */ EAX);
}
ASSERT(exactness == kIgnoreExactness); // Unimplemented.
@@ -2065,77 +2043,71 @@
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub() {
__ Stop("Unimplemented");
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub() {
__ Stop("Unimplemented");
}
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiAddInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateSmiLessInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiLessInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiEqualInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
// ECX: ICData
// EAX: Function
// ESP[0]: return address
-void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kIgnoreExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kIgnoreExactness);
}
// EBX: receiver
@@ -2143,8 +2115,7 @@
// EAX: Function
// ESP[0]: return address
void StubCodeCompiler::
- GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+ GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
@@ -2152,19 +2123,19 @@
// ECX: ICData
// EAX: Function
// ESP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kOptimized, kInstanceCall, kIgnoreExactness);
}
// ECX: ICData
// ESP[0]: return address
static void GenerateZeroArgsUnoptimizedStaticCallForEntryKind(
- Assembler* assembler,
+ StubCodeCompiler* stub_code_compiler,
CodeEntryKind entry_kind) {
- StubCodeCompiler::GenerateUsageCounterIncrement(assembler, /* scratch */ EAX);
+ stub_code_compiler->GenerateUsageCounterIncrement(/* scratch */ EAX);
+ auto* const assembler = stub_code_compiler->assembler;
#if defined(DEBUG)
{
@@ -2226,37 +2197,34 @@
#endif
}
-void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateZeroArgsUnoptimizedStaticCallForEntryKind(assembler,
+void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub() {
+ GenerateZeroArgsUnoptimizedStaticCallForEntryKind(this,
CodeEntryKind::kNormal);
__ BindUncheckedEntryPoint();
- GenerateZeroArgsUnoptimizedStaticCallForEntryKind(assembler,
+ GenerateZeroArgsUnoptimizedStaticCallForEntryKind(this,
CodeEntryKind::kUnchecked);
}
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// ECX: ICData
// ESP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// Stub for compiling a function and jumping to the compiled code.
// ARGS_DESC_REG: Arguments descriptor.
// FUNCTION_REG: Function.
-void StubCodeCompiler::GenerateLazyCompileStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateLazyCompileStub() {
__ EnterStubFrame();
__ pushl(ARGS_DESC_REG); // Preserve arguments descriptor array.
__ pushl(FUNCTION_REG); // Pass function.
@@ -2269,7 +2237,7 @@
}
// ECX: Contains an ICData.
-void StubCodeCompiler::GenerateICCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2287,8 +2255,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2304,7 +2271,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRuntimeCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2321,7 +2288,7 @@
}
// Called only from unoptimized code.
-void StubCodeCompiler::GenerateDebugStepCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDebugStepCheckStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2568,29 +2535,29 @@
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype1TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 1);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype3TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 3);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype5TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype5TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 5);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype7TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype7TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 7);
}
// Return the current stack pointer address, used to do stack alignment checks.
// TOS + 0: return address
// Result in EAX.
-void StubCodeCompiler::GenerateGetCStackPointerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateGetCStackPointerStub() {
__ leal(EAX, Address(ESP, target::kWordSize));
__ ret();
}
@@ -2602,7 +2569,7 @@
// TOS + 3: frame_pointer
// TOS + 4: thread
// No Result.
-void StubCodeCompiler::GenerateJumpToFrameStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateJumpToFrameStub() {
__ movl(THR, Address(ESP, 4 * target::kWordSize)); // Load target thread.
__ movl(EBP,
Address(ESP, 3 * target::kWordSize)); // Load target frame_pointer.
@@ -2641,7 +2608,7 @@
//
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateRunExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRunExceptionHandlerStub() {
ASSERT(kExceptionObjectReg == EAX);
ASSERT(kStackTraceObjectReg == EDX);
__ movl(EBX, Address(THR, target::Thread::resume_pc_offset()));
@@ -2665,7 +2632,7 @@
// Deoptimize a frame on the call stack before rewinding.
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateDeoptForRewindStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptForRewindStub() {
// Push the deopt pc.
__ pushl(Address(THR, target::Thread::resume_pc_offset()));
GenerateDeoptimizationSequence(assembler, kEagerDeopt);
@@ -2680,7 +2647,7 @@
// Calls to the runtime to optimize the given function.
// EBX: function to be reoptimized.
// ARGS_DESC_REG: argument descriptor (preserved).
-void StubCodeCompiler::GenerateOptimizeFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizeFunctionStub() {
__ movl(CODE_REG, Address(THR, target::Thread::optimize_stub_offset()));
__ EnterStubFrame();
__ pushl(ARGS_DESC_REG);
@@ -2756,8 +2723,7 @@
// TOS + 1: right argument.
// TOS + 2: left argument.
// Returns ZF set.
-void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub() {
#if !defined(PRODUCT)
// Check single stepping.
Label stepping, done_stepping;
@@ -2790,8 +2756,7 @@
// TOS + 1: right argument.
// TOS + 2: left argument.
// Returns ZF set.
-void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub() {
const Register left = EAX;
const Register right = EDX;
const Register temp = ECX;
@@ -2808,7 +2773,7 @@
// EBX: target entry point
// FUNCTION_REG: target function
// ARGS_DESC_REG: argument descriptor
-void StubCodeCompiler::GenerateMegamorphicCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateMegamorphicCallStub() {
// Jump if receiver is a smi.
Label smi_case;
// Check if object (in tmp) is a Smi.
@@ -2880,21 +2845,20 @@
__ Bind(&miss);
__ popl(EBX); // restore receiver
- GenerateSwitchableCallMissStub(assembler);
+ GenerateSwitchableCallMissStub();
}
-void StubCodeCompiler::GenerateICCallThroughCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallThroughCodeStub() {
__ int3(); // AOT only.
}
-void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub() {
__ int3(); // AOT only.
}
// Called from switchable IC calls.
// EBX: receiver
-void StubCodeCompiler::GenerateSwitchableCallMissStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSwitchableCallMissStub() {
__ movl(CODE_REG,
Address(THR, target::Thread::switchable_call_miss_stub_offset()));
__ EnterStubFrame();
@@ -2916,7 +2880,7 @@
__ jmp(EAX);
}
-void StubCodeCompiler::GenerateSingleTargetCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSingleTargetCallStub() {
__ int3(); // AOT only.
}
@@ -2937,8 +2901,7 @@
return static_cast<ScaleFactor>(0);
}
-void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid) {
+void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(intptr_t cid) {
const intptr_t element_size = TypedDataElementSizeInBytes(cid);
const intptr_t max_len = TypedDataMaxNewSpaceElements(cid);
ScaleFactor scale_factor = GetScaleFactor(element_size);
diff --git a/runtime/vm/compiler/stub_code_compiler_riscv.cc b/runtime/vm/compiler/stub_code_compiler_riscv.cc
index 0b0d26c..64ae49d 100644
--- a/runtime/vm/compiler/stub_code_compiler_riscv.cc
+++ b/runtime/vm/compiler/stub_code_compiler_riscv.cc
@@ -34,8 +34,7 @@
//
// WARNING: This might clobber all registers except for [A0], [THR] and [FP].
// The caller should simply call LeaveStubFrame() and return.
-void StubCodeCompiler::EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers) {
+void StubCodeCompiler::EnsureIsNewOrRemembered(bool preserve_registers) {
// If the object is not remembered we call a leaf-runtime to add it to the
// remembered set.
Label done;
@@ -60,7 +59,7 @@
// SP + 8*T4 : address of return value.
// T5 : address of the runtime function to call.
// T4 : number of arguments to the call.
-void StubCodeCompiler::GenerateCallToRuntimeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallToRuntimeStub() {
const intptr_t thread_offset = target::NativeArguments::thread_offset();
const intptr_t argc_tag_offset = target::NativeArguments::argc_tag_offset();
const intptr_t argv_offset = target::NativeArguments::argv_offset();
@@ -160,7 +159,6 @@
}
void StubCodeCompiler::GenerateSharedStubGeneric(
- Assembler* assembler,
bool save_fpu_registers,
intptr_t self_code_stub_offset_from_thread,
bool allow_return,
@@ -188,7 +186,6 @@
}
void StubCodeCompiler::GenerateSharedStub(
- Assembler* assembler,
bool save_fpu_registers,
const RuntimeEntry* target,
intptr_t self_code_stub_offset_from_thread,
@@ -207,12 +204,12 @@
SharedSlowPathStubABI::kResultReg)));
}
};
- GenerateSharedStubGeneric(assembler, save_fpu_registers,
+ GenerateSharedStubGeneric(save_fpu_registers,
self_code_stub_offset_from_thread, allow_return,
perform_runtime_call);
}
-void StubCodeCompiler::GenerateEnterSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateEnterSafepointStub() {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
@@ -253,13 +250,12 @@
__ ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointStub() {
GenerateExitSafepointStubCommon(
assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
}
-void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub() {
GenerateExitSafepointStubCommon(
assembler,
kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
@@ -274,8 +270,7 @@
// On exit:
// S3: clobbered, although normally callee-saved
// Stack: preserved, CSP == SP
-void StubCodeCompiler::GenerateCallNativeThroughSafepointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNativeThroughSafepointStub() {
COMPILE_ASSERT(IsAbiPreservedRegister(S3));
__ mv(S3, RA);
__ LoadImmediate(T1, target::Thread::exit_through_ffi());
@@ -299,7 +294,6 @@
#if !defined(DART_PRECOMPILER)
void StubCodeCompiler::GenerateJITCallbackTrampolines(
- Assembler* assembler,
intptr_t next_callback_id) {
#if defined(USING_SIMULATOR)
// TODO(37299): FFI is not support in SIMRISCV32/64.
@@ -421,7 +415,6 @@
// T1: The extracted method.
// T4: The type_arguments_field_offset (or 0)
void StubCodeCompiler::GenerateBuildMethodExtractorStub(
- Assembler* assembler,
const Code& closure_allocation_stub,
const Code& context_allocation_stub,
bool generic) {
@@ -513,8 +506,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateDispatchTableNullErrorStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDispatchTableNullErrorStub() {
__ EnterStubFrame();
__ SmiTag(DispatchTableNullErrorABI::kClassIdReg);
__ PushRegister(DispatchTableNullErrorABI::kClassIdReg);
@@ -523,8 +515,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateRangeError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateRangeError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
// If the generated code has unboxed index/length we need to box them before
// calling the runtime entry.
@@ -569,22 +560,21 @@
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::range_error_shared_with_fpu_regs_stub_offset()
: target::Thread::range_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false, perform_runtime_call);
}
-void StubCodeCompiler::GenerateWriteError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateWriteError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
__ CallRuntime(kWriteErrorRuntimeEntry, /*argument_count=*/0);
__ Breakpoint();
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::write_error_shared_with_fpu_regs_stub_offset()
: target::Thread::write_error_shared_without_fpu_regs_stub_offset(),
@@ -684,14 +674,14 @@
__ ret();
}
-void StubCodeCompiler::GenerateCallNoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
target::Thread::no_scope_native_wrapper_entry_point_offset()));
}
-void StubCodeCompiler::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallAutoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -704,7 +694,7 @@
// R5 : address of the native function to call.
// R2 : address of first argument in argument array.
// R1 : argc_tag including number of arguments and function kind.
-void StubCodeCompiler::GenerateCallBootstrapNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallBootstrapNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -713,7 +703,7 @@
// Input parameters:
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateCallStaticFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallStaticFunctionStub() {
// Create a stub frame as we are pushing some objects on the stack before
// calling into the runtime.
__ EnterStubFrame();
@@ -735,7 +725,7 @@
// Called from a static call only when an invalid code has been entered
// (invalid because its function was optimized or deoptimized).
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateFixCallersTargetStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateFixCallersTargetStub() {
Label monomorphic;
__ BranchOnMonomorphicCheckedEntryJIT(&monomorphic);
@@ -786,8 +776,7 @@
// Called from object allocate instruction when the allocation stub has been
// disabled.
-void StubCodeCompiler::GenerateFixAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -808,8 +797,7 @@
// Called from object allocate instruction when the allocation stub for a
// generic class has been disabled.
-void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -1029,8 +1017,7 @@
}
// A0: result, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(TMP, kZapCodeReg);
__ PushRegister(TMP);
@@ -1044,8 +1031,7 @@
// A0: exception, must be preserved
// A1: stacktrace, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ LoadImmediate(TMP, kZapCodeReg);
__ PushRegister(TMP);
@@ -1057,7 +1043,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateDeoptimizeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeStub() {
__ PushRegister(CODE_REG);
__ lx(CODE_REG, Address(THR, target::Thread::deoptimize_stub_offset()));
GenerateDeoptimizationSequence(assembler, kEagerDeopt);
@@ -1114,8 +1100,7 @@
// Input:
// ARGS_DESC_REG - arguments descriptor
// IC_DATA_REG - icdata/megamorphic_cache
-void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub() {
GenerateNoSuchMethodDispatcherBody(assembler);
}
@@ -1128,7 +1113,7 @@
// AllocateArrayABI::kResultReg: newly allocated array.
// Clobbered:
// T3, T4, T5
-void StubCodeCompiler::GenerateAllocateArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateArrayStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
// Compute the size to be allocated, it is based on the array length
@@ -1278,8 +1263,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1291,15 +1275,13 @@
}
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
- GenerateSharedStub(assembler, /*save_fpu_registers=*/true,
- &kAllocateMintRuntimeEntry,
+ GenerateSharedStub(/*save_fpu_registers=*/true, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_with_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1312,7 +1294,7 @@
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
+ /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_without_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
@@ -1326,7 +1308,7 @@
// A2 : arguments array.
// A3 : current thread.
// Beware! TMP == A3
-void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInvokeDartCodeStub() {
__ Comment("InvokeDartCodeStub");
__ EnterFrame(1 * target::kWordSize);
@@ -1529,7 +1511,7 @@
// T1: number of context variables.
// Output:
// A0: new allocated Context object.
-void StubCodeCompiler::GenerateAllocateContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1578,7 +1560,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// A0: new object
// Restore the frame pointer.
@@ -1591,7 +1573,7 @@
// T5: context variable to clone.
// Output:
// A0: new allocated Context object.
-void StubCodeCompiler::GenerateCloneContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1650,14 +1632,14 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// A0: new object
__ LeaveStubFrame();
__ ret();
}
-void StubCodeCompiler::GenerateWriteBarrierWrappersStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierWrappersStub() {
for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
if ((kDartAvailableCpuRegs & (1 << i)) == 0) continue;
@@ -1863,11 +1845,11 @@
}
}
-void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, false);
}
-void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateArrayWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, true);
}
@@ -1971,16 +1953,15 @@
}
// Called for inline allocation of objects (any class).
-void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/false);
}
-void StubCodeCompiler::GenerateAllocateObjectParameterizedStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectParameterizedStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/true);
}
-void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectSlowStub() {
if (!FLAG_precompiled_mode) {
__ lx(CODE_REG,
Address(THR, target::Thread::call_to_runtime_stub_offset()));
@@ -2005,7 +1986,7 @@
// Write-barrier elimination is enabled for [cls] and we therefore need to
// ensure that the object is in new-space or has remembered bit set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
__ LeaveStubFrame();
@@ -2014,7 +1995,6 @@
// Called for inline allocation of objects.
void StubCodeCompiler::GenerateAllocationStubForClass(
- Assembler* assembler,
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const Code& allocate_object,
@@ -2087,8 +2067,7 @@
// RA : return address.
// SP : address of last argument.
// S4: arguments descriptor array.
-void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub() {
__ EnterStubFrame();
// Load the receiver.
@@ -2126,8 +2105,7 @@
// S5: inline cache data object.
// Cannot use function object from ICData as it may be the inlined
// function and not the top-scope function.
-void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement() {
if (FLAG_precompiled_mode) {
__ Breakpoint();
return;
@@ -2143,8 +2121,7 @@
}
// Loads function into 'func_reg'.
-void StubCodeCompiler::GenerateUsageCounterIncrement(Assembler* assembler,
- Register func_reg) {
+void StubCodeCompiler::GenerateUsageCounterIncrement(Register func_reg) {
if (FLAG_precompiled_mode) {
__ trap();
return;
@@ -2264,7 +2241,6 @@
// - Match found -> jump to target.
// - Match not found -> jump to IC miss.
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -2283,9 +2259,9 @@
}
if (optimized == kOptimized) {
- GenerateOptimizedUsageCounterIncrement(assembler);
+ GenerateOptimizedUsageCounterIncrement();
} else {
- GenerateUsageCounterIncrement(assembler, /*scratch=*/T0);
+ GenerateUsageCounterIncrement(/*scratch=*/T0);
}
ASSERT(exactness == kIgnoreExactness); // Unimplemented.
@@ -2508,67 +2484,63 @@
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiAddInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateSmiLessInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiLessInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// A0: receiver
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiEqualInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// A0: receiver
// S5: ICData
// A6: Function
// RA: return address
-void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kIgnoreExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kIgnoreExactness);
}
// A0: receiver
@@ -2576,8 +2548,7 @@
// A6: Function
// RA: return address
void StubCodeCompiler::
- GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+ GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub() {
__ Stop("Unimplemented");
}
@@ -2585,19 +2556,17 @@
// S5: ICData
// A6: Function
// RA: return address
-void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kOptimized, kInstanceCall, kIgnoreExactness);
}
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub() {
GenerateRecordEntryPoint(assembler);
- GenerateUsageCounterIncrement(assembler, /* scratch */ T0);
+ GenerateUsageCounterIncrement(/* scratch */ T0);
#if defined(DEBUG)
{
@@ -2673,28 +2642,26 @@
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ T0);
- GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kUnoptimized, kStaticCall, kIgnoreExactness);
+void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ T0);
+ GenerateNArgsCheckInlineCacheStub(1, kStaticCallMissHandlerOneArgRuntimeEntry,
+ Token::kILLEGAL, kUnoptimized, kStaticCall,
+ kIgnoreExactness);
}
// S5: ICData
// RA: return address
-void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateUsageCounterIncrement(assembler, /* scratch */ T0);
+void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub() {
+ GenerateUsageCounterIncrement(/* scratch */ T0);
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// Stub for compiling a function and jumping to the compiled code.
// ARGS_DESC_REG: Arguments descriptor.
// FUNCTION_REG: Function.
-void StubCodeCompiler::GenerateLazyCompileStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateLazyCompileStub() {
// Preserve arg desc.
__ EnterStubFrame();
// Save arguments descriptor and pass function.
@@ -2713,7 +2680,7 @@
// A0: Receiver
// S5: ICData
-void StubCodeCompiler::GenerateICCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2733,8 +2700,7 @@
}
// S5: ICData
-void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2751,7 +2717,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRuntimeCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2767,7 +2733,7 @@
}
// Called only from unoptimized code. All relevant registers have been saved.
-void StubCodeCompiler::GenerateDebugStepCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDebugStepCheckStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2996,26 +2962,26 @@
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype1TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 1);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype3TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 3);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype5TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype5TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 5);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype7TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype7TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 7);
}
-void StubCodeCompiler::GenerateGetCStackPointerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateGetCStackPointerStub() {
__ mv(A0, SP);
__ ret();
}
@@ -3029,7 +2995,7 @@
// Does not return.
//
// Notice: We need to keep this in sync with `Simulator::JumpToFrame()`.
-void StubCodeCompiler::GenerateJumpToFrameStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateJumpToFrameStub() {
ASSERT(kExceptionObjectReg == A0);
ASSERT(kStackTraceObjectReg == A1);
__ mv(CALLEE_SAVED_TEMP, A0); // Program counter.
@@ -3078,7 +3044,7 @@
//
// The arguments are stored in the Thread object.
// Does not return.
-void StubCodeCompiler::GenerateRunExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRunExceptionHandlerStub() {
// Exception object.
ASSERT(kExceptionObjectReg == A0);
__ LoadFromOffset(A0, THR, target::Thread::active_exception_offset());
@@ -3096,7 +3062,7 @@
// Deoptimize a frame on the call stack before rewinding.
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateDeoptForRewindStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptForRewindStub() {
// Push zap value instead of CODE_REG.
__ LoadImmediate(TMP, kZapCodeReg);
__ PushRegister(TMP);
@@ -3115,7 +3081,7 @@
// Calls to the runtime to optimize the given function.
// A0: function to be re-optimized.
// ARGS_DESC_REG: argument descriptor (preserved).
-void StubCodeCompiler::GenerateOptimizeFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizeFunctionStub() {
__ LoadFromOffset(CODE_REG, THR, target::Thread::optimize_stub_offset());
__ EnterStubFrame();
@@ -3203,8 +3169,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return TMP set to 0 if equal.
-void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub() {
#if !defined(PRODUCT)
// Check single stepping.
Label stepping, done_stepping;
@@ -3237,8 +3202,7 @@
// SP + 4: left operand.
// SP + 0: right operand.
// Return TMP set to 0 if equal.
-void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub() {
const Register left = A0;
const Register right = A1;
__ LoadFromOffset(left, SP, 1 * target::kWordSize);
@@ -3254,7 +3218,7 @@
// FUNCTION_REG: target function
// CODE_REG: target Code
// ARGS_DESC_REG: arguments descriptor
-void StubCodeCompiler::GenerateMegamorphicCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateMegamorphicCallStub() {
// Jump if receiver is a smi.
Label smi_case;
__ BranchIfSmi(A0, &smi_case);
@@ -3326,13 +3290,13 @@
__ j(&cid_loaded);
__ Bind(&miss);
- GenerateSwitchableCallMissStub(assembler);
+ GenerateSwitchableCallMissStub();
}
// Input:
// A0 - receiver
// IC_DATA_REG - icdata
-void StubCodeCompiler::GenerateICCallThroughCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallThroughCodeStub() {
Label loop, found, miss;
__ lx(T1, FieldAddress(IC_DATA_REG, target::ICData::entries_offset()));
__ lx(ARGS_DESC_REG,
@@ -3383,8 +3347,7 @@
// S5: MonomorphicSmiableCall object
//
// T1,T2: clobbered
-void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub() {
Label miss;
__ LoadClassIdMayBeSmi(T1, A0);
@@ -3405,7 +3368,7 @@
// Called from switchable IC calls.
// A0: receiver
-void StubCodeCompiler::GenerateSwitchableCallMissStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSwitchableCallMissStub() {
__ lx(CODE_REG,
Address(THR, target::Thread::switchable_call_miss_stub_offset()));
__ EnterStubFrame();
@@ -3430,7 +3393,7 @@
// S5: SingleTargetCache
// Passed to target:
// CODE_REG: target Code object
-void StubCodeCompiler::GenerateSingleTargetCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSingleTargetCallStub() {
Label miss;
__ LoadClassIdMayBeSmi(A1, A0);
__ lhu(T2, FieldAddress(S5, target::SingleTargetCache::lower_limit_offset()));
@@ -3478,8 +3441,7 @@
return -1;
}
-void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid) {
+void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(intptr_t cid) {
const intptr_t element_size = TypedDataElementSizeInBytes(cid);
const intptr_t max_len = TypedDataMaxNewSpaceElements(cid);
const intptr_t scale_shift = GetScaleFactor(element_size);
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index d9578dd..eacb4a6 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -37,8 +37,7 @@
//
// WARNING: This might clobber all registers except for [RAX], [THR] and [FP].
// The caller should simply call LeaveStubFrame() and return.
-void StubCodeCompiler::EnsureIsNewOrRemembered(Assembler* assembler,
- bool preserve_registers) {
+void StubCodeCompiler::EnsureIsNewOrRemembered(bool preserve_registers) {
// If the object is not remembered we call a leaf-runtime to add it to the
// remembered set.
Label done;
@@ -159,7 +158,7 @@
// RBX : address of the runtime function to call.
// R10 : number of arguments to the call.
// Must preserve callee saved registers R12 and R13.
-void StubCodeCompiler::GenerateCallToRuntimeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallToRuntimeStub() {
const intptr_t thread_offset = target::NativeArguments::thread_offset();
const intptr_t argc_tag_offset = target::NativeArguments::argc_tag_offset();
const intptr_t argv_offset = target::NativeArguments::argv_offset();
@@ -253,7 +252,6 @@
}
void StubCodeCompiler::GenerateSharedStubGeneric(
- Assembler* assembler,
bool save_fpu_registers,
intptr_t self_code_stub_offset_from_thread,
bool allow_return,
@@ -291,7 +289,6 @@
}
void StubCodeCompiler::GenerateSharedStub(
- Assembler* assembler,
bool save_fpu_registers,
const RuntimeEntry* target,
intptr_t self_code_stub_offset_from_thread,
@@ -310,12 +307,12 @@
RAX);
}
};
- GenerateSharedStubGeneric(assembler, save_fpu_registers,
+ GenerateSharedStubGeneric(save_fpu_registers,
self_code_stub_offset_from_thread, allow_return,
perform_runtime_call);
}
-void StubCodeCompiler::GenerateEnterSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateEnterSafepointStub() {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
__ PushRegisters(all_registers);
@@ -353,13 +350,12 @@
__ ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointStub() {
GenerateExitSafepointStubCommon(
assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
}
-void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub() {
GenerateExitSafepointStubCommon(
assembler,
kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
@@ -374,8 +370,7 @@
// On exit:
// Stack pointer lowered by shadow space
// RBX, R12 clobbered
-void StubCodeCompiler::GenerateCallNativeThroughSafepointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNativeThroughSafepointStub() {
__ movq(R12, compiler::Immediate(target::Thread::exit_through_ffi()));
__ TransitionGeneratedToNative(RBX, FPREG, R12,
/*enter_safepoint=*/true);
@@ -396,7 +391,6 @@
CallingConventions::kFpuArgumentRegisters);
void StubCodeCompiler::GenerateJITCallbackTrampolines(
- Assembler* assembler,
intptr_t next_callback_id) {
Label done;
@@ -511,7 +505,6 @@
// RBX: The extracted method.
// RDX: The type_arguments_field_offset (or 0)
void StubCodeCompiler::GenerateBuildMethodExtractorStub(
- Assembler* assembler,
const Code& closure_allocation_stub,
const Code& context_allocation_stub,
bool generic) {
@@ -602,8 +595,7 @@
__ Ret();
}
-void StubCodeCompiler::GenerateDispatchTableNullErrorStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDispatchTableNullErrorStub() {
__ EnterStubFrame();
__ SmiTag(DispatchTableNullErrorABI::kClassIdReg);
__ PushRegister(DispatchTableNullErrorABI::kClassIdReg);
@@ -612,8 +604,7 @@
__ Breakpoint();
}
-void StubCodeCompiler::GenerateRangeError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateRangeError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
// If the generated code has unboxed index/length we need to box them before
// calling the runtime entry.
@@ -664,22 +655,21 @@
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::range_error_shared_with_fpu_regs_stub_offset()
: target::Thread::range_error_shared_without_fpu_regs_stub_offset(),
/*allow_return=*/false, perform_runtime_call);
}
-void StubCodeCompiler::GenerateWriteError(Assembler* assembler,
- bool with_fpu_regs) {
+void StubCodeCompiler::GenerateWriteError(bool with_fpu_regs) {
auto perform_runtime_call = [&]() {
__ CallRuntime(kWriteErrorRuntimeEntry, /*argument_count=*/0);
__ Breakpoint();
};
GenerateSharedStubGeneric(
- assembler, /*save_fpu_registers=*/with_fpu_regs,
+ /*save_fpu_registers=*/with_fpu_regs,
with_fpu_regs
? target::Thread::write_error_shared_with_fpu_regs_stub_offset()
: target::Thread::write_error_shared_without_fpu_regs_stub_offset(),
@@ -781,14 +771,14 @@
__ ret();
}
-void StubCodeCompiler::GenerateCallNoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallNoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
target::Thread::no_scope_native_wrapper_entry_point_offset()));
}
-void StubCodeCompiler::GenerateCallAutoScopeNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallAutoScopeNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -801,7 +791,7 @@
// RAX : address of first argument in argument array.
// RBX : address of the native function to call.
// R10 : argc_tag including number of arguments and function kind.
-void StubCodeCompiler::GenerateCallBootstrapNativeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallBootstrapNativeStub() {
GenerateCallNativeWithWrapperStub(
assembler,
Address(THR,
@@ -810,7 +800,7 @@
// Input parameters:
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateCallStaticFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCallStaticFunctionStub() {
__ EnterStubFrame();
__ pushq(ARGS_DESC_REG); // Preserve arguments descriptor array.
// Setup space on stack for return value.
@@ -828,7 +818,7 @@
// Called from a static call only when an invalid code has been entered
// (invalid because its function was optimized or deoptimized).
// ARGS_DESC_REG: arguments descriptor array.
-void StubCodeCompiler::GenerateFixCallersTargetStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateFixCallersTargetStub() {
Label monomorphic;
__ BranchOnMonomorphicCheckedEntryJIT(&monomorphic);
@@ -874,8 +864,7 @@
// Called from object allocate instruction when the allocation stub has been
// disabled.
-void StubCodeCompiler::GenerateFixAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -894,8 +883,7 @@
// Called from object allocate instruction when the allocation stub for a
// generic class has been disabled.
-void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateFixParameterizedAllocationStubTargetStub() {
// Load code pointer to this stub from the thread:
// The one that is passed in, is not correct - it points to the code object
// that needs to be replaced.
@@ -1113,8 +1101,7 @@
}
// RAX: result, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromReturnStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ pushq(Immediate(kZapCodeReg));
// Return address for "call" to deopt stub.
@@ -1127,8 +1114,7 @@
// RAX: exception, must be preserved
// RDX: stacktrace, must be preserved
-void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeLazyFromThrowStub() {
// Push zap value instead of CODE_REG for lazy deopt.
__ pushq(Immediate(kZapCodeReg));
// Return address for "call" to deopt stub.
@@ -1139,7 +1125,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateDeoptimizeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptimizeStub() {
__ popq(TMP);
__ pushq(CODE_REG);
__ pushq(TMP);
@@ -1204,8 +1190,7 @@
// Input:
// IC_DATA_REG - icdata/megamorphic_cache
// RDX - receiver
-void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateNoSuchMethodDispatcherStub() {
__ EnterStubFrame();
__ movq(ARGS_DESC_REG,
@@ -1225,7 +1210,7 @@
// AllocateArrayABI::kResultReg: newly allocated array.
// Clobbered:
// RCX, RDI, R12
-void StubCodeCompiler::GenerateAllocateArrayStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateArrayStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
// Compute the size to be allocated, it is based on the array length
@@ -1355,14 +1340,13 @@
// Write-barrier elimination might be enabled for this array (depending on the
// array length). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler);
+ EnsureIsNewOrRemembered();
__ LeaveStubFrame();
__ ret();
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1374,15 +1358,13 @@
}
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
- GenerateSharedStub(assembler, /*save_fpu_registers=*/true,
- &kAllocateMintRuntimeEntry,
+ GenerateSharedStub(/*save_fpu_registers=*/true, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_with_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
}
-void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateMintSharedWithoutFPURegsStub() {
// For test purpose call allocation stub without inline allocation attempt.
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1395,7 +1377,7 @@
COMPILE_ASSERT(AllocateMintABI::kResultReg ==
SharedSlowPathStubABI::kResultReg);
GenerateSharedStub(
- assembler, /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
+ /*save_fpu_registers=*/false, &kAllocateMintRuntimeEntry,
target::Thread::allocate_mint_without_fpu_regs_stub_offset(),
/*allow_return=*/true,
/*store_runtime_result_in_result_register=*/true);
@@ -1412,7 +1394,7 @@
// RSI : arguments descriptor array.
// RDX : arguments array.
// RCX : current thread.
-void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateInvokeDartCodeStub() {
__ EnterFrame(0);
const Register kTargetReg = CallingConventions::kArg1Reg;
@@ -1643,7 +1625,7 @@
// RAX: new allocated Context object.
// Clobbered:
// R9, R13
-void StubCodeCompiler::GenerateAllocateContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateContextStub() {
__ LoadObject(R9, NullObject());
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1696,7 +1678,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// RAX: new object
// Restore the frame pointer.
@@ -1712,7 +1694,7 @@
// RAX: new allocated Context object.
// Clobbered:
// R10, R13
-void StubCodeCompiler::GenerateCloneContextStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateCloneContextStub() {
if (!FLAG_use_slow_path && FLAG_inline_alloc) {
Label slow_case;
@@ -1769,7 +1751,7 @@
// Write-barrier elimination might be enabled for this context (depending on
// the size). To be sure we will check if the allocated object is in old
// space and if so call a leaf runtime to add it to the remembered set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// RAX: new object
// Restore the frame pointer.
@@ -1778,7 +1760,7 @@
__ ret();
}
-void StubCodeCompiler::GenerateWriteBarrierWrappersStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierWrappersStub() {
for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
if ((kDartAvailableCpuRegs & (1 << i)) == 0) continue;
@@ -1805,8 +1787,7 @@
COMPILE_ASSERT(kWriteBarrierObjectReg == RDX);
COMPILE_ASSERT(kWriteBarrierValueReg == RAX);
COMPILE_ASSERT(kWriteBarrierSlotReg == R13);
-static void GenerateWriteBarrierStubHelper(Assembler* assembler,
- bool cards) {
+static void GenerateWriteBarrierStubHelper(Assembler* assembler, bool cards) {
Label add_to_mark_stack, remember_card, lost_race;
__ testq(RAX, Immediate(1 << target::ObjectAlignment::kNewObjectBitPosition));
__ j(ZERO, &add_to_mark_stack);
@@ -1956,11 +1937,11 @@
}
}
-void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, false);
}
-void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateArrayWriteBarrierStub() {
GenerateWriteBarrierStubHelper(assembler, true);
}
@@ -2066,16 +2047,15 @@
}
// Called for inline allocation of objects (any class).
-void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/false);
}
-void StubCodeCompiler::GenerateAllocateObjectParameterizedStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectParameterizedStub() {
GenerateAllocateObjectHelper(assembler, /*is_cls_parameterized=*/true);
}
-void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateAllocateObjectSlowStub() {
if (!FLAG_precompiled_mode) {
__ movq(CODE_REG,
Address(THR, target::Thread::call_to_runtime_stub_offset()));
@@ -2107,7 +2087,7 @@
// Write-barrier elimination is enabled for [cls] and we therefore need to
// ensure that the object is in new-space or has remembered bit set.
- EnsureIsNewOrRemembered(assembler, /*preserve_registers=*/false);
+ EnsureIsNewOrRemembered(/*preserve_registers=*/false);
// AllocateObjectABI::kResultReg: new object
// Restore the frame pointer.
@@ -2118,7 +2098,6 @@
// Called for inline allocation of objects.
void StubCodeCompiler::GenerateAllocationStubForClass(
- Assembler* assembler,
UnresolvedPcRelativeCalls* unresolved_calls,
const Class& cls,
const Code& allocate_object,
@@ -2187,8 +2166,7 @@
// RSP : points to return address.
// RSP + 8 : address of last argument.
// R10 : arguments descriptor array.
-void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateCallClosureNoSuchMethodStub() {
__ EnterStubFrame();
// Load the receiver.
@@ -2229,8 +2207,7 @@
// Cannot use function object from ICData as it may be the inlined
// function and not the top-scope function.
-void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedUsageCounterIncrement() {
if (FLAG_precompiled_mode) {
__ Breakpoint();
return;
@@ -2254,8 +2231,7 @@
}
// Loads function into 'temp_reg', preserves IC_DATA_REG.
-void StubCodeCompiler::GenerateUsageCounterIncrement(Assembler* assembler,
- Register temp_reg) {
+void StubCodeCompiler::GenerateUsageCounterIncrement(Register temp_reg) {
if (FLAG_precompiled_mode) {
__ Breakpoint();
return;
@@ -2372,7 +2348,6 @@
// - Match found -> jump to target.
// - Match not found -> jump to IC miss.
void StubCodeCompiler::GenerateNArgsCheckInlineCacheStub(
- Assembler* assembler,
intptr_t num_args,
const RuntimeEntry& handle_ic_miss,
Token::Kind kind,
@@ -2390,9 +2365,9 @@
}
if (optimized == kOptimized) {
- GenerateOptimizedUsageCounterIncrement(assembler);
+ GenerateOptimizedUsageCounterIncrement();
} else {
- GenerateUsageCounterIncrement(assembler, /* scratch */ RCX);
+ GenerateUsageCounterIncrement(/* scratch */ RCX);
}
ASSERT(num_args == 1 || num_args == 2);
@@ -2648,69 +2623,65 @@
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgCheckInlineCacheWithExactnessCheckStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kCheckExactness);
}
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateSmiAddInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiAddInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateSmiLessInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiLessInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kLT, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateSmiEqualInlineCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSmiEqualInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ,
- kUnoptimized, kInstanceCall, kIgnoreExactness);
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kEQ, kUnoptimized,
+ kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
// RBX: ICData
// RDI: Function
// RSP[0]: return address
-void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOneArgOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kIgnoreExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kIgnoreExactness);
}
// RDX: receiver
@@ -2718,30 +2689,27 @@
// RDI: Function
// RSP[0]: return address
void StubCodeCompiler::
- GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
- Assembler* assembler) {
+ GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kOptimized, kInstanceCall, kCheckExactness);
+ 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL, kOptimized,
+ kInstanceCall, kCheckExactness);
}
// RDX: receiver
// RBX: ICData
// RDI: Function
// RSP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsOptimizedCheckInlineCacheStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kOptimized, kInstanceCall, kIgnoreExactness);
}
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateZeroArgsUnoptimizedStaticCallStub() {
GenerateRecordEntryPoint(assembler);
- GenerateUsageCounterIncrement(assembler, /* scratch */ RCX);
+ GenerateUsageCounterIncrement(/* scratch */ RCX);
#if defined(DEBUG)
{
Label ok;
@@ -2818,26 +2786,24 @@
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub(
- Assembler* assembler) {
- GenerateNArgsCheckInlineCacheStub(
- assembler, 1, kStaticCallMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
- kUnoptimized, kStaticCall, kIgnoreExactness);
+void StubCodeCompiler::GenerateOneArgUnoptimizedStaticCallStub() {
+ GenerateNArgsCheckInlineCacheStub(1, kStaticCallMissHandlerOneArgRuntimeEntry,
+ Token::kILLEGAL, kUnoptimized, kStaticCall,
+ kIgnoreExactness);
}
// RBX: ICData
// RSP[0]: return address
-void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateTwoArgsUnoptimizedStaticCallStub() {
GenerateNArgsCheckInlineCacheStub(
- assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
+ 2, kStaticCallMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL,
kUnoptimized, kStaticCall, kIgnoreExactness);
}
// Stub for compiling a function and jumping to the compiled code.
// ARGS_DESC_REG: Arguments descriptor.
// FUNCTION_REG: Function.
-void StubCodeCompiler::GenerateLazyCompileStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateLazyCompileStub() {
__ EnterStubFrame();
__ pushq(ARGS_DESC_REG); // Preserve arguments descriptor array.
__ pushq(FUNCTION_REG); // Pass function.
@@ -2855,7 +2821,7 @@
// RBX: Contains an ICData.
// TOS(0): return address (Dart code).
-void StubCodeCompiler::GenerateICCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2874,8 +2840,7 @@
#endif // defined(PRODUCT)
}
-void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptStaticCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2893,7 +2858,7 @@
}
// TOS(0): return address (Dart code).
-void StubCodeCompiler::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRuntimeCallBreakpointStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -2909,7 +2874,7 @@
}
// Called only from unoptimized code.
-void StubCodeCompiler::GenerateDebugStepCheckStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDebugStepCheckStub() {
#if defined(PRODUCT)
__ Stop("No debugging in PRODUCT mode");
#else
@@ -3135,22 +3100,22 @@
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype1TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 1);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype3TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 3);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype5TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype5TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 5);
}
// See comment on [GenerateSubtypeNTestCacheStub].
-void StubCodeCompiler::GenerateSubtype7TestCacheStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSubtype7TestCacheStub() {
GenerateSubtypeNTestCacheStub(assembler, 7);
}
@@ -3158,7 +3123,7 @@
// checks.
// TOS + 0: return address
// Result in RAX.
-void StubCodeCompiler::GenerateGetCStackPointerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateGetCStackPointerStub() {
__ leaq(RAX, Address(RSP, target::kWordSize));
__ ret();
}
@@ -3170,7 +3135,7 @@
// Arg3: frame_pointer
// Arg4: thread
// No Result.
-void StubCodeCompiler::GenerateJumpToFrameStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateJumpToFrameStub() {
__ movq(THR, CallingConventions::kArg4Reg);
__ movq(RBP, CallingConventions::kArg3Reg);
__ movq(RSP, CallingConventions::kArg2Reg);
@@ -3211,7 +3176,7 @@
//
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateRunExceptionHandlerStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateRunExceptionHandlerStub() {
ASSERT(kExceptionObjectReg == RAX);
ASSERT(kStackTraceObjectReg == RDX);
__ movq(CallingConventions::kArg1Reg,
@@ -3238,7 +3203,7 @@
// Deoptimize a frame on the call stack before rewinding.
// The arguments are stored in the Thread object.
// No result.
-void StubCodeCompiler::GenerateDeoptForRewindStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateDeoptForRewindStub() {
// Push zap value instead of CODE_REG.
__ pushq(Immediate(kZapCodeReg));
@@ -3259,7 +3224,7 @@
// Calls to the runtime to optimize the given function.
// RDI: function to be reoptimized.
// ARGS_DESC_REG: argument descriptor (preserved).
-void StubCodeCompiler::GenerateOptimizeFunctionStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizeFunctionStub() {
__ movq(CODE_REG, Address(THR, target::Thread::optimize_stub_offset()));
__ EnterStubFrame();
__ pushq(ARGS_DESC_REG); // Preserve args descriptor.
@@ -3323,8 +3288,7 @@
// TOS + 1: right argument.
// TOS + 2: left argument.
// Returns ZF set.
-void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateUnoptimizedIdenticalWithNumberCheckStub() {
#if !defined(PRODUCT)
// Check single stepping.
Label stepping, done_stepping;
@@ -3358,8 +3322,7 @@
// TOS + 1: right argument.
// TOS + 2: left argument.
// Returns ZF set.
-void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateOptimizedIdenticalWithNumberCheckStub() {
const Register left = RAX;
const Register right = RDX;
@@ -3376,7 +3339,7 @@
// FUNCTION_REG: target function
// CODE_REG: target Code
// ARGS_DESC_REG: arguments descriptor
-void StubCodeCompiler::GenerateMegamorphicCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateMegamorphicCallStub() {
// Jump if receiver is a smi.
Label smi_case;
__ testq(RDX, Immediate(kSmiTagMask));
@@ -3451,13 +3414,13 @@
__ jmp(&cid_loaded);
__ Bind(&miss);
- GenerateSwitchableCallMissStub(assembler);
+ GenerateSwitchableCallMissStub();
}
// Input:
// IC_DATA_REG - icdata
// RDX - receiver object
-void StubCodeCompiler::GenerateICCallThroughCodeStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateICCallThroughCodeStub() {
Label loop, found, miss;
__ movq(R13, FieldAddress(IC_DATA_REG, target::ICData::entries_offset()));
__ movq(ARGS_DESC_REG,
@@ -3503,8 +3466,7 @@
__ jmp(RCX);
}
-void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub(
- Assembler* assembler) {
+void StubCodeCompiler::GenerateMonomorphicSmiableCheckStub() {
Label have_cid, miss;
__ movq(RAX, Immediate(kSmiCid));
@@ -3527,7 +3489,7 @@
// Called from switchable IC calls.
// RDX: receiver
-void StubCodeCompiler::GenerateSwitchableCallMissStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSwitchableCallMissStub() {
__ movq(CODE_REG,
Address(THR, target::Thread::switchable_call_miss_stub_offset()));
__ EnterStubFrame();
@@ -3554,7 +3516,7 @@
// RBX: SingleTargetCache
// Passed to target::
// CODE_REG: target Code object
-void StubCodeCompiler::GenerateSingleTargetCallStub(Assembler* assembler) {
+void StubCodeCompiler::GenerateSingleTargetCallStub() {
Label miss;
__ LoadClassIdMayBeSmi(RAX, RDX);
__ movzxw(R9,
@@ -3608,8 +3570,7 @@
return static_cast<ScaleFactor>(0);
}
-void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(Assembler* assembler,
- intptr_t cid) {
+void StubCodeCompiler::GenerateAllocateTypedDataArrayStub(intptr_t cid) {
const intptr_t element_size = TypedDataElementSizeInBytes(cid);
const intptr_t max_len = TypedDataMaxNewSpaceElements(cid);
ScaleFactor scale_factor = GetScaleFactor(element_size);
diff --git a/runtime/vm/ffi_callback_trampolines.cc b/runtime/vm/ffi_callback_trampolines.cc
index fd73c3c..8ce7605 100644
--- a/runtime/vm/ffi_callback_trampolines.cc
+++ b/runtime/vm/ffi_callback_trampolines.cc
@@ -60,8 +60,8 @@
trampoline_pages_.Add(memory);
compiler::Assembler assembler(/*object_pool_builder=*/nullptr);
- compiler::StubCodeCompiler::GenerateJITCallbackTrampolines(
- &assembler, next_callback_id_);
+ compiler::StubCodeCompiler stubCodeCompiler(&assembler);
+ stubCodeCompiler.GenerateJITCallbackTrampolines(next_callback_id_);
MemoryRegion region(memory->address(), memory->size());
assembler.FinalizeInstructions(region);
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 8c74065..9046cc8 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -8193,10 +8193,16 @@
zone, Function::New(signature, symbol, UntaggedFunction::kRegularFunction,
false, false, false, false, false, klass,
TokenPosition::kNoSource));
+
compiler::ObjectPoolBuilder pool_builder;
- const auto& invoke_instantiate_tav =
- Code::Handle(zone, StubCode::Generate("InstantiateTAV", &pool_builder,
- &GenerateInvokeInstantiateTAVStub));
+ SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+ compiler::Assembler assembler(&pool_builder);
+ GenerateInvokeInstantiateTAVStub(&assembler);
+ const Code& invoke_instantiate_tav = Code::Handle(
+ Code::FinalizeCodeAndNotify("InstantiateTAV", nullptr, &assembler,
+ Code::PoolAttachment::kNotAttachPool,
+ /*optimized=*/false));
+
const auto& pool =
ObjectPool::Handle(zone, ObjectPool::NewFromBuilder(pool_builder));
invoke_instantiate_tav.set_object_pool(pool.ptr());
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 916fd1f..95c2617 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -29,7 +29,7 @@
#define STUB_CODE_DECLARE(name) {nullptr, #name},
#else
#define STUB_CODE_DECLARE(name) \
- {nullptr, #name, compiler::StubCodeCompiler::Generate##name##Stub},
+ {nullptr, #name, &compiler::StubCodeCompiler::Generate##name##Stub},
#endif
VM_STUB_CODE_LIST(STUB_CODE_DECLARE)
#undef STUB_CODE_DECLARE
@@ -91,15 +91,15 @@
#undef STUB_CODE_GENERATE
#undef STUB_CODE_SET_OBJECT_POOL
-CodePtr StubCode::Generate(
- const char* name,
- compiler::ObjectPoolBuilder* object_pool_builder,
- void (*GenerateStub)(compiler::Assembler* assembler)) {
+CodePtr StubCode::Generate(const char* name,
+ compiler::ObjectPoolBuilder* object_pool_builder,
+ void (compiler::StubCodeCompiler::*GenerateStub)()) {
auto thread = Thread::Current();
SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
compiler::Assembler assembler(object_pool_builder);
- GenerateStub(&assembler);
+ compiler::StubCodeCompiler stubCodeCompiler(&assembler);
+ (stubCodeCompiler.*GenerateStub)();
const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
name, nullptr, &assembler, Code::PoolAttachment::kNotAttachPool,
/*optimized=*/false));
@@ -221,8 +221,9 @@
compiler::Assembler assembler(wrapper);
compiler::UnresolvedPcRelativeCalls unresolved_calls;
const char* name = cls.ToCString();
- compiler::StubCodeCompiler::GenerateAllocationStubForClass(
- &assembler, &unresolved_calls, cls, allocate_object_stub,
+ compiler::StubCodeCompiler stubCodeCompiler(&assembler);
+ stubCodeCompiler.GenerateAllocationStubForClass(
+ &unresolved_calls, cls, allocate_object_stub,
allocate_object_parametrized_stub);
const auto& static_calls_table =
@@ -316,8 +317,9 @@
compiler::ObjectPoolBuilder object_pool_builder;
compiler::Assembler assembler(pool != nullptr ? pool : &object_pool_builder);
- compiler::StubCodeCompiler::GenerateBuildMethodExtractorStub(
- &assembler, closure_allocation_stub, context_allocation_stub, generic);
+ compiler::StubCodeCompiler stubCodeCompiler(&assembler);
+ stubCodeCompiler.GenerateBuildMethodExtractorStub(
+ closure_allocation_stub, context_allocation_stub, generic);
const char* name = generic ? "BuildGenericMethodExtractor"
: "BuildNonGenericMethodExtractor";
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index 8aeeaad..ab7eb15 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -83,7 +83,7 @@
// code executable area.
static CodePtr Generate(const char* name,
compiler::ObjectPoolBuilder* object_pool_builder,
- void (*GenerateStub)(compiler::Assembler* assembler));
+ void (compiler::StubCodeCompiler::*GenerateStub)());
#endif // !defined(DART_PRECOMPILED_RUNTIME)
static const Code& UnoptimizedStaticCallEntry(intptr_t num_args_tested);
@@ -104,7 +104,7 @@
compiler::ObjectPoolBuilder* opw) { \
return StubCode::Generate( \
"_iso_stub_" #name, opw, \
- compiler::StubCodeCompiler::Generate##name##Stub); \
+ &compiler::StubCodeCompiler::Generate##name##Stub); \
}
VM_STUB_CODE_LIST(GENERATE_STUB);
#undef GENERATE_STUB
@@ -127,7 +127,7 @@
Code* code;
const char* name;
#if !defined(DART_PRECOMPILED_RUNTIME)
- void (*generator)(compiler::Assembler* assembler);
+ void (compiler::StubCodeCompiler::*generator)();
#endif
};
static StubCodeEntry entries_[kNumStubEntries];
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index b5f6ff0..e3f4d41 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -479,10 +479,15 @@
zone, Function::New(
signature, symbol, UntaggedFunction::kRegularFunction, false,
false, false, false, false, klass, TokenPosition::kNoSource));
+
compiler::ObjectPoolBuilder pool_builder;
- const auto& invoke_tts = Code::Handle(
- zone,
- StubCode::Generate("InvokeTTS", &pool_builder, &GenerateInvokeTTSStub));
+ SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+ compiler::Assembler assembler(&pool_builder);
+ GenerateInvokeTTSStub(&assembler);
+ const Code& invoke_tts = Code::Handle(Code::FinalizeCodeAndNotify(
+ "InvokeTTS", nullptr, &assembler, Code::PoolAttachment::kNotAttachPool,
+ /*optimized=*/false));
+
const auto& pool =
ObjectPool::Handle(zone, ObjectPool::NewFromBuilder(pool_builder));
invoke_tts.set_object_pool(pool.ptr());
diff --git a/sdk/lib/_internal/js_shared/lib/js_util_patch.dart b/sdk/lib/_internal/js_shared/lib/js_util_patch.dart
index 3bb8c67..c9ffa27 100644
--- a/sdk/lib/_internal/js_shared/lib/js_util_patch.dart
+++ b/sdk/lib/_internal/js_shared/lib/js_util_patch.dart
@@ -101,13 +101,13 @@
}
@patch
-T callMethod<T>(Object o, String method, List<Object?> args) {
+T callMethod<T>(Object o, Object method, List<Object?> args) {
assertInteropArgs(args);
return JS<dynamic>('Object|Null', '#[#].apply(#, #)', o, method, o, args);
}
/// Similar to [callMethod] but introduces an unsound implicit cast to `T`.
-T _callMethodTrustType<T>(Object o, String method, List<Object?> args) {
+T _callMethodTrustType<T>(Object o, Object method, List<Object?> args) {
assertInteropArgs(args);
return JS<T>('Object|Null', '#[#].apply(#, #)', o, method, o, args);
}
@@ -118,7 +118,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUnchecked0<T>(Object o, String method) {
+T _callMethodUnchecked0<T>(Object o, Object method) {
return JS<dynamic>('Object|Null', '#[#]()', o, method);
}
@@ -129,7 +129,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUncheckedTrustType0<T>(Object o, String method) {
+T _callMethodUncheckedTrustType0<T>(Object o, Object method) {
return JS<T>('Object|Null', '#[#]()', o, method);
}
@@ -139,7 +139,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUnchecked1<T>(Object o, String method, Object? arg1) {
+T _callMethodUnchecked1<T>(Object o, Object method, Object? arg1) {
return JS<dynamic>('Object|Null', '#[#](#)', o, method, arg1);
}
@@ -150,7 +150,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUncheckedTrustType1<T>(Object o, String method, Object? arg1) {
+T _callMethodUncheckedTrustType1<T>(Object o, Object method, Object? arg1) {
return JS<T>('Object|Null', '#[#](#)', o, method, arg1);
}
@@ -161,7 +161,7 @@
/// edit this method.
@pragma('dart2js:tryInline')
T _callMethodUnchecked2<T>(
- Object o, String method, Object? arg1, Object? arg2) {
+ Object o, Object method, Object? arg1, Object? arg2) {
return JS<dynamic>('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
}
@@ -173,7 +173,7 @@
/// edit this method.
@pragma('dart2js:tryInline')
T _callMethodUncheckedTrustType2<T>(
- Object o, String method, Object? arg1, Object? arg2) {
+ Object o, Object method, Object? arg1, Object? arg2) {
return JS<T>('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
}
@@ -184,7 +184,7 @@
/// edit this method.
@pragma('dart2js:tryInline')
T _callMethodUnchecked3<T>(
- Object o, String method, Object? arg1, Object? arg2, Object? arg3) {
+ Object o, Object method, Object? arg1, Object? arg2, Object? arg3) {
return JS<dynamic>(
'Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
}
@@ -197,7 +197,7 @@
/// edit this method.
@pragma('dart2js:tryInline')
T _callMethodUncheckedTrustType3<T>(
- Object o, String method, Object? arg1, Object? arg2, Object? arg3) {
+ Object o, Object method, Object? arg1, Object? arg2, Object? arg3) {
return JS<T>('Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
}
@@ -207,7 +207,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUnchecked4<T>(Object o, String method, Object? arg1, Object? arg2,
+T _callMethodUnchecked4<T>(Object o, Object method, Object? arg1, Object? arg2,
Object? arg3, Object? arg4) {
return JS<dynamic>(
'Object|Null', '#[#](#, #, #, #)', o, method, arg1, arg2, arg3, arg4);
@@ -220,7 +220,7 @@
/// body of this method. Edit `ProgramCompiler.visitStaticInvocation` if you
/// edit this method.
@pragma('dart2js:tryInline')
-T _callMethodUncheckedTrustType4<T>(Object o, String method, Object? arg1,
+T _callMethodUncheckedTrustType4<T>(Object o, Object method, Object? arg1,
Object? arg2, Object? arg3, Object? arg4) {
return JS<T>(
'Object|Null', '#[#](#, #, #, #)', o, method, arg1, arg2, arg3, arg4);
diff --git a/sdk/lib/_internal/wasm/lib/js_util_patch.dart b/sdk/lib/_internal/wasm/lib/js_util_patch.dart
index d98b1ad..9885c1f 100644
--- a/sdk/lib/_internal/wasm/lib/js_util_patch.dart
+++ b/sdk/lib/_internal/wasm/lib/js_util_patch.dart
@@ -86,7 +86,7 @@
as T;
@patch
-T callMethod<T>(Object o, String method, List<Object?> args) => dartifyRaw(
+T callMethod<T>(Object o, Object method, List<Object?> args) => dartifyRaw(
callMethodVarArgsRaw(jsifyRaw(o), jsifyRaw(method), jsifyRaw(args))) as T;
@patch
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 0be73e5..d35c07d 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -38067,7 +38067,7 @@
static const int Y = 89;
static const int Z = 90;
static const int META = 91;
- static const int WIN_KEY_LEFT = 91;
+ static const int WIN_KEY_LEFT = 91; // Note that it's the same value as META.
static const int WIN_KEY_RIGHT = 92;
static const int CONTEXT_MENU = 93;
static const int NUM_ZERO = 96;
@@ -38292,7 +38292,8 @@
return _KeyName.UP;
case KeyCode.WIN_IME:
case KeyCode.WIN_KEY:
- case KeyCode.WIN_KEY_LEFT:
+ // Covered by `KeyCode.META` above.
+ // case KeyCode.WIN_KEY_LEFT:
case KeyCode.WIN_KEY_RIGHT:
return _KeyName.WIN;
default:
diff --git a/sdk/lib/js_util/js_util.dart b/sdk/lib/js_util/js_util.dart
index 16a406d..5c609d4 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -46,7 +46,7 @@
// A CFE transformation may optimize calls to `callMethod` when [args] is a
// a list literal or const list containing at most 4 values, all of which are
// statically known to be non-functions.
-external T callMethod<T>(Object o, String method, List<Object?> args);
+external T callMethod<T>(Object o, Object method, List<Object?> args);
/// Check whether [o] is an instance of [type].
///
diff --git a/tests/language/class_modifiers/base_transitivity/base_class_different_library_error_test.dart b/tests/language/class_modifiers/base_transitivity/base_class_different_library_error_test.dart
index c227fb5..9360566 100644
--- a/tests/language/class_modifiers/base_transitivity/base_class_different_library_error_test.dart
+++ b/tests/language/class_modifiers/base_transitivity/base_class_different_library_error_test.dart
@@ -104,14 +104,14 @@
// Extending via an anonymous mixin application class.
class SimpleExtendApplication = BaseClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
-// [analyzer] unspecified
interface class InterfaceExtendApplication = BaseClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
-// [analyzer] unspecified
/// It is an error if BaseClass is implemented by something which is not base,
/// final or sealed.
@@ -164,7 +164,8 @@
// Implementing with a mixin application class.
class SimpleImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
with
_MixinOnObject
@@ -182,7 +183,8 @@
// [cfe] The class 'BaseClass' can't be implemented outside of its library because it's a base class.
interface class InterfaceImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
with
_MixinOnObject
diff --git a/tests/language/class_modifiers/base_transitivity/base_class_same_library_error_test.dart b/tests/language/class_modifiers/base_transitivity/base_class_same_library_error_test.dart
index 832a638..abeb93c 100644
--- a/tests/language/class_modifiers/base_transitivity/base_class_same_library_error_test.dart
+++ b/tests/language/class_modifiers/base_transitivity/base_class_same_library_error_test.dart
@@ -52,7 +52,7 @@
// [cfe] The type 'InterfaceSealedExtendImplement' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
mixin class MixinClassSealedExtendImplement implements SealedExtend {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'MixinClassSealedExtendImplement' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
@@ -65,7 +65,6 @@
mixin MixinSealedExtendOn on SealedExtend {}
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
-// ^
// [cfe] The type 'MixinSealedExtendOn' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
// Extending via an anonymous mixin class.
@@ -81,13 +80,13 @@
// Extending via an anonymous mixin application class.
class SimpleExtendApplication = BaseClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
-// [analyzer] unspecified
interface class InterfaceExtendApplication = BaseClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
-// [analyzer] unspecified
/// It is an error if BaseClass is implemented by something which is not base,
/// final or sealed.
@@ -154,16 +153,17 @@
// Implementing with a mixin application class.
interface class InterfaceImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
with
_MixinOnObject
implements
BaseClass;
class SimpleImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'BaseClass' is 'base'.
-// [analyzer] unspecified
with
_MixinOnObject
implements
diff --git a/tests/language/class_modifiers/base_transitivity/final_class_same_library_error_test.dart b/tests/language/class_modifiers/base_transitivity/final_class_same_library_error_test.dart
index aab78e6..5e3a1df 100644
--- a/tests/language/class_modifiers/base_transitivity/final_class_same_library_error_test.dart
+++ b/tests/language/class_modifiers/base_transitivity/final_class_same_library_error_test.dart
@@ -80,14 +80,14 @@
// Extending via an anonymous mixin application class.
class SimpleExtendApplication = FinalClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'FinalClass' is 'final'.
-// [analyzer] unspecified
interface class InterfaceExtendApplication = FinalClass with _MixinOnObject;
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceExtendApplication' must be 'base', 'final' or 'sealed' because the supertype 'FinalClass' is 'final'.
-// [analyzer] unspecified
/// It is an error if FinalClass is implemented by something which is not base,
/// final or sealed.
@@ -154,17 +154,17 @@
// Implementing with a mixin application class.
interface class InterfaceImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'InterfaceImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'FinalClass' is 'final'.
-// [analyzer] unspecified
with
_MixinOnObject
implements
FinalClass;
class SimpleImplementApplication = Object
-// ^
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
// [cfe] The type 'SimpleImplementApplication' must be 'base', 'final' or 'sealed' because the supertype 'FinalClass' is 'final'.
-// [analyzer] unspecified
with
_MixinOnObject
implements
diff --git a/tests/web/wasm/js_util_test.dart b/tests/web/wasm/js_util_test.dart
index e3239d7..89ec2f1 100644
--- a/tests/web/wasm/js_util_test.dart
+++ b/tests/web/wasm/js_util_test.dart
@@ -372,16 +372,24 @@
external _JSSymbol get symbol;
@JS()
+external _JSSymbol get symbol2;
+
+@JS()
external JSString methodWithSymbol(_JSSymbol s);
void symbolTest() {
eval(r'''
- var s = Symbol.for('symbol');
- globalThis.symbol = s;
- globalThis[s] = 'boo';
+ var s1 = Symbol.for('symbol');
+ globalThis.symbol = s1;
+ globalThis[s1] = 'boo';
globalThis.methodWithSymbol = function(s) {
return Symbol.keyFor(s);
}
+ var symbol2 = Symbol.for('symbolMethod');
+ globalThis[symbol2] = function() {
+ return 'hello world';
+ }
+ globalThis.symbol2 = symbol2;
''');
Expect.equals(
_JSSymbol.keyFor(_JSSymbol._for('symbol'.toJS)).toDart, 'symbol');
@@ -394,6 +402,7 @@
Expect.equals(
_JSSymbol.keyFor(getProperty<_JSSymbol>(globalThis, 'symbol')).toDart,
'symbol');
+ Expect.equals(callMethod<String>(globalThis, symbol2, []), 'hello world');
}
void main() async {
diff --git a/tools/VERSION b/tools/VERSION
index a373ed8..669a3ff 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 3
MINOR 0
PATCH 0
-PRERELEASE 359
+PRERELEASE 360
PRERELEASE_PATCH 0
diff --git a/tools/dom/src/KeyCode.dart b/tools/dom/src/KeyCode.dart
index a51d062..6ffde46 100644
--- a/tools/dom/src/KeyCode.dart
+++ b/tools/dom/src/KeyCode.dart
@@ -95,7 +95,7 @@
static const int Y = 89;
static const int Z = 90;
static const int META = 91;
- static const int WIN_KEY_LEFT = 91;
+ static const int WIN_KEY_LEFT = 91; // Note that it's the same value as META.
static const int WIN_KEY_RIGHT = 92;
static const int CONTEXT_MENU = 93;
static const int NUM_ZERO = 96;
@@ -320,7 +320,8 @@
return _KeyName.UP;
case KeyCode.WIN_IME:
case KeyCode.WIN_KEY:
- case KeyCode.WIN_KEY_LEFT:
+ // Covered by `KeyCode.META` above.
+ // case KeyCode.WIN_KEY_LEFT:
case KeyCode.WIN_KEY_RIGHT:
return _KeyName.WIN;
default:
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 758637f..d8093f9 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -63,6 +63,7 @@
vm_args = []
main_dart = "$target_gen_dir/dart2js.dart"
training_args = [
+ "--invoker=gn_build",
"--packages=" +
rebase_path("../../.dart_tool/package_config.json", root_build_dir),
"--libraries-spec=" +
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 05418a6..32b51a7 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -78,6 +78,7 @@
args = [
"$abs_main",
"-m",
+ "--invoker=gn_build",
"-o$abs_output",
"--no-source-maps",
"--platform-binaries=" + rebase_path("$root_out_dir"),