/c_src/erlv8_equals.cc

http://github.com/beamjs/erlv8 · C++ · 57 lines · 49 code · 8 blank · 0 comment · 4 complexity · da80d632e0e98e32e34a33e1f3d8d720 MD5 · raw file

  1. #include "erlv8.hh"
  2. TickHandler(EqualsTickHandler) {
  3. ErlNifEnv *ref_env = enif_alloc_env();
  4. ERL_NIF_TERM equals_ref = enif_make_copy(ref_env, tick_ref);
  5. val_res_t *res1;
  6. val_res_t *res2;
  7. bool bres;
  8. if ((enif_get_resource(vm->env,array[1],val_resource,(void **)(&res1))) &&
  9. (enif_get_resource(vm->env,array[2],val_resource,(void **)(&res2)))) {
  10. LHCS(vm->isolate, res1->ctx);
  11. bres = res1->val->ToObject()->Equals(res2->val->ToObject());
  12. } else {
  13. LHCS(vm->isolate, vm->context);
  14. bres = term_to_js(vm->context, vm->isolate, vm->env,array[1])->Equals(term_to_js(vm->context, vm->isolate, vm->env,array[2]));
  15. };
  16. SEND(vm->server,
  17. enif_make_tuple3(env,
  18. enif_make_atom(env,"result"),
  19. enif_make_copy(env,equals_ref),
  20. enif_make_atom(env, bres ? "true" : "false")));
  21. enif_free_env(ref_env);
  22. TickHandlerResolution result;
  23. result.type = DONE;
  24. return result;
  25. }
  26. TickHandler(StrictEqualsTickHandler) {
  27. ErlNifEnv *ref_env = enif_alloc_env();
  28. ERL_NIF_TERM equals_ref = enif_make_copy(ref_env, tick_ref);
  29. val_res_t *res1;
  30. val_res_t *res2;
  31. bool bres;
  32. if ((enif_get_resource(vm->env,array[1],val_resource,(void **)(&res1))) &&
  33. (enif_get_resource(vm->env,array[2],val_resource,(void **)(&res2)))) {
  34. LHCS(vm->isolate, res1->ctx);
  35. bres = res1->val->ToObject()->StrictEquals(res2->val->ToObject());
  36. } else {
  37. LHCS(vm->isolate, vm->context);
  38. bres = term_to_js(vm->context, vm->isolate, vm->env,array[1])->StrictEquals(term_to_js(vm->context, vm->isolate, vm->env,array[2]));
  39. };
  40. SEND(vm->server,
  41. enif_make_tuple3(env,
  42. enif_make_atom(env,"result"),
  43. enif_make_copy(env,equals_ref),
  44. enif_make_atom(env, bres ? "true" : "false")));
  45. enif_free_env(ref_env);
  46. TickHandlerResolution result;
  47. result.type = DONE;
  48. return result;
  49. }