summaryrefslogtreecommitdiff
path: root/i/marvin/src/interpreter
diff options
context:
space:
mode:
authorhaller2006-05-21 20:14:02 +0000
committerhaller2006-05-21 20:14:02 +0000
commit080f4918a072c8677c52d33eda2c32d087889209 (patch)
treeb3603fcfde2f9ee310e4d9e51624dc49dda61a84 /i/marvin/src/interpreter
parentf04316bb1b0bab00bd08a355ca0e3d0ab996ec4a (diff)
* Ajout d'une fonction exists dans Interpreter (Ni)
* Patch de InterpreterParser::call, vérifie que la fonction _postcall existe avant d'essayer de la lancer * Refonte de test_proto en utilisant un AnyList dans TestProto::send
Diffstat (limited to 'i/marvin/src/interpreter')
-rw-r--r--i/marvin/src/interpreter/interpreter.cc9
-rw-r--r--i/marvin/src/interpreter/interpreter.hh2
-rw-r--r--i/marvin/src/interpreter/interpreter_parser.cc3
3 files changed, 13 insertions, 1 deletions
diff --git a/i/marvin/src/interpreter/interpreter.cc b/i/marvin/src/interpreter/interpreter.cc
index a160002..bbf4767 100644
--- a/i/marvin/src/interpreter/interpreter.cc
+++ b/i/marvin/src/interpreter/interpreter.cc
@@ -54,6 +54,15 @@ Interpreter::add (const std::string &s, Func *f)
add (s, f, "");
}
+/// Test if a function is defined.
+bool
+Interpreter::exists (const std::string &s) const
+{
+ Funcs::const_iterator i;
+ i = funcs_.find (s);
+ return i != funcs_.end ();
+}
+
/// Call a function by name.
void
Interpreter::call (const std::string &s, const Args &a,
diff --git a/i/marvin/src/interpreter/interpreter.hh b/i/marvin/src/interpreter/interpreter.hh
index 1f6e688..3341ea1 100644
--- a/i/marvin/src/interpreter/interpreter.hh
+++ b/i/marvin/src/interpreter/interpreter.hh
@@ -69,6 +69,8 @@ class Interpreter
void add (const std::string &s, Func *f, const std::string &desc);
/// Add a function without description, Interpreter owns f.
void add (const std::string &s, Func *f);
+ /// Test if a function is defined.
+ bool exists (const std::string &s) const;
/// Call a function by name.
void call (const std::string &s, const Args &a,
bool dryrun = false) const;
diff --git a/i/marvin/src/interpreter/interpreter_parser.cc b/i/marvin/src/interpreter/interpreter_parser.cc
index 2a3f54b..f10e8ec 100644
--- a/i/marvin/src/interpreter/interpreter_parser.cc
+++ b/i/marvin/src/interpreter/interpreter_parser.cc
@@ -37,6 +37,7 @@ void
InterpreterParser::call (const std::string &id, AnyList &args)
{
interpreter_.call (id, args, dryrun_);
- interpreter_.call ("_postcall", AnyList (), dryrun_);
+ if (interpreter_.exists ("_postcall"))
+ interpreter_.call ("_postcall", AnyList (), dryrun_);
}