1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include <stdio.h> 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include <stdlib.h> 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include <string.h> 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "include/libplatform/libplatform.h" 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "include/v8.h" 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochusing namespace v8; 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochint main(int argc, char* argv[]) { 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Initialize V8. 1613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V8::InitializeICUDefaultLocation(argv[0]); 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V8::InitializeExternalStartupData(argv[0]); 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Platform* platform = platform::CreateDefaultPlatform(); 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V8::InitializePlatform(platform); 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V8::Initialize(); 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Create a new Isolate and make it the current one. 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Isolate::CreateParams create_params; 24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch create_params.array_buffer_allocator = 25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch v8::ArrayBuffer::Allocator::NewDefaultAllocator(); 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Isolate* isolate = Isolate::New(create_params); 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch { 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Isolate::Scope isolate_scope(isolate); 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Create a stack-allocated handle scope. 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch HandleScope handle_scope(isolate); 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Create a new context. 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Local<Context> context = Context::New(isolate); 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Enter the context for compiling and running the hello world script. 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Context::Scope context_scope(context); 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Create a string containing the JavaScript source code. 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Local<String> source = 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch String::NewFromUtf8(isolate, "'Hello' + ', World!'", 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch NewStringType::kNormal).ToLocalChecked(); 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Compile the source code. 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Local<Script> script = Script::Compile(context, source).ToLocalChecked(); 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Run the script to get the result. 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Local<Value> result = script->Run(context).ToLocalChecked(); 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Convert the result to an UTF8 string and print it. 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch String::Utf8Value utf8(result); 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch printf("%s\n", *utf8); 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Dispose the isolate and tear down V8. 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch isolate->Dispose(); 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V8::Dispose(); 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch V8::ShutdownPlatform(); 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch delete platform; 60f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch delete create_params.array_buffer_allocator; 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return 0; 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 63