add 'macro' function… 修改了 ref 和 slice 函数 来进行 boundary check