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

Side by Side Diff: samples/shell.cc

Issue 6696067: Make V8 build with the chromium shared library build (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 9 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
« no previous file with comments | « no previous file | tools/gyp/v8.gyp » ('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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 15 matching lines...) Expand all
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #include <v8.h> 28 #include <v8.h>
29 #include <v8-testing.h> 29 #include <v8-testing.h>
30 #include <assert.h> 30 #include <assert.h>
31 #include <fcntl.h> 31 #include <fcntl.h>
32 #include <string.h> 32 #include <string.h>
33 #include <stdio.h> 33 #include <stdio.h>
34 #include <stdlib.h> 34 #include <stdlib.h>
35 35
36 // When building with V8 in a shared library we cannot use functions which
37 // is not explicitly a part of the public V8 API. This extensive use of
38 // #ifndef USING_V8_SHARED/#endif is a hack until we can resolve whether to
39 // still use the shell sample for testing or change to use the and the
Mads Ager (chromium) 2011/03/24 10:59:03 the and the -> the
40 // developer shell d8 TODO(1272).
41 #ifndef USING_V8_SHARED
36 #include "../src/v8.h" 42 #include "../src/v8.h"
43 #endif // USING_V8_SHARED
37 44
38 #if !defined(_WIN32) && !defined(_WIN64) 45 #if !defined(_WIN32) && !defined(_WIN64)
39 #include <unistd.h> // NOLINT 46 #include <unistd.h> // NOLINT
40 #endif 47 #endif
41 48
42 static void ExitShell(int exit_code) { 49 static void ExitShell(int exit_code) {
43 // Use _exit instead of exit to avoid races between isolate 50 // Use _exit instead of exit to avoid races between isolate
44 // threads and static destructors. 51 // threads and static destructors.
45 fflush(stdout); 52 fflush(stdout);
46 fflush(stderr); 53 fflush(stderr);
(...skipping 12 matching lines...) Expand all
59 v8::Handle<v8::Value> Quit(const v8::Arguments& args); 66 v8::Handle<v8::Value> Quit(const v8::Arguments& args);
60 v8::Handle<v8::Value> Version(const v8::Arguments& args); 67 v8::Handle<v8::Value> Version(const v8::Arguments& args);
61 v8::Handle<v8::String> ReadFile(const char* name); 68 v8::Handle<v8::String> ReadFile(const char* name);
62 void ReportException(v8::TryCatch* handler); 69 void ReportException(v8::TryCatch* handler);
63 70
64 71
65 static bool last_run = true; 72 static bool last_run = true;
66 73
67 class SourceGroup { 74 class SourceGroup {
68 public: 75 public:
69 SourceGroup() : argv_(NULL), 76 SourceGroup() :
70 begin_offset_(0), 77 #ifndef USING_V8_SHARED
71 end_offset_(0),
72 next_semaphore_(v8::internal::OS::CreateSemaphore(0)), 78 next_semaphore_(v8::internal::OS::CreateSemaphore(0)),
73 done_semaphore_(v8::internal::OS::CreateSemaphore(0)), 79 done_semaphore_(v8::internal::OS::CreateSemaphore(0)),
74 thread_(NULL) { } 80 thread_(NULL),
81 #endif // USING_V8_SHARED
82 argv_(NULL),
83 begin_offset_(0),
84 end_offset_(0) { }
75 85
76 void Begin(char** argv, int offset) { 86 void Begin(char** argv, int offset) {
77 argv_ = const_cast<const char**>(argv); 87 argv_ = const_cast<const char**>(argv);
78 begin_offset_ = offset; 88 begin_offset_ = offset;
79 } 89 }
80 90
81 void End(int offset) { end_offset_ = offset; } 91 void End(int offset) { end_offset_ = offset; }
82 92
83 void Execute() { 93 void Execute() {
84 for (int i = begin_offset_; i < end_offset_; ++i) { 94 for (int i = begin_offset_; i < end_offset_; ++i) {
(...skipping 19 matching lines...) Expand all
104 printf("Error reading '%s'\n", arg); 114 printf("Error reading '%s'\n", arg);
105 } 115 }
106 if (!ExecuteString(source, file_name, false, true)) { 116 if (!ExecuteString(source, file_name, false, true)) {
107 ExitShell(1); 117 ExitShell(1);
108 return; 118 return;
109 } 119 }
110 } 120 }
111 } 121 }
112 } 122 }
113 123
124 #ifndef USING_V8_SHARED
114 void StartExecuteInThread() { 125 void StartExecuteInThread() {
115 if (thread_ == NULL) { 126 if (thread_ == NULL) {
116 thread_ = new IsolateThread(this); 127 thread_ = new IsolateThread(this);
117 thread_->Start(); 128 thread_->Start();
118 } 129 }
119 next_semaphore_->Signal(); 130 next_semaphore_->Signal();
120 } 131 }
121 132
122 void WaitForThread() { 133 void WaitForThread() {
123 if (thread_ == NULL) return; 134 if (thread_ == NULL) return;
124 if (last_run) { 135 if (last_run) {
125 thread_->Join(); 136 thread_->Join();
126 thread_ = NULL; 137 thread_ = NULL;
127 } else { 138 } else {
128 done_semaphore_->Wait(); 139 done_semaphore_->Wait();
129 } 140 }
130 } 141 }
142 #endif // USING_V8_SHARED
131 143
132 private: 144 private:
145 #ifndef USING_V8_SHARED
133 static v8::internal::Thread::Options GetThreadOptions() { 146 static v8::internal::Thread::Options GetThreadOptions() {
134 v8::internal::Thread::Options options; 147 v8::internal::Thread::Options options;
135 options.name = "IsolateThread"; 148 options.name = "IsolateThread";
136 // On some systems (OSX 10.6) the stack size default is 0.5Mb or less 149 // On some systems (OSX 10.6) the stack size default is 0.5Mb or less
137 // which is not enough to parse the big literal expressions used in tests. 150 // which is not enough to parse the big literal expressions used in tests.
138 // The stack size should be at least StackGuard::kLimitSize + some 151 // The stack size should be at least StackGuard::kLimitSize + some
139 // OS-specific padding for thread startup code. 152 // OS-specific padding for thread startup code.
140 options.stack_size = 2 << 20; // 2 Mb seems to be enough 153 options.stack_size = 2 << 20; // 2 Mb seems to be enough
141 return options; 154 return options;
142 } 155 }
(...skipping 23 matching lines...) Expand all
166 v8::Context::Scope cscope(context); 179 v8::Context::Scope cscope(context);
167 Execute(); 180 Execute();
168 } 181 }
169 context.Dispose(); 182 context.Dispose();
170 } 183 }
171 if (done_semaphore_ != NULL) done_semaphore_->Signal(); 184 if (done_semaphore_ != NULL) done_semaphore_->Signal();
172 } while (!last_run); 185 } while (!last_run);
173 isolate->Dispose(); 186 isolate->Dispose();
174 } 187 }
175 188
189 v8::internal::Semaphore* next_semaphore_;
190 v8::internal::Semaphore* done_semaphore_;
191 v8::internal::Thread* thread_;
192 #endif // USING_V8_SHARED
193
176 const char** argv_; 194 const char** argv_;
177 int begin_offset_; 195 int begin_offset_;
178 int end_offset_; 196 int end_offset_;
179 v8::internal::Semaphore* next_semaphore_;
180 v8::internal::Semaphore* done_semaphore_;
181 v8::internal::Thread* thread_;
182 }; 197 };
183 198
184 199
185 static SourceGroup* isolate_sources = NULL; 200 static SourceGroup* isolate_sources = NULL;
186 201
187 202
188 int RunMain(int argc, char* argv[]) { 203 int RunMain(int argc, char* argv[]) {
189 v8::V8::SetFlagsFromCommandLine(&argc, argv, true); 204 v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
190 v8::HandleScope handle_scope; 205 v8::HandleScope handle_scope;
191 v8::Persistent<v8::Context> context = CreateShellContext(); 206 v8::Persistent<v8::Context> context = CreateShellContext();
192 // Enter the newly created execution environment. 207 // Enter the newly created execution environment.
193 context->Enter(); 208 context->Enter();
194 if (context.IsEmpty()) { 209 if (context.IsEmpty()) {
195 printf("Error creating context\n"); 210 printf("Error creating context\n");
196 return 1; 211 return 1;
197 } 212 }
198 213
199 bool run_shell = (argc == 1); 214 bool run_shell = (argc == 1);
200 int num_isolates = 1; 215 int num_isolates = 1;
201 for (int i = 1; i < argc; i++) { 216 for (int i = 1; i < argc; i++) {
202 if (strcmp(argv[i], "--isolate") == 0) ++num_isolates; 217 if (strcmp(argv[i], "--isolate") == 0) {
218 #ifndef USING_V8_SHARED
219 ++num_isolates;
220 #else // USING_V8_SHARED
221 printf("Error: --isolate not supported when linked with shared "
222 "library\n");
223 ExitShell(1);
224 #endif // USING_V8_SHARED
225 }
203 } 226 }
204 if (isolate_sources == NULL) { 227 if (isolate_sources == NULL) {
205 isolate_sources = new SourceGroup[num_isolates]; 228 isolate_sources = new SourceGroup[num_isolates];
206 SourceGroup* current = isolate_sources; 229 SourceGroup* current = isolate_sources;
207 current->Begin(argv, 1); 230 current->Begin(argv, 1);
208 for (int i = 1; i < argc; i++) { 231 for (int i = 1; i < argc; i++) {
209 const char* str = argv[i]; 232 const char* str = argv[i];
210 if (strcmp(str, "--isolate") == 0) { 233 if (strcmp(str, "--isolate") == 0) {
211 current->End(i); 234 current->End(i);
212 current++; 235 current++;
213 current->Begin(argv, i + 1); 236 current->Begin(argv, i + 1);
214 } else if (strcmp(str, "--shell") == 0) { 237 } else if (strcmp(str, "--shell") == 0) {
215 run_shell = true; 238 run_shell = true;
216 } else if (strcmp(str, "-f") == 0) { 239 } else if (strcmp(str, "-f") == 0) {
217 // Ignore any -f flags for compatibility with the other stand- 240 // Ignore any -f flags for compatibility with the other stand-
218 // alone JavaScript engines. 241 // alone JavaScript engines.
219 continue; 242 continue;
220 } else if (strncmp(str, "--", 2) == 0) { 243 } else if (strncmp(str, "--", 2) == 0) {
221 printf("Warning: unknown flag %s.\nTry --help for options\n", str); 244 printf("Warning: unknown flag %s.\nTry --help for options\n", str);
222 } 245 }
223 } 246 }
224 current->End(argc); 247 current->End(argc);
225 } 248 }
249 #ifndef USING_V8_SHARED
226 for (int i = 1; i < num_isolates; ++i) { 250 for (int i = 1; i < num_isolates; ++i) {
227 isolate_sources[i].StartExecuteInThread(); 251 isolate_sources[i].StartExecuteInThread();
228 } 252 }
253 #endif // USING_V8_SHARED
229 isolate_sources[0].Execute(); 254 isolate_sources[0].Execute();
230 if (run_shell) RunShell(context); 255 if (run_shell) RunShell(context);
256 #ifndef USING_V8_SHARED
231 for (int i = 1; i < num_isolates; ++i) { 257 for (int i = 1; i < num_isolates; ++i) {
232 isolate_sources[i].WaitForThread(); 258 isolate_sources[i].WaitForThread();
233 } 259 }
260 #endif // USING_V8_SHARED
234 if (last_run) { 261 if (last_run) {
235 delete[] isolate_sources; 262 delete[] isolate_sources;
236 isolate_sources = NULL; 263 isolate_sources = NULL;
237 } 264 }
238 context->Exit(); 265 context->Exit();
239 context.Dispose(); 266 context.Dispose();
240 return 0; 267 return 0;
241 } 268 }
242 269
243 270
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 printf("^"); 525 printf("^");
499 } 526 }
500 printf("\n"); 527 printf("\n");
501 v8::String::Utf8Value stack_trace(try_catch->StackTrace()); 528 v8::String::Utf8Value stack_trace(try_catch->StackTrace());
502 if (stack_trace.length() > 0) { 529 if (stack_trace.length() > 0) {
503 const char* stack_trace_string = ToCString(stack_trace); 530 const char* stack_trace_string = ToCString(stack_trace);
504 printf("%s\n", stack_trace_string); 531 printf("%s\n", stack_trace_string);
505 } 532 }
506 } 533 }
507 } 534 }
OLDNEW
« no previous file with comments | « no previous file | tools/gyp/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698