Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1454)

Unified Diff: runtime/lib/invocation_mirror_patch.dart

Issue 2859673002: Pass type argument vector to generic functions (if --reify-generic-functions is (Closed)
Patch Set: address review comments and sync Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/function.cc ('k') | runtime/lib/mirrors.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/invocation_mirror_patch.dart
diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
index 7a1422efa0712b9b51d2607ac1c67a792e741c10..619fb68637fb4df7ca35ac01ea0759178e0cdfff 100644
--- a/runtime/lib/invocation_mirror_patch.dart
+++ b/runtime/lib/invocation_mirror_patch.dart
@@ -25,6 +25,12 @@ class _InvocationMirror implements Invocation {
static const int _CALL_BITS = 3;
static const int _CALL_MASK = (1 << _CALL_BITS) - 1;
+ // ArgumentsDescriptor layout. Keep in sync with enum in dart_entry.h.
+ static const int _TYPE_ARGS_LEN = 0;
+ static const int _COUNT = 1;
+ static const int _POSITIONAL_COUNT = 2;
+ static const int _FIRST_NAMED_ENTRY = 3;
+
// Internal representation of the invocation mirror.
final String _functionName;
final List _argumentsDescriptor;
@@ -60,7 +66,7 @@ class _InvocationMirror implements Invocation {
List get positionalArguments {
if (_positionalArguments == null) {
- int numPositionalArguments = _argumentsDescriptor[1];
+ int numPositionalArguments = _argumentsDescriptor[_POSITIONAL_COUNT];
// Don't count receiver.
if (numPositionalArguments == 1) {
return _positionalArguments = const [];
@@ -74,16 +80,17 @@ class _InvocationMirror implements Invocation {
Map<Symbol, dynamic> get namedArguments {
if (_namedArguments == null) {
- int numArguments = _argumentsDescriptor[0] - 1; // Exclude receiver.
- int numPositionalArguments = _argumentsDescriptor[1] - 1;
+ int numArguments = _argumentsDescriptor[_COUNT] - 1; // Exclude receiver.
+ int numPositionalArguments = _argumentsDescriptor[_POSITIONAL_COUNT] - 1;
int numNamedArguments = numArguments - numPositionalArguments;
if (numNamedArguments == 0) {
return _namedArguments = const {};
}
_namedArguments = new Map<Symbol, dynamic>();
for (int i = 0; i < numNamedArguments; i++) {
- String arg_name = _argumentsDescriptor[2 + 2 * i];
- var arg_value = _arguments[_argumentsDescriptor[3 + 2 * i]];
+ int namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
+ String arg_name = _argumentsDescriptor[namedEntryIndex];
+ var arg_value = _arguments[_argumentsDescriptor[namedEntryIndex + 1]];
_namedArguments[new internal.Symbol.unvalidated(arg_name)] = arg_value;
}
_namedArguments = new Map.unmodifiable(_namedArguments);
« no previous file with comments | « runtime/lib/function.cc ('k') | runtime/lib/mirrors.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698