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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "platform/assert.h" | 6 #include "platform/assert.h" |
7 #include "platform/json.h" | 7 #include "platform/json.h" |
8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
(...skipping 5463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5474 EXPECT_STREQ("bar", result_cstr); | 5474 EXPECT_STREQ("bar", result_cstr); |
5475 } | 5475 } |
5476 | 5476 |
5477 | 5477 |
5478 TEST_CASE(ParsePatchLibrary) { | 5478 TEST_CASE(ParsePatchLibrary) { |
5479 const char* kLibraryChars = | 5479 const char* kLibraryChars = |
5480 "#library('patched_library');\n" | 5480 "#library('patched_library');\n" |
5481 "class A {\n" | 5481 "class A {\n" |
5482 " var _f;\n" | 5482 " var _f;\n" |
5483 " external method(var value);\n" | 5483 " external method(var value);\n" |
| 5484 " get field() => _field;\n" |
5484 "}\n" | 5485 "}\n" |
5485 "external int unpatched();\n" | 5486 "external int unpatched();\n" |
5486 "external int topLevel(var value);\n" | 5487 "external int topLevel(var value);\n" |
5487 "external int get topLevelGetter();\n" | 5488 "external int get topLevelGetter();\n" |
5488 "external void set topLevelSetter(int value);\n"; | 5489 "external void set topLevelSetter(int value);\n"; |
5489 | 5490 |
5490 const char* kPatchChars = | 5491 const char* kPatchChars = |
5491 "var _topLevelValue = -1;" | 5492 "patch class A {\n" |
| 5493 " var _g;\n" |
| 5494 " get _field() => _g;\n" |
| 5495 " patch method(var value) {\n" |
| 5496 " _g = value * 5;\n" |
| 5497 " }\n" |
| 5498 "}\n" |
| 5499 "var _topLevelValue = -1;\n" |
5492 "patch int topLevel(var value) => value * value;\n" | 5500 "patch int topLevel(var value) => value * value;\n" |
5493 "patch int set topLevelSetter(value) { _topLevelValue = value; }\n" | 5501 "patch int set topLevelSetter(value) { _topLevelValue = value; }\n" |
5494 "patch int get topLevelGetter() => 2 * _topLevelValue;\n" | 5502 "patch int get topLevelGetter() => 2 * _topLevelValue;\n" |
5495 // Allow top level methods named patch. | 5503 // Allow top level methods named patch. |
5496 "patch(x) => x*3;\n"; | 5504 "patch(x) => x*3;\n"; |
5497 | 5505 |
5498 const char* kScriptChars = | 5506 const char* kScriptChars = |
5499 "#import('theLibrary');\n" | 5507 "#import('theLibrary');\n" |
5500 "e1() => unpatched();\n" | 5508 "e1() => unpatched();\n" |
5501 "m1() => topLevel(2);\n" | 5509 "m1() => topLevel(2);\n" |
5502 "m2() {\n" | 5510 "m2() {\n" |
5503 " topLevelSetter = 20;\n" | 5511 " topLevelSetter = 20;\n" |
5504 " return topLevelGetter;\n" | 5512 " return topLevelGetter;\n" |
5505 "}\n" | 5513 "}\n" |
5506 "m3() => patch(7);\n"; | 5514 "m3() => patch(7);\n" |
| 5515 "m4() {\n" |
| 5516 " var a = new A();\n" |
| 5517 " a.method(5);\n" |
| 5518 " return a.field;\n" |
| 5519 "}\n"; |
5507 | 5520 |
5508 Dart_Handle result = Dart_SetLibraryTagHandler(library_handler); | 5521 Dart_Handle result = Dart_SetLibraryTagHandler(library_handler); |
5509 EXPECT_VALID(result); | 5522 EXPECT_VALID(result); |
5510 | 5523 |
5511 Dart_Handle url = Dart_NewString("theLibrary"); | 5524 Dart_Handle url = Dart_NewString("theLibrary"); |
5512 Dart_Handle source = Dart_NewString(kLibraryChars); | 5525 Dart_Handle source = Dart_NewString(kLibraryChars); |
5513 result = Dart_LoadLibrary(url, source); | 5526 result = Dart_LoadLibrary(url, source); |
5514 EXPECT_VALID(result); | 5527 EXPECT_VALID(result); |
5515 | 5528 |
5516 const String& patch_url = String::Handle(String::New("theLibrary patch")); | 5529 const String& patch_url = String::Handle(String::New("theLibrary patch")); |
(...skipping 30 matching lines...) Expand all Loading... |
5547 EXPECT(Dart_IsInteger(result)); | 5560 EXPECT(Dart_IsInteger(result)); |
5548 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); | 5561 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); |
5549 EXPECT_EQ(40, value); | 5562 EXPECT_EQ(40, value); |
5550 | 5563 |
5551 value = 0; | 5564 value = 0; |
5552 result = Dart_Invoke(test_script, Dart_NewString("m3"), 0, NULL); | 5565 result = Dart_Invoke(test_script, Dart_NewString("m3"), 0, NULL); |
5553 EXPECT_VALID(result); | 5566 EXPECT_VALID(result); |
5554 EXPECT(Dart_IsInteger(result)); | 5567 EXPECT(Dart_IsInteger(result)); |
5555 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); | 5568 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); |
5556 EXPECT_EQ(21, value); | 5569 EXPECT_EQ(21, value); |
| 5570 |
| 5571 value = 0; |
| 5572 result = Dart_Invoke(test_script, Dart_NewString("m4"), 0, NULL); |
| 5573 EXPECT_VALID(result); |
| 5574 EXPECT(Dart_IsInteger(result)); |
| 5575 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); |
| 5576 EXPECT_EQ(25, value); |
5557 } | 5577 } |
5558 | 5578 |
5559 | 5579 |
5560 static void MyNativeFunction1(Dart_NativeArguments args) { | 5580 static void MyNativeFunction1(Dart_NativeArguments args) { |
5561 Dart_EnterScope(); | 5581 Dart_EnterScope(); |
5562 Dart_SetReturnValue(args, Dart_NewInteger(654321)); | 5582 Dart_SetReturnValue(args, Dart_NewInteger(654321)); |
5563 Dart_ExitScope(); | 5583 Dart_ExitScope(); |
5564 } | 5584 } |
5565 | 5585 |
5566 | 5586 |
(...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6563 EXPECT(Dart_IsString(str)); | 6583 EXPECT(Dart_IsString(str)); |
6564 len = -1; | 6584 len = -1; |
6565 EXPECT_VALID(Dart_StringLength(str, &len)); | 6585 EXPECT_VALID(Dart_StringLength(str, &len)); |
6566 EXPECT_EQ(0, len); | 6586 EXPECT_EQ(0, len); |
6567 } | 6587 } |
6568 | 6588 |
6569 | 6589 |
6570 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 6590 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
6571 | 6591 |
6572 } // namespace dart | 6592 } // namespace dart |
OLD | NEW |