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

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

Issue 1091353002: Reland r45243. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
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 "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 8825 matching lines...) Expand 10 before | Expand all | Expand 10 after
8836 NewString("main"), 8836 NewString("main"),
8837 0, 8837 0,
8838 NULL); 8838 NULL);
8839 int64_t value = 0; 8839 int64_t value = 0;
8840 result = Dart_IntegerToInt64(result, &value); 8840 result = Dart_IntegerToInt64(result, &value);
8841 EXPECT_VALID(result); 8841 EXPECT_VALID(result);
8842 EXPECT_EQ(260, value); 8842 EXPECT_EQ(260, value);
8843 } 8843 }
8844 8844
8845 8845
8846 TEST_CASE(ExternalStringPolymorphicDeoptimize) {
8847 const char* kScriptChars =
8848 "const strA = 'AAAA';\n"
8849 "class A {\n"
8850 " static change_str(String s) native 'A_change_str';\n"
8851 "}\n"
8852 "compare(a, b, [i = 0]) {\n"
8853 " return a.codeUnitAt(i) == b.codeUnitAt(i);\n"
8854 "}\n"
8855 "compareA(b, [i = 0]) {\n"
8856 " return compare(strA, b, i);\n"
8857 "}\n"
8858 "main() {\n"
8859 " var externalA = 'AA' + 'AA';\n"
8860 " A.change_str(externalA);\n"
8861 " compare('AA' + 'AA', strA);\n"
8862 " compare(externalA, strA);\n"
8863 " for (var i = 0; i < 10000; i++) compareA(strA);\n"
8864 " A.change_str(strA);\n"
8865 " return compareA('AA' + 'AA');\n"
8866 "}\n";
8867 Dart_Handle lib =
8868 TestCase::LoadTestScript(kScriptChars,
8869 &ExternalStringDeoptimize_native_lookup);
8870 Dart_Handle result = Dart_Invoke(lib,
8871 NewString("main"),
8872 0,
8873 NULL);
8874 EXPECT_VALID(result);
8875 bool value = false;
8876 result = Dart_BooleanValue(result, &value);
8877 EXPECT_VALID(result);
8878 EXPECT(value);
8879 }
8880
8881
8882 TEST_CASE(ExternalStringGuardFieldDeoptimize) {
8883 const char* kScriptChars =
8884 "const strA = 'AAAA';\n"
8885 "class A {\n"
8886 " static change_str(String s) native 'A_change_str';\n"
8887 "}\n"
8888 "class G { var f = 'A'; }\n"
8889 "final guard = new G();\n"
8890 "var shouldExternalize = false;\n"
8891 "ext() { if (shouldExternalize) A.change_str(strA); }\n"
8892 "compare(a, b, [i = 0]) {\n"
8893 " guard.f = a;\n"
8894 " ext();"
8895 " return a.codeUnitAt(i) == b.codeUnitAt(i);\n"
8896 "}\n"
8897 "compareA(b, [i = 0]) {\n"
8898 " return compare(strA, b, i);\n"
8899 "}\n"
8900 "main() {\n"
8901 " var externalA = 'AA' + 'AA';\n"
8902 " A.change_str(externalA);\n"
8903 " compare('AA' + 'AA', strA);\n"
8904 " for (var i = 0; i < 10000; i++) compareA(strA);\n"
8905 " shouldExternalize = true;\n"
8906 " return compareA('AA' + 'AA');\n"
8907 "}\n";
8908 Dart_Handle lib =
8909 TestCase::LoadTestScript(kScriptChars,
8910 &ExternalStringDeoptimize_native_lookup);
8911 Dart_Handle result = Dart_Invoke(lib,
8912 NewString("main"),
8913 0,
8914 NULL);
8915 EXPECT_VALID(result);
8916 bool value = false;
8917 result = Dart_BooleanValue(result, &value);
8918 EXPECT_VALID(result);
8919 EXPECT(value);
8920 }
8921
8922
8923 TEST_CASE(ExternalStringStaticFieldDeoptimize) {
8924 const char* kScriptChars =
8925 "const strA = 'AAAA';\n"
8926 "class A {\n"
8927 " static change_str(String s) native 'A_change_str';\n"
8928 "}\n"
8929 "class G { static final f = strA; }\n"
8930 "compare(a, b, [i = 0]) {\n"
8931 " return a.codeUnitAt(i) == b.codeUnitAt(i);\n"
8932 "}\n"
8933 "compareA(b, [i = 0]) {\n"
8934 " return compare(G.f, b, i);\n"
8935 "}\n"
8936 "main() {\n"
8937 " var externalA = 'AA' + 'AA';\n"
8938 " A.change_str(externalA);\n"
8939 " compare('AA' + 'AA', strA);\n"
8940 " for (var i = 0; i < 10000; i++) compareA(strA);\n"
8941 " A.change_str(G.f);"
8942 " return compareA('AA' + 'AA');\n"
8943 "}\n";
8944 Dart_Handle lib =
8945 TestCase::LoadTestScript(kScriptChars,
8946 &ExternalStringDeoptimize_native_lookup);
8947 Dart_Handle result = Dart_Invoke(lib,
8948 NewString("main"),
8949 0,
8950 NULL);
8951 EXPECT_VALID(result);
8952 bool value = false;
8953 result = Dart_BooleanValue(result, &value);
8954 EXPECT_VALID(result);
8955 EXPECT(value);
8956 }
8957
8958
8846 TEST_CASE(ExternalStringTrimDoubleParse) { 8959 TEST_CASE(ExternalStringTrimDoubleParse) {
8847 const char* kScriptChars = 8960 const char* kScriptChars =
8848 "String str = 'A';\n" 8961 "String str = 'A';\n"
8849 "class A {\n" 8962 "class A {\n"
8850 " static change_str(String s) native 'A_change_str';\n" 8963 " static change_str(String s) native 'A_change_str';\n"
8851 "}\n" 8964 "}\n"
8852 "main() {\n" 8965 "main() {\n"
8853 " var externalOneByteString = ' 0.2\\xA0 ';\n;" 8966 " var externalOneByteString = ' 0.2\\xA0 ';\n;"
8854 " A.change_str(externalOneByteString);\n" 8967 " A.change_str(externalOneByteString);\n"
8855 " var externalTwoByteString = ' \\u{2029}0.6\\u{2029} ';\n" 8968 " var externalTwoByteString = ' \\u{2029}0.6\\u{2029} ';\n"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
9019 result = Dart_Invoke(lib, 9132 result = Dart_Invoke(lib,
9020 NewString("testView16"), 9133 NewString("testView16"),
9021 1, 9134 1,
9022 dart_args); 9135 dart_args);
9023 EXPECT_VALID(result); 9136 EXPECT_VALID(result);
9024 EXPECT(Dart_IsString(result)); 9137 EXPECT(Dart_IsString(result));
9025 } 9138 }
9026 } 9139 }
9027 9140
9028 } // namespace dart 9141 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698