OLD | NEW |
---|---|
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
58 void RunShell(v8::Handle<v8::Context> context); | 58 void RunShell(v8::Handle<v8::Context> context); |
59 bool ExecuteString(v8::Handle<v8::String> source, | 59 bool ExecuteString(v8::Handle<v8::String> source, |
60 v8::Handle<v8::Value> name, | 60 v8::Handle<v8::Value> name, |
61 bool print_result, | 61 bool print_result, |
62 bool report_exceptions); | 62 bool report_exceptions); |
63 v8::Handle<v8::Value> Print(const v8::Arguments& args); | 63 v8::Handle<v8::Value> Print(const v8::Arguments& args); |
64 v8::Handle<v8::Value> Read(const v8::Arguments& args); | 64 v8::Handle<v8::Value> Read(const v8::Arguments& args); |
65 v8::Handle<v8::Value> Load(const v8::Arguments& args); | 65 v8::Handle<v8::Value> Load(const v8::Arguments& args); |
66 v8::Handle<v8::Value> Quit(const v8::Arguments& args); | 66 v8::Handle<v8::Value> Quit(const v8::Arguments& args); |
67 v8::Handle<v8::Value> Version(const v8::Arguments& args); | 67 v8::Handle<v8::Value> Version(const v8::Arguments& args); |
68 v8::Handle<v8::Value> Int8Array(const v8::Arguments& args); | |
69 v8::Handle<v8::Value> Uint8Array(const v8::Arguments& args); | |
70 v8::Handle<v8::Value> Int16Array(const v8::Arguments& args); | |
71 v8::Handle<v8::Value> Uint16Array(const v8::Arguments& args); | |
72 v8::Handle<v8::Value> Int32Array(const v8::Arguments& args); | |
73 v8::Handle<v8::Value> Uint32Array(const v8::Arguments& args); | |
74 v8::Handle<v8::Value> Float32Array(const v8::Arguments& args); | |
75 v8::Handle<v8::Value> PixelArray(const v8::Arguments& args); | |
68 v8::Handle<v8::String> ReadFile(const char* name); | 76 v8::Handle<v8::String> ReadFile(const char* name); |
69 void ReportException(v8::TryCatch* handler); | 77 void ReportException(v8::TryCatch* handler); |
70 | 78 |
71 | 79 |
72 static bool last_run = true; | 80 static bool last_run = true; |
73 | 81 |
74 class SourceGroup { | 82 class SourceGroup { |
75 public: | 83 public: |
76 SourceGroup() : | 84 SourceGroup() : |
77 #ifndef USING_V8_SHARED | 85 #ifndef USING_V8_SHARED |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
328 // Bind the global 'print' function to the C++ Print callback. | 336 // Bind the global 'print' function to the C++ Print callback. |
329 global->Set(v8::String::New("print"), v8::FunctionTemplate::New(Print)); | 337 global->Set(v8::String::New("print"), v8::FunctionTemplate::New(Print)); |
330 // Bind the global 'read' function to the C++ Read callback. | 338 // Bind the global 'read' function to the C++ Read callback. |
331 global->Set(v8::String::New("read"), v8::FunctionTemplate::New(Read)); | 339 global->Set(v8::String::New("read"), v8::FunctionTemplate::New(Read)); |
332 // Bind the global 'load' function to the C++ Load callback. | 340 // Bind the global 'load' function to the C++ Load callback. |
333 global->Set(v8::String::New("load"), v8::FunctionTemplate::New(Load)); | 341 global->Set(v8::String::New("load"), v8::FunctionTemplate::New(Load)); |
334 // Bind the 'quit' function | 342 // Bind the 'quit' function |
335 global->Set(v8::String::New("quit"), v8::FunctionTemplate::New(Quit)); | 343 global->Set(v8::String::New("quit"), v8::FunctionTemplate::New(Quit)); |
336 // Bind the 'version' function | 344 // Bind the 'version' function |
337 global->Set(v8::String::New("version"), v8::FunctionTemplate::New(Version)); | 345 global->Set(v8::String::New("version"), v8::FunctionTemplate::New(Version)); |
346 | |
347 // Bind the handlers for external arrays. | |
348 global->Set(v8::String::New("Int8Array"), | |
349 v8::FunctionTemplate::New(Int8Array)); | |
350 global->Set(v8::String::New("Uint8Array"), | |
351 v8::FunctionTemplate::New(Uint8Array)); | |
352 global->Set(v8::String::New("Int16Array"), | |
353 v8::FunctionTemplate::New(Int16Array)); | |
354 global->Set(v8::String::New("Uint16Array"), | |
355 v8::FunctionTemplate::New(Uint16Array)); | |
356 global->Set(v8::String::New("Int32Array"), | |
357 v8::FunctionTemplate::New(Int32Array)); | |
358 global->Set(v8::String::New("Uint32Array"), | |
359 v8::FunctionTemplate::New(Uint32Array)); | |
360 global->Set(v8::String::New("Float32Array"), | |
361 v8::FunctionTemplate::New(Float32Array)); | |
362 global->Set(v8::String::New("PixelArray"), | |
363 v8::FunctionTemplate::New(PixelArray)); | |
364 | |
338 return v8::Context::New(NULL, global); | 365 return v8::Context::New(NULL, global); |
339 } | 366 } |
340 | 367 |
341 | 368 |
342 // The callback that is invoked by v8 whenever the JavaScript 'print' | 369 // The callback that is invoked by v8 whenever the JavaScript 'print' |
343 // function is called. Prints its arguments on stdout separated by | 370 // function is called. Prints its arguments on stdout separated by |
344 // spaces and ending with a newline. | 371 // spaces and ending with a newline. |
345 v8::Handle<v8::Value> Print(const v8::Arguments& args) { | 372 v8::Handle<v8::Value> Print(const v8::Arguments& args) { |
346 bool first = true; | 373 bool first = true; |
347 for (int i = 0; i < args.Length(); i++) { | 374 for (int i = 0; i < args.Length(); i++) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
411 ExitShell(exit_code); | 438 ExitShell(exit_code); |
412 return v8::Undefined(); | 439 return v8::Undefined(); |
413 } | 440 } |
414 | 441 |
415 | 442 |
416 v8::Handle<v8::Value> Version(const v8::Arguments& args) { | 443 v8::Handle<v8::Value> Version(const v8::Arguments& args) { |
417 return v8::String::New(v8::V8::GetVersion()); | 444 return v8::String::New(v8::V8::GetVersion()); |
418 } | 445 } |
419 | 446 |
420 | 447 |
448 void ExternalArrayWeakCallback(v8::Persistent<v8::Value> object, void* data) { | |
449 free(data); | |
450 object.Dispose(); | |
451 } | |
452 | |
453 | |
454 v8::Handle<v8::Value> CreateExternalArray(const v8::Arguments& args, | |
455 v8::ExternalArrayType type, | |
456 int element_size) { | |
457 if (args.Length() != 1) { | |
458 return v8::ThrowException( | |
459 v8::String::New("Array constructor needs one parameter.")); | |
460 } | |
461 int length = args[0]->Int32Value(); | |
462 void* data = malloc(length * element_size); | |
463 memset(data, 0, length * element_size); | |
464 v8::Handle<v8::Object> array = v8::Object::New(); | |
465 v8::Persistent<v8::Object> persistent_array = | |
466 v8::Persistent<v8::Object>::New(array); | |
467 persistent_array.MakeWeak(data, ExternalArrayWeakCallback); | |
468 array->SetIndexedPropertiesToExternalArrayData(data, type, length); | |
469 return array; | |
470 } | |
471 | |
472 | |
473 v8::Handle<v8::Value> Int8Array(const v8::Arguments& args) { | |
474 return CreateExternalArray(args, v8::kExternalByteArray, | |
475 sizeof(int8_t)); // NOLINT | |
476 } | |
477 | |
478 | |
479 v8::Handle<v8::Value> Uint8Array(const v8::Arguments& args) { | |
480 return CreateExternalArray(args, v8::kExternalUnsignedByteArray, | |
481 sizeof(uint8_t)); // NOLINT | |
482 } | |
483 | |
484 | |
485 v8::Handle<v8::Value> Int16Array(const v8::Arguments& args) { | |
486 return CreateExternalArray(args, v8::kExternalShortArray, | |
487 sizeof(int16_t)); // NOLINT | |
488 } | |
489 | |
490 | |
491 v8::Handle<v8::Value> Uint16Array(const v8::Arguments& args) { | |
492 return CreateExternalArray(args, v8::kExternalUnsignedShortArray, | |
493 sizeof(uint16_t)); // NOLINT | |
494 } | |
495 | |
496 v8::Handle<v8::Value> Int32Array(const v8::Arguments& args) { | |
497 return CreateExternalArray(args, v8::kExternalIntArray, | |
498 sizeof(int32_t)); // NOLINT | |
499 } | |
500 | |
501 | |
502 v8::Handle<v8::Value> Uint32Array(const v8::Arguments& args) { | |
503 return CreateExternalArray(args, v8::kExternalUnsignedIntArray, | |
504 sizeof(uint32_t)); // NOLINT | |
505 } | |
506 | |
507 | |
508 v8::Handle<v8::Value> Float32Array(const v8::Arguments& args) { | |
509 return CreateExternalArray(args, v8::kExternalFloatArray, | |
510 sizeof(float)); // NOLINT | |
511 } | |
512 | |
513 | |
514 v8::Handle<v8::Value> PixelArray(const v8::Arguments& args) { | |
515 return CreateExternalArray(args, v8::kExternalPixelArray, sizeof(uint8_t)); | |
Mads Ager (chromium)
2011/04/05 20:45:33
Interesting. The linter does not see this type as
Jakob Kummerow
2011/04/06 08:08:37
Indeed. I've removed all the //NOLINT tags except
| |
516 } | |
517 | |
518 | |
421 // Reads a file into a v8 string. | 519 // Reads a file into a v8 string. |
422 v8::Handle<v8::String> ReadFile(const char* name) { | 520 v8::Handle<v8::String> ReadFile(const char* name) { |
423 FILE* file = fopen(name, "rb"); | 521 FILE* file = fopen(name, "rb"); |
424 if (file == NULL) return v8::Handle<v8::String>(); | 522 if (file == NULL) return v8::Handle<v8::String>(); |
425 | 523 |
426 fseek(file, 0, SEEK_END); | 524 fseek(file, 0, SEEK_END); |
427 int size = ftell(file); | 525 int size = ftell(file); |
428 rewind(file); | 526 rewind(file); |
429 | 527 |
430 char* chars = new char[size + 1]; | 528 char* chars = new char[size + 1]; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
526 printf("^"); | 624 printf("^"); |
527 } | 625 } |
528 printf("\n"); | 626 printf("\n"); |
529 v8::String::Utf8Value stack_trace(try_catch->StackTrace()); | 627 v8::String::Utf8Value stack_trace(try_catch->StackTrace()); |
530 if (stack_trace.length() > 0) { | 628 if (stack_trace.length() > 0) { |
531 const char* stack_trace_string = ToCString(stack_trace); | 629 const char* stack_trace_string = ToCString(stack_trace); |
532 printf("%s\n", stack_trace_string); | 630 printf("%s\n", stack_trace_string); |
533 } | 631 } |
534 } | 632 } |
535 } | 633 } |
OLD | NEW |