Index: runtime/lib/mirrors.cc |
=================================================================== |
--- runtime/lib/mirrors.cc (revision 21243) |
+++ runtime/lib/mirrors.cc (working copy) |
@@ -198,6 +198,22 @@ |
return Dart_True(); |
} |
+static Dart_Handle UnpackLocalArgList(Dart_Handle arg_list, |
+ GrowableArray<Dart_Handle>* arg_array) { |
+ intptr_t len = 0; |
+ Dart_Handle result = Dart_ListLength(arg_list, &len); |
+ if (Dart_IsError(result)) { |
+ return result; |
+ } |
+ for (intptr_t i = 0; i < len; i++) { |
+ Dart_Handle arg = Dart_ListGetAt(arg_list, i); |
+ if (Dart_IsError(arg)) { |
+ return arg; |
+ } |
+ arg_array->Add(arg); |
+ } |
+ return Dart_True(); |
+} |
static Dart_Handle CreateLazyMirror(Dart_Handle target); |
@@ -1058,13 +1074,17 @@ |
Dart_Handle member = Dart_GetNativeArgument(args, 1); |
// The wrapped arguments are either simple values or instance mirrors. |
Dart_Handle wrapped_invoke_args = Dart_GetNativeArgument(args, 2); |
+ Dart_Handle isAsync = Dart_GetNativeArgument(args, 3); |
Dart_Handle reflectee = UnwrapMirror(mirror); |
+ Dart_Handle result; |
GrowableArray<Dart_Handle> invoke_args; |
- Dart_Handle result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
- if (Dart_IsError(result)) { |
- Dart_PropagateError(result); |
- } |
+ if (isAsync) { |
+ result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
+ if (Dart_IsError(result)) { |
+ Dart_PropagateError(result); |
+ } |
+ } else {result = UnpackLocalArgList(wrapped_invoke_args, &invoke_args);} |
result = |
Dart_Invoke(reflectee, member, invoke_args.length(), invoke_args.data()); |
if (Dart_IsError(result)) { |
@@ -1110,11 +1130,14 @@ |
Dart_EnterScope(); |
Dart_Handle mirror = Dart_GetNativeArgument(args, 0); |
Dart_Handle fieldName = Dart_GetNativeArgument(args, 1); |
+ Dart_Handle isAsync = Dart_GetNativeArgument(args, 2); |
// The wrapped argument is either a simple value or instance mirror. |
Dart_Handle wrapped_arg = Dart_GetNativeArgument(args, 2); |
Dart_Handle reflectee = UnwrapMirror(mirror); |
- Dart_Handle set_arg = UnwrapArg(wrapped_arg); |
+ Dart_Handle set_arg; |
+ if (isAsync == DART_TRUE) set_arg = UnwrapArg(wrapped_arg); |
+}; |
if (Dart_IsError(set_arg)) { |
Dart_PropagateError(set_arg); |
} |
@@ -1140,10 +1163,17 @@ |
Dart_Handle mirror = Dart_GetNativeArgument(args, 0); |
// The wrapped arguments are either simple values or instance mirrors. |
Dart_Handle wrapped_invoke_args = Dart_GetNativeArgument(args, 1); |
+ Dart_Handle isAsync = Dart_GetNativeArgument(args, 2); |
Dart_Handle reflectee = UnwrapMirror(mirror); |
GrowableArray<Dart_Handle> invoke_args; |
- Dart_Handle result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
+ Dart_Handle result; |
+ if (isAsync) { |
+ result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
+ if (Dart_IsError(result)) { |
+ Dart_PropagateError(result); |
+ } |
+ } else {result = UnpackLocalArgList(wrapped_invoke_args, &invoke_args);} |
if (Dart_IsError(result)) { |
Dart_PropagateError(result); |
} |
@@ -1171,10 +1201,17 @@ |
Dart_Handle constructor_name = Dart_GetNativeArgument(args, 1); |
// The wrapped arguments are either simple values or instance mirrors. |
Dart_Handle wrapped_invoke_args = Dart_GetNativeArgument(args, 2); |
+ Dart_Handle isAsync = Dart_GetNativeArgument(args, 3); |
Dart_Handle klass = UnwrapMirror(klass_mirror); |
GrowableArray<Dart_Handle> invoke_args; |
- Dart_Handle result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
+ Dart_Handle result; |
+ if (isAsync) { |
+ result = UnwrapArgList(wrapped_invoke_args, &invoke_args); |
+ if (Dart_IsError(result)) { |
+ Dart_PropagateError(result); |
+ } |
+ } else {result = UnpackLocalArgList(wrapped_invoke_args, &invoke_args);} |
if (Dart_IsError(result)) { |
Dart_PropagateError(result); |
} |