OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/dart_entry.h" | 5 #include "vm/dart_entry.h" |
6 | 6 |
7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
8 #include "vm/code_generator.h" | 8 #include "vm/code_generator.h" |
9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
10 #include "vm/debugger.h" | 10 #include "vm/debugger.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 invocation_mirror_class.LookupStaticFunction(function_name)); | 236 invocation_mirror_class.LookupStaticFunction(function_name)); |
237 ASSERT(!allocation_function.IsNull()); | 237 ASSERT(!allocation_function.IsNull()); |
238 const int kNumAllocationArgs = 4; | 238 const int kNumAllocationArgs = 4; |
239 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); | 239 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); |
240 allocation_args.SetAt(0, target_name); | 240 allocation_args.SetAt(0, target_name); |
241 allocation_args.SetAt(1, arguments_descriptor); | 241 allocation_args.SetAt(1, arguments_descriptor); |
242 allocation_args.SetAt(2, arguments); | 242 allocation_args.SetAt(2, arguments); |
243 allocation_args.SetAt(3, Bool::False()); // Not a super invocation. | 243 allocation_args.SetAt(3, Bool::False()); // Not a super invocation. |
244 const Object& invocation_mirror = Object::Handle( | 244 const Object& invocation_mirror = Object::Handle( |
245 InvokeFunction(allocation_function, allocation_args)); | 245 InvokeFunction(allocation_function, allocation_args)); |
| 246 if (invocation_mirror.IsError()) { |
| 247 Exceptions::PropagateError(Error::Cast(invocation_mirror)); |
| 248 UNREACHABLE(); |
| 249 } |
246 | 250 |
247 // Now use the invocation mirror object and invoke NoSuchMethod. | 251 // Now use the invocation mirror object and invoke NoSuchMethod. |
248 const int kNumArguments = 2; | 252 const int kNumArguments = 2; |
249 ArgumentsDescriptor args_desc( | 253 ArgumentsDescriptor args_desc( |
250 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); | 254 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
251 Function& function = Function::Handle( | 255 Function& function = Function::Handle( |
252 Resolver::ResolveDynamic(receiver, | 256 Resolver::ResolveDynamic(receiver, |
253 Symbols::NoSuchMethod(), | 257 Symbols::NoSuchMethod(), |
254 args_desc)); | 258 args_desc)); |
255 if (function.IsNull()) { | 259 if (function.IsNull()) { |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 const Array& args = Array::Handle(Array::New(kNumArguments)); | 612 const Array& args = Array::Handle(Array::New(kNumArguments)); |
609 args.SetAt(0, map); | 613 args.SetAt(0, map); |
610 args.SetAt(1, key); | 614 args.SetAt(1, key); |
611 args.SetAt(2, value); | 615 args.SetAt(2, value); |
612 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, | 616 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, |
613 args)); | 617 args)); |
614 return result.raw(); | 618 return result.raw(); |
615 } | 619 } |
616 | 620 |
617 } // namespace dart | 621 } // namespace dart |
OLD | NEW |