Chromium Code Reviews| 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 "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/class_finalizer.h" | 6 #include "vm/class_finalizer.h" |
| 7 #include "vm/code_patcher.h" | 7 #include "vm/code_patcher.h" |
| 8 #include "vm/compiler.h" | 8 #include "vm/compiler.h" |
| 9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
| 10 #include "vm/object.h" | 10 #include "vm/object.h" |
| 11 #include "vm/symbols.h" | 11 #include "vm/symbols.h" |
| 12 #include "vm/unit_test.h" | 12 #include "vm/unit_test.h" |
| 13 | 13 |
| 14 namespace dart { | 14 namespace dart { |
| 15 | 15 |
| 16 DECLARE_FLAG(bool, enable_type_checks); | |
| 17 | |
| 18 TEST_CASE(CompileScript) { | 16 TEST_CASE(CompileScript) { |
| 19 const char* kScriptChars = | 17 const char* kScriptChars = |
| 20 "class A {\n" | 18 "class A {\n" |
| 21 " static foo() { return 42; }\n" | 19 " static foo() { return 42; }\n" |
| 22 "}\n"; | 20 "}\n"; |
| 23 String& url = String::Handle(String::New("dart-test:CompileScript")); | 21 String& url = String::Handle(String::New("dart-test:CompileScript")); |
| 24 String& source = String::Handle(String::New(kScriptChars)); | 22 String& source = String::Handle(String::New(kScriptChars)); |
| 25 Script& script = Script::Handle(Script::New(url, | 23 Script& script = Script::Handle(Script::New(url, |
| 26 source, | 24 source, |
| 27 RawScript::kScriptTag)); | 25 RawScript::kScriptTag)); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 TEST_CASE(RegenerateAllocStubs) { | 72 TEST_CASE(RegenerateAllocStubs) { |
| 75 const char* kScriptChars = | 73 const char* kScriptChars = |
| 76 "class A {\n" | 74 "class A {\n" |
| 77 "}\n" | 75 "}\n" |
| 78 "unOpt() => new A(); \n" | 76 "unOpt() => new A(); \n" |
| 79 "optIt() => new A(); \n" | 77 "optIt() => new A(); \n" |
| 80 "A main() {\n" | 78 "A main() {\n" |
| 81 " return unOpt();\n" | 79 " return unOpt();\n" |
| 82 "}\n"; | 80 "}\n"; |
| 83 | 81 |
| 84 bool old_enable_type_checks = FLAG_enable_type_checks; | 82 // Isolate::Current()->flags().set_checked(true); |
|
Florian Schneider
2015/06/08 11:25:49
Why is this commmented out?
Ivan Posva
2015/06/08 11:53:57
Because it is being enabled after the isolate has
| |
| 85 FLAG_enable_type_checks = true; | |
| 86 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 83 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 87 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 84 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 88 EXPECT_VALID(result); | 85 EXPECT_VALID(result); |
| 89 RawLibrary* raw_library = Library::RawCast(Api::UnwrapHandle(lib)); | 86 RawLibrary* raw_library = Library::RawCast(Api::UnwrapHandle(lib)); |
| 90 Library& lib_handle = Library::ZoneHandle(raw_library); | 87 Library& lib_handle = Library::ZoneHandle(raw_library); |
| 91 Class& cls = Class::Handle( | 88 Class& cls = Class::Handle( |
| 92 lib_handle.LookupClass(String::Handle(Symbols::New("A")))); | 89 lib_handle.LookupClass(String::Handle(Symbols::New("A")))); |
| 93 EXPECT(!cls.IsNull()); | 90 EXPECT(!cls.IsNull()); |
| 94 | 91 |
| 95 Isolate* isolate = Isolate::Current(); | 92 Isolate* isolate = Isolate::Current(); |
| 96 StubCode* stub_code = isolate->stub_code(); | 93 StubCode* stub_code = isolate->stub_code(); |
| 97 const Code& stub = Code::Handle(isolate, | 94 const Code& stub = Code::Handle(isolate, |
| 98 stub_code->GetAllocationStubForClass(cls)); | 95 stub_code->GetAllocationStubForClass(cls)); |
| 99 Class& owner = Class::Handle(); | 96 Class& owner = Class::Handle(); |
| 100 owner ^= stub.owner(); | 97 owner ^= stub.owner(); |
| 101 owner.DisableAllocationStub(); | 98 owner.DisableAllocationStub(); |
| 102 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 99 result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 103 EXPECT_VALID(result); | 100 EXPECT_VALID(result); |
| 104 | 101 |
| 105 owner.DisableAllocationStub(); | 102 owner.DisableAllocationStub(); |
| 106 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 103 result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 107 EXPECT_VALID(result); | 104 EXPECT_VALID(result); |
| 108 | 105 |
| 109 owner.DisableAllocationStub(); | 106 owner.DisableAllocationStub(); |
| 110 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 107 result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 111 EXPECT_VALID(result); | 108 EXPECT_VALID(result); |
| 112 | |
| 113 FLAG_enable_type_checks = old_enable_type_checks; | |
| 114 } | 109 } |
| 115 | 110 |
| 116 | 111 |
| 117 TEST_CASE(EvalExpression) { | 112 TEST_CASE(EvalExpression) { |
| 118 const char* kScriptChars = | 113 const char* kScriptChars = |
| 119 "int ten = 2 * 5; \n" | 114 "int ten = 2 * 5; \n" |
| 120 "get dot => '.'; \n" | 115 "get dot => '.'; \n" |
| 121 "class A { \n" | 116 "class A { \n" |
| 122 " var apa = 'Herr Nilsson'; \n" | 117 " var apa = 'Herr Nilsson'; \n" |
| 123 " calc(x) => '${x*ten}'; \n" | 118 " calc(x) => '${x*ten}'; \n" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 val = lib.Evaluate(expression, Array::empty_array(), Array::empty_array()); | 168 val = lib.Evaluate(expression, Array::empty_array(), Array::empty_array()); |
| 174 } | 169 } |
| 175 | 170 |
| 176 EXPECT(!val.IsNull()); | 171 EXPECT(!val.IsNull()); |
| 177 EXPECT(!val.IsError()); | 172 EXPECT(!val.IsError()); |
| 178 EXPECT(val.IsInteger()); | 173 EXPECT(val.IsInteger()); |
| 179 EXPECT_EQ(7, Integer::Cast(val).AsInt64Value()); | 174 EXPECT_EQ(7, Integer::Cast(val).AsInt64Value()); |
| 180 } | 175 } |
| 181 | 176 |
| 182 } // namespace dart | 177 } // namespace dart |
| OLD | NEW |