/c_src/erlv8_list.cc

http://github.com/beamjs/erlv8 · C++ · 32 lines · 27 code · 5 blank · 0 comment · 3 complexity · 223c9f76629fc57ce25ee1675dfa9535 MD5 · raw file

  1. #include "erlv8.hh"
  2. TickHandler(ListTickHandler) {
  3. ErlNifEnv *ref_env = enif_alloc_env();
  4. ERL_NIF_TERM list_ref = enif_make_copy(ref_env, tick_ref);
  5. val_res_t *res;
  6. if (enif_get_resource(vm->env,array[1],val_resource,(void **)(&res))) {
  7. LHCS(vm->isolate, res->ctx);
  8. if (res->val->IsArray()) {
  9. v8::Handle<v8::Array> array = v8::Handle<v8::Array>::Cast(res->val->ToObject());
  10. ERL_NIF_TERM *arr = (ERL_NIF_TERM *) malloc(sizeof(ERL_NIF_TERM) * array->Length());
  11. for (unsigned int i=0;i<array->Length();i++) {
  12. arr[i] = js_to_term(res->ctx, vm->isolate, vm->env, array->Get(v8::Integer::NewFromUnsigned(i)));
  13. }
  14. ERL_NIF_TERM list = enif_make_list_from_array(vm->env, arr, array->Length());
  15. free(arr);
  16. SEND(vm->server,
  17. enif_make_tuple3(env,
  18. enif_make_atom(env, "result"),
  19. enif_make_copy(env, list_ref),
  20. enif_make_copy(env, list)));
  21. }
  22. }
  23. enif_free_env(ref_env);
  24. TickHandlerResolution result;
  25. result.type = DONE;
  26. return result;
  27. }