mruby/c VM Source Code release 4.0.0
Loading...
Searching...
No Matches
boxing_no.h
Go to the documentation of this file.
1
14
15//================================================================
19typedef struct RObject {
21 union {
22 mrbc_int_t i; // MRBC_TT_INTEGER
23#if MRBC_USE_FLOAT
24 mrbc_float_t d; // MRBC_TT_FLOAT
25#endif
26 mrbc_sym sym_id; // MRBC_TT_SYMBOL
27 struct RBasic *obj; // use inc/dec ref only.
28 struct RClass *cls; // MRBC_TT_CLASS, MRBC_TT_MODULE
29 struct RInstance *instance; // MRBC_TT_OBJECT
30 struct RProc *proc; // MRBC_TT_PROC
31 struct RArray *array; // MRBC_TT_ARRAY
32 struct RString *string; // MRBC_TT_STRING
33 struct RRange *range; // MRBC_TT_RANGE
34 struct RHash *hash; // MRBC_TT_HASH
35 struct RException *exception; // MRBC_TT_EXCEPTION
36 void *handle; // internal use only.
37 };
39
40
41
42//================================================================
43// getters
57#define mrbc_type(o) ((o).tt)
58#define mrbc_integer(o) ((o).i)
59#define mrbc_float(o) ((o).d)
60#define mrbc_symbol(o) ((o).sym_id)
61
62
63// make immediate values.
64#define mrbc_integer_value(n) ((mrbc_value){.tt = MRBC_TT_INTEGER, .i=(n)})
65#define mrbc_float_value(vm,n) ((mrbc_value){.tt = MRBC_TT_FLOAT, .d=(n)})
66#define mrbc_nil_value() ((mrbc_value){.tt = MRBC_TT_NIL})
67#define mrbc_true_value() ((mrbc_value){.tt = MRBC_TT_TRUE})
68#define mrbc_false_value() ((mrbc_value){.tt = MRBC_TT_FALSE})
69#define mrbc_bool_value(n) ((mrbc_value){.tt = (n)?MRBC_TT_TRUE:MRBC_TT_FALSE})
70#define mrbc_symbol_value(n) ((mrbc_value){.tt = MRBC_TT_SYMBOL, .sym_id=(n)})
71#define mrbc_immediate_value(...) MRBC_arg_choice(__VA_ARGS__, mrbc_immediate_value2, mrbc_immediate_value1) (__VA_ARGS__)
72#define mrbc_immediate_value1(type) \
73 ((mrbc_value){.tt=type}) // internal use only.
74#define mrbc_immediate_value2(type, v2) \
75 ((mrbc_value){.tt=type, v2}) // internal use only.
76
77
78
79//================================================================
80// mrbc_value setters
81static inline void mrbc_set_integer(mrbc_value *p, mrbc_int_t n)
82{
84 p->i = n;
85}
86
87static inline void mrbc_set_float(mrbc_value *p, mrbc_float_t d)
88{
89 p->tt = MRBC_TT_FLOAT;
90 p->d = d;
91}
92
93static inline void mrbc_set_nil(mrbc_value *p)
94{
95 p->tt = MRBC_TT_NIL;
96}
97
98static inline void mrbc_set_true(mrbc_value *p)
99{
100 p->tt = MRBC_TT_TRUE;
101}
102
103static inline void mrbc_set_false(mrbc_value *p)
104{
105 p->tt = MRBC_TT_FALSE;
106}
107
108static inline void mrbc_set_bool(mrbc_value *p, int n)
109{
110 p->tt = n ? MRBC_TT_TRUE: MRBC_TT_FALSE;
111}
112
113static inline void mrbc_set_symbol(mrbc_value *p, mrbc_sym sym_id)
114{
115 p->tt = MRBC_TT_SYMBOL;
116 p->sym_id = sym_id;
117}
118
119static inline void mrbc_set_tt(mrbc_value *p, mrbc_vtype type) // internal use only.
120{
121 p->tt = type;
122}
static void mrbc_set_nil(mrbc_value *p)
Definition boxing_no.h:93
static void mrbc_set_symbol(mrbc_value *p, mrbc_sym sym_id)
Definition boxing_no.h:113
static void mrbc_set_tt(mrbc_value *p, mrbc_vtype type)
Definition boxing_no.h:119
static void mrbc_set_bool(mrbc_value *p, int n)
Definition boxing_no.h:108
static void mrbc_set_float(mrbc_value *p, mrbc_float_t d)
Definition boxing_no.h:87
struct RObject mrbc_value
Value object. Default version.
static void mrbc_set_true(mrbc_value *p)
Definition boxing_no.h:98
static void mrbc_set_false(mrbc_value *p)
Definition boxing_no.h:103
static void mrbc_set_integer(mrbc_value *p, mrbc_int_t n)
Definition boxing_no.h:81
Array object.
Definition c_array.h:43
Class object.
Definition class.h:87
Exception object.
Definition error.h:48
Hash object.
Definition c_hash.h:42
Instance object.
Definition class.h:179
Value object. Default version.
Definition boxing_no.h:19
struct RString * string
Definition boxing_no.h:32
struct RProc * proc
Definition boxing_no.h:30
struct RException * exception
Definition boxing_no.h:35
struct RInstance * instance
Definition boxing_no.h:29
mrbc_sym sym_id
Definition boxing_no.h:26
struct RHash * hash
Definition boxing_no.h:34
void * handle
Definition boxing_no.h:36
mrbc_float_t d
Definition boxing_no.h:24
mrbc_vtype tt
Definition boxing_no.h:20
struct RBasic * obj
Definition boxing_no.h:27
struct RClass * cls
Definition boxing_no.h:28
mrbc_int_t i
Definition boxing_no.h:22
struct RArray * array
Definition boxing_no.h:31
struct RRange * range
Definition boxing_no.h:33
Proc object.
Definition c_proc.h:43
Range object.
Definition c_range.h:42
String object.
Definition c_string.h:49
float mrbc_float_t
Definition value.h:52
int32_t mrbc_int_t
Definition value.h:47
int16_t mrbc_sym
mruby/c symbol ID
Definition value.h:62
mrbc_vtype
Definition value.h:69
@ MRBC_TT_FALSE
FalseClass.
Definition value.h:82
@ MRBC_TT_SYMBOL
Symbol.
Definition value.h:89
@ MRBC_TT_FLOAT
Float.
Definition value.h:88
@ MRBC_TT_INTEGER
Integer.
Definition value.h:86
@ MRBC_TT_TRUE
TrueClass.
Definition value.h:85
@ MRBC_TT_NIL
NilClass.
Definition value.h:81