Esempio n. 1
0
File: lisp.c Progetto: jbulow/tort
tort_v _tort_string_to_number(tort_v s, int radix) /**/
{
  long long d = 0;
  if ( radix == 10 /* FIXME */ && sscanf(tort_string_data(s), "%lld", &d) == 1 ) {
    return tort_i(d);
  } else {
    return tort_false;
  }
}
Esempio n. 2
0
tort_v _tort_m_dynlib__dlopen(tort_tp struct tort_dynlib *rcvr, tort_v name)
{
  char file_buffer[1024];
  const char *file;
  void *dl;
  const char *base_sym;
  void *base_ptr;

  rcvr->name = name;
  file = tort_string_data(name);
  if ( ! (dl = tort_dlopen(file, file_buffer)) ) {
    const char *str = dlerror();
    str = str ? str : "UNKNOWN ERROR";
    rcvr->error = tort_string_new_cstr(str);
    perror(str);
    return rcvr;
  }
  file = file_buffer;
  rcvr->path = tort_string_new_cstr(file);
  rcvr->base_sym = rcvr->base_ptr = tort_nil;
  tort_send(tort__s(emptyE), rcvr);
  tort_send(tort__s(_load_symtab), rcvr, file, 0);
  if ( ! tort_map_size(rcvr) )
    return rcvr;
  base_sym = tort_symbol_data(tort_map_data(rcvr)[0]->first);
  rcvr->base_sym = tort_string_new_cstr(base_sym);
  base_ptr = tort_ptr_data(tort_map_data(rcvr)[0]->second);
  rcvr->base_ptr = tort_ptr_new(base_ptr);
  if ( _tort_dl_debug ) {
    fprintf(stderr, "    base_sym = '%s'\n", base_sym);
    fprintf(stderr, "    base_ptr = %p\n", base_ptr);
  }
  base_ptr = dlsym(dl, base_sym);
  if ( _tort_dl_debug )
    fprintf(stderr, "    dlsym(@%p, \"%s\") => @%p\n", dl, base_sym, base_ptr);
  {
    Dl_info info;
    bzero(&info, sizeof(info));
    dladdr((void*) base_ptr, &info);
    if ( _tort_dl_debug > 1 ) {
      fprintf(stderr, "    dli_fname = %s\n", info.dli_fname);
      fprintf(stderr, "    dli_fbase = %p\n", info.dli_fbase);
      fprintf(stderr, "    dli_sname = %s\n", info.dli_sname);
      fprintf(stderr, "    dli_saddr = %p\n", info.dli_saddr);
    }
    base_ptr = info.dli_fbase;
  }
  tort_dlclose(dl);
  tort_send(tort__s(emptyE), rcvr);
  tort_send(tort__s(_load_symtab), rcvr, file, base_ptr);
  tort_send(tort__s(set), tort_(dl_maps), tort_string_new_cstr(file), rcvr);
  return rcvr;
}
Esempio n. 3
0
File: write.c Progetto: jbulow/tort
tort_v _tort_m_string___inspect(tort_tp tort_v rcvr, tort_v io)
{
  tort_v str = tort_send(tort__s(escape), rcvr, tort_i('"'));
  printf("\"%s\"", (char *) tort_string_data(str));
  return tort_nil;
}