Navigation Menu

Skip to content

Commit

Permalink
Converted taint to a tick
Browse files Browse the repository at this point in the history
  • Loading branch information
yrashk committed Mar 21, 2011
1 parent 6eb8a8f commit 2759fbd
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 20 deletions.
14 changes: 2 additions & 12 deletions c_src/erlv8.cc
Expand Up @@ -13,6 +13,7 @@ static ErlV8TickHandler tick_handlers[] =
{"result", ResultTickHandler},
{"call", CallTickHandler},
{"inst", InstantiateTickHandler},
{"taint", TaintTickHandler},
{"get", GetTickHandler},
{"get_proto", GetProtoTickHandler},
{"get_hidden", GetHiddenTickHandler},
Expand Down Expand Up @@ -314,16 +315,6 @@ static ERL_NIF_TERM new_context(ErlNifEnv *env, int argc, const ERL_NIF_TERM arg
};
};

static ERL_NIF_TERM value_taint(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
vm_res_t *res;
if (enif_get_resource(env,argv[0],vm_resource,(void **)(&res))) {
LHCS(res->vm->context);
return js_to_term(env,term_to_js(env,argv[1]));
} else {
return enif_make_badarg(env);
};
};

static ERL_NIF_TERM object_delete(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
val_res_t *res;
if (enif_get_resource(env,argv[0],val_resource,(void **)(&res))) {
Expand Down Expand Up @@ -461,8 +452,7 @@ static ErlNifFunc nif_funcs[] =
{"object_set_accessor", 6, object_set_accessor},
{"object_set_accessor", 7, object_set_accessor},
{"value_equals",3, value_equals},
{"value_strict_equals",3, value_strict_equals},
{"value_taint",2, value_taint}
{"value_strict_equals",3, value_strict_equals}
};

#define __ERLV8__(O) v8::Local<v8::External>::Cast(O->GetHiddenValue(string__erlv8__))->Value()
Expand Down
1 change: 1 addition & 0 deletions c_src/erlv8.hh
Expand Up @@ -126,6 +126,7 @@ TickHandler(StopTickHandler);
TickHandler(ResultTickHandler);
TickHandler(CallTickHandler);
TickHandler(InstantiateTickHandler);
TickHandler(TaintTickHandler);
TickHandler(GetTickHandler);
TickHandler(GetProtoTickHandler);
TickHandler(GetHiddenTickHandler);
Expand Down
16 changes: 16 additions & 0 deletions c_src/erlv8_taint.cc
@@ -0,0 +1,16 @@
#include "erlv8.hh"

TickHandler(TaintTickHandler) {
ErlNifEnv *ref_env = enif_alloc_env();
ERL_NIF_TERM taint_ref = enif_make_copy(ref_env, tick_ref);
LHCS(vm->context);

SEND(vm->server,
enif_make_tuple3(env,
enif_make_atom(env,"result"),
enif_make_copy(env,taint_ref),
js_to_term(env, term_to_js(vm->env, array[1]))));

enif_free_env(ref_env);
return DONE;
}
5 changes: 1 addition & 4 deletions src/erlv8_nif.erl
Expand Up @@ -4,7 +4,7 @@
-export([init/0,new_vm/0,set_server/2,global/1,context/1, new_context/1, tick/3,
object_delete/2, object_set_accessor/3, object_set_accessor/4,
object_set_accessor/5, object_set_accessor/6, object_set_accessor/7,
value_equals/3, value_strict_equals/3, value_taint/2]).
value_equals/3, value_strict_equals/3]).

-define(DEFAULT_PREEMPTION, 100).

Expand Down Expand Up @@ -72,6 +72,3 @@ value_equals(_VMRes, _Val1,_Val2) ->

value_strict_equals(_VMRes, _Val1,_Val2) ->
error(not_loaded).

value_taint(_VM, _Val) ->
error(not_loaded).
5 changes: 1 addition & 4 deletions src/erlv8_vm.erl
Expand Up @@ -84,7 +84,7 @@ next_tick(Server, Tick, Timeout, Ref) when is_reference(Ref) ->
gen_server2:call(Server,{next_tick, Tick, Ref}, Timeout).

taint(Server, Value) ->
gen_server2:call(Server, {taint, Value}).
enqueue_tick(Server, {taint, Value}).

equals(Server, V1, V2) ->
gen_server2:call(Server, {equals, V1, V2}).
Expand Down Expand Up @@ -173,9 +173,6 @@ handle_call({stor, Key, Value}, _From, #state{ storage = Storage } = State) ->
handle_call({retr, Key}, _From, #state{ storage = Storage } = State) ->
{reply, proplists:get_value(Key, Storage), State};

handle_call({taint, Value}, _From, #state{ vm = VM } = State) ->
{reply, erlv8_nif:value_taint(VM,Value), State};

handle_call({equals, V1, V2}, _From, #state{ vm = VM } = State) ->
{reply, erlv8_nif:value_equals(VM,V1,V2), State};

Expand Down

0 comments on commit 2759fbd

Please sign in to comment.