예제 #1
0
packToken default_new(packMap scope) {
  packMap& parent = scope->find("parent")->asMap();
  packList list = scope->find("arglist")->asList();

  // Intantiate a new Map:
  packToken instance = packMap(TokenMap(parent));

  // Call its init function if it exists:
  if (parent->map.count("__init__") && (*parent)["__init__"]->type == FUNC) {
    Function* func = (*parent)["__init__"].asFunc();
    Tuple tuple;
    // Copy the remaining arguments to this tuple:
    for (packToken& arg : list->list) {
      tuple.tuple.push_back(arg->clone());
    }

    Function::call(instance, func, &tuple, scope);
  }

  // Return it:
  return instance;
}
예제 #2
0
TokenMap TokenMap::getChild() {
  return TokenMap(this);
}
예제 #3
0
//
TokenMap& TokenMap::base_map() {
  static TokenMap _base_map(0);
  return _base_map;
}

TokenMap& TokenMap::default_global() {
  static TokenMap global_map(base_map());
  return global_map;
}

packToken TokenMap::default_constructor(TokenMap scope) {
  return scope["kwargs"];
}

TokenMap TokenMap::empty = TokenMap(&default_global());


/* * * * * Iterator functions * * * * */

Iterator*  Iterator::getIterator() {
  return static_cast<Iterator*>(this->clone());
}

/* * * * * TokenMap iterator implemented functions * * * * */

packToken* TokenMap::MapIterator::next() {
  if (it != map.end()) {
    last = packToken(it->first);
    ++it;
    return &last;