v8eval 0.2.4 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f734c4e621931bf36e036033f04fe51e02e692e
4
- data.tar.gz: d56033a1844dda51e71f9b3294b2d6e7e2918ea1
3
+ metadata.gz: cd3a65a1288166c5c433ceb7981e7d01b7c0a2ff
4
+ data.tar.gz: 3b9aefd54850cc461f59aa07863b0122d18e5113
5
5
  SHA512:
6
- metadata.gz: acbf5043b09426f0eacbcd197210a12ea80f67c681aba71805dcff54dcab9385d9861097ff713cd221e6241a2f7525b1d3e13a60ad6afa86e8d15bbd25e5b998
7
- data.tar.gz: b8db3d93434102b0afa999198a7640a83804fb73946b99f6026cb2800e50bf5df7e695651c23a327cd9191db2431491dfa52c83afc35bd5f1283023403a92e45
6
+ metadata.gz: cbfb3232413f1a115d035e8a8149de25360167be6edd6b9546039a18821877eaffb90cd86219dda7063822868dd928212bc8e410ae69cab3d29f55ba2f0966ee
7
+ data.tar.gz: 4f84bbbe86f67b9ef29ff3b69a0725b2ecf178fc832a57f1b66c33e44cafe6b6fbafc614b487c4fd8989596e1fd92a5d2778defd5ee055cf8874e6d105215836
@@ -11,8 +11,6 @@ endif(COMMAND cmake_policy)
11
11
  include_directories(
12
12
  v8
13
13
  v8/include
14
- v8/third_party/icu/source/i18n
15
- v8/third_party/icu/source/common
16
14
  uv/include
17
15
  src
18
16
  test/googletest/googletest/include
@@ -27,7 +25,6 @@ endif(APPLE)
27
25
  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
28
26
  link_directories(
29
27
  v8/out/x64.release/obj.target/src
30
- v8/out/x64.release/obj.target/third_party/icu
31
28
  )
32
29
  endif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
33
30
 
data/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  [![PyPI version](https://badge.fury.io/py/v8eval.svg)](http://badge.fury.io/py/v8eval)
4
4
  [![Gem Version](https://badge.fury.io/rb/v8eval.svg)](https://badge.fury.io/rb/v8eval)
5
- [![GoDoc](https://godoc.org/github.com/sony/v8eval/go/v8eval?status.png)](http://godoc.org/github.com/sony/v8eval/go/v8eval)
5
+ [![GoDoc](https://godoc.org/github.com/sony/v8eval/go/v8eval?status.svg)](http://godoc.org/github.com/sony/v8eval/go/v8eval)
6
6
 
7
7
  Multi-language bindings to JavaScript engine V8.
8
8
 
9
- Currently v8eval provides Go, Python and Ruby bindings to the latest V8 5.2 and supports Linux and Mac OS X.
9
+ Currently v8eval provides Go, Python and Ruby bindings to the latest V8 5.6 and supports Linux and Mac OS X.
10
10
  v8eval uses SWIG and can be extended easily for other languages.
11
11
 
12
12
  ## Pre-installation
data/build.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  V8EVAL_ROOT=`cd $(dirname $0) && pwd`
4
4
 
5
5
  PLATFORM=`uname`
6
- if [ $PLATFORM = "Linux" ] ; then
6
+ if [ $PLATFORM = "Linux" ]; then
7
7
  NUM_CPU_CORES=`cat /proc/cpuinfo | grep cores | grep -o '[0-9]\+' | awk '{total=total+$1}; END{print total}'`
8
8
 
9
9
  export CC=$V8EVAL_ROOT/v8/third_party/llvm-build/Release+Asserts/bin/clang
@@ -50,11 +50,24 @@ install_v8() {
50
50
  return 0
51
51
  fi
52
52
 
53
+ PY_VER=`python -c 'import sys; print(sys.version_info[0])'`
54
+ if [ $PY_VER = 3 ]; then
55
+ OLD_PATH=$PATH
56
+ export PATH=$V8EVAL_ROOT/python/bin:$PATH
57
+ fi
58
+
53
59
  cd $V8EVAL_ROOT
54
60
  fetch v8
55
61
  cd v8
56
- git checkout 5.2.163
57
- CFLAGS="-fPIC -Wno-unknown-warning-option" CXXFLAGS="-fPIC -Wno-unknown-warning-option" make x64.release -j$NUM_CPU_CORES V=1
62
+ git checkout 5.6.142
63
+ if [ $PY_VER = 3 ]; then
64
+ sed -i -e 's/python -c/python2 -c/' Makefile
65
+ fi
66
+ CFLAGS="-fPIC -Wno-unknown-warning-option" CXXFLAGS="-fPIC -Wno-unknown-warning-option" make x64.release -j$NUM_CPU_CORES i18nsupport=off V=1
67
+
68
+ if [ $PY_VER = 3 ]; then
69
+ export PATH=$OLD_PATH
70
+ fi
58
71
  }
59
72
 
60
73
  install_libuv() {
@@ -39,8 +39,7 @@ if RUBY_PLATFORM =~ /darwin/
39
39
  ]
40
40
  elsif RUBY_PLATFORM =~ /linux/
41
41
  lib_dirs += [
42
- v8_dir + '/out/x64.release/obj.target/src',
43
- v8_dir + '/out/x64.release/obj.target/third_party/icu'
42
+ v8_dir + '/out/x64.release/obj.target/src'
44
43
  ]
45
44
 
46
45
  RbConfig::MAKEFILE_CONFIG['CC'] = v8_dir + '/third_party/llvm-build/Release+Asserts/bin/clang'
@@ -49,7 +48,7 @@ end
49
48
 
50
49
  dir_config('', header_dirs, lib_dirs)
51
50
 
52
- $LDFLAGS << ' -lv8eval -lv8eval_ruby -lv8_libplatform -lv8_base -lv8_libbase -lv8_nosnapshot -licui18n -licuuc -licudata -luv'
51
+ $LDFLAGS << ' -lv8eval -lv8eval_ruby -lv8_libplatform -lv8_base -lv8_libbase -lv8_libsampler -lv8_nosnapshot -luv'
53
52
  $CPPFLAGS << ' -g -O3 -std=c++11'
54
53
 
55
54
  create_makefile('v8eval/v8eval')
@@ -1,8 +1,9 @@
1
1
  #include "v8eval.h"
2
2
  #include "dbgsrv.h"
3
3
 
4
- #include <stdlib.h>
5
- #include <string.h>
4
+ #include <cassert>
5
+ #include <cstdlib>
6
+ #include <cstring>
6
7
 
7
8
  #include "libplatform/libplatform.h"
8
9
 
@@ -10,15 +11,15 @@ namespace v8eval {
10
11
 
11
12
  static v8::Platform* platform = nullptr;
12
13
 
14
+ void set_flags(const std::string& flags) {
15
+ v8::V8::SetFlagsFromString(flags.c_str(), static_cast<int>(flags.length()));
16
+ }
17
+
13
18
  bool initialize() {
14
19
  if (platform) {
15
20
  return false;
16
21
  }
17
22
 
18
- if (!v8::V8::InitializeICU()) {
19
- return false;
20
- }
21
-
22
23
  platform = v8::platform::CreateDefaultPlatform();
23
24
  v8::V8::InitializePlatform(platform);
24
25
 
@@ -88,12 +89,17 @@ _V8::~_V8() {
88
89
  isolate_->Dispose();
89
90
  }
90
91
 
91
- v8::Local<v8::Context> _V8::new_context() {
92
- if (context_.IsEmpty()) {
92
+ v8::Local<v8::Context> _V8::context() {
93
+ assert(context_.IsEmpty());
94
+ return v8::Local<v8::Context>::New(isolate_, context_);
95
+ }
96
+
97
+ v8::Local<v8::Context> _V8::new_context(v8::Local<v8::ObjectTemplate> global_tmpl, v8::Local<v8::Value> global_obj) {
98
+ if (global_tmpl.IsEmpty() && global_obj.IsEmpty()) {
93
99
  v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate_);
94
100
  return v8::Context::New(isolate_, nullptr, global);
95
101
  } else {
96
- return v8::Local<v8::Context>::New(isolate_, context_);
102
+ return v8::Context::New(isolate_, nullptr, global_tmpl, global_obj);
97
103
  }
98
104
  }
99
105
 
@@ -139,7 +145,7 @@ std::string _V8::eval(const std::string& src) {
139
145
  v8::Isolate::Scope isolate_scope(isolate_);
140
146
  v8::HandleScope handle_scope(isolate_);
141
147
 
142
- v8::Local<v8::Context> context = new_context();
148
+ v8::Local<v8::Context> context = this->context();
143
149
  v8::Context::Scope context_scope(context);
144
150
 
145
151
  v8::TryCatch try_catch(isolate_);
@@ -155,7 +161,12 @@ std::string _V8::eval(const std::string& src) {
155
161
  } else {
156
162
  v8::Local<v8::Value> result;
157
163
  if (!script->Run(context).ToLocal(&result)) {
158
- return to_std_string(try_catch.Exception());
164
+ v8::Local<v8::Value> stack;
165
+ if (!try_catch.StackTrace(context).ToLocal(&stack)) {
166
+ return to_std_string(try_catch.Exception());
167
+ } else {
168
+ return to_std_string(stack);
169
+ }
159
170
  } else {
160
171
  return to_std_string(json_stringify(context, result));
161
172
  }
@@ -168,7 +179,7 @@ std::string _V8::call(const std::string& func, const std::string& args) {
168
179
  v8::Isolate::Scope isolate_scope(isolate_);
169
180
  v8::HandleScope handle_scope(isolate_);
170
181
 
171
- v8::Local<v8::Context> context = new_context();
182
+ v8::Local<v8::Context> context = this->context();
172
183
  v8::Context::Scope context_scope(context);
173
184
 
174
185
  v8::TryCatch try_catch(isolate_);
@@ -244,7 +255,7 @@ bool _V8::debugger_init(debugger_cb cb, void *cbopq) {
244
255
  v8::Locker locker(isolate_);
245
256
  v8::Isolate::Scope isolate_scope(isolate_);
246
257
  v8::HandleScope handle_scope(isolate_);
247
- v8::Debug::SetMessageHandler(debugger_message_handler);
258
+ v8::Debug::SetMessageHandler(isolate_, debugger_message_handler);
248
259
 
249
260
  return true;
250
261
  }
@@ -255,7 +266,7 @@ void _V8::debugger_process() {
255
266
  v8::Isolate::Scope isolate_scope(isolate_);
256
267
  v8::HandleScope handle_scope(isolate_);
257
268
 
258
- v8::Debug::ProcessDebugMessages();
269
+ v8::Debug::ProcessDebugMessages(isolate_);
259
270
  }
260
271
 
261
272
  bool _V8::debugger_send(const std::string& cmd) {
@@ -277,7 +288,7 @@ void _V8::debugger_stop() {
277
288
  v8::Locker locker(isolate_);
278
289
  v8::Isolate::Scope isolate_scope(isolate_);
279
290
  v8::HandleScope handle_scope(isolate_);
280
- v8::Debug::SetMessageHandler(nullptr);
291
+ v8::Debug::SetMessageHandler(isolate_, nullptr);
281
292
 
282
293
  callback_ = nullptr;
283
294
  callback_opq_ = nullptr;
@@ -285,4 +296,36 @@ void _V8::debugger_stop() {
285
296
  dbg_isolate_ = nullptr;
286
297
  }
287
298
 
299
+ void Heap(const v8::FunctionCallbackInfo<v8::Value>& args) {
300
+ v8::Isolate* isolate = args.GetIsolate();
301
+
302
+ v8::HeapStatistics s;
303
+ isolate->GetHeapStatistics(&s);
304
+
305
+ v8::Local<v8::Object> obj = v8::Object::New(isolate);
306
+ obj->Set(v8::String::NewFromUtf8(isolate, "totalHeapSize"), v8::Number::New(isolate, s.total_heap_size()));
307
+ obj->Set(v8::String::NewFromUtf8(isolate, "totalHeapSizeExecutable"), v8::Number::New(isolate, s.total_heap_size_executable()));
308
+ obj->Set(v8::String::NewFromUtf8(isolate, "totalPhysicalSize"), v8::Number::New(isolate, s.total_physical_size()));
309
+ obj->Set(v8::String::NewFromUtf8(isolate, "totalAvailableSize"), v8::Number::New(isolate, s.total_available_size()));
310
+ obj->Set(v8::String::NewFromUtf8(isolate, "usedHeapSize"), v8::Number::New(isolate, s.used_heap_size()));
311
+ obj->Set(v8::String::NewFromUtf8(isolate, "heapSizeLimit"), v8::Number::New(isolate, s.heap_size_limit()));
312
+ obj->Set(v8::String::NewFromUtf8(isolate, "mallocedMemory"), v8::Number::New(isolate, s.malloced_memory()));
313
+ obj->Set(v8::String::NewFromUtf8(isolate, "peakMallocedMemory"), v8::Number::New(isolate, s.peak_malloced_memory()));
314
+ obj->Set(v8::String::NewFromUtf8(isolate, "doesZapGarbage"), v8::Number::New(isolate, s.does_zap_garbage()));
315
+
316
+ args.GetReturnValue().Set(obj);
317
+ }
318
+
319
+ void _V8::enable_heap_report() {
320
+ v8::Locker locker(isolate_);
321
+
322
+ v8::Isolate::Scope isolate_scope(isolate_);
323
+ v8::HandleScope handle_scope(isolate_);
324
+
325
+ v8::Local<v8::Context> context = this->context();
326
+ v8::Context::Scope context_scope(context);
327
+
328
+ context->Global()->Set(new_string("heap"), v8::FunctionTemplate::New(isolate_, Heap)->GetFunction());
329
+ }
330
+
288
331
  } // namespace v8eval
@@ -13,6 +13,11 @@ class DbgSrv;
13
13
 
14
14
  typedef void (*debugger_cb)(std::string&, void *opq);
15
15
 
16
+ /// \brief Set the given V8 flags
17
+ ///
18
+ /// This method sets the given V8 flags.
19
+ void set_flags(const std::string& flags);
20
+
16
21
  /// \brief Initialize the V8 runtime environment
17
22
  /// \return success or not as boolean
18
23
  ///
@@ -70,13 +75,20 @@ class _V8 {
70
75
  /// connections to remote debuggers to be dropped.
71
76
  void disable_debugger();
72
77
 
73
- private:
74
- static void debugger_message_handler(const v8::Debug::Message& message);
75
- v8::Local<v8::Context> new_context();
78
+ protected:
79
+ void enable_heap_report();
80
+
81
+ v8::Local<v8::Context> context();
82
+ v8::Local<v8::Context> new_context(
83
+ v8::Local<v8::ObjectTemplate> global_tmpl = v8::Local<v8::ObjectTemplate>(),
84
+ v8::Local<v8::Value> global_obj = v8::Local<v8::Value>());
76
85
  v8::Local<v8::String> new_string(const char* str);
77
86
  v8::Local<v8::Value> json_parse(v8::Local<v8::Context> context, v8::Local<v8::String> str);
78
87
  v8::Local<v8::String> json_stringify(v8::Local<v8::Context> context, v8::Local<v8::Value> value);
79
88
 
89
+ private:
90
+ static void debugger_message_handler(const v8::Debug::Message& message);
91
+
80
92
  bool debugger_init(debugger_cb cb, void *cbopq);
81
93
  bool debugger_send(const std::string& cmd);
82
94
  void debugger_process();
@@ -2,7 +2,9 @@
2
2
 
3
3
  namespace v8eval {
4
4
 
5
- _GoV8::_GoV8() {}
5
+ _GoV8::_GoV8() {
6
+ enable_heap_report();
7
+ }
6
8
 
7
9
  _GoV8::~_GoV8() {}
8
10
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new 'v8eval', '1.0' do |s|
2
2
  s.name = 'v8eval'
3
- s.version = '0.2.4'
3
+ s.version = '0.2.6'
4
4
  s.licenses = ['MIT']
5
5
  s.description = 'Run JavaScript engine V8 in Ruby'
6
6
  s.summary = 'v8eval gem is ruby binding to the latest V8 4.7 and supports
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: v8eval
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Prateek Papriwal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-29 00:00:00.000000000 Z
11
+ date: 2016-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  requirements: []
113
113
  rubyforge_project:
114
- rubygems_version: 2.4.6
114
+ rubygems_version: 2.4.5.1
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: v8eval gem is ruby binding to the latest V8 4.7 and supports Linux and Mac