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; }
TokenMap TokenMap::getChild() { return TokenMap(this); }
// 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;