示例#1
0
  void Arguments::unshift(STATE, Object* val) {
    Tuple* tup = Tuple::create_dirty(state, total() + 1);

    tup->put(state, 0, val);

    for(uint32_t i = 0; i < total(); i++) {
      tup->put(state, i + 1, get_argument(i));
    }

    use_tuple(tup, total() + 1);
  }
示例#2
0
  void Arguments::unshift2(STATE, Object* one, Object* two) {
    Tuple* tup = Tuple::create_dirty(state, total() + 2);

    tup->put(state, 0, one);
    tup->put(state, 1, two);

    for(uint32_t i = 0; i < total(); i++) {
      tup->put(state, i + 2, get_argument(i));
    }

    use_tuple(tup, total() + 2);
  }
示例#3
0
  void Arguments::append(STATE, Array* ary) {
    Tuple* tup = Tuple::create_dirty(state, ary->size() + total());

    for(uint32_t i = 0; i < total(); i++) {
      tup->put(state, i, get_argument(i));
    }

    uint32_t n = total();
    for(native_int i = 0; i < ary->size(); i++, n++) {
      tup->put(state, n, ary->get(state, i));
    }

    use_tuple(tup, total() + ary->size());
  }
示例#4
0
  Object* Arguments::shift(STATE) {
    Object* first = arguments_[0];

    if(argument_container_) {
      Tuple* tup = Tuple::create_dirty(state, total() - 1);
      for(uint32_t i = 1; i < total_; i++) {
        tup->put(state, i - 1, get_argument(i));
      }

      use_tuple(tup, total_ - 1);
    } else {
      total_--;
      arguments_++;
    }

    return first;
  }
示例#5
0
 void use_array(Array* ary) {
   use_tuple(ary->tuple(), ary->size());
 }