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

Side by Side Diff: samples/shell.cc

Issue 83313002: Remove usage of deprecated APIs from samples (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years 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 | « samples/samples.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 bool ExecuteString(v8::Isolate* isolate, 51 bool ExecuteString(v8::Isolate* isolate,
52 v8::Handle<v8::String> source, 52 v8::Handle<v8::String> source,
53 v8::Handle<v8::Value> name, 53 v8::Handle<v8::Value> name,
54 bool print_result, 54 bool print_result,
55 bool report_exceptions); 55 bool report_exceptions);
56 void Print(const v8::FunctionCallbackInfo<v8::Value>& args); 56 void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
57 void Read(const v8::FunctionCallbackInfo<v8::Value>& args); 57 void Read(const v8::FunctionCallbackInfo<v8::Value>& args);
58 void Load(const v8::FunctionCallbackInfo<v8::Value>& args); 58 void Load(const v8::FunctionCallbackInfo<v8::Value>& args);
59 void Quit(const v8::FunctionCallbackInfo<v8::Value>& args); 59 void Quit(const v8::FunctionCallbackInfo<v8::Value>& args);
60 void Version(const v8::FunctionCallbackInfo<v8::Value>& args); 60 void Version(const v8::FunctionCallbackInfo<v8::Value>& args);
61 v8::Handle<v8::String> ReadFile(const char* name); 61 v8::Handle<v8::String> ReadFile(v8::Isolate* isolate, const char* name);
62 void ReportException(v8::Isolate* isolate, v8::TryCatch* handler); 62 void ReportException(v8::Isolate* isolate, v8::TryCatch* handler);
63 63
64 64
65 static bool run_shell; 65 static bool run_shell;
66 66
67 67
68 int main(int argc, char* argv[]) { 68 int main(int argc, char* argv[]) {
69 v8::V8::InitializeICU(); 69 v8::V8::InitializeICU();
70 v8::V8::SetFlagsFromCommandLine(&argc, argv, true); 70 v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
71 v8::Isolate* isolate = v8::Isolate::GetCurrent(); 71 v8::Isolate* isolate = v8::Isolate::GetCurrent();
(...skipping 21 matching lines...) Expand all
93 return *value ? *value : "<string conversion failed>"; 93 return *value ? *value : "<string conversion failed>";
94 } 94 }
95 95
96 96
97 // Creates a new execution environment containing the built-in 97 // Creates a new execution environment containing the built-in
98 // functions. 98 // functions.
99 v8::Handle<v8::Context> CreateShellContext(v8::Isolate* isolate) { 99 v8::Handle<v8::Context> CreateShellContext(v8::Isolate* isolate) {
100 // Create a template for the global object. 100 // Create a template for the global object.
101 v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); 101 v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
102 // Bind the global 'print' function to the C++ Print callback. 102 // Bind the global 'print' function to the C++ Print callback.
103 global->Set(v8::String::New("print"), v8::FunctionTemplate::New(Print)); 103 global->Set(v8::String::NewFromUtf8(isolate, "print"),
104 v8::FunctionTemplate::New(Print));
104 // Bind the global 'read' function to the C++ Read callback. 105 // Bind the global 'read' function to the C++ Read callback.
105 global->Set(v8::String::New("read"), v8::FunctionTemplate::New(Read)); 106 global->Set(v8::String::NewFromUtf8(isolate, "read"),
107 v8::FunctionTemplate::New(Read));
106 // Bind the global 'load' function to the C++ Load callback. 108 // Bind the global 'load' function to the C++ Load callback.
107 global->Set(v8::String::New("load"), v8::FunctionTemplate::New(Load)); 109 global->Set(v8::String::NewFromUtf8(isolate, "load"),
110 v8::FunctionTemplate::New(Load));
108 // Bind the 'quit' function 111 // Bind the 'quit' function
109 global->Set(v8::String::New("quit"), v8::FunctionTemplate::New(Quit)); 112 global->Set(v8::String::NewFromUtf8(isolate, "quit"),
113 v8::FunctionTemplate::New(Quit));
110 // Bind the 'version' function 114 // Bind the 'version' function
111 global->Set(v8::String::New("version"), v8::FunctionTemplate::New(Version)); 115 global->Set(v8::String::NewFromUtf8(isolate, "version"),
116 v8::FunctionTemplate::New(Version));
112 117
113 return v8::Context::New(isolate, NULL, global); 118 return v8::Context::New(isolate, NULL, global);
114 } 119 }
115 120
116 121
117 // The callback that is invoked by v8 whenever the JavaScript 'print' 122 // The callback that is invoked by v8 whenever the JavaScript 'print'
118 // function is called. Prints its arguments on stdout separated by 123 // function is called. Prints its arguments on stdout separated by
119 // spaces and ending with a newline. 124 // spaces and ending with a newline.
120 void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { 125 void Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
121 bool first = true; 126 bool first = true;
(...skipping 12 matching lines...) Expand all
134 fflush(stdout); 139 fflush(stdout);
135 } 140 }
136 141
137 142
138 // The callback that is invoked by v8 whenever the JavaScript 'read' 143 // The callback that is invoked by v8 whenever the JavaScript 'read'
139 // function is called. This function loads the content of the file named in 144 // function is called. This function loads the content of the file named in
140 // the argument into a JavaScript string. 145 // the argument into a JavaScript string.
141 void Read(const v8::FunctionCallbackInfo<v8::Value>& args) { 146 void Read(const v8::FunctionCallbackInfo<v8::Value>& args) {
142 if (args.Length() != 1) { 147 if (args.Length() != 1) {
143 args.GetIsolate()->ThrowException( 148 args.GetIsolate()->ThrowException(
144 v8::String::New("Bad parameters")); 149 v8::String::NewFromUtf8(args.GetIsolate(), "Bad parameters"));
145 return; 150 return;
146 } 151 }
147 v8::String::Utf8Value file(args[0]); 152 v8::String::Utf8Value file(args[0]);
148 if (*file == NULL) { 153 if (*file == NULL) {
149 args.GetIsolate()->ThrowException( 154 args.GetIsolate()->ThrowException(
150 v8::String::New("Error loading file")); 155 v8::String::NewFromUtf8(args.GetIsolate(), "Error loading file"));
151 return; 156 return;
152 } 157 }
153 v8::Handle<v8::String> source = ReadFile(*file); 158 v8::Handle<v8::String> source = ReadFile(args.GetIsolate(), *file);
154 if (source.IsEmpty()) { 159 if (source.IsEmpty()) {
155 args.GetIsolate()->ThrowException( 160 args.GetIsolate()->ThrowException(
156 v8::String::New("Error loading file")); 161 v8::String::NewFromUtf8(args.GetIsolate(), "Error loading file"));
157 return; 162 return;
158 } 163 }
159 args.GetReturnValue().Set(source); 164 args.GetReturnValue().Set(source);
160 } 165 }
161 166
162 167
163 // The callback that is invoked by v8 whenever the JavaScript 'load' 168 // The callback that is invoked by v8 whenever the JavaScript 'load'
164 // function is called. Loads, compiles and executes its argument 169 // function is called. Loads, compiles and executes its argument
165 // JavaScript file. 170 // JavaScript file.
166 void Load(const v8::FunctionCallbackInfo<v8::Value>& args) { 171 void Load(const v8::FunctionCallbackInfo<v8::Value>& args) {
167 for (int i = 0; i < args.Length(); i++) { 172 for (int i = 0; i < args.Length(); i++) {
168 v8::HandleScope handle_scope(args.GetIsolate()); 173 v8::HandleScope handle_scope(args.GetIsolate());
169 v8::String::Utf8Value file(args[i]); 174 v8::String::Utf8Value file(args[i]);
170 if (*file == NULL) { 175 if (*file == NULL) {
171 args.GetIsolate()->ThrowException( 176 args.GetIsolate()->ThrowException(
172 v8::String::New("Error loading file")); 177 v8::String::NewFromUtf8(args.GetIsolate(), "Error loading file"));
173 return; 178 return;
174 } 179 }
175 v8::Handle<v8::String> source = ReadFile(*file); 180 v8::Handle<v8::String> source = ReadFile(args.GetIsolate(), *file);
176 if (source.IsEmpty()) { 181 if (source.IsEmpty()) {
177 args.GetIsolate()->ThrowException( 182 args.GetIsolate()->ThrowException(
178 v8::String::New("Error loading file")); 183 v8::String::NewFromUtf8(args.GetIsolate(), "Error loading file"));
179 return; 184 return;
180 } 185 }
181 if (!ExecuteString(args.GetIsolate(), 186 if (!ExecuteString(args.GetIsolate(),
182 source, 187 source,
183 v8::String::New(*file), 188 v8::String::NewFromUtf8(args.GetIsolate(), *file),
184 false, 189 false,
185 false)) { 190 false)) {
186 args.GetIsolate()->ThrowException( 191 args.GetIsolate()->ThrowException(
187 v8::String::New("Error executing file")); 192 v8::String::NewFromUtf8(args.GetIsolate(), "Error executing file"));
188 return; 193 return;
189 } 194 }
190 } 195 }
191 } 196 }
192 197
193 198
194 // The callback that is invoked by v8 whenever the JavaScript 'quit' 199 // The callback that is invoked by v8 whenever the JavaScript 'quit'
195 // function is called. Quits. 200 // function is called. Quits.
196 void Quit(const v8::FunctionCallbackInfo<v8::Value>& args) { 201 void Quit(const v8::FunctionCallbackInfo<v8::Value>& args) {
197 // If not arguments are given args[0] will yield undefined which 202 // If not arguments are given args[0] will yield undefined which
198 // converts to the integer value 0. 203 // converts to the integer value 0.
199 int exit_code = args[0]->Int32Value(); 204 int exit_code = args[0]->Int32Value();
200 fflush(stdout); 205 fflush(stdout);
201 fflush(stderr); 206 fflush(stderr);
202 exit(exit_code); 207 exit(exit_code);
203 } 208 }
204 209
205 210
206 void Version(const v8::FunctionCallbackInfo<v8::Value>& args) { 211 void Version(const v8::FunctionCallbackInfo<v8::Value>& args) {
207 args.GetReturnValue().Set(v8::String::New(v8::V8::GetVersion())); 212 args.GetReturnValue().Set(
213 v8::String::NewFromUtf8(args.GetIsolate(), v8::V8::GetVersion()));
208 } 214 }
209 215
210 216
211 // Reads a file into a v8 string. 217 // Reads a file into a v8 string.
212 v8::Handle<v8::String> ReadFile(const char* name) { 218 v8::Handle<v8::String> ReadFile(v8::Isolate* isolate, const char* name) {
213 FILE* file = fopen(name, "rb"); 219 FILE* file = fopen(name, "rb");
214 if (file == NULL) return v8::Handle<v8::String>(); 220 if (file == NULL) return v8::Handle<v8::String>();
215 221
216 fseek(file, 0, SEEK_END); 222 fseek(file, 0, SEEK_END);
217 int size = ftell(file); 223 int size = ftell(file);
218 rewind(file); 224 rewind(file);
219 225
220 char* chars = new char[size + 1]; 226 char* chars = new char[size + 1];
221 chars[size] = '\0'; 227 chars[size] = '\0';
222 for (int i = 0; i < size;) { 228 for (int i = 0; i < size;) {
223 int read = static_cast<int>(fread(&chars[i], 1, size - i, file)); 229 int read = static_cast<int>(fread(&chars[i], 1, size - i, file));
224 i += read; 230 i += read;
225 } 231 }
226 fclose(file); 232 fclose(file);
227 v8::Handle<v8::String> result = v8::String::New(chars, size); 233 v8::Handle<v8::String> result =
234 v8::String::NewFromUtf8(isolate, chars, v8::String::kNormalString, size);
228 delete[] chars; 235 delete[] chars;
229 return result; 236 return result;
230 } 237 }
231 238
232 239
233 // Process remaining command line arguments and execute files 240 // Process remaining command line arguments and execute files
234 int RunMain(v8::Isolate* isolate, int argc, char* argv[]) { 241 int RunMain(v8::Isolate* isolate, int argc, char* argv[]) {
235 for (int i = 1; i < argc; i++) { 242 for (int i = 1; i < argc; i++) {
236 const char* str = argv[i]; 243 const char* str = argv[i];
237 if (strcmp(str, "--shell") == 0) { 244 if (strcmp(str, "--shell") == 0) {
238 run_shell = true; 245 run_shell = true;
239 } else if (strcmp(str, "-f") == 0) { 246 } else if (strcmp(str, "-f") == 0) {
240 // Ignore any -f flags for compatibility with the other stand- 247 // Ignore any -f flags for compatibility with the other stand-
241 // alone JavaScript engines. 248 // alone JavaScript engines.
242 continue; 249 continue;
243 } else if (strncmp(str, "--", 2) == 0) { 250 } else if (strncmp(str, "--", 2) == 0) {
244 fprintf(stderr, 251 fprintf(stderr,
245 "Warning: unknown flag %s.\nTry --help for options\n", str); 252 "Warning: unknown flag %s.\nTry --help for options\n", str);
246 } else if (strcmp(str, "-e") == 0 && i + 1 < argc) { 253 } else if (strcmp(str, "-e") == 0 && i + 1 < argc) {
247 // Execute argument given to -e option directly. 254 // Execute argument given to -e option directly.
248 v8::Handle<v8::String> file_name = v8::String::New("unnamed"); 255 v8::Handle<v8::String> file_name =
249 v8::Handle<v8::String> source = v8::String::New(argv[++i]); 256 v8::String::NewFromUtf8(isolate, "unnamed");
257 v8::Handle<v8::String> source =
258 v8::String::NewFromUtf8(isolate, argv[++i]);
250 if (!ExecuteString(isolate, source, file_name, false, true)) return 1; 259 if (!ExecuteString(isolate, source, file_name, false, true)) return 1;
251 } else { 260 } else {
252 // Use all other arguments as names of files to load and run. 261 // Use all other arguments as names of files to load and run.
253 v8::Handle<v8::String> file_name = v8::String::New(str); 262 v8::Handle<v8::String> file_name = v8::String::NewFromUtf8(isolate, str);
254 v8::Handle<v8::String> source = ReadFile(str); 263 v8::Handle<v8::String> source = ReadFile(isolate, str);
255 if (source.IsEmpty()) { 264 if (source.IsEmpty()) {
256 fprintf(stderr, "Error reading '%s'\n", str); 265 fprintf(stderr, "Error reading '%s'\n", str);
257 continue; 266 continue;
258 } 267 }
259 if (!ExecuteString(isolate, source, file_name, false, true)) return 1; 268 if (!ExecuteString(isolate, source, file_name, false, true)) return 1;
260 } 269 }
261 } 270 }
262 return 0; 271 return 0;
263 } 272 }
264 273
265 274
266 // The read-eval-execute loop of the shell. 275 // The read-eval-execute loop of the shell.
267 void RunShell(v8::Handle<v8::Context> context) { 276 void RunShell(v8::Handle<v8::Context> context) {
268 fprintf(stderr, "V8 version %s [sample shell]\n", v8::V8::GetVersion()); 277 fprintf(stderr, "V8 version %s [sample shell]\n", v8::V8::GetVersion());
269 static const int kBufferSize = 256; 278 static const int kBufferSize = 256;
270 // Enter the execution environment before evaluating any code. 279 // Enter the execution environment before evaluating any code.
271 v8::Context::Scope context_scope(context); 280 v8::Context::Scope context_scope(context);
272 v8::Local<v8::String> name(v8::String::New("(shell)")); 281 v8::Local<v8::String> name(
282 v8::String::NewFromUtf8(context->GetIsolate(), "(shell)"));
273 while (true) { 283 while (true) {
274 char buffer[kBufferSize]; 284 char buffer[kBufferSize];
275 fprintf(stderr, "> "); 285 fprintf(stderr, "> ");
276 char* str = fgets(buffer, kBufferSize, stdin); 286 char* str = fgets(buffer, kBufferSize, stdin);
277 if (str == NULL) break; 287 if (str == NULL) break;
278 v8::HandleScope handle_scope(context->GetIsolate()); 288 v8::HandleScope handle_scope(context->GetIsolate());
279 ExecuteString(context->GetIsolate(), 289 ExecuteString(context->GetIsolate(),
280 v8::String::New(str), 290 v8::String::NewFromUtf8(context->GetIsolate(), str),
281 name, 291 name,
282 true, 292 true,
283 true); 293 true);
284 } 294 }
285 fprintf(stderr, "\n"); 295 fprintf(stderr, "\n");
286 } 296 }
287 297
288 298
289 // Executes a string within the current v8 context. 299 // Executes a string within the current v8 context.
290 bool ExecuteString(v8::Isolate* isolate, 300 bool ExecuteString(v8::Isolate* isolate,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 fprintf(stderr, "^"); 362 fprintf(stderr, "^");
353 } 363 }
354 fprintf(stderr, "\n"); 364 fprintf(stderr, "\n");
355 v8::String::Utf8Value stack_trace(try_catch->StackTrace()); 365 v8::String::Utf8Value stack_trace(try_catch->StackTrace());
356 if (stack_trace.length() > 0) { 366 if (stack_trace.length() > 0) {
357 const char* stack_trace_string = ToCString(stack_trace); 367 const char* stack_trace_string = ToCString(stack_trace);
358 fprintf(stderr, "%s\n", stack_trace_string); 368 fprintf(stderr, "%s\n", stack_trace_string);
359 } 369 }
360 } 370 }
361 } 371 }
OLDNEW
« no previous file with comments | « samples/samples.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698