/* * oosupport.cc * * This file is part of NEST. * * Copyright (C) 2004 The NEST Initiative * * NEST is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * NEST is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NEST. If not, see <http://www.gnu.org/licenses/>. * */ /* SLI's data access functions */ #include "oosupport.h" #include "namedatum.h" #include "dictdatum.h" #include "dictstack.h" void OOSupportModule::init(SLIInterpreter *i) { i->createcommand("call", &callmemberfunction); } const std::string OOSupportModule::commandstring(void) const { return std::string("/oosupport /C++ ($Revision: 9952 $) provide-component /oosupport /SLI (1.2) require-component"); } const std::string OOSupportModule::name(void) const { return std::string("OOSupport"); } void OOSupportModule::CallMemberFunction::execute(SLIInterpreter *i) const { // call: dict key call -> unknown DictionaryDatum *dict = dynamic_cast<DictionaryDatum *>(i->OStack.pick(1).datum()); assert(dict != NULL); LiteralDatum *key = dynamic_cast<LiteralDatum *>(i->OStack.pick(0).datum()); assert(key != NULL); Token value=(*dict)->lookup(*key); if(value.datum() != NULL) { Token nt(new NameDatum(*key)); i->DStack->push(*dict); i->EStack.pop(); // never forget me i->EStack.push(i->baselookup(i->end_name)); i->EStack.push_move(nt); i->OStack.pop(2); } else i->raiseerror("UnknownMember"); }