Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1132)

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 2230383003: Implement @patch annotation for patch class members (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: wip Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/lib/vmservice_patch.dart ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "vm/compiler.h" 6 #include "vm/compiler.h"
7 #include "include/dart_api.h" 7 #include "include/dart_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 "include/dart_tools_api.h" 10 #include "include/dart_tools_api.h"
(...skipping 6824 matching lines...) Expand 10 before | Expand all | Expand 10 after
6835 " external int method();\n" 6835 " external int method();\n"
6836 "}\n" 6836 "}\n"
6837 "\n" 6837 "\n"
6838 "external int unpatched();\n" 6838 "external int unpatched();\n"
6839 "external int topLevel(var value);\n" 6839 "external int topLevel(var value);\n"
6840 "external int topLevel2(var value);\n" 6840 "external int topLevel2(var value);\n"
6841 "external int get topLevelGetter;\n" 6841 "external int get topLevelGetter;\n"
6842 "external void set topLevelSetter(int value);\n"; 6842 "external void set topLevelSetter(int value);\n";
6843 6843
6844 const char* kPatchChars = 6844 const char* kPatchChars =
6845 "patch class A {\n" 6845 "@patch class A {\n"
6846 " var _g;\n" 6846 " var _g;\n"
6847 " A() : fvalue = 13;\n" 6847 " A() : fvalue = 13;\n"
6848 " get _field => _g;\n" 6848 " get _field => _g;\n"
6849 " /*patch*/ void method(var value) {\n" 6849 " @patch void method(var value) {\n"
6850 " int closeYourEyes(var eggs) { return eggs * -1; }\n" 6850 " int closeYourEyes(var eggs) { return eggs * -1; }\n"
6851 " value = callFunc(closeYourEyes, value);\n" 6851 " value = callFunc(closeYourEyes, value);\n"
6852 " _g = value * 5;\n" 6852 " _g = value * 5;\n"
6853 " }\n" 6853 " }\n"
6854 "}\n" 6854 "}\n"
6855 "patch class B {\n" 6855 "@patch class B {\n"
6856 " B._internal(x) : val = x;\n" 6856 " B._internal(x) : val = x;\n"
6857 " /*patch*/ factory B.named(x) { return new B._internal(x); }\n" 6857 " @patch factory B.named(x) { return new B._internal(x); }\n"
6858 " /*patch*/ factory B(v) native \"const_B_factory\";\n" 6858 " @patch factory B(v) native \"const_B_factory\";\n"
6859 "}\n" 6859 "}\n"
6860 "var _topLevelValue = -1;\n" 6860 "var _topLevelValue = -1;\n"
6861 "patch int topLevel(var value) => value * value;\n" 6861 "@patch int topLevel(var value) => value * value;\n"
6862 "patch int set topLevelSetter(value) { _topLevelValue = value; }\n" 6862 "@patch int set topLevelSetter(value) { _topLevelValue = value; }\n"
6863 "patch int get topLevelGetter => 2 * _topLevelValue;\n" 6863 "@patch int get topLevelGetter => 2 * _topLevelValue;\n"
6864 // Allow top level methods named patch. 6864 // Allow top level methods named patch.
6865 "patch(x) => x*3;\n" 6865 "patch(x) => x*3;\n"
6866 ; // NOLINT 6866 ; // NOLINT
6867 6867
6868 const char* kPatchClassOnlyChars = 6868 const char* kPatchClassOnlyChars =
6869 "patch class C {\n" 6869 "@patch class C {\n"
6870 " /*patch*/ int method() {\n" 6870 " @patch int method() {\n"
6871 " return 42;\n" 6871 " return 42;\n"
6872 " }\n" 6872 " }\n"
6873 "}\n" 6873 "}\n"
6874 ; // NOLINT 6874 ; // NOLINT
6875 6875
6876 const char* kPatchNoClassChars = 6876 const char* kPatchNoClassChars =
6877 "patch topLevel2(x) => x * 2;\n"; 6877 "@patch topLevel2(x) => x * 2;\n";
6878 6878
6879 const char* kScriptChars = 6879 const char* kScriptChars =
6880 "import 'theLibrary';\n" 6880 "import 'theLibrary';\n"
6881 "e1() => unpatched();\n" 6881 "e1() => unpatched();\n"
6882 "m1() => topLevel(2);\n" 6882 "m1() => topLevel(2);\n"
6883 "m2() {\n" 6883 "m2() {\n"
6884 " topLevelSetter = 20;\n" 6884 " topLevelSetter = 20;\n"
6885 " return topLevelGetter;\n" 6885 " return topLevelGetter;\n"
6886 "}\n" 6886 "}\n"
6887 "m3() => patch(7);\n" 6887 "m3() => patch(7);\n"
(...skipping 3164 matching lines...) Expand 10 before | Expand all | Expand 10 after
10052 "class A {\n" 10052 "class A {\n"
10053 " int foo() { return 10; }\n" 10053 " int foo() { return 10; }\n"
10054 " external int zoo();\n" 10054 " external int zoo();\n"
10055 " external static int moo();\n" 10055 " external static int moo();\n"
10056 "}\n" 10056 "}\n"
10057 "main() { new A().foo(); }\n" 10057 "main() { new A().foo(); }\n"
10058 "foozoo() { new A().zoo(); }\n" 10058 "foozoo() { new A().zoo(); }\n"
10059 "foomoo() { A.moo(); }\n"; 10059 "foomoo() { A.moo(); }\n";
10060 10060
10061 const char* kScriptChars2 = 10061 const char* kScriptChars2 =
10062 "patch class A {\n" 10062 "@patch class A {\n"
10063 " /* patch */ int zoo() { return 1; }\n" 10063 " @patch int zoo() { return 1; }\n"
10064 " /* patch */ static int moo() { return 1; }\n" 10064 " @patch static int moo() { return 1; }\n"
10065 "}\n"; 10065 "}\n";
10066 10066
10067 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL); 10067 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL);
10068 Dart_Handle result = Dart_Invoke(lib, 10068 Dart_Handle result = Dart_Invoke(lib,
10069 NewString("main"), 10069 NewString("main"),
10070 0, 10070 0,
10071 NULL); 10071 NULL);
10072 EXPECT_VALID(result); 10072 EXPECT_VALID(result);
10073 Dart_Handle url = NewString("test-lib-patch"); 10073 Dart_Handle url = NewString("test-lib-patch");
10074 Dart_Handle source = NewString(kScriptChars2); 10074 Dart_Handle source = NewString(kScriptChars2);
(...skipping 17 matching lines...) Expand all
10092 TEST_CASE(Dart_LoadLibraryPatch_Error1) { 10092 TEST_CASE(Dart_LoadLibraryPatch_Error1) {
10093 const char* kScriptChars1 = 10093 const char* kScriptChars1 =
10094 "class A {\n" 10094 "class A {\n"
10095 " int foo() { return 10; }\n" 10095 " int foo() { return 10; }\n"
10096 " external int zoo();\n" 10096 " external int zoo();\n"
10097 "}\n" 10097 "}\n"
10098 "main() { new A().foo(); }\n" 10098 "main() { new A().foo(); }\n"
10099 "foozoo() { new A().zoo(); }\n"; 10099 "foozoo() { new A().zoo(); }\n";
10100 10100
10101 const char* kScriptChars2 = 10101 const char* kScriptChars2 =
10102 "patch class A {\n" 10102 "@patch class A {\n"
10103 " /* patch */ int zoo() { return 1; }\n" 10103 " @patch int zoo() { return 1; }\n"
10104 " /* patch */ int fld1;\n" 10104 " @patch int fld1;\n"
10105 "}\n"; 10105 "}\n";
10106 10106
10107 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL); 10107 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL);
10108 Dart_Handle result = Dart_Invoke(lib, 10108 Dart_Handle result = Dart_Invoke(lib,
10109 NewString("main"), 10109 NewString("main"),
10110 0, 10110 0,
10111 NULL); 10111 NULL);
10112 EXPECT_VALID(result); 10112 EXPECT_VALID(result);
10113 Dart_Handle url = NewString("test-lib-patch"); 10113 Dart_Handle url = NewString("test-lib-patch");
10114 Dart_Handle source = NewString(kScriptChars2); 10114 Dart_Handle source = NewString(kScriptChars2);
(...skipping 14 matching lines...) Expand all
10129 TEST_CASE(Dart_LoadLibraryPatch_Error2) { 10129 TEST_CASE(Dart_LoadLibraryPatch_Error2) {
10130 const char* kScriptChars1 = 10130 const char* kScriptChars1 =
10131 "class A {\n" 10131 "class A {\n"
10132 " int foo() { return 10; }\n" 10132 " int foo() { return 10; }\n"
10133 " int zoo() { return 20; }\n" 10133 " int zoo() { return 20; }\n"
10134 "}\n" 10134 "}\n"
10135 "main() { new A().foo(); }\n" 10135 "main() { new A().foo(); }\n"
10136 "foozoo() { new A().zoo(); }\n"; 10136 "foozoo() { new A().zoo(); }\n";
10137 10137
10138 const char* kScriptChars2 = 10138 const char* kScriptChars2 =
10139 "patch class A {\n" 10139 "@patch class A {\n"
10140 " /* patch */ int zoo() { return 1; }\n" 10140 " @patch int zoo() { return 1; }\n"
10141 "}\n"; 10141 "}\n";
10142 10142
10143 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL); 10143 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL);
10144 Dart_Handle result = Dart_Invoke(lib, 10144 Dart_Handle result = Dart_Invoke(lib,
10145 NewString("main"), 10145 NewString("main"),
10146 0, 10146 0,
10147 NULL); 10147 NULL);
10148 EXPECT_VALID(result); 10148 EXPECT_VALID(result);
10149 Dart_Handle url = NewString("test-lib-patch"); 10149 Dart_Handle url = NewString("test-lib-patch");
10150 Dart_Handle source = NewString(kScriptChars2); 10150 Dart_Handle source = NewString(kScriptChars2);
(...skipping 15 matching lines...) Expand all
10166 TEST_CASE(Dart_LoadLibraryPatch_Error3) { 10166 TEST_CASE(Dart_LoadLibraryPatch_Error3) {
10167 const char* kScriptChars1 = 10167 const char* kScriptChars1 =
10168 "class A {\n" 10168 "class A {\n"
10169 " int foo() { return 10; }\n" 10169 " int foo() { return 10; }\n"
10170 " external int zoo();\n" 10170 " external int zoo();\n"
10171 "}\n" 10171 "}\n"
10172 "main() { new A().foo(); }\n" 10172 "main() { new A().foo(); }\n"
10173 "foozoo() { new A().zoo(); }\n"; 10173 "foozoo() { new A().zoo(); }\n";
10174 10174
10175 const char* kScriptChars2 = 10175 const char* kScriptChars2 =
10176 "patch class A {\n" 10176 "@patch class A {\n"
10177 " /* patch */ int zoo() { return 1; }\n" 10177 " @patch int zoo() { return 1; }\n"
10178 "}\n"; 10178 "}\n";
10179 10179
10180 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL); 10180 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars1, NULL);
10181 Dart_Handle result = Dart_Invoke(lib, 10181 Dart_Handle result = Dart_Invoke(lib,
10182 NewString("main"), 10182 NewString("main"),
10183 0, 10183 0,
10184 NULL); 10184 NULL);
10185 // We invoke the foozoo method to ensure that code for 'zoo' is generated 10185 // We invoke the foozoo method to ensure that code for 'zoo' is generated
10186 // which throws NoSuchMethod. 10186 // which throws NoSuchMethod.
10187 result = Dart_Invoke(lib, 10187 result = Dart_Invoke(lib,
(...skipping 12 matching lines...) Expand all
10200 result = Dart_Invoke(lib, 10200 result = Dart_Invoke(lib,
10201 NewString("foozoo"), 10201 NewString("foozoo"),
10202 0, 10202 0,
10203 NULL); 10203 NULL);
10204 EXPECT(Dart_IsError(result)); 10204 EXPECT(Dart_IsError(result));
10205 } 10205 }
10206 10206
10207 #endif // !PRODUCT 10207 #endif // !PRODUCT
10208 10208
10209 } // namespace dart 10209 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/lib/vmservice_patch.dart ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698