therubyracer 0.10.2 → 0.11.0beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (159) hide show
  1. data/.gitignore +21 -11
  2. data/.travis.yml +2 -1
  3. data/Changelog.md +46 -0
  4. data/Gemfile +16 -1
  5. data/README.md +31 -13
  6. data/Rakefile +42 -23
  7. data/benchmarks.rb +217 -0
  8. data/ext/v8/accessor.cc +181 -0
  9. data/ext/v8/array.cc +26 -0
  10. data/ext/v8/backref.cc +56 -0
  11. data/ext/v8/build.rb +51 -0
  12. data/ext/v8/constants.cc +34 -0
  13. data/ext/v8/constraints.cc +52 -0
  14. data/ext/v8/context.cc +130 -0
  15. data/ext/v8/date.cc +18 -0
  16. data/ext/v8/exception.cc +38 -0
  17. data/ext/v8/extconf.rb +14 -18
  18. data/ext/v8/external.cc +43 -0
  19. data/ext/v8/function.cc +58 -0
  20. data/ext/v8/gc.cc +43 -0
  21. data/ext/v8/handles.cc +34 -0
  22. data/ext/v8/heap.cc +31 -0
  23. data/ext/v8/init.cc +39 -0
  24. data/ext/v8/invocation.cc +86 -0
  25. data/ext/v8/locker.cc +77 -0
  26. data/ext/v8/message.cc +51 -0
  27. data/ext/v8/object.cc +334 -0
  28. data/ext/v8/primitive.cc +8 -0
  29. data/ext/v8/rr.cc +83 -0
  30. data/ext/v8/rr.h +878 -36
  31. data/ext/v8/script.cc +80 -0
  32. data/ext/v8/signature.cc +18 -0
  33. data/ext/v8/stack.cc +75 -0
  34. data/ext/v8/string.cc +47 -0
  35. data/ext/v8/template.cc +175 -0
  36. data/ext/v8/trycatch.cc +86 -0
  37. data/ext/v8/v8.cc +87 -0
  38. data/ext/v8/value.cc +239 -0
  39. data/lib/v8.rb +30 -22
  40. data/lib/v8/access.rb +5 -87
  41. data/lib/v8/access/indices.rb +40 -0
  42. data/lib/v8/access/invocation.rb +47 -0
  43. data/lib/v8/access/names.rb +65 -0
  44. data/lib/v8/array.rb +19 -10
  45. data/lib/v8/context.rb +85 -78
  46. data/lib/v8/conversion.rb +35 -0
  47. data/lib/v8/conversion/array.rb +11 -0
  48. data/lib/v8/conversion/class.rb +120 -0
  49. data/lib/v8/conversion/code.rb +38 -0
  50. data/lib/v8/conversion/fundamental.rb +11 -0
  51. data/lib/v8/conversion/hash.rb +11 -0
  52. data/lib/v8/conversion/indentity.rb +31 -0
  53. data/lib/v8/conversion/method.rb +26 -0
  54. data/lib/v8/conversion/object.rb +28 -0
  55. data/lib/v8/conversion/primitive.rb +7 -0
  56. data/lib/v8/conversion/proc.rb +5 -0
  57. data/lib/v8/conversion/reference.rb +16 -0
  58. data/lib/v8/conversion/string.rb +12 -0
  59. data/lib/v8/conversion/symbol.rb +7 -0
  60. data/lib/v8/conversion/time.rb +13 -0
  61. data/lib/v8/error.rb +18 -123
  62. data/lib/v8/error/protect.rb +20 -0
  63. data/lib/v8/error/try.rb +15 -0
  64. data/lib/v8/function.rb +18 -34
  65. data/lib/v8/object.rb +48 -52
  66. data/lib/v8/util/weakcell.rb +29 -0
  67. data/lib/v8/version.rb +2 -2
  68. data/spec/c/array_spec.rb +17 -0
  69. data/spec/c/constants_spec.rb +20 -0
  70. data/spec/c/exception_spec.rb +26 -0
  71. data/spec/c/external_spec.rb +9 -0
  72. data/spec/c/function_spec.rb +46 -0
  73. data/spec/c/handles_spec.rb +35 -0
  74. data/spec/c/locker_spec.rb +38 -0
  75. data/spec/c/object_spec.rb +46 -0
  76. data/spec/c/script_spec.rb +28 -0
  77. data/spec/c/string_spec.rb +16 -0
  78. data/spec/c/template_spec.rb +30 -0
  79. data/spec/c/trycatch_spec.rb +51 -0
  80. data/spec/mem/blunt_spec.rb +42 -0
  81. data/spec/redjs_spec.rb +10 -0
  82. data/spec/spec_helper.rb +40 -4
  83. data/spec/threading_spec.rb +52 -0
  84. data/spec/v8/context_spec.rb +19 -0
  85. data/spec/v8/conversion_spec.rb +9 -0
  86. data/spec/v8/error_spec.rb +15 -125
  87. data/spec/v8/function_spec.rb +9 -0
  88. data/therubyracer.gemspec +15 -24
  89. metadata +102 -135
  90. data/.gitmodules +0 -3
  91. data/.rspec +0 -1
  92. data/.yardopts +0 -1
  93. data/bin/therubyracer +0 -11
  94. data/ext/v8/rr.cpp +0 -189
  95. data/ext/v8/v8.cpp +0 -48
  96. data/ext/v8/v8_array.cpp +0 -48
  97. data/ext/v8/v8_array.h +0 -8
  98. data/ext/v8/v8_callbacks.cpp +0 -81
  99. data/ext/v8/v8_callbacks.h +0 -8
  100. data/ext/v8/v8_context.cpp +0 -92
  101. data/ext/v8/v8_context.h +0 -6
  102. data/ext/v8/v8_date.cpp +0 -34
  103. data/ext/v8/v8_date.h +0 -6
  104. data/ext/v8/v8_debug.cpp +0 -17
  105. data/ext/v8/v8_debug.h +0 -6
  106. data/ext/v8/v8_exception.cpp +0 -133
  107. data/ext/v8/v8_exception.h +0 -11
  108. data/ext/v8/v8_external.cpp +0 -70
  109. data/ext/v8/v8_external.h +0 -8
  110. data/ext/v8/v8_function.cpp +0 -69
  111. data/ext/v8/v8_function.h +0 -11
  112. data/ext/v8/v8_handle.cpp +0 -186
  113. data/ext/v8/v8_handle.h +0 -48
  114. data/ext/v8/v8_locker.cpp +0 -139
  115. data/ext/v8/v8_locker.h +0 -6
  116. data/ext/v8/v8_message.cpp +0 -67
  117. data/ext/v8/v8_message.h +0 -10
  118. data/ext/v8/v8_object.cpp +0 -122
  119. data/ext/v8/v8_object.h +0 -10
  120. data/ext/v8/v8_script.cpp +0 -36
  121. data/ext/v8/v8_script.h +0 -8
  122. data/ext/v8/v8_string.cpp +0 -52
  123. data/ext/v8/v8_string.h +0 -9
  124. data/ext/v8/v8_template.cpp +0 -344
  125. data/ext/v8/v8_template.h +0 -8
  126. data/ext/v8/v8_try_catch.cpp +0 -70
  127. data/ext/v8/v8_try_catch.h +0 -5
  128. data/ext/v8/v8_v8.cpp +0 -35
  129. data/ext/v8/v8_v8.h +0 -6
  130. data/ext/v8/v8_value.cpp +0 -175
  131. data/ext/v8/v8_value.h +0 -10
  132. data/ext/v8/v8_weakref.cpp +0 -61
  133. data/ext/v8/v8_weakref.h +0 -29
  134. data/lib/v8/c/locker.rb +0 -18
  135. data/lib/v8/cli.rb +0 -133
  136. data/lib/v8/portal.rb +0 -86
  137. data/lib/v8/portal/caller.rb +0 -37
  138. data/lib/v8/portal/constructor.rb +0 -98
  139. data/lib/v8/portal/function.rb +0 -63
  140. data/lib/v8/portal/interceptors.rb +0 -152
  141. data/lib/v8/portal/proxies.rb +0 -151
  142. data/lib/v8/portal/templates.rb +0 -73
  143. data/lib/v8/stack.rb +0 -66
  144. data/lib/v8/tap.rb +0 -9
  145. data/spec/ext/array_spec.rb +0 -15
  146. data/spec/ext/cxt_spec.rb +0 -57
  147. data/spec/ext/ext_spec_helper.rb +0 -27
  148. data/spec/ext/func_spec.rb +0 -64
  149. data/spec/ext/object_spec.rb +0 -10
  150. data/spec/ext/string_spec.rb +0 -11
  151. data/spec/ext/try_catch_spec.rb +0 -60
  152. data/spec/redjs_helper.rb +0 -3
  153. data/spec/v8/portal/proxies_spec.rb +0 -106
  154. data/specmem/handle_memspec.rb +0 -41
  155. data/specmem/object_memspec.rb +0 -14
  156. data/specmem/proxies_memspec.rb +0 -49
  157. data/specmem/spec_helper.rb +0 -24
  158. data/specthread/spec_helper.rb +0 -2
  159. data/specthread/threading_spec.rb +0 -13
data/ext/v8/v8.cc ADDED
@@ -0,0 +1,87 @@
1
+ #include "rr.h"
2
+
3
+ namespace rr {
4
+
5
+ void V8::Init() {
6
+ ClassBuilder("V8").
7
+ defineSingletonMethod("IdleNotification", &IdleNotification).
8
+ defineSingletonMethod("SetFlagsFromString", &SetFlagsFromString).
9
+ defineSingletonMethod("SetFlagsFromCommandLine", &SetFlagsFromCommandLine).
10
+ defineSingletonMethod("PauseProfiler", &PauseProfiler).
11
+ defineSingletonMethod("ResumeProfiler", &ResumeProfiler).
12
+ defineSingletonMethod("IsProfilerPaused", &IsProfilerPaused).
13
+ defineSingletonMethod("GetCurrentThreadId", &GetCurrentThreadId).
14
+ defineSingletonMethod("TerminateExecution", &TerminateExecution).
15
+ defineSingletonMethod("IsExecutionTerminating", &IsExecutionTerminating).
16
+ defineSingletonMethod("Dispose", &Dispose).
17
+ defineSingletonMethod("LowMemoryNotification", &LowMemoryNotification).
18
+ defineSingletonMethod("AdjustAmountOfExternalAllocatedMemory", &AdjustAmountOfExternalAllocatedMemory).
19
+ defineSingletonMethod("ContextDisposedNotification", &ContextDisposedNotification).
20
+ defineSingletonMethod("SetCaptureStackTraceForUncaughtExceptions", &SetCaptureStackTraceForUncaughtExceptions).
21
+ defineSingletonMethod("GetHeapStatistics", &GetHeapStatistics).
22
+ defineSingletonMethod("GetVersion", &GetVersion);
23
+ }
24
+
25
+ VALUE V8::IdleNotification(int argc, VALUE argv[], VALUE self) {
26
+ VALUE hint;
27
+ rb_scan_args(argc, argv, "01", &hint);
28
+ if (RTEST(hint)) {
29
+ return Bool(v8::V8::IdleNotification(NUM2INT(hint)));
30
+ } else {
31
+ return Bool(v8::V8::IdleNotification());
32
+ }
33
+ }
34
+ VALUE V8::SetFlagsFromString(VALUE self, VALUE string) {
35
+ Void(v8::V8::SetFlagsFromString(RSTRING_PTR(string), (int)RSTRING_LEN(string)));
36
+ }
37
+ VALUE V8::SetFlagsFromCommandLine(VALUE self, VALUE args, VALUE remove_flags) {
38
+ int argc = RARRAY_LENINT(args);
39
+ char* argv[argc];
40
+ for(int i = 0; i < argc; i++) {
41
+ argv[i] = RSTRING_PTR(rb_ary_entry(args, i));
42
+ }
43
+ Void(v8::V8::SetFlagsFromCommandLine(&argc, argv, Bool(remove_flags)));
44
+ }
45
+ VALUE V8::AdjustAmountOfExternalAllocatedMemory(VALUE self, VALUE change_in_bytes) {
46
+ return SIZET2NUM(v8::V8::AdjustAmountOfExternalAllocatedMemory(NUM2SIZET(change_in_bytes)));
47
+ }
48
+ VALUE V8::PauseProfiler(VALUE self) {
49
+ Void(v8::V8::PauseProfiler());
50
+ }
51
+ VALUE V8::ResumeProfiler(VALUE self) {
52
+ Void(v8::V8::ResumeProfiler());
53
+ }
54
+ VALUE V8::IsProfilerPaused(VALUE self) {
55
+ return Bool(v8::V8::IsProfilerPaused());
56
+ }
57
+ VALUE V8::GetCurrentThreadId(VALUE self) {
58
+ return INT2FIX(v8::V8::GetCurrentThreadId());
59
+ }
60
+ VALUE V8::TerminateExecution(VALUE self, VALUE thread_id) {
61
+ Void(v8::V8::TerminateExecution(NUM2INT(thread_id)));
62
+ }
63
+ VALUE V8::IsExecutionTerminating(VALUE self) {
64
+ return Bool(v8::V8::IsExecutionTerminating());
65
+ }
66
+ VALUE V8::Dispose(VALUE self) {
67
+ Void(v8::V8::Dispose());
68
+ }
69
+ VALUE V8::LowMemoryNotification(VALUE self) {
70
+ Void(v8::V8::LowMemoryNotification());
71
+ }
72
+ VALUE V8::ContextDisposedNotification(VALUE self) {
73
+ return INT2FIX(v8::V8::ContextDisposedNotification());
74
+ }
75
+ VALUE V8::SetCaptureStackTraceForUncaughtExceptions(int argc, VALUE argv[], VALUE self) {
76
+ VALUE should_capture; VALUE frame_limit; VALUE options;
77
+ rb_scan_args(argc, argv, "12", &should_capture, &frame_limit, &options);
78
+ int limit = RTEST(frame_limit) ? NUM2INT(frame_limit) : 10;
79
+ Void(v8::V8::SetCaptureStackTraceForUncaughtExceptions(Bool(should_capture), limit, Stack::Trace::StackTraceOptions(options)));
80
+ }
81
+ VALUE V8::GetHeapStatistics(VALUE self, VALUE statistics_ptr) {
82
+ Void(v8::V8::GetHeapStatistics(HeapStatistics(statistics_ptr)));
83
+ }
84
+ VALUE V8::GetVersion(VALUE self) {
85
+ return rb_str_new2(v8::V8::GetVersion());
86
+ }
87
+ }
data/ext/v8/value.cc ADDED
@@ -0,0 +1,239 @@
1
+ #include "rr.h"
2
+
3
+ namespace rr {
4
+
5
+ VALUE Value::Empty;
6
+
7
+ void Value::Init() {
8
+ Empty = rb_eval_string("Object.new");
9
+ ClassBuilder("Value").
10
+ defineConst("Empty", Empty).
11
+ defineMethod("IsUndefined", &IsUndefined).
12
+ defineMethod("IsNull", &IsNull).
13
+ defineMethod("IsTrue", &IsTrue).
14
+ defineMethod("IsFalse", &IsFalse).
15
+ defineMethod("IsString", &IsString).
16
+ defineMethod("IsFunction", &IsFunction).
17
+ defineMethod("IsArray", &IsArray).
18
+ defineMethod("IsObject", &IsObject).
19
+ defineMethod("IsBoolean", &IsBoolean).
20
+ defineMethod("IsNumber", &IsNumber).
21
+ defineMethod("IsExternal", &IsExternal).
22
+ defineMethod("IsInt32", &IsInt32).
23
+ defineMethod("IsUint32", &IsUint32).
24
+ defineMethod("IsDate", &IsDate).
25
+ defineMethod("IsBooleanObject", &IsBooleanObject).
26
+ defineMethod("IsNumberObject", &IsNumberObject).
27
+ defineMethod("IsStringObject", &IsStringObject).
28
+ defineMethod("IsNativeError", &IsNativeError).
29
+ defineMethod("IsRegExp", &IsRegExp).
30
+ defineMethod("ToString", &ToString).
31
+ defineMethod("ToDetailString", &ToDetailString).
32
+ defineMethod("ToObject", &ToObject).
33
+ defineMethod("BooleanValue", &BooleanValue).
34
+ defineMethod("NumberValue", &NumberValue).
35
+ defineMethod("IntegerValue", &IntegerValue).
36
+ defineMethod("Uint32Value", &Uint32Value).
37
+ defineMethod("IntegerValue", &IntegerValue).
38
+ defineMethod("Equals", &Equals).
39
+ defineMethod("StrictEquals", &StrictEquals)
40
+ .store(&Class);
41
+ rb_gc_register_address(&Empty);
42
+ }
43
+
44
+ VALUE Value::IsUndefined(VALUE self) {
45
+ return Bool(Value(self)->IsUndefined());
46
+ }
47
+ VALUE Value::IsNull(VALUE self) {
48
+ return Bool(Value(self)->IsNull());
49
+ }
50
+ VALUE Value::IsTrue(VALUE self) {
51
+ return Bool(Value(self)->IsTrue());
52
+ }
53
+ VALUE Value::IsFalse(VALUE self) {
54
+ return Bool(Value(self)->IsFalse());
55
+ }
56
+ VALUE Value::IsString(VALUE self) {
57
+ return Bool(Value(self)->IsString());
58
+ }
59
+ VALUE Value::IsFunction(VALUE self) {
60
+ return Bool(Value(self)->IsFunction());
61
+ }
62
+ VALUE Value::IsArray(VALUE self) {
63
+ return Bool(Value(self)->IsArray());
64
+ }
65
+ VALUE Value::IsObject(VALUE self) {
66
+ return Bool(Value(self)->IsObject());
67
+ }
68
+ VALUE Value::IsBoolean(VALUE self) {
69
+ return Bool(Value(self)->IsBoolean());
70
+ }
71
+ VALUE Value::IsNumber(VALUE self) {
72
+ return Bool(Value(self)->IsNumber());
73
+ }
74
+ VALUE Value::IsExternal(VALUE self) {
75
+ return Bool(Value(self)->IsExternal());
76
+ }
77
+ VALUE Value::IsInt32(VALUE self) {
78
+ return Bool(Value(self)->IsInt32());
79
+ }
80
+ VALUE Value::IsUint32(VALUE self) {
81
+ return Bool(Value(self)->IsUint32());
82
+ }
83
+ VALUE Value::IsDate(VALUE self) {
84
+ return Bool(Value(self)->IsDate());
85
+ }
86
+ VALUE Value::IsBooleanObject(VALUE self) {
87
+ return Bool(Value(self)->IsBooleanObject());
88
+ }
89
+ VALUE Value::IsNumberObject(VALUE self) {
90
+ return Bool(Value(self)->IsNumberObject());
91
+ }
92
+ VALUE Value::IsStringObject(VALUE self) {
93
+ return Bool(Value(self)->IsStringObject());
94
+ }
95
+ VALUE Value::IsNativeError(VALUE self) {
96
+ return Bool(Value(self)->IsNativeError());
97
+ }
98
+ VALUE Value::IsRegExp(VALUE self) {
99
+ return Bool(Value(self)->IsRegExp());
100
+ }
101
+
102
+ // VALUE Value::ToBoolean(VALUE self) {
103
+ // return Boolean(Value(self)->ToBoolean());
104
+ // }
105
+
106
+ // VALUE Value::ToNumber(VALUE self) {
107
+ // return Number(Value(self)->ToNumber());
108
+ // }
109
+ VALUE Value::ToString(VALUE self) {
110
+ return String(Value(self)->ToString());
111
+ }
112
+
113
+ VALUE Value::ToDetailString(VALUE self) {
114
+ return String(Value(self)->ToDetailString());
115
+ }
116
+
117
+ VALUE Value::ToObject(VALUE self) {
118
+ return Object(Value(self)->ToObject());
119
+ }
120
+
121
+ // VALUE Value::ToInteger(VALUE self) {
122
+ // return Integer(Value(self)->ToInteger());
123
+ // }
124
+
125
+ // VALUE Value::ToUint32(VALUE self) {
126
+ // return Uint32(Value(self)->ToUint32());
127
+ // }
128
+
129
+ // VALUE Value::ToInt32(VALUE self) {
130
+ // return Int32(Value(self)->ToInt32());
131
+ // }
132
+
133
+
134
+ // VALUE Value::ToArrayIndex(VALUE self) {
135
+ // return Uint32(Value(self)->ToArrayIndex());
136
+ // }
137
+
138
+ VALUE Value::BooleanValue(VALUE self) {
139
+ return Bool(Value(self)->BooleanValue());
140
+ }
141
+ VALUE Value::NumberValue(VALUE self) {
142
+ return rb_float_new(Value(self)->NumberValue());
143
+ }
144
+ VALUE Value::IntegerValue(VALUE self) {
145
+ return INT2NUM(Value(self)->IntegerValue());
146
+ }
147
+ VALUE Value::Uint32Value(VALUE self) {
148
+ return UINT2NUM(Value(self)->Uint32Value());
149
+ }
150
+ VALUE Value::Int32Value(VALUE self) {
151
+ return INT2FIX(Value(self)->Int32Value());
152
+ }
153
+
154
+ VALUE Value::Equals(VALUE self, VALUE other) {
155
+ return Bool(Value(self)->Equals(Value(other)));
156
+ }
157
+
158
+ VALUE Value::StrictEquals(VALUE self, VALUE other) {
159
+ return Bool(Value(self)->StrictEquals(Value(other)));
160
+ }
161
+
162
+ Value::operator VALUE() {
163
+ if (handle.IsEmpty() || handle->IsUndefined() || handle->IsNull()) {
164
+ return Qnil;
165
+ }
166
+ if (handle->IsTrue()) {
167
+ return Qtrue;
168
+ }
169
+ if (handle->IsFalse()) {
170
+ return Qfalse;
171
+ }
172
+ if (handle->IsExternal()) {
173
+ return External((v8::Handle<v8::External>)v8::External::Cast(*handle));
174
+ }
175
+ if (handle->IsUint32()) {
176
+ return UInt32(handle->Uint32Value());
177
+ }
178
+ if (handle->IsInt32()) {
179
+ return INT2FIX(handle->Int32Value());
180
+ }
181
+ if (handle->IsBoolean()) {
182
+ return handle->BooleanValue() ? Qtrue : Qfalse;
183
+ }
184
+ if (handle->IsNumber()) {
185
+ return rb_float_new(handle->NumberValue());
186
+ }
187
+ if (handle->IsString()) {
188
+ return String(handle->ToString());
189
+ }
190
+ if (handle->IsDate()) {
191
+ return Date((v8::Handle<v8::Date>)v8::Date::Cast(*handle));
192
+ }
193
+ if (handle->IsObject()) {
194
+ return Object(handle->ToObject());
195
+ }
196
+ return Ref<v8::Value>::operator VALUE();
197
+ }
198
+
199
+ Value::operator v8::Handle<v8::Value>() const {
200
+ if (rb_equal(value,Empty)) {
201
+ return v8::Handle<v8::Value>();
202
+ }
203
+ switch (TYPE(value)) {
204
+ case T_FIXNUM:
205
+ return v8::Integer::New(NUM2INT(value));
206
+ case T_FLOAT:
207
+ return v8::Number::New(NUM2DBL(value));
208
+ case T_STRING:
209
+ return v8::String::New(RSTRING_PTR(value), (int)RSTRING_LEN(value));
210
+ case T_NIL:
211
+ return v8::Null();
212
+ case T_TRUE:
213
+ return v8::True();
214
+ case T_FALSE:
215
+ return v8::False();
216
+ case T_DATA:
217
+ return Ref<v8::Value>::operator v8::Handle<v8::Value>();
218
+ case T_OBJECT:
219
+ case T_CLASS:
220
+ case T_ICLASS:
221
+ case T_MODULE:
222
+ case T_REGEXP:
223
+ case T_MATCH:
224
+ case T_ARRAY:
225
+ case T_HASH:
226
+ case T_STRUCT:
227
+ case T_BIGNUM:
228
+ case T_FILE:
229
+ case T_SYMBOL:
230
+ case T_UNDEF:
231
+ case T_NODE:
232
+ default:
233
+ rb_warn("unknown conversion to V8 for: %s", RSTRING_PTR(rb_inspect(value)));
234
+ return v8::String::New("Undefined Conversion");
235
+ }
236
+
237
+ return v8::Undefined();
238
+ }
239
+ }
data/lib/v8.rb CHANGED
@@ -1,23 +1,31 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ require "v8/version"
3
2
 
4
- module V8
5
- require 'v8/version'
6
- require 'v8/v8' #native glue
7
- require 'v8/c/locker'
8
- require 'v8/portal'
9
- require 'v8/portal/caller'
10
- require 'v8/portal/proxies'
11
- require 'v8/portal/templates'
12
- require 'v8/portal/function'
13
- require 'v8/portal/constructor'
14
- require 'v8/portal/interceptors'
15
- require 'v8/context'
16
- require 'v8/object'
17
- require 'v8/array'
18
- require 'v8/function'
19
- require 'v8/tap'
20
- require 'v8/access'
21
- require 'v8/error'
22
- require 'v8/stack'
23
- end
3
+ require 'ref'
4
+ require 'v8/init'
5
+ require 'v8/util/weakcell'
6
+ require 'v8/error'
7
+ require 'v8/error/protect'
8
+ require 'v8/error/try'
9
+ require 'v8/conversion/fundamental'
10
+ require 'v8/conversion/indentity'
11
+ require 'v8/conversion/reference'
12
+ require 'v8/conversion/primitive'
13
+ require 'v8/conversion/code'
14
+ require 'v8/conversion/class'
15
+ require 'v8/conversion/object'
16
+ require 'v8/conversion/time'
17
+ require 'v8/conversion/hash'
18
+ require 'v8/conversion/array'
19
+ require 'v8/conversion/proc'
20
+ require 'v8/conversion/method'
21
+ require 'v8/conversion/symbol'
22
+ require 'v8/conversion/string'
23
+ require 'v8/conversion'
24
+ require 'v8/access/names'
25
+ require 'v8/access/indices'
26
+ require 'v8/access/invocation'
27
+ require 'v8/access'
28
+ require 'v8/context'
29
+ require 'v8/object'
30
+ require 'v8/array'
31
+ require 'v8/function'
data/lib/v8/access.rb CHANGED
@@ -1,87 +1,5 @@
1
- require 'set'
2
- module V8
3
- class Access
4
- def get(obj, name, &dontintercept)
5
- methods = accessible_methods(obj)
6
- if methods.include?(name)
7
- method = obj.method(name)
8
- method.arity == 0 ? method.call : method.unbind
9
- elsif obj.respond_to?(:[])
10
- obj.send(:[], name, &dontintercept)
11
- else
12
- yield
13
- end
14
- end
15
-
16
- def iget(obj, index, &dontintercept)
17
- if obj.respond_to?(:[])
18
- obj.send(:[], index, &dontintercept)
19
- else
20
- yield
21
- end
22
- end
23
-
24
- def set(obj, name, value, &dontintercept)
25
- setter = name + "="
26
- methods = accessible_methods(obj, true)
27
- if methods.include?(setter)
28
- obj.send(setter, value)
29
- elsif obj.respond_to?(:[]=)
30
- obj.send(:[]=, name, value, &dontintercept)
31
- else
32
- yield
33
- end
34
- end
35
-
36
- def iset(obj, index, value, &dontintercept)
37
- if obj.respond_to?(:[]=)
38
- obj.send(:[]=, index, value, &dontintercept)
39
- else
40
- yield
41
- end
42
- end
43
-
44
- def query(obj, name, attributes)
45
- if obj.respond_to?(name)
46
- attributes.dont_delete
47
- unless obj.respond_to?(name + "=")
48
- attributes.read_only
49
- end
50
- else
51
- yield
52
- end
53
- end
54
-
55
- def iquery(obj, index, attributes)
56
- if obj.respond_to?(:[])
57
- attributes.dont_delete
58
- unless obj.respond_to?(:[]=)
59
- attributes.read_only
60
- end
61
- else
62
- yield
63
- end
64
- end
65
-
66
- def names(obj)
67
- accessible_methods(obj)
68
- end
69
-
70
- def indices(obj)
71
- obj.respond_to?(:length) ? (0..obj.length).to_a : yield
72
- end
73
-
74
- private
75
-
76
- def accessible_methods(obj, special_methods = false)
77
- obj.public_methods(false).map {|m| m.to_s}.to_set.tap do |methods|
78
- ancestors = obj.class.ancestors.dup
79
- while ancestor = ancestors.shift
80
- break if ancestor == ::Object
81
- methods.merge(ancestor.public_instance_methods(false).map {|m| m.to_s})
82
- end
83
- methods.reject! {|m| m == "[]" || m == "[]=" || m =~ /=$/} unless special_methods
84
- end
85
- end
86
- end
87
- end
1
+ class V8::Access
2
+ include Names
3
+ include Indices
4
+ include Invocation
5
+ end