OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-booking / node_modules / bare-hrtime / binding.c

59 lines · c ref:
#include <assert.h>
#include <bare.h>
#include <js.h>
#include <uv.h>

static js_value_t *
bare_hrtime(js_env_t *env, js_callback_info_t *info) {
  int err;

  js_value_t *result;
  err = js_create_bigint_uint64(env, uv_hrtime(), &result);
  assert(err == 0);

  return result;
}

static int64_t
bare_hrtime_typed(js_value_t *receiver, js_typed_callback_info_t *info) {
  return uv_hrtime();
}

static js_value_t *
bare_hrtime_exports(js_env_t *env, js_value_t *exports) {
  int err;

#define V(name, untyped, signature, typed) \
  { \
    js_value_t *val; \
    if (signature) { \
      err = js_create_typed_function(env, name, -1, untyped, signature, typed, NULL, &val); \
      assert(err == 0); \
    } else { \
      err = js_create_function(env, name, -1, untyped, NULL, &val); \
      assert(err == 0); \
    } \
    err = js_set_named_property(env, exports, name, val); \
    assert(err == 0); \
  }

  V(
    "hrtime",
    bare_hrtime,
    &((js_callback_signature_t) {
      .version = 0,
      .result = js_biguint64,
      .args_len = 1,
      .args = (int[]) {
        js_object,
      },
    }),
    bare_hrtime_typed
  );
#undef V

  return exports;
}

BARE_MODULE(bare_hrtime, bare_hrtime_exports)