| 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 7174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7185 "\n" | 7185 "\n" |
| 7186 "void main() {\n" | 7186 "void main() {\n" |
| 7187 " Native.markMainEntered();\n" | 7187 " Native.markMainEntered();\n" |
| 7188 " while (true) {\n" // Infinite empty loop. | 7188 " while (true) {\n" // Infinite empty loop. |
| 7189 " }\n" | 7189 " }\n" |
| 7190 "}\n"; | 7190 "}\n"; |
| 7191 | 7191 |
| 7192 // Tell the other thread that shared_isolate is created. | 7192 // Tell the other thread that shared_isolate is created. |
| 7193 Dart_Handle lib; | 7193 Dart_Handle lib; |
| 7194 { | 7194 { |
| 7195 sync->Enter(); | 7195 MonitorLocker ml(sync); |
| 7196 char* error = NULL; | 7196 char* error = NULL; |
| 7197 shared_isolate = Dart_CreateIsolate(NULL, NULL, | 7197 shared_isolate = Dart_CreateIsolate(NULL, NULL, |
| 7198 bin::snapshot_buffer, | 7198 bin::snapshot_buffer, |
| 7199 NULL, &error); | 7199 NULL, &error); |
| 7200 EXPECT(shared_isolate != NULL); | 7200 EXPECT(shared_isolate != NULL); |
| 7201 Dart_EnterScope(); | 7201 Dart_EnterScope(); |
| 7202 Dart_Handle url = NewString(TestCase::url()); | 7202 Dart_Handle url = NewString(TestCase::url()); |
| 7203 Dart_Handle source = NewString(kScriptChars); | 7203 Dart_Handle source = NewString(kScriptChars); |
| 7204 Dart_Handle result = Dart_SetLibraryTagHandler(TestCase::library_handler); | 7204 Dart_Handle result = Dart_SetLibraryTagHandler(TestCase::library_handler); |
| 7205 EXPECT_VALID(result); | 7205 EXPECT_VALID(result); |
| 7206 lib = Dart_LoadScript(url, source, 0, 0); | 7206 lib = Dart_LoadScript(url, source, 0, 0); |
| 7207 EXPECT_VALID(lib); | 7207 EXPECT_VALID(lib); |
| 7208 result = Dart_FinalizeLoading(false); | 7208 result = Dart_FinalizeLoading(false); |
| 7209 EXPECT_VALID(result); | 7209 EXPECT_VALID(result); |
| 7210 result = | 7210 result = |
| 7211 Dart_SetNativeResolver(lib, &IsolateInterruptTestNativeLookup, NULL); | 7211 Dart_SetNativeResolver(lib, &IsolateInterruptTestNativeLookup, NULL); |
| 7212 DART_CHECK_VALID(result); | 7212 DART_CHECK_VALID(result); |
| 7213 | 7213 |
| 7214 sync->Notify(); | 7214 ml.Notify(); |
| 7215 sync->Exit(); | |
| 7216 } | 7215 } |
| 7217 | 7216 |
| 7218 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 7217 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 7219 EXPECT(Dart_IsError(result)); | 7218 EXPECT(Dart_IsError(result)); |
| 7220 EXPECT(Dart_ErrorHasException(result)); | 7219 EXPECT(Dart_ErrorHasException(result)); |
| 7221 EXPECT_SUBSTRING("Unhandled exception:\nfoo\n", | 7220 EXPECT_SUBSTRING("Unhandled exception:\nfoo\n", |
| 7222 Dart_GetError(result)); | 7221 Dart_GetError(result)); |
| 7223 | 7222 |
| 7224 Dart_ExitScope(); | 7223 Dart_ExitScope(); |
| 7225 Dart_ShutdownIsolate(); | 7224 Dart_ShutdownIsolate(); |
| 7226 | 7225 |
| 7227 // Tell the other thread that we are done (don't use MonitorLocker | 7226 // Tell the other thread that we are done. |
| 7228 // as there is no current isolate any more). | 7227 { |
| 7229 sync->Enter(); | 7228 MonitorLocker ml(sync); |
| 7230 shared_isolate = NULL; | 7229 shared_isolate = NULL; |
| 7231 sync->Notify(); | 7230 ml.Notify(); |
| 7232 sync->Exit(); | 7231 } |
| 7233 } | 7232 } |
| 7234 | 7233 |
| 7235 | 7234 |
| 7236 // This callback handles isolate interrupts for the IsolateInterrupt | 7235 // This callback handles isolate interrupts for the IsolateInterrupt |
| 7237 // test. It ignores the first two interrupts and throws an exception | 7236 // test. It ignores the first two interrupts and throws an exception |
| 7238 // on the third interrupt. | 7237 // on the third interrupt. |
| 7239 const int kInterruptCount = 10; | 7238 const int kInterruptCount = 10; |
| 7240 static int interrupt_count = 0; | 7239 static int interrupt_count = 0; |
| 7241 static bool IsolateInterruptTestCallback() { | 7240 static bool IsolateInterruptTestCallback() { |
| 7242 OS::Print(" ========== Interrupt callback called #%d\n", interrupt_count + 1); | 7241 OS::Print(" ========== Interrupt callback called #%d\n", interrupt_count + 1); |
| (...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8644 NewString("main"), | 8643 NewString("main"), |
| 8645 1, | 8644 1, |
| 8646 dart_args); | 8645 dart_args); |
| 8647 int64_t value = 0; | 8646 int64_t value = 0; |
| 8648 result = Dart_IntegerToInt64(result, &value); | 8647 result = Dart_IntegerToInt64(result, &value); |
| 8649 EXPECT_VALID(result); | 8648 EXPECT_VALID(result); |
| 8650 EXPECT_EQ(6, value); | 8649 EXPECT_EQ(6, value); |
| 8651 } | 8650 } |
| 8652 | 8651 |
| 8653 } // namespace dart | 8652 } // namespace dart |
| OLD | NEW |