140 lines
2.9 KiB
C
140 lines
2.9 KiB
C
|
/**
|
||
|
* See Copyright Notice in picrin.h
|
||
|
*/
|
||
|
|
||
|
#include "picrin.h"
|
||
|
#include "value.h"
|
||
|
#include "state.h"
|
||
|
|
||
|
int
|
||
|
pic_int(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
assert(pic_int_p(pic, v));
|
||
|
return value_int(&v);
|
||
|
}
|
||
|
|
||
|
double
|
||
|
pic_float(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
assert(pic_float_p(pic, v));
|
||
|
return value_float(&v);
|
||
|
}
|
||
|
|
||
|
char
|
||
|
pic_char(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
assert(pic_char_p(pic, v));
|
||
|
return value_char(&v);
|
||
|
}
|
||
|
|
||
|
void *
|
||
|
pic_ptr(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
assert(pic_obj_p(pic, v));
|
||
|
return value_ptr(&v);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
pic_type(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
return value_type(&v);
|
||
|
}
|
||
|
|
||
|
pic_value
|
||
|
pic_int_value(pic_state *PIC_UNUSED(pic), int i)
|
||
|
{
|
||
|
pic_value v;
|
||
|
make_int_value(&v, i);
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
pic_value
|
||
|
pic_float_value(pic_state *PIC_UNUSED(pic), double f)
|
||
|
{
|
||
|
pic_value v;
|
||
|
make_float_value(&v, f);
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
pic_value
|
||
|
pic_char_value(pic_state *PIC_UNUSED(pic), char c)
|
||
|
{
|
||
|
pic_value v;
|
||
|
make_char_value(&v, c);
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
pic_value
|
||
|
pic_obj_value(pic_state *PIC_UNUSED(pic), void *p, int type)
|
||
|
{
|
||
|
pic_value v;
|
||
|
make_obj_value(&v, p, type);
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
#define DEFVAL(name, type) \
|
||
|
pic_value name(pic_state *PIC_UNUSED(pic)) { \
|
||
|
pic_value v; \
|
||
|
make_value(&v, type); \
|
||
|
return v; \
|
||
|
}
|
||
|
|
||
|
DEFVAL(pic_nil_value, PIC_TYPE_NIL)
|
||
|
DEFVAL(pic_eof_object, PIC_TYPE_EOF)
|
||
|
DEFVAL(pic_true_value, PIC_TYPE_TRUE)
|
||
|
DEFVAL(pic_false_value, PIC_TYPE_FALSE)
|
||
|
DEFVAL(pic_undef_value, PIC_TYPE_UNDEF)
|
||
|
DEFVAL(pic_invalid_value, PIC_TYPE_INVALID)
|
||
|
|
||
|
pic_value
|
||
|
pic_bool_value(pic_state *PIC_UNUSED(pic), bool b)
|
||
|
{
|
||
|
pic_value v;
|
||
|
make_value(&v, (b ? PIC_TYPE_TRUE : PIC_TYPE_FALSE));
|
||
|
return v;
|
||
|
}
|
||
|
|
||
|
#define DEFPRED(name, type) \
|
||
|
bool name(pic_state *PIC_UNUSED(pic), pic_value v) { \
|
||
|
return pic_type(pic, v) == type; \
|
||
|
}
|
||
|
|
||
|
DEFPRED(pic_invalid_p, PIC_TYPE_INVALID)
|
||
|
DEFPRED(pic_float_p, PIC_TYPE_FLOAT)
|
||
|
DEFPRED(pic_int_p, PIC_TYPE_INT)
|
||
|
DEFPRED(pic_char_p, PIC_TYPE_CHAR)
|
||
|
DEFPRED(pic_eof_p, PIC_TYPE_EOF)
|
||
|
DEFPRED(pic_undef_p, PIC_TYPE_UNDEF)
|
||
|
DEFPRED(pic_true_p, PIC_TYPE_TRUE)
|
||
|
DEFPRED(pic_nil_p, PIC_TYPE_NIL)
|
||
|
DEFPRED(pic_false_p, PIC_TYPE_FALSE)
|
||
|
DEFPRED(pic_str_p, PIC_TYPE_STRING)
|
||
|
DEFPRED(pic_vec_p, PIC_TYPE_VECTOR)
|
||
|
DEFPRED(pic_blob_p, PIC_TYPE_BLOB)
|
||
|
DEFPRED(pic_dict_p, PIC_TYPE_DICT)
|
||
|
DEFPRED(pic_attr_p, PIC_TYPE_ATTR)
|
||
|
DEFPRED(pic_rec_p, PIC_TYPE_RECORD)
|
||
|
DEFPRED(pic_sym_p, PIC_TYPE_SYMBOL)
|
||
|
DEFPRED(pic_pair_p, PIC_TYPE_PAIR)
|
||
|
DEFPRED(pic_proc_func_p, PIC_TYPE_PROC_FUNC)
|
||
|
DEFPRED(pic_proc_irep_p, PIC_TYPE_PROC_IREP)
|
||
|
DEFPRED(pic_irep_p, PIC_TYPE_IREP)
|
||
|
|
||
|
bool
|
||
|
pic_bool_p(pic_state *pic, pic_value v)
|
||
|
{
|
||
|
return pic_true_p(pic, v) || pic_false_p(pic, v);
|
||
|
}
|
||
|
|
||
|
bool
|
||
|
pic_proc_p(pic_state *pic, pic_value v)
|
||
|
{
|
||
|
return pic_proc_func_p(pic, v) || pic_proc_irep_p(pic, v);
|
||
|
}
|
||
|
|
||
|
bool
|
||
|
pic_obj_p(pic_state *PIC_UNUSED(pic), pic_value v)
|
||
|
{
|
||
|
return value_obj_p(&v);
|
||
|
}
|