ささだです。

 Range リテラル (x..y) の評価順序が C の処理系によっては y, x になる場
合があるようなので、

 eval.c の rb_eval の NODE_DOT[23] の、

	result = rb_range_new(rb_eval(self, node->nd_beg),
			      rb_eval(self, node->nd_end),
			      nd_type(node) == NODE_DOT3);

 を

	VALUE beg = rb_eval(self, node->nd_beg);
	VALUE end = rb_eval(self, node->nd_end);
	result = rb_range_new(beg, end, nd_type(node) == NODE_DOT3);

 みたいにしませんか。

-- 
// SASADA Koichi at atdot dot net
//