From 16ea2da5a9a8b741e4c4cf2130030ee4fb7d58f4 Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Fri, 5 Mar 2010 17:07:19 +0000 Subject: [PATCH] changed expression evaluation: set() does not evaluate expressions, eval() does git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1654 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- apps/dsm/DSMCoreModule.cpp | 13 ++++++++++++- apps/dsm/DSMCoreModule.h | 1 + apps/dsm/DSMModule.cpp | 7 ++++++- apps/dsm/doc/dsm_syntax.txt | 3 +++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp index 9d8ec599..8df26d31 100644 --- a/apps/dsm/DSMCoreModule.cpp +++ b/apps/dsm/DSMCoreModule.cpp @@ -67,6 +67,7 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) { DEF_CMD("disableDTMFDetection", SCDisableDTMFDetection); DEF_CMD("set", SCSetAction); + DEF_CMD("eval", SCEvalAction); DEF_CMD("setVar", SCSetVarAction); DEF_CMD("var", SCGetVarAction); DEF_CMD("append", SCAppendAction); @@ -443,11 +444,21 @@ EXEC_ACTION_START(SCSetAction) { string var_name = (par1.length() && par1[0] == '$')? par1.substr(1) : par1; - sc_sess->var[var_name] = resolveVars(par2, sess, sc_sess, event_params, true); + sc_sess->var[var_name] = resolveVars(par2, sess, sc_sess, event_params); DBG("set $%s='%s'\n", var_name.c_str(), sc_sess->var[var_name].c_str()); } EXEC_ACTION_END; +CONST_ACTION_2P(SCEvalAction,'=', false); +EXEC_ACTION_START(SCEvalAction) { + string var_name = (par1.length() && par1[0] == '$')? + par1.substr(1) : par1; + + sc_sess->var[var_name] = resolveVars(par2, sess, sc_sess, event_params, true); + DBG("eval $%s='%s'\n", + var_name.c_str(), sc_sess->var[var_name].c_str()); +} EXEC_ACTION_END; + CONST_ACTION_2P(SCSetVarAction,'=', false); EXEC_ACTION_START(SCSetVarAction) { string var_name = resolveVars(par1, sess, sc_sess, event_params); diff --git a/apps/dsm/DSMCoreModule.h b/apps/dsm/DSMCoreModule.h index 0c3129ed..94fb1fe7 100644 --- a/apps/dsm/DSMCoreModule.h +++ b/apps/dsm/DSMCoreModule.h @@ -74,6 +74,7 @@ DEF_ACTION_2P(SCThrowAction); DEF_ACTION_1P(SCThrowOnErrorAction); DEF_ACTION_2P(SCSetAction); +DEF_ACTION_2P(SCEvalAction); DEF_ACTION_2P(SCAppendAction); DEF_ACTION_2P(SCSubStrAction); DEF_ACTION_1P(SCIncAction); diff --git a/apps/dsm/DSMModule.cpp b/apps/dsm/DSMModule.cpp index 8ad90155..cfc3aeb7 100644 --- a/apps/dsm/DSMModule.cpp +++ b/apps/dsm/DSMModule.cpp @@ -98,7 +98,12 @@ string resolveVars(const string ts, AmSession* sess, } switch(s[0]) { - case '$': return sc_sess->var[s.substr(1)]; + case '$': { + map::iterator it = sc_sess->var.find(s.substr(1)); + if (it != sc_sess->var.end()) + return it->second; + return ""; + } case '#': if (event_params) return (*event_params)[s.substr(1)]; diff --git a/apps/dsm/doc/dsm_syntax.txt b/apps/dsm/doc/dsm_syntax.txt index 567f9c6b..ff14c127 100644 --- a/apps/dsm/doc/dsm_syntax.txt +++ b/apps/dsm/doc/dsm_syntax.txt @@ -119,6 +119,9 @@ core actions: e.g. set($var="text"); set($var=$var2); set($var=#key) var($dstvar=srcvarname) e.g. var($dstvar=$var_counter) + eval($var=value) + evaluate expression (only simple binary + and - supported) + e.g. set($var=1+5); set($var=$var2); set($var=#key) append($var, value) e.g. append($var, "text"); append($var, #key); append($var, @select); append($var, $var2);