Apply PIE to nghttpx
[platform/upstream/nghttp2.git] / third-party / mruby / include / mruby / boxing_no.h
1 /*
2 ** mruby/boxing_no.h - unboxed mrb_value definition
3 **
4 ** See Copyright Notice in mruby.h
5 */
6
7 #ifndef MRUBY_BOXING_NO_H
8 #define MRUBY_BOXING_NO_H
9
10 #define MRB_FIXNUM_SHIFT 0
11 #define MRB_TT_HAS_BASIC MRB_TT_OBJECT
12
13 typedef struct mrb_value {
14   union {
15 #ifndef MRB_WITHOUT_FLOAT
16     mrb_float f;
17 #endif
18     void *p;
19     mrb_int i;
20     mrb_sym sym;
21   } value;
22   enum mrb_vtype tt;
23 } mrb_value;
24
25 #ifndef MRB_WITHOUT_FLOAT
26 #define mrb_float_pool(mrb,f) mrb_float_value(mrb,f)
27 #endif
28
29 #define mrb_ptr(o)      (o).value.p
30 #define mrb_cptr(o)     mrb_ptr(o)
31 #ifndef MRB_WITHOUT_FLOAT
32 #define mrb_float(o)    (o).value.f
33 #endif
34 #define mrb_fixnum(o)   (o).value.i
35 #define mrb_symbol(o)   (o).value.sym
36 #define mrb_type(o)     (o).tt
37
38 #define BOXNIX_SET_VALUE(o, ttt, attr, v) do {\
39   (o).tt = ttt;\
40   (o).attr = v;\
41 } while (0)
42
43 #define SET_NIL_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
44 #define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
45 #define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
46 #define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
47 #define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
48 #ifndef MRB_WITHOUT_FLOAT
49 #define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v))
50 #endif
51 #define SET_SYM_VALUE(r,v) BOXNIX_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
52 #define SET_OBJ_VALUE(r,v) BOXNIX_SET_VALUE(r, (((struct RObject*)(v))->tt), value.p, (v))
53 #define SET_CPTR_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_CPTR, value.p, v)
54 #define SET_UNDEF_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
55
56 #endif  /* MRUBY_BOXING_NO_H */