示例#1
0
  @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;
  }
示例#2
0
  @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]));
  }
示例#3
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);
  }