summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorYuichi Nishiwaki <[email protected]>2013-08-04 01:08:11 -0700
committerYuichi Nishiwaki <[email protected]>2013-08-04 01:08:11 -0700
commitdd2ea59d61dad130a6811fffbd1817105b2f84f5 (patch)
treeb6cbb7e24cf15c01096641706725a8e13f6d9223 /include
parent94a6d8380f460c87f89870d6b71db2f262eacaf6 (diff)
downloadmruby-dd2ea59d61dad130a6811fffbd1817105b2f84f5.tar.gz
mruby-dd2ea59d61dad130a6811fffbd1817105b2f84f5.zip
add commentary to value representation
Diffstat (limited to 'include')
-rw-r--r--include/mruby/value.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/mruby/value.h b/include/mruby/value.h
index 48fca796d..c98028109 100644
--- a/include/mruby/value.h
+++ b/include/mruby/value.h
@@ -144,6 +144,14 @@ typedef struct mrb_value {
};
} mrb_value;
+/* value representation by nan-boxing:
+ * float : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
+ * object: 111111111111TTTT TTPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP
+ * int : 1111111111110000 1000000000000000 IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII
+ * sym : 1111111111110000 1010000000000000 SSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSS
+ * In order to get enough bit size to save TT, all pointers are shifted 2 bits
+ * in the right direction.
+ */
#define mrb_tt(o) (((o).value.ttt & 0xfc000)>>14)
#define mrb_mktt(tt) (0xfff00000|((tt)<<14))
#define mrb_type(o) ((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT)