| 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
|
|
|