Esempio n. 1
0
File: os.c Progetto: robbiemc/joule
INIT static void lua_os_init() {
  str_sec      = LSTR("sec");
  str_min      = LSTR("min");
  str_hour     = LSTR("hour");
  str_day      = LSTR("day");
  str_month    = LSTR("month");
  str_year     = LSTR("year");
  str_wday     = LSTR("wday");
  str_yday     = LSTR("yday");
  str_isdst    = LSTR("isdst");
  str_collate  = LSTR("collate");
  str_ctype    = LSTR("ctype");
  str_monetary = LSTR("monetary");
  str_numeric  = LSTR("numeric");
  str_time     = LSTR("time");

  lua_os = lhash_alloc();
  cfunc_register(lua_os, "clock",     lua_os_clock);
  cfunc_register(lua_os, "exit",      lua_os_exit);
  cfunc_register(lua_os, "execute",   lua_os_execute);
  cfunc_register(lua_os, "getenv",    lua_os_getenv);
  cfunc_register(lua_os, "date",      lua_os_date);
  cfunc_register(lua_os, "setlocale", lua_os_setlocale);
  cfunc_register(lua_os, "tmpname",   lua_os_tmpname);
  cfunc_register(lua_os, "remove",    lua_os_remove);
  cfunc_register(lua_os, "rename",    lua_os_rename);

  lhash_set(lua_globals, LSTR("os"), lv_table(lua_os));
}
Esempio n. 2
0
File: fasl.c Progetto: mschaef/vcsh
static void fast_read_hash(lref_t reader, lref_t * hash)
{
    lref_t shallow;
    fast_read(reader, &shallow, false);

    *hash = hashcons(TRUEP(shallow));

    lref_t elements;
    fast_read(reader, &elements, false);

    lref_t loc = NIL;

    for (loc = elements; CONSP(loc); loc = CDR(loc))
    {
        lref_t kv = CAR(loc);

        if (!CONSP(kv))
            vmerror_fast_read("malformed key/value in hash table", reader, kv);

        lhash_set(*hash, CAR(kv), CDR(kv));
    }

    if (!NULLP(loc))
        vmerror_fast_read("malformed key/value list for hash table", reader, elements);
}
Esempio n. 3
0
INIT static void lua_coroutine_init() {
  str_running   = LSTR("running");
  str_suspended = LSTR("suspended");
  str_normal    = LSTR("normal");
  str_dead      = LSTR("dead");
  main_thread   = gc_alloc(sizeof(lthread_t), LTHREAD);
  cur_thread    = main_thread;
  main_stack    = vm_stack;

  main_thread->env           = lua_globals;
  main_thread->caller        = NULL;
  main_thread->closure       = NULL;
  main_thread->frame         = NULL;
  main_thread->vm_stack.size = 0;
  main_thread->stack         = NULL;

  lua_coroutine = lhash_alloc();
  cfunc_register(lua_coroutine, "create",  lua_co_create);
  cfunc_register(lua_coroutine, "resume",  lua_co_resume);
  cfunc_register(lua_coroutine, "running", lua_co_running);
  cfunc_register(lua_coroutine, "status",  lua_co_status);
  cfunc_register(lua_coroutine, "wrap",    lua_co_wrap);
  cfunc_register(lua_coroutine, "yield",   lua_co_yield);

  lhash_set(lua_globals, LSTR("coroutine"), lv_table(lua_coroutine));
  gc_add_hook(coroutine_gc);

  co_wrapper_cf = gc_alloc(sizeof(cfunc_t), LCFUNC);
  co_wrapper_cf->f = co_wrap_trampoline;
  co_wrapper_cf->upvalues = 1;
  co_wrapper_cf->name = "do not see";
}
Esempio n. 4
0
File: os.c Progetto: robbiemc/joule
static u32 lua_os_date(LSTATE) {
  luav first = argc > 0 ? lstate_getval(0) : LUAV_NIL;
  char *format;
  if (first == LUAV_NIL) {
    format = "%c";
  } else {
    format = lv_caststring(first, 0)->data;
  }

  time_t t = argc <= 1 ? time(NULL) : (time_t) lstate_getnumber(1);
  struct tm *stm;
  if (format[0] == '!') {
    stm = gmtime(&t);
    format++;
  } else {
    stm = localtime(&t);
  }
  xassert(stm != NULL);

  if (strcmp("*t", format) == 0) {
    lhash_t *hash = lhash_alloc();

    lhash_set(hash, str_sec,    lv_number(stm->tm_sec));
    lhash_set(hash, str_min,    lv_number(stm->tm_min));
    lhash_set(hash, str_hour,   lv_number(stm->tm_hour));
    lhash_set(hash, str_day,    lv_number(stm->tm_mday));
    lhash_set(hash, str_month,  lv_number(stm->tm_mon + 1));
    lhash_set(hash, str_year,   lv_number(stm->tm_year + 1900));
    lhash_set(hash, str_wday,   lv_number(stm->tm_wday + 1));
    lhash_set(hash, str_yday,   lv_number(stm->tm_yday + 1));
    lhash_set(hash, str_isdst,  lv_bool((u8) stm->tm_isdst));

    lstate_return1(lv_table(hash));
  }

  size_t cap = LUAV_INIT_STRING;
  lstring_t *str = lstr_alloc(cap);

  while (strftime(str->data, cap - 1, format, stm) == 0) {
    cap *= 2;
    str = lstr_realloc(str, cap);
  }

  str->length = strlen(str->data);
  lstate_return1(lv_string(lstr_add(str)));
}
Esempio n. 5
0
INIT static void lua_math_init() {
  lua_math = lhash_alloc();

  lhash_set(lua_math, LSTR("pi"),    lv_number(M_PI));
  lhash_set(lua_math, LSTR("huge"),  lv_number(HUGE_VAL));
  cfunc_register(lua_math, "abs",        lua_math_abs);
  cfunc_register(lua_math, "acos",       lua_math_acos);
  cfunc_register(lua_math, "asin",       lua_math_asin);
  cfunc_register(lua_math, "atan",       lua_math_atan);
  cfunc_register(lua_math, "atan2",      lua_math_atan2);
  cfunc_register(lua_math, "ceil",       lua_math_ceil);
  cfunc_register(lua_math, "cos",        lua_math_cos);
  cfunc_register(lua_math, "cosh",       lua_math_cosh);
  cfunc_register(lua_math, "deg",        lua_math_deg);
  cfunc_register(lua_math, "exp",        lua_math_exp);
  cfunc_register(lua_math, "floor",      lua_math_floor);
  cfunc_register(lua_math, "fmod",       lua_math_fmod);
  cfunc_register(lua_math, "frexp",      lua_math_frexp);
  cfunc_register(lua_math, "ldexp",      lua_math_ldexp);
  cfunc_register(lua_math, "log",        lua_math_log);
  cfunc_register(lua_math, "log10",      lua_math_log10);
  cfunc_register(lua_math, "min",        lua_math_min);
  cfunc_register(lua_math, "max",        lua_math_max);
  cfunc_register(lua_math, "mod",        lua_math_mod);
  cfunc_register(lua_math, "modf",       lua_math_modf);
  cfunc_register(lua_math, "pow",        lua_math_pow);
  cfunc_register(lua_math, "rad",        lua_math_rad);
  cfunc_register(lua_math, "random",     lua_math_random);
  cfunc_register(lua_math, "randomseed", lua_math_randomseed);
  cfunc_register(lua_math, "sin",        lua_math_sin);
  cfunc_register(lua_math, "sinh",       lua_math_sinh);
  cfunc_register(lua_math, "sqrt",       lua_math_sqrt);
  cfunc_register(lua_math, "tan",        lua_math_tan);
  cfunc_register(lua_math, "tanh",       lua_math_tanh);

  lhash_set(lua_globals, LSTR("math"), lv_table(lua_math));
}