@BsRuntimeMessage(name = "each", arity = 1) public BsObject each(BsObject self, BsObject... args) { if (!args[0].instanceOf(BsConst.Block)) { return BsError.typeError("each", args[0], BsConst.Proto); } BsObject value = BsConst.Nil; BsObject min = self.getSlot(MIN); BsObject max = self.getSlot(MAX); BsObject block = args[0]; while (Bs.asBoolean(min.invoke("<=", max))) { value = block.invoke("call", min); if (value.isBreakingContext()) { break; } min = min.invoke("next"); if (min.isError()) { value = min; break; } } return value; }
@BsRuntimeMessage( name = "--", arity = 1, types = {BsNumber.class}) public BsObject range(BsObject self, BsObject... args) { if (!args[0].instanceOf(BsConst.Number)) { return BsError.typeError("--", args[0], BsConst.Number); } return BsRange.clone(Bs.asNumber(self), Bs.asNumber(args[0])); }
@BsRuntimeMessage( name = "compareTo", arity = 1, aliases = {"<=>"}, types = {BsNumber.class}) public BsObject compareTo(BsObject self, BsObject... args) { if (!args[0].instanceOf(BsConst.Number)) { return BsError.typeError("compareTo", args[0], BsConst.String); } return subtract(self, args); }