Skip to content

Commit

Permalink
add ?is_vm/1 macro; add Object:copy_properties_to/2; add Array:unpush/1
Browse files Browse the repository at this point in the history
  • Loading branch information
gleber committed Nov 10, 2012
1 parent daa0bec commit 618e4d1
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 4 deletions.
1 change: 1 addition & 0 deletions include/erlv8.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@
vm}). %% or proplist()


-define(is_v8(X), (is_record(X, erlv8_object) orelse is_record(X, erlv8_fun) orelse is_record(X, erlv8_array))).
6 changes: 5 additions & 1 deletion src/erlv8_array.erl
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

-compile({no_auto_import,[length/1]}).

-export([list/1, object/1, length/1, push/2, unshift/2, delete/2,
-export([list/1, object/1, length/1, push/2, unpush/1, unshift/2, delete/2,

new/1, new/2]).

Expand All @@ -29,6 +29,10 @@ push(Val, Self) ->
M = Self:object(),
M:set_value(length(Self),Val).

unpush(Self) ->
M = Self:object(),
M:delete(M:length()-1).

unshift(Val, Self) ->
M = Self:object(),
L = length(Self),
Expand Down
7 changes: 7 additions & 0 deletions src/erlv8_object.erl
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,18 @@
set_prototype/2, get_prototype/1, delete/2, set_accessor/3, set_accessor/4, set_accessor/5, set_accessor/6,
equals/2, strict_equals/2, call/2, call/3,

copy_properties_to/2,

new/1, new/2]).

proplist({_Erlv8Obj, Resource, VM}) ->
erlv8_vm:enqueue_tick(VM,{proplist, Resource}).

copy_properties_to(Other, Self) ->
lists:foreach(fun({K, V}) ->
Other:set_value(K, V)
end, Self:proplist()).

set_value(Key, Value, {_Erlv8Obj, Resource, VM}) ->
erlv8_vm:enqueue_tick(VM, {set, Resource, Key, Value}).

Expand Down
4 changes: 1 addition & 3 deletions src/erlv8_vm.erl
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,7 @@ next_tick(Server, Tick, Timeout) ->
next_tick(Server, Tick, Timeout, Ref) when is_reference(Ref) ->
gen_server2:call(Server,{next_tick, Tick, Ref}, Timeout).

taint(Server, {Tag, _R, _Vm} = Value) when Tag == erlv8_object;
Tag == erlv8_fun;
Tag == erlv8_array ->
taint(Server, Value) when ?is_v8(Value) ->
enqueue_tick(Server, {taint, Value});

taint(Server, {Error, _} = Value) when Error == error;
Expand Down

0 comments on commit 618e4d1

Please sign in to comment.