| Index: vm/native_entry_test.cc
 | 
| ===================================================================
 | 
| --- vm/native_entry_test.cc	(revision 11528)
 | 
| +++ vm/native_entry_test.cc	(working copy)
 | 
| @@ -10,67 +10,54 @@
 | 
|  #include "vm/object.h"
 | 
|  #include "vm/stack_frame.h"
 | 
|  #include "vm/stub_code.h"
 | 
| +#include "vm/unit_test.h"
 | 
|  
 | 
|  namespace dart {
 | 
|  
 | 
| -struct NativeTestEntries {
 | 
| -  const char* name_;
 | 
| -  Dart_NativeFunction function_;
 | 
| -  int argument_count_;
 | 
| -} TestEntries[] = {
 | 
| -  REGISTER_NATIVE_ENTRY(TestSmiSub, 2)
 | 
| -  REGISTER_NATIVE_ENTRY(TestSmiSum, 6)
 | 
| -  REGISTER_NATIVE_ENTRY(TestStaticCallPatching, 0)
 | 
| -};
 | 
|  
 | 
| -
 | 
| -Dart_NativeFunction NativeTestEntry_Lookup(const String& name,
 | 
| -                                           int argument_count) {
 | 
| -  int num_entries = sizeof(TestEntries) / sizeof(struct NativeTestEntries);
 | 
| -  for (int i = 0; i < num_entries; i++) {
 | 
| -    struct NativeTestEntries* entry = &(TestEntries[i]);
 | 
| -    if (name.Equals(entry->name_)) {
 | 
| -      if (entry->argument_count_ == argument_count) {
 | 
| -        return entry->function_;
 | 
| -      } else {
 | 
| -        // Wrong number of arguments.
 | 
| -        return NULL;
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -  return NULL;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  // A native call for test purposes.
 | 
|  // Arg0: a smi.
 | 
|  // Arg1: a smi.
 | 
|  // Result: a smi representing arg0 - arg1.
 | 
| -DEFINE_NATIVE_ENTRY(TestSmiSub, 2) {
 | 
| -  const Smi& left = Smi::CheckedHandle(arguments->At(0));
 | 
| -  const Smi& right = Smi::CheckedHandle(arguments->At(1));
 | 
| +void TestSmiSub(Dart_NativeArguments args) {
 | 
| +  Dart_EnterScope();
 | 
| +  Dart_Handle left = Dart_GetNativeArgument(args, 0);
 | 
| +  Dart_Handle right = Dart_GetNativeArgument(args, 1);
 | 
| +  int64_t left_value = -1;
 | 
| +  int64_t right_value = -1;
 | 
| +  EXPECT_VALID(Dart_IntegerToInt64(left, &left_value));
 | 
| +  EXPECT_VALID(Dart_IntegerToInt64(right, &right_value));
 | 
| +
 | 
|    // Ignoring overflow in the calculation below.
 | 
| -  intptr_t result = left.Value() - right.Value();
 | 
| -  arguments->SetReturn(Smi::Handle(Smi::New(result)));
 | 
| +  int64_t result = left_value - right_value;
 | 
| +  Dart_SetReturnValue(args, Dart_NewInteger(result));
 | 
| +  Dart_ExitScope();
 | 
|  }
 | 
|  
 | 
|  
 | 
|  // A native call for test purposes.
 | 
|  // Arg0-4: 5 smis.
 | 
|  // Result: a smi representing the sum of all arguments.
 | 
| -DEFINE_NATIVE_ENTRY(TestSmiSum, 5) {
 | 
| -  intptr_t result = 0;
 | 
| -  for (int i = 0; i < arguments->Count(); i++) {
 | 
| -    const Smi& arg = Smi::CheckedHandle(arguments->At(i));
 | 
| +void TestSmiSum(Dart_NativeArguments args) {
 | 
| +  Dart_EnterScope();
 | 
| +  int64_t result = 0;
 | 
| +  int arg_count = Dart_GetNativeArgumentCount(args);
 | 
| +  for (int i = 0; i < arg_count; i++) {
 | 
| +    Dart_Handle arg = Dart_GetNativeArgument(args, i);
 | 
| +    int64_t arg_value = -1;
 | 
| +    EXPECT_VALID(Dart_IntegerToInt64(arg, &arg_value));
 | 
| +
 | 
|      // Ignoring overflow in the addition below.
 | 
| -    result += arg.Value();
 | 
| +    result += arg_value;
 | 
|    }
 | 
| -  arguments->SetReturn(Smi::Handle(Smi::New(result)));
 | 
| +  Dart_SetReturnValue(args, Dart_NewInteger(result));
 | 
| +  Dart_ExitScope();
 | 
|  }
 | 
|  
 | 
|  
 | 
|  // Test code patching.
 | 
| -DEFINE_NATIVE_ENTRY(TestStaticCallPatching, 0) {
 | 
| +void TestStaticCallPatching(Dart_NativeArguments args) {
 | 
| +  Dart_EnterScope();
 | 
|    uword target_address = 0;
 | 
|    Function& target_function = Function::Handle();
 | 
|    DartFrameIterator iterator;
 | 
| @@ -84,6 +71,7 @@
 | 
|    const uword function_entry_address =
 | 
|        Code::Handle(target_function.CurrentCode()).EntryPoint();
 | 
|    EXPECT_EQ(function_entry_address, target_address);
 | 
| +  Dart_ExitScope();
 | 
|  }
 | 
|  
 | 
|  }  // namespace dart
 | 
| 
 |