OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "vm/assembler.h" | 6 #include "vm/assembler.h" |
7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
8 #include "vm/compiler.h" | 8 #include "vm/compiler.h" |
9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
10 #include "vm/object.h" | 10 #include "vm/object.h" |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 ASSERT(!lib.IsNull()); | 163 ASSERT(!lib.IsNull()); |
164 const Class& cls = Class::Handle(lib.LookupClass( | 164 const Class& cls = Class::Handle(lib.LookupClass( |
165 String::Handle(Symbols::New(test_class_name)))); | 165 String::Handle(Symbols::New(test_class_name)))); |
166 EXPECT(!cls.IsNull()); | 166 EXPECT(!cls.IsNull()); |
167 | 167 |
168 Instance& receiver = Instance::Handle(Instance::New(cls)); | 168 Instance& receiver = Instance::Handle(Instance::New(cls)); |
169 const String& function_name = String::Handle(String::New(test_function_name)); | 169 const String& function_name = String::Handle(String::New(test_function_name)); |
170 | 170 |
171 // Now try to resolve and invoke the instance function in this class. | 171 // Now try to resolve and invoke the instance function in this class. |
172 { | 172 { |
173 const int kNumPositionalArguments = 3; | 173 const int kNumArguments = 3; |
174 const int kNumNamedArguments = 0; | 174 ArgumentsDescriptor args_desc( |
| 175 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
175 const Function& function = Function::Handle( | 176 const Function& function = Function::Handle( |
176 Resolver::ResolveDynamic(receiver, | 177 Resolver::ResolveDynamic(receiver, |
177 function_name, | 178 function_name, |
178 kNumPositionalArguments, | 179 args_desc)); |
179 kNumNamedArguments)); | |
180 EXPECT(!function.IsNull()); | 180 EXPECT(!function.IsNull()); |
181 const Array& args = Array::Handle(Array::New(kNumPositionalArguments)); | 181 const Array& args = Array::Handle(Array::New(kNumArguments)); |
182 args.SetAt(0, receiver); | 182 args.SetAt(0, receiver); |
183 const String& arg0 = String::Handle(String::New("junk")); | 183 const String& arg0 = String::Handle(String::New("junk")); |
184 args.SetAt(1, arg0); | 184 args.SetAt(1, arg0); |
185 const Smi& arg1 = Smi::Handle(Smi::New(kTestValue)); | 185 const Smi& arg1 = Smi::Handle(Smi::New(kTestValue)); |
186 args.SetAt(2, arg1); | 186 args.SetAt(2, arg1); |
187 const Smi& retval = Smi::Handle( | 187 const Smi& retval = Smi::Handle( |
188 reinterpret_cast<RawSmi*>(DartEntry::InvokeFunction(function, args))); | 188 reinterpret_cast<RawSmi*>(DartEntry::InvokeFunction(function, args))); |
189 EXPECT_EQ(kTestValue, retval.Value()); | 189 EXPECT_EQ(kTestValue, retval.Value()); |
190 } | 190 } |
191 | 191 |
192 // Now try to resolve an instance function with invalid argument count. | 192 // Now try to resolve an instance function with invalid argument count. |
193 { | 193 { |
194 const int kNumPositionalArguments = 1; | 194 const int kNumArguments = 1; |
195 const int kNumNamedArguments = 0; | 195 ArgumentsDescriptor args_desc( |
| 196 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
196 const Function& bad_function = Function::Handle( | 197 const Function& bad_function = Function::Handle( |
197 Resolver::ResolveDynamic(receiver, | 198 Resolver::ResolveDynamic(receiver, |
198 function_name, | 199 function_name, |
199 kNumPositionalArguments, | 200 args_desc)); |
200 kNumNamedArguments)); | |
201 EXPECT(bad_function.IsNull()); | 201 EXPECT(bad_function.IsNull()); |
202 } | 202 } |
203 | 203 |
204 // Hierarchy walking. | 204 // Hierarchy walking. |
205 { | 205 { |
206 const int kNumPositionalArguments = 1; | 206 const int kNumArguments = 1; |
207 const int kNumNamedArguments = 0; | 207 ArgumentsDescriptor args_desc( |
| 208 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); |
208 const String& super_function_name = | 209 const String& super_function_name = |
209 String::Handle(String::New("dynCall")); | 210 String::Handle(String::New("dynCall")); |
210 const Function& super_function = Function::Handle( | 211 const Function& super_function = Function::Handle( |
211 Resolver::ResolveDynamic(receiver, | 212 Resolver::ResolveDynamic(receiver, |
212 super_function_name, | 213 super_function_name, |
213 kNumPositionalArguments, | 214 args_desc)); |
214 kNumNamedArguments)); | |
215 EXPECT(!super_function.IsNull()); | 215 EXPECT(!super_function.IsNull()); |
216 } | 216 } |
217 } | 217 } |
218 | 218 |
219 } // namespace dart | 219 } // namespace dart |
OLD | NEW |