Beispiel #1
0
int main()
{
  value_t v1 = box_value( INT, 22 );
  value_t v2 = box_value( INT, 33 );

  value_t vls[] = { v1, v2 };
  list_t vl = { 2, vls };
  value_t vs = box_value( LIST, vl );

  value_t vp = box_value( PROC, &proc1 );

  value_t vr = (*(function_t*)unbox_value(vp))(vs);

  printf("result: %d\n", *(int*)unbox_value(vr));

  return *(int*)unbox_value(vr);
}
Beispiel #2
0
inline svalue_t *
box_double(double x) {
  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);
  svalue_variants_t value_val;
  value_val.doublev = x;
  *val = box_value(value_val, RTS_DOUBLE);
  return val;
}
Beispiel #3
0
inline svalue_t *
box_float(float x) {
  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);
  svalue_variants_t value_val;
  value_val.floating = x;
  *val = box_value(value_val, RTS_FLOAT);
  return val;
}
Beispiel #4
0
inline svalue_t *
box_int(int x) {
  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);
  svalue_variants_t value_val;
  value_val.integer = x;
  *val = box_value(value_val, RTS_INT);
  return val;
}
Beispiel #5
0
inline svalue_t *
box_closure(sc_closure_t *closure) {
  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);
  svalue_variants_t value_val;
  value_val.closure = closure;
  *val = box_value(value_val, RTS_CLOSURE);
  return val;
}
Beispiel #6
0
inline svalue_t *
box_string(char *chars, size_t n) {
  sc_string_t strval;
  strval.string = chars;
  strval.size = n;

  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);

  svalue_variants_t value_val;
  value_val.string = strval;
  *val = box_value(value_val, RTS_STRING);
  return val;
}
Beispiel #7
0
inline svalue_t *
box_pair(svalue_t *left, svalue_t *right) {
  sc_pair_t pair;
  pair.left = left;
  pair.right = right;

  svalue_t *val = malloc(sizeof (svalue_t));
  CHECK(val);

  svalue_variants_t value_val;
  value_val.pair = pair;
  *val = box_value(value_val, PAIR);
  return val;
}
Beispiel #8
0
inline value_p box_list(long numargs, ...) // TODO: not beautiful to have special handler for lists
{
  list_p l = malloc( sizeof(struct _list_t) );
  l->size = numargs;
  l->vs = malloc( sizeof(value_p) * numargs );
  box_value(list, LIST, l);

  va_list args;
  va_start(args, numargs);
  for (long i = 0; i < numargs; i++) {
    list->LIST->vs[i] = va_arg(args, value_p);
  }
  va_end(args);

  return list;
}
 ptr<json::value> object::clone() const noexcept(false)
 {
     return box_value(*this);
 }
Beispiel #10
0
value_t op_inc(value_t v)
{
  value_t result = box_value( INT, v.INT + 1 ); // FIXME: unsafe!

  return result;
}