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 "bin/builtin.h" | 5 #include "bin/builtin.h" |
6 #include "include/dart_api.h" | 6 #include "include/dart_api.h" |
7 #include "include/dart_debugger_api.h" | 7 #include "include/dart_debugger_api.h" |
8 #include "include/dart_mirrors_api.h" | 8 #include "include/dart_mirrors_api.h" |
9 #include "include/dart_native_api.h" | 9 #include "include/dart_native_api.h" |
10 #include "platform/assert.h" | 10 #include "platform/assert.h" |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 EXPECT(Dart_IsError(result)); | 363 EXPECT(Dart_IsError(result)); |
364 result = Dart_GetActivationFrame(stacktrace, -1, &frame); | 364 result = Dart_GetActivationFrame(stacktrace, -1, &frame); |
365 EXPECT(Dart_IsError(result)); | 365 EXPECT(Dart_IsError(result)); |
366 | 366 |
367 Dart_SetReturnValue(args, Dart_NewInteger(42)); | 367 Dart_SetReturnValue(args, Dart_NewInteger(42)); |
368 Dart_ExitScope(); | 368 Dart_ExitScope(); |
369 } | 369 } |
370 | 370 |
371 | 371 |
372 static Dart_NativeFunction CurrentStackTraceNativeLookup( | 372 static Dart_NativeFunction CurrentStackTraceNativeLookup( |
373 Dart_Handle name, int argument_count) { | 373 Dart_Handle name, int argument_count, bool* auto_setup_scope) { |
| 374 ASSERT(auto_setup_scope != NULL); |
| 375 *auto_setup_scope = false; |
374 return reinterpret_cast<Dart_NativeFunction>(&CurrentStackTraceNative); | 376 return reinterpret_cast<Dart_NativeFunction>(&CurrentStackTraceNative); |
375 } | 377 } |
376 | 378 |
377 | 379 |
378 TEST_CASE(CurrentStacktraceInfo) { | 380 TEST_CASE(CurrentStacktraceInfo) { |
379 const char* kScriptChars = | 381 const char* kScriptChars = |
380 "inspectStack() native 'CurrentStackTraceNatve';\n" | 382 "inspectStack() native 'CurrentStackTraceNatve';\n" |
381 "foo(n) => n == 1 ? inspectStack() : foo(n-1);\n" | 383 "foo(n) => n == 1 ? inspectStack() : foo(n-1);\n" |
382 "testMain() => foo(50);\n"; | 384 "testMain() => foo(50);\n"; |
383 | 385 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 EXPECT(Dart_IsClosure(closure)); | 453 EXPECT(Dart_IsClosure(closure)); |
452 Dart_Handle result = Dart_InvokeClosure(closure, 0, NULL); | 454 Dart_Handle result = Dart_InvokeClosure(closure, 0, NULL); |
453 EXPECT(Dart_IsError(result)); | 455 EXPECT(Dart_IsError(result)); |
454 result = Dart_PropagateError(result); | 456 result = Dart_PropagateError(result); |
455 EXPECT_VALID(result); // We do not expect to reach here. | 457 EXPECT_VALID(result); // We do not expect to reach here. |
456 UNREACHABLE(); | 458 UNREACHABLE(); |
457 } | 459 } |
458 | 460 |
459 | 461 |
460 static Dart_NativeFunction PropagateError_native_lookup( | 462 static Dart_NativeFunction PropagateError_native_lookup( |
461 Dart_Handle name, int argument_count) { | 463 Dart_Handle name, int argument_count, bool* auto_setup_scope) { |
| 464 ASSERT(auto_setup_scope != NULL); |
| 465 *auto_setup_scope = false; |
462 return reinterpret_cast<Dart_NativeFunction>(&PropagateErrorNative); | 466 return reinterpret_cast<Dart_NativeFunction>(&PropagateErrorNative); |
463 } | 467 } |
464 | 468 |
465 | 469 |
466 TEST_CASE(Dart_PropagateError) { | 470 TEST_CASE(Dart_PropagateError) { |
467 const char* kScriptChars = | 471 const char* kScriptChars = |
468 "raiseCompileError() {\n" | 472 "raiseCompileError() {\n" |
469 " return missing_semicolon\n" | 473 " return missing_semicolon\n" |
470 "}\n" | 474 "}\n" |
471 "\n" | 475 "\n" |
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 Dart_EnterScope(); | 1263 Dart_EnterScope(); |
1260 Dart_Handle byte_data = Dart_NewTypedData(Dart_TypedData_kByteData, kLength); | 1264 Dart_Handle byte_data = Dart_NewTypedData(Dart_TypedData_kByteData, kLength); |
1261 EXPECT_VALID(byte_data); | 1265 EXPECT_VALID(byte_data); |
1262 EXPECT_EQ(Dart_TypedData_kByteData, Dart_GetTypeOfTypedData(byte_data)); | 1266 EXPECT_EQ(Dart_TypedData_kByteData, Dart_GetTypeOfTypedData(byte_data)); |
1263 Dart_SetReturnValue(args, byte_data); | 1267 Dart_SetReturnValue(args, byte_data); |
1264 Dart_ExitScope(); | 1268 Dart_ExitScope(); |
1265 } | 1269 } |
1266 | 1270 |
1267 | 1271 |
1268 static Dart_NativeFunction ByteDataNativeResolver(Dart_Handle name, | 1272 static Dart_NativeFunction ByteDataNativeResolver(Dart_Handle name, |
1269 int arg_count) { | 1273 int arg_count, |
| 1274 bool* auto_setup_scope) { |
| 1275 ASSERT(auto_setup_scope != NULL); |
| 1276 *auto_setup_scope = false; |
1270 return &ByteDataNativeFunction; | 1277 return &ByteDataNativeFunction; |
1271 } | 1278 } |
1272 | 1279 |
1273 | 1280 |
1274 TEST_CASE(ByteDataAccess) { | 1281 TEST_CASE(ByteDataAccess) { |
1275 const char* kScriptChars = | 1282 const char* kScriptChars = |
1276 "import 'dart:typed_data';\n" | 1283 "import 'dart:typed_data';\n" |
1277 "class Expect {\n" | 1284 "class Expect {\n" |
1278 " static equals(a, b) {\n" | 1285 " static equals(a, b) {\n" |
1279 " if (a != b) {\n" | 1286 " if (a != b) {\n" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1317 Dart_Handle external_byte_data = Dart_NewExternalTypedData( | 1324 Dart_Handle external_byte_data = Dart_NewExternalTypedData( |
1318 Dart_TypedData_kByteData, data, 16); | 1325 Dart_TypedData_kByteData, data, 16); |
1319 EXPECT_VALID(external_byte_data); | 1326 EXPECT_VALID(external_byte_data); |
1320 EXPECT_EQ(Dart_TypedData_kByteData, | 1327 EXPECT_EQ(Dart_TypedData_kByteData, |
1321 Dart_GetTypeOfTypedData(external_byte_data)); | 1328 Dart_GetTypeOfTypedData(external_byte_data)); |
1322 Dart_SetReturnValue(args, external_byte_data); | 1329 Dart_SetReturnValue(args, external_byte_data); |
1323 Dart_ExitScope(); | 1330 Dart_ExitScope(); |
1324 } | 1331 } |
1325 | 1332 |
1326 | 1333 |
1327 static Dart_NativeFunction ExternalByteDataNativeResolver(Dart_Handle name, | 1334 static Dart_NativeFunction ExternalByteDataNativeResolver( |
1328 int arg_count) { | 1335 Dart_Handle name, int arg_count, bool* auto_setup_scope) { |
| 1336 ASSERT(auto_setup_scope != NULL); |
| 1337 *auto_setup_scope = false; |
1329 return &ExternalByteDataNativeFunction; | 1338 return &ExternalByteDataNativeFunction; |
1330 } | 1339 } |
1331 | 1340 |
1332 | 1341 |
1333 TEST_CASE(ExternalByteDataAccess) { | 1342 TEST_CASE(ExternalByteDataAccess) { |
1334 // TODO(asiva): Once we have getInt16LE and getInt16BE support use the | 1343 // TODO(asiva): Once we have getInt16LE and getInt16BE support use the |
1335 // appropriate getter instead of the host endian format used now. | 1344 // appropriate getter instead of the host endian format used now. |
1336 const char* kScriptChars = | 1345 const char* kScriptChars = |
1337 "import 'dart:typed_data';\n" | 1346 "import 'dart:typed_data';\n" |
1338 "class Expect {\n" | 1347 "class Expect {\n" |
(...skipping 2234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3573 EXPECT_STREQ("myerror", Dart_GetError(result)); | 3582 EXPECT_STREQ("myerror", Dart_GetError(result)); |
3574 } | 3583 } |
3575 | 3584 |
3576 | 3585 |
3577 void NativeFieldLookup(Dart_NativeArguments args) { | 3586 void NativeFieldLookup(Dart_NativeArguments args) { |
3578 UNREACHABLE(); | 3587 UNREACHABLE(); |
3579 } | 3588 } |
3580 | 3589 |
3581 | 3590 |
3582 static Dart_NativeFunction native_field_lookup(Dart_Handle name, | 3591 static Dart_NativeFunction native_field_lookup(Dart_Handle name, |
3583 int argument_count) { | 3592 int argument_count, |
| 3593 bool* auto_setup_scope) { |
| 3594 ASSERT(auto_setup_scope != NULL); |
| 3595 *auto_setup_scope = false; |
3584 return reinterpret_cast<Dart_NativeFunction>(&NativeFieldLookup); | 3596 return reinterpret_cast<Dart_NativeFunction>(&NativeFieldLookup); |
3585 } | 3597 } |
3586 | 3598 |
3587 | 3599 |
3588 TEST_CASE(InjectNativeFields1) { | 3600 TEST_CASE(InjectNativeFields1) { |
3589 const char* kScriptChars = | 3601 const char* kScriptChars = |
3590 "class NativeFields extends NativeFieldsWrapper {\n" | 3602 "class NativeFields extends NativeFieldsWrapper {\n" |
3591 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n" | 3603 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n" |
3592 " int fld1;\n" | 3604 " int fld1;\n" |
3593 " final int fld2;\n" | 3605 " final int fld2;\n" |
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4737 } | 4749 } |
4738 | 4750 |
4739 | 4751 |
4740 void ExceptionNative(Dart_NativeArguments args) { | 4752 void ExceptionNative(Dart_NativeArguments args) { |
4741 Dart_EnterScope(); | 4753 Dart_EnterScope(); |
4742 Dart_ThrowException(NewString("Hello from ExceptionNative!")); | 4754 Dart_ThrowException(NewString("Hello from ExceptionNative!")); |
4743 UNREACHABLE(); | 4755 UNREACHABLE(); |
4744 } | 4756 } |
4745 | 4757 |
4746 | 4758 |
4747 static Dart_NativeFunction native_lookup(Dart_Handle name, int argument_count) { | 4759 static Dart_NativeFunction native_lookup(Dart_Handle name, |
| 4760 int argument_count, |
| 4761 bool* auto_setup_scope) { |
| 4762 ASSERT(auto_setup_scope != NULL); |
| 4763 *auto_setup_scope = false; |
4748 return reinterpret_cast<Dart_NativeFunction>(&ExceptionNative); | 4764 return reinterpret_cast<Dart_NativeFunction>(&ExceptionNative); |
4749 } | 4765 } |
4750 | 4766 |
4751 | 4767 |
4752 TEST_CASE(ThrowException) { | 4768 TEST_CASE(ThrowException) { |
4753 const char* kScriptChars = | 4769 const char* kScriptChars = |
4754 "int test() native \"ThrowException_native\";"; | 4770 "int test() native \"ThrowException_native\";"; |
4755 Dart_Handle result; | 4771 Dart_Handle result; |
4756 Isolate* isolate = Isolate::Current(); | 4772 Isolate* isolate = Isolate::Current(); |
4757 EXPECT(isolate != NULL); | 4773 EXPECT(isolate != NULL); |
(...skipping 23 matching lines...) Expand all Loading... |
4781 | 4797 |
4782 | 4798 |
4783 void NativeArgumentCounter(Dart_NativeArguments args) { | 4799 void NativeArgumentCounter(Dart_NativeArguments args) { |
4784 Dart_EnterScope(); | 4800 Dart_EnterScope(); |
4785 int count = Dart_GetNativeArgumentCount(args); | 4801 int count = Dart_GetNativeArgumentCount(args); |
4786 Dart_SetReturnValue(args, Dart_NewInteger(count)); | 4802 Dart_SetReturnValue(args, Dart_NewInteger(count)); |
4787 Dart_ExitScope(); | 4803 Dart_ExitScope(); |
4788 } | 4804 } |
4789 | 4805 |
4790 | 4806 |
4791 static Dart_NativeFunction gnac_lookup(Dart_Handle name, int argument_count) { | 4807 static Dart_NativeFunction gnac_lookup(Dart_Handle name, |
| 4808 int argument_count, |
| 4809 bool* auto_setup_scope) { |
| 4810 ASSERT(auto_setup_scope != NULL); |
| 4811 *auto_setup_scope = false; |
4792 return reinterpret_cast<Dart_NativeFunction>(&NativeArgumentCounter); | 4812 return reinterpret_cast<Dart_NativeFunction>(&NativeArgumentCounter); |
4793 } | 4813 } |
4794 | 4814 |
4795 | 4815 |
4796 TEST_CASE(GetNativeArgumentCount) { | 4816 TEST_CASE(GetNativeArgumentCount) { |
4797 const char* kScriptChars = | 4817 const char* kScriptChars = |
4798 "class MyObject {" | 4818 "class MyObject {" |
4799 " int method1(int i, int j) native 'Name_Does_Not_Matter';" | 4819 " int method1(int i, int j) native 'Name_Does_Not_Matter';" |
4800 "}" | 4820 "}" |
4801 "testMain() {" | 4821 "testMain() {" |
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5675 | 5695 |
5676 | 5696 |
5677 static void PatchNativeFunction(Dart_NativeArguments args) { | 5697 static void PatchNativeFunction(Dart_NativeArguments args) { |
5678 Dart_EnterScope(); | 5698 Dart_EnterScope(); |
5679 Dart_SetReturnValue(args, Dart_Null()); | 5699 Dart_SetReturnValue(args, Dart_Null()); |
5680 Dart_ExitScope(); | 5700 Dart_ExitScope(); |
5681 } | 5701 } |
5682 | 5702 |
5683 | 5703 |
5684 static Dart_NativeFunction PatchNativeResolver(Dart_Handle name, | 5704 static Dart_NativeFunction PatchNativeResolver(Dart_Handle name, |
5685 int arg_count) { | 5705 int arg_count, |
| 5706 bool* auto_setup_scope) { |
| 5707 ASSERT(auto_setup_scope != NULL); |
| 5708 *auto_setup_scope = false; |
5686 return &PatchNativeFunction; | 5709 return &PatchNativeFunction; |
5687 } | 5710 } |
5688 | 5711 |
5689 | 5712 |
5690 TEST_CASE(ParsePatchLibrary) { | 5713 TEST_CASE(ParsePatchLibrary) { |
5691 const char* kLibraryChars = | 5714 const char* kLibraryChars = |
5692 "library patched_library;\n" | 5715 "library patched_library;\n" |
5693 "class A {\n" | 5716 "class A {\n" |
5694 " final fvalue;\n" | 5717 " final fvalue;\n" |
5695 " var _f;\n" | 5718 " var _f;\n" |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5869 | 5892 |
5870 | 5893 |
5871 static void MyNativeFunction2(Dart_NativeArguments args) { | 5894 static void MyNativeFunction2(Dart_NativeArguments args) { |
5872 Dart_EnterScope(); | 5895 Dart_EnterScope(); |
5873 Dart_SetReturnValue(args, Dart_NewInteger(123456)); | 5896 Dart_SetReturnValue(args, Dart_NewInteger(123456)); |
5874 Dart_ExitScope(); | 5897 Dart_ExitScope(); |
5875 } | 5898 } |
5876 | 5899 |
5877 | 5900 |
5878 static Dart_NativeFunction MyNativeResolver1(Dart_Handle name, | 5901 static Dart_NativeFunction MyNativeResolver1(Dart_Handle name, |
5879 int arg_count) { | 5902 int arg_count, |
| 5903 bool* auto_setup_scope) { |
| 5904 ASSERT(auto_setup_scope != NULL); |
| 5905 *auto_setup_scope = false; |
5880 return &MyNativeFunction1; | 5906 return &MyNativeFunction1; |
5881 } | 5907 } |
5882 | 5908 |
5883 | 5909 |
5884 static Dart_NativeFunction MyNativeResolver2(Dart_Handle name, | 5910 static Dart_NativeFunction MyNativeResolver2(Dart_Handle name, |
5885 int arg_count) { | 5911 int arg_count, |
| 5912 bool* auto_setup_scope) { |
| 5913 ASSERT(auto_setup_scope != NULL); |
| 5914 *auto_setup_scope = false; |
5886 return &MyNativeFunction2; | 5915 return &MyNativeFunction2; |
5887 } | 5916 } |
5888 | 5917 |
5889 | 5918 |
5890 TEST_CASE(SetNativeResolver) { | 5919 TEST_CASE(SetNativeResolver) { |
5891 const char* kScriptChars = | 5920 const char* kScriptChars = |
5892 "class Test {" | 5921 "class Test {" |
5893 " static foo() native \"SomeNativeFunction\";" | 5922 " static foo() native \"SomeNativeFunction\";" |
5894 " static bar() native \"SomeNativeFunction2\";" | 5923 " static bar() native \"SomeNativeFunction2\";" |
5895 " static baz() native \"SomeNativeFunction3\";" | 5924 " static baz() native \"SomeNativeFunction3\";" |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6336 MonitorLocker ml(sync); | 6365 MonitorLocker ml(sync); |
6337 main_entered = true; | 6366 main_entered = true; |
6338 ml.Notify(); | 6367 ml.Notify(); |
6339 } | 6368 } |
6340 Dart_SetReturnValue(args, Dart_Null()); | 6369 Dart_SetReturnValue(args, Dart_Null()); |
6341 Dart_ExitScope(); | 6370 Dart_ExitScope(); |
6342 } | 6371 } |
6343 | 6372 |
6344 | 6373 |
6345 static Dart_NativeFunction IsolateInterruptTestNativeLookup( | 6374 static Dart_NativeFunction IsolateInterruptTestNativeLookup( |
6346 Dart_Handle name, int argument_count) { | 6375 Dart_Handle name, int argument_count, bool* auto_setup_scope) { |
| 6376 ASSERT(auto_setup_scope != NULL); |
| 6377 *auto_setup_scope = false; |
6347 return reinterpret_cast<Dart_NativeFunction>(&MarkMainEntered); | 6378 return reinterpret_cast<Dart_NativeFunction>(&MarkMainEntered); |
6348 } | 6379 } |
6349 | 6380 |
6350 | 6381 |
6351 void BusyLoop_start(uword unused) { | 6382 void BusyLoop_start(uword unused) { |
6352 const char* kScriptChars = | 6383 const char* kScriptChars = |
6353 "class Native {\n" | 6384 "class Native {\n" |
6354 " static void markMainEntered() native 'MarkMainEntered';\n" | 6385 " static void markMainEntered() native 'MarkMainEntered';\n" |
6355 "}\n" | 6386 "}\n" |
6356 "\n" | 6387 "\n" |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6641 Dart_Handle arg2 = Dart_GetNativeArgument(args, 2); | 6672 Dart_Handle arg2 = Dart_GetNativeArgument(args, 2); |
6642 Dart_Handle arg3 = Dart_GetNativeArgument(args, 3); | 6673 Dart_Handle arg3 = Dart_GetNativeArgument(args, 3); |
6643 Dart_SetReturnValue(args, Dart_NewInteger(GetValue(arg1) + | 6674 Dart_SetReturnValue(args, Dart_NewInteger(GetValue(arg1) + |
6644 GetValue(arg2) + | 6675 GetValue(arg2) + |
6645 GetValue(arg3))); | 6676 GetValue(arg3))); |
6646 Dart_ExitScope(); | 6677 Dart_ExitScope(); |
6647 } | 6678 } |
6648 | 6679 |
6649 | 6680 |
6650 static Dart_NativeFunction MyNativeClosureResolver(Dart_Handle name, | 6681 static Dart_NativeFunction MyNativeClosureResolver(Dart_Handle name, |
6651 int arg_count) { | 6682 int arg_count, |
| 6683 bool* auto_setup_scope) { |
| 6684 ASSERT(auto_setup_scope != NULL); |
| 6685 *auto_setup_scope = false; |
6652 const Object& obj = Object::Handle(Api::UnwrapHandle(name)); | 6686 const Object& obj = Object::Handle(Api::UnwrapHandle(name)); |
6653 if (!obj.IsString()) { | 6687 if (!obj.IsString()) { |
6654 return NULL; | 6688 return NULL; |
6655 } | 6689 } |
6656 const char* function_name = obj.ToCString(); | 6690 const char* function_name = obj.ToCString(); |
6657 const char* kNativeFoo1 = "NativeFoo1"; | 6691 const char* kNativeFoo1 = "NativeFoo1"; |
6658 const char* kNativeFoo2 = "NativeFoo2"; | 6692 const char* kNativeFoo2 = "NativeFoo2"; |
6659 const char* kNativeFoo3 = "NativeFoo3"; | 6693 const char* kNativeFoo3 = "NativeFoo3"; |
6660 const char* kNativeFoo4 = "NativeFoo4"; | 6694 const char* kNativeFoo4 = "NativeFoo4"; |
6661 if (!strncmp(function_name, kNativeFoo1, strlen(kNativeFoo1))) { | 6695 if (!strncmp(function_name, kNativeFoo1, strlen(kNativeFoo1))) { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6784 Dart_Handle arg1 = Dart_GetNativeArgument(args, 0); | 6818 Dart_Handle arg1 = Dart_GetNativeArgument(args, 0); |
6785 Dart_Handle arg2 = Dart_GetNativeArgument(args, 1); | 6819 Dart_Handle arg2 = Dart_GetNativeArgument(args, 1); |
6786 Dart_Handle arg3 = Dart_GetNativeArgument(args, 2); | 6820 Dart_Handle arg3 = Dart_GetNativeArgument(args, 2); |
6787 Dart_SetReturnValue(args, Dart_NewInteger(GetValue(arg1) + | 6821 Dart_SetReturnValue(args, Dart_NewInteger(GetValue(arg1) + |
6788 GetValue(arg2) + | 6822 GetValue(arg2) + |
6789 GetValue(arg3))); | 6823 GetValue(arg3))); |
6790 Dart_ExitScope(); | 6824 Dart_ExitScope(); |
6791 } | 6825 } |
6792 | 6826 |
6793 | 6827 |
6794 static Dart_NativeFunction MyStaticNativeClosureResolver(Dart_Handle name, | 6828 static Dart_NativeFunction MyStaticNativeClosureResolver( |
6795 int arg_count) { | 6829 Dart_Handle name, int arg_count, bool* auto_setup_scope) { |
| 6830 ASSERT(auto_setup_scope != NULL); |
| 6831 *auto_setup_scope = false; |
6796 const Object& obj = Object::Handle(Api::UnwrapHandle(name)); | 6832 const Object& obj = Object::Handle(Api::UnwrapHandle(name)); |
6797 if (!obj.IsString()) { | 6833 if (!obj.IsString()) { |
6798 return NULL; | 6834 return NULL; |
6799 } | 6835 } |
6800 const char* function_name = obj.ToCString(); | 6836 const char* function_name = obj.ToCString(); |
6801 const char* kNativeFoo1 = "StaticNativeFoo1"; | 6837 const char* kNativeFoo1 = "StaticNativeFoo1"; |
6802 const char* kNativeFoo2 = "StaticNativeFoo2"; | 6838 const char* kNativeFoo2 = "StaticNativeFoo2"; |
6803 const char* kNativeFoo3 = "StaticNativeFoo3"; | 6839 const char* kNativeFoo3 = "StaticNativeFoo3"; |
6804 const char* kNativeFoo4 = "StaticNativeFoo4"; | 6840 const char* kNativeFoo4 = "StaticNativeFoo4"; |
6805 if (!strncmp(function_name, kNativeFoo1, strlen(kNativeFoo1))) { | 6841 if (!strncmp(function_name, kNativeFoo1, strlen(kNativeFoo1))) { |
(...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7591 size, | 7627 size, |
7592 str_data, | 7628 str_data, |
7593 &ExternalStringDeoptimize_Finalize); | 7629 &ExternalStringDeoptimize_Finalize); |
7594 EXPECT_VALID(result); | 7630 EXPECT_VALID(result); |
7595 EXPECT(Dart_IsExternalString(result)); | 7631 EXPECT(Dart_IsExternalString(result)); |
7596 Dart_ExitScope(); | 7632 Dart_ExitScope(); |
7597 } | 7633 } |
7598 | 7634 |
7599 | 7635 |
7600 static Dart_NativeFunction ExternalStringDeoptimize_native_lookup( | 7636 static Dart_NativeFunction ExternalStringDeoptimize_native_lookup( |
7601 Dart_Handle name, int argument_count) { | 7637 Dart_Handle name, int argument_count, bool* auto_setup_scope) { |
| 7638 ASSERT(auto_setup_scope != NULL); |
| 7639 *auto_setup_scope = false; |
7602 return reinterpret_cast<Dart_NativeFunction>(&A_change_str_native); | 7640 return reinterpret_cast<Dart_NativeFunction>(&A_change_str_native); |
7603 } | 7641 } |
7604 | 7642 |
7605 | 7643 |
7606 // Do not use guarding mechanism on externalizable classes, since their class | 7644 // Do not use guarding mechanism on externalizable classes, since their class |
7607 // can change on the fly, | 7645 // can change on the fly, |
7608 TEST_CASE(GuardExternalizedString) { | 7646 TEST_CASE(GuardExternalizedString) { |
7609 const char* kScriptChars = | 7647 const char* kScriptChars = |
7610 "main() {\n" | 7648 "main() {\n" |
7611 " var a = new A('hello');\n" | 7649 " var a = new A('hello');\n" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7759 NewString("main"), | 7797 NewString("main"), |
7760 1, | 7798 1, |
7761 dart_args); | 7799 dart_args); |
7762 int64_t value = 0; | 7800 int64_t value = 0; |
7763 result = Dart_IntegerToInt64(result, &value); | 7801 result = Dart_IntegerToInt64(result, &value); |
7764 EXPECT_VALID(result); | 7802 EXPECT_VALID(result); |
7765 EXPECT_EQ(6, value); | 7803 EXPECT_EQ(6, value); |
7766 } | 7804 } |
7767 | 7805 |
7768 } // namespace dart | 7806 } // namespace dart |
OLD | NEW |