[med-svn] [cnrun] 22/25: WIP
andrei zavada
hmmr-guest at moszumanska.debian.org
Thu Nov 6 22:08:32 UTC 2014
This is an automated email from the git hooks/post-receive script.
hmmr-guest pushed a commit to branch WIP
in repository cnrun.
commit e0d710ea10c22021f28d0ed24ba3d596d2d55d5e
Author: andrei zavada <andrei.zavada at massivesolutions.eu>
Date: Wed Oct 8 20:06:45 2014 +0300
WIP
---
upstream/src/cnrun/cnrun.hh | 88 +++++++++++++++++++----------------
upstream/src/cnrun/commands.cc | 62 ++++++++++++------------
upstream/src/cnrun/interpreter.cc | 51 ++++++++++----------
upstream/src/cnrun/main.cc | 5 ++
upstream/src/libcn/model.hh | 5 ++
upstream/src/libstilton/libstilton.cc | 4 +-
6 files changed, 117 insertions(+), 98 deletions(-)
diff --git a/upstream/src/cnrun/cnrun.hh b/upstream/src/cnrun/cnrun.hh
index 86c4c0e..2bf3aaf 100644
--- a/upstream/src/cnrun/cnrun.hh
+++ b/upstream/src/cnrun/cnrun.hh
@@ -39,6 +39,12 @@ struct SInterpOptions
: list_units (false),
working_dir (".")
{}
+ SInterpOptions (const SInterpOptions& rv)
+ : cnrun::SModelOptions (rv),
+ list_units (rv.list_units),
+ working_dir (rv.working_dir),
+ scripts (rv.scripts)
+ {}
};
@@ -48,7 +54,7 @@ class CInterpreterShell
DELETE_DEFAULT_METHODS (CInterpreterShell)
public:
- CInterpreterShell (const SInterpOptions& options_);
+ CInterpreterShell (const SInterpOptions&);
~CInterpreterShell ();
SInterpOptions
@@ -85,46 +91,46 @@ class CInterpreterShell
values (move(rv.values))
{}
};
- using TArgs = const vector<SArg>;
- SCmdResult cmd_new_model( TArgs&);
- SCmdResult cmd_delete_model( TArgs&);
- SCmdResult cmd_import_nml( TArgs&);
- SCmdResult cmd_export_nml( TArgs&);
- SCmdResult cmd_reset_model( TArgs&);
- SCmdResult cmd_cull_deaf_synapses( TArgs&);
- SCmdResult cmd_describe_model( TArgs&);
- SCmdResult cmd_get_model_parameter( TArgs&);
- SCmdResult cmd_set_model_parameter( TArgs&);
- SCmdResult cmd_advance( TArgs&);
- SCmdResult cmd_advance_until( TArgs&);
-
- SCmdResult cmd_new_neuron( TArgs&);
- SCmdResult cmd_new_synapse( TArgs&);
- SCmdResult cmd_get_unit_properties( TArgs&);
- SCmdResult cmd_get_unit_parameter( TArgs&);
- SCmdResult cmd_set_unit_parameter( TArgs&);
- SCmdResult cmd_get_unit_vars( TArgs&);
- SCmdResult cmd_reset_unit( TArgs&);
-
- SCmdResult cmd_get_units_matching( TArgs&);
- SCmdResult cmd_get_units_of_type( TArgs&);
- SCmdResult cmd_set_matching_neuron_parameter( TArgs&);
- SCmdResult cmd_set_matching_synapse_parameter( TArgs&);
- SCmdResult cmd_revert_matching_unit_parameters( TArgs&);
- SCmdResult cmd_decimate( TArgs&);
- SCmdResult cmd_putout( TArgs&);
-
- SCmdResult cmd_new_tape_source( TArgs&);
- SCmdResult cmd_new_periodic_source( TArgs&);
- SCmdResult cmd_new_noise_source( TArgs&);
- SCmdResult cmd_get_sources( TArgs&);
- SCmdResult cmd_connect_source( TArgs&);
- SCmdResult cmd_disconnect_source( TArgs&);
-
- SCmdResult cmd_start_listen( TArgs&);
- SCmdResult cmd_stop_listen( TArgs&);
- SCmdResult cmd_start_log_spikes( TArgs&);
- SCmdResult cmd_stop_log_spikes( TArgs&);
+ using TArgs = vector<SArg>;
+ SCmdResult cmd_new_model( const TArgs&);
+ SCmdResult cmd_delete_model( const TArgs&);
+ SCmdResult cmd_import_nml( const TArgs&);
+ SCmdResult cmd_export_nml( const TArgs&);
+ SCmdResult cmd_reset_model( const TArgs&);
+ SCmdResult cmd_cull_deaf_synapses( const TArgs&);
+ SCmdResult cmd_describe_model( const TArgs&);
+ SCmdResult cmd_get_model_parameter( const TArgs&);
+ SCmdResult cmd_set_model_parameter( const TArgs&);
+ SCmdResult cmd_advance( const TArgs&);
+ SCmdResult cmd_advance_until( const TArgs&);
+
+ SCmdResult cmd_new_neuron( const TArgs&);
+ SCmdResult cmd_new_synapse( const TArgs&);
+ SCmdResult cmd_get_unit_properties( const TArgs&);
+ SCmdResult cmd_get_unit_parameter( const TArgs&);
+ SCmdResult cmd_set_unit_parameter( const TArgs&);
+ SCmdResult cmd_get_unit_vars( const TArgs&);
+ SCmdResult cmd_reset_unit( const TArgs&);
+
+ SCmdResult cmd_get_units_matching( const TArgs&);
+ SCmdResult cmd_get_units_of_type( const TArgs&);
+ SCmdResult cmd_set_matching_neuron_parameter( const TArgs&);
+ SCmdResult cmd_set_matching_synapse_parameter( const TArgs&);
+ SCmdResult cmd_revert_matching_unit_parameters( const TArgs&);
+ SCmdResult cmd_decimate( const TArgs&);
+ SCmdResult cmd_putout( const TArgs&);
+
+ SCmdResult cmd_new_tape_source( const TArgs&);
+ SCmdResult cmd_new_periodic_source( const TArgs&);
+ SCmdResult cmd_new_noise_source( const TArgs&);
+ SCmdResult cmd_get_sources( const TArgs&);
+ SCmdResult cmd_connect_source( const TArgs&);
+ SCmdResult cmd_disconnect_source( const TArgs&);
+
+ SCmdResult cmd_start_listen( const TArgs&);
+ SCmdResult cmd_stop_listen( const TArgs&);
+ SCmdResult cmd_start_log_spikes( const TArgs&);
+ SCmdResult cmd_stop_log_spikes( const TArgs&);
// vp
int verbose_threshold() const
diff --git a/upstream/src/cnrun/commands.cc b/upstream/src/cnrun/commands.cc
index c67c032..2da9c5a 100644
--- a/upstream/src/cnrun/commands.cc
+++ b/upstream/src/cnrun/commands.cc
@@ -35,12 +35,12 @@ inline const char* es(int x) { return (x == 1) ? "" : "s"; }
#define CMD_PROLOG(N, F) \
CInterpreterShell::SCmdResult R; \
if ( aa.size() != N ) { \
- vp( 0, F"() takes %d arg%s, called with %zu", N, es(N), aa.size()); \
+ vp( 0, F"() takes %d arg%s, called with %zu\n", N, es(N), aa.size()); \
return R.result = TCmdResult::bad_arity, move(R); \
} \
const string& model = aa[0].vs; \
if ( models.find(model) == models.end() ) { \
- vp( 0, F"(): no such model: \"%s\"", model.c_str()); \
+ vp( 0, F"(): no such model: \"%s\"\n", model.c_str()); \
return R.result = TCmdResult::logic_error, move(R); \
} \
auto& M = *models.at(model);
@@ -52,7 +52,7 @@ cmd_new_model( const TArgs& aa)
{
CInterpreterShell::SCmdResult R;
if ( aa.size() != 1) {
- vp( 0, stderr, "new_model() takes 1 parameter, got %zu", aa.size());
+ vp( 0, stderr, "new_model() takes 1 parameter, called with %zu\n", aa.size());
return R.result = TCmdResult::bad_arity, move(R);
}
const string& model_name = aa[0].vs;
@@ -65,7 +65,7 @@ cmd_new_model( const TArgs& aa)
options.integration_dt_cap),
options);
if ( !M ) {
- vp( 0, stderr, "Failed to create model");
+ vp( 0, stderr, "Failed to create model\n");
return R.result = TCmdResult::system_error, move(R);
}
models[model_name] = M;
@@ -183,7 +183,7 @@ cmd_get_model_parameter( const TArgs& aa)
{
CInterpreterShell::SCmdResult R;
if ( aa.size() != 2 ) {
- vp( 0, "get_model_parameter() takes 2 args, called with %zu", aa.size());
+ vp( 0, "get_model_parameter() takes 2 args, called with %zu\n", aa.size());
return R.result = TCmdResult::bad_arity, move(R);
}
const string& model_name = aa[0].vs;
@@ -191,7 +191,7 @@ cmd_get_model_parameter( const TArgs& aa)
if ( model_name.size() != 0 ) {
auto Mi = models.find(model_name);
if ( Mi == models.end() ) {
- vp( 0, "get_model_parameter(): no such model: \"%s\"", model_name.c_str());
+ vp( 0, "get_model_parameter(): no such model: \"%s\"\n", model_name.c_str());
return R.result = TCmdResult::logic_error, move(R);
} else
M = Mi->second;
@@ -252,7 +252,7 @@ cmd_set_model_parameter( const TArgs& aa)
{
CInterpreterShell::SCmdResult R;
if ( aa.size() != 3 ) {
- vp( 0, "set_model_parameter() takes 3 args, called with %zu", aa.size());
+ vp( 0, "set_model_parameter() takes 3 args, called with %zu\n", aa.size());
return R.result = TCmdResult::bad_arity, move(R);
}
const string& model = aa[0].vs;
@@ -260,7 +260,7 @@ cmd_set_model_parameter( const TArgs& aa)
if ( model.size() != 0 ) {
auto Mi = models.find(model);
if ( Mi == models.end() ) {
- vp( 0, "set_model_parameter(): no such model: \"%s\"", model.c_str());
+ vp( 0, "set_model_parameter(): no such model: \"%s\"\n", model.c_str());
return R.result = TCmdResult::logic_error, move(R);
} else
M = Mi->second;
@@ -273,7 +273,7 @@ cmd_set_model_parameter( const TArgs& aa)
if ( parameter == "verbosely") {
int v;
if ( 1 != sscanf( value_s.c_str(), "%d", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `verbosely'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `verbosely'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.verbosely = v;
@@ -283,7 +283,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "integration_dt_min" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_min'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_min'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.integration_dt_min = v;
@@ -293,7 +293,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "integration_dt_max" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_max'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_max'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.integration_dt_max = v;
@@ -303,7 +303,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "integration_dt_cap" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_cap'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `integration_dt_cap'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.integration_dt_cap = v;
@@ -313,7 +313,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "listen_dt" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `listen_dt'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `listen_dt'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.listen_dt = v;
@@ -335,7 +335,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "sxf_start_delay" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `sxf_start_delay'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `sxf_start_delay'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.sxf_start_delay = v;
@@ -345,7 +345,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "sxf_period" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `sxf_period'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `sxf_period'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.sxf_period = v;
@@ -355,7 +355,7 @@ cmd_set_model_parameter( const TArgs& aa)
} else if ( parameter == "sdf_sigma" ) {
double v;
if ( 1 != sscanf( value_s.c_str(), "%lg", &v) ) {
- vp( 0, stderr, "set_model_parameter(): bad value for parameter `sdf_sigma'");
+ vp( 0, stderr, "set_model_parameter(): bad value for parameter `sdf_sigma'\n");
return R.result = TCmdResult::bad_value, move(R);
}
options.sdf_sigma = v;
@@ -378,7 +378,7 @@ cmd_advance( const TArgs& aa)
const double& time_to_go = aa[1].vg;
const double end_time = M.model_time() + time_to_go;
if ( M.model_time() > end_time ) {
- vp( 0, stderr, "advance(%g): Cannot go back in time (model is now at %g sec)", end_time, M.model_time());
+ vp( 0, stderr, "advance(%g): Cannot go back in time (model is now at %g sec)\n", end_time, M.model_time());
return R.result = TCmdResult::bad_value, move(R);
}
if ( !M.advance( end_time) ) {
@@ -398,7 +398,7 @@ cmd_advance_until( const TArgs& aa)
const double end_time = aa[1].vg;
if ( M.model_time() > end_time ) {
- vp( 0, stderr, "advance_until(%g): Cannot go back in time (model is now at %g sec)", end_time, M.model_time());
+ vp( 0, stderr, "advance_until(%g): Cannot go back in time (model is now at %g sec)\n", end_time, M.model_time());
return R.result = TCmdResult::bad_value, move(R);
}
if ( !M.advance( end_time) ) {
@@ -700,7 +700,7 @@ cmd_decimate( const TArgs& aa)
const string &pattern = aa[1].vs;
const double& frac = aa[2].vg;
if ( frac < 0. || frac > 1. ) {
- vp( 0, stderr, "decimate(%g): Decimation fraction outside [0..1]", frac);
+ vp( 0, stderr, "decimate(%g): Decimation fraction outside [0..1]\n", frac);
return R.result = TCmdResult::bad_value, move(R);
}
@@ -746,7 +746,7 @@ cmd_new_tape_source( const TArgs& aa)
&looping = aa[3].vd;
if ( M.source_by_id( name) ) {
- vp( 0, stderr, "new_tape_source(): A source named \"%s\" already exists", name.c_str());
+ vp( 0, stderr, "new_tape_source(): A source named \"%s\" already exists\n", name.c_str());
return R.result = TCmdResult::logic_error, move(R);
}
@@ -757,12 +757,12 @@ cmd_new_tape_source( const TArgs& aa)
if ( source )
M.add_source( source);
else {
- vp( 0, stderr, "new_tape_source(\"%s\", \"%s\"): Failed impossibly",
+ vp( 0, stderr, "new_tape_source(\"%s\", \"%s\"): Failed impossibly\n",
name.c_str(), fname.c_str());
return R.result = TCmdResult::system_error, move(R);
}
} catch (exception& ex) {
- vp( 0, stderr, "new_tape_source(\"%s\", \"%s\"): %s",
+ vp( 0, stderr, "new_tape_source(\"%s\", \"%s\"): %s\n",
name.c_str(), fname.c_str(), ex.what());
return R.result = TCmdResult::system_error, move(R);
}
@@ -786,7 +786,7 @@ cmd_new_periodic_source( const TArgs& aa)
&period = aa[4].vg;
if ( M.source_by_id( name) ) {
- vp( 0, stderr, "new_periodic_source(): A source named \"%s\" already exists", name.c_str());
+ vp( 0, stderr, "new_periodic_source(): A source named \"%s\" already exists\n", name.c_str());
return R.result = TCmdResult::logic_error, move(R);
}
@@ -798,12 +798,12 @@ cmd_new_periodic_source( const TArgs& aa)
if ( source )
M.add_source( source);
else {
- vp( 0, stderr, "new_periodic_source(\"%s\", \"%s\"): Failed impossibly",
+ vp( 0, stderr, "new_periodic_source(\"%s\", \"%s\"): Failed impossibly\n",
name.c_str(), fname.c_str());
return R.result = TCmdResult::system_error, move(R);
}
} catch (exception& ex) {
- vp( 0, stderr, "new_periodic_source(\"%s\", \"%s\"): %s",
+ vp( 0, stderr, "new_periodic_source(\"%s\", \"%s\"): %s\n",
name.c_str(), fname.c_str(), ex.what());
return R.result = TCmdResult::system_error, move(R);
}
@@ -828,7 +828,7 @@ cmd_new_noise_source( const TArgs& aa)
&distribution = aa[5].vs;
if ( M.source_by_id( name) ) {
- vp( 0, stderr, "new_noise_source(): A source named \"%s\" already exists", name.c_str());
+ vp( 0, stderr, "new_noise_source(): A source named \"%s\" already exists\n", name.c_str());
return R.result = TCmdResult::logic_error, move(R);
}
@@ -838,12 +838,12 @@ cmd_new_noise_source( const TArgs& aa)
if ( source )
M.add_source( source);
else {
- vp( 0, stderr, "new_noise_source(\"%s\"): Failed impossibly",
+ vp( 0, stderr, "new_noise_source(\"%s\"): Failed impossibly\n",
name.c_str());
return R.result = TCmdResult::system_error, move(R);
}
} catch (exception& ex) {
- vp( 0, stderr, "new_noise_source(\"%s\"): %s",
+ vp( 0, stderr, "new_noise_source(\"%s\"): %s\n",
name.c_str(), ex.what());
return R.result = TCmdResult::system_error, move(R);
}
@@ -878,7 +878,7 @@ cmd_connect_source( const TArgs& aa)
&source = aa[3].vs;
C_BaseSource *S = M.source_by_id( source);
if ( !S ) {
- vp( 0, stderr, "connect_source(): Unknown source: \"%s\"", source.c_str());
+ vp( 0, stderr, "connect_source(): Unknown source: %s\n", source.c_str());
return R.result = TCmdResult::bad_id, move(R);
}
// cannot check whether units matching label indeed have a parameter so named
@@ -904,7 +904,7 @@ cmd_disconnect_source( const TArgs& aa)
&source = aa[3].vs;
C_BaseSource *S = M.source_by_id( source);
if ( !S ) {
- vp( 0, stderr, "disconnect_source(): Unknown source: \"%s\"", source.c_str());
+ vp( 0, stderr, "disconnect_source(): Unknown source: %s\n", source.c_str());
return R.result = TCmdResult::bad_id, move(R);
}
list<CModel::STagGroupSource> tags {{label, parm, S, CModel::STagGroup::TInvertOption::yes}};
@@ -969,7 +969,7 @@ cmd_start_log_spikes( const TArgs& aa)
CMD_PROLOG (2, "start_log_spikes")
if ( M.options.sxf_period <= 0. || M.options.sdf_sigma <= 0. )
- vp( 1, "SDF parameters not set up, will only log spike times");
+ vp( 1, "SDF parameters not set up, will only log spike times\n");
const string
&pattern = aa[1].vs;
diff --git a/upstream/src/cnrun/interpreter.cc b/upstream/src/cnrun/interpreter.cc
index 2f43fd0..9d8a5cf 100644
--- a/upstream/src/cnrun/interpreter.cc
+++ b/upstream/src/cnrun/interpreter.cc
@@ -26,6 +26,7 @@ extern "C" {
using namespace std;
using namespace cnrun;
+using stilton::str::sasprintf;
cnrun::CInterpreterShell::
CInterpreterShell (const SInterpOptions& options_)
@@ -115,15 +116,16 @@ extern "C"
int
host_fun( lua_State* L) // -> nargsout
{
- auto reperr = [&L] (const char* str)
+ size_t nargsin = lua_gettop(L) - 2; // the first two being, a CScoreAssistant* and opcode
+
+ auto this_p = (CInterpreterShell*)lua_touserdata( L, 1);
+
+ auto reperr = [&] (const char* str)
{
lua_pushboolean( L, false);
lua_pushfstring( L, str);
};
- size_t nargsin = lua_gettop(L) - 2; // the first two being, a CScoreAssistant* and opcode
-
- auto this_p = (CInterpreterShell*)lua_touserdata( L, 1);
if ( !this_p ) {
reperr( "Opaque shell blob object is NULL");
return 2;
@@ -131,34 +133,34 @@ host_fun( lua_State* L) // -> nargsout
const char* opcode = lua_tostring( L, 2);
- size_t argth = 2;
-
for ( auto& C : Commands )
if ( strcmp( opcode, C.id) == 0 ) {
- if ( nargsin - 2 != strlen(C.arg_sig) ) {
- reperr( stilton::str::sasprintf(
- "Bad arity in call to %s (expecting %zu arg(s), got %zu",
- opcode, strlen(C.arg_sig), nargsin - 2).c_str());
+ if ( nargsin != strlen(C.arg_sig) ) {
+ reperr( sasprintf( "Bad arity in call to %s (expecting %zu arg(s), got %zu",
+ opcode, strlen(C.arg_sig), nargsin).c_str());
return 2;
}
// we don't accept arrays from lua yet
CInterpreterShell::TArgs args;
- while ( ++argth < nargsin ) {
+ size_t argth = 0;
+ while ( ++argth <= nargsin ) {
CInterpreterShell::SArg A (0);
- A.type = C.arg_sig[argth-2];
+ A.type = C.arg_sig[argth-1];
switch ( A.type ) {
- case 's': A.vs = lua_tostring( L, argth); break;
- case 'd': A.vd = lua_tointeger( L, argth); break;
- case 'b': A.vd = lua_tointeger( L, argth); break;
- case 'g': A.vg = lua_tonumber( L, argth); break;
+ case 's': A.vs = lua_tostring( L, 2 + argth); break;
+ case 'd': A.vd = lua_tointeger( L, 2 + argth); break;
+ case 'b': A.vd = lua_tointeger( L, 2 + argth); break;
+ case 'g': A.vg = lua_tonumber( L, 2 + argth); break;
default:
throw "Fix type literals in SCmdDesc?";
}
+ args.push_back(A);
}
// return: ok result code, # of values pushed, value0, value1, ...; o
// non-ok result code, error string
+ this_p->vp( 5, "fun %s/%zu\n", C.id, args.size());
auto R = (this_p ->* C.fun)( args);
lua_settop( L, 0);
lua_pushboolean( L, true);
@@ -179,9 +181,8 @@ host_fun( lua_State* L) // -> nargsout
return 1 + 1 + 1;
}
}
- reperr( stilton::str::sasprintf(
- "Unrecognized function \"%s\"/%zu",
- opcode, nargsin - 2).c_str());
+ reperr( sasprintf( "Unrecognized function \"%s\"/%zu",
+ opcode, nargsin - 2).c_str());
return 2;
}
}
@@ -203,7 +204,7 @@ exec_script( const string& script_fname)
script_contents += b;
}
if ( script_contents.size() == 0 ) {
- vp( 0, "%s: empty file", script_fname.c_str());
+ vp( 0, "%s: empty file\n", script_fname.c_str());
return TScriptExecResult::file_error;
}
}
@@ -219,13 +220,13 @@ exec_script( const string& script_fname)
script_fname.c_str());
if ( ret1 ) {
const char* errmsg = lua_tostring( lua_state, -1);
- vp( 0, "%s: compilation failed: %s (%d)", script_fname.c_str(), errmsg, ret1);
+ vp( 0, "%s: compilation failed: %s (%d)\n", script_fname.c_str(), errmsg, ret1);
return TScriptExecResult::compile_error;
}
// 1c. put host_fun on stack
if ( !lua_checkstack( lua_state, 2) ) {
- vp( 0, "failed to grow stack for 2 elements");
+ vp( 0, "failed to grow stack for 2 elements\n");
return TScriptExecResult::stack_error;
}
@@ -239,7 +240,7 @@ exec_script( const string& script_fname)
1, // nargsout
0);
if ( call_result ) {
- vp( 0, "%s: script call failed (%d)", script_fname.c_str(), call_result);
+ vp( 0, "%s: script call failed (%d): %s\n", script_fname.c_str(), call_result, lua_tostring( lua_state, 1));
return TScriptExecResult::call_error;
}
@@ -252,9 +253,11 @@ int
cnrun::CInterpreterShell::
run()
{
- for ( const auto& S : options.scripts )
+ for ( const auto& S : options.scripts ) {
+ vp( 1, "Exec %s:\n", S.c_str());
if ( exec_script(S) != TScriptExecResult::ok )
return 1;
+ }
return 0;
}
diff --git a/upstream/src/cnrun/main.cc b/upstream/src/cnrun/main.cc
index a30c506..502c810 100644
--- a/upstream/src/cnrun/main.cc
+++ b/upstream/src/cnrun/main.cc
@@ -99,6 +99,11 @@ parse_opt( int key, char *arg, struct argp_state *state)
Q.scripts.emplace_back(arg);
break;
+ case ARGP_KEY_END:
+ if ( Q.scripts.empty() && !Q.list_units )
+ argp_usage (state);
+ break;
+
default:
return (error_t)ARGP_ERR_UNKNOWN;
}
diff --git a/upstream/src/libcn/model.hh b/upstream/src/libcn/model.hh
index 9f59be3..44ef9d1 100644
--- a/upstream/src/libcn/model.hh
+++ b/upstream/src/libcn/model.hh
@@ -89,6 +89,11 @@ struct SModelOptions {
sxf_start_delay (0.), sxf_period (0.), sdf_sigma (0.),
verbosely (1)
{}
+
+ SModelOptions (const SModelOptions& rv)
+ {
+ memmove(this, &rv, sizeof(SModelOptions));
+ }
};
diff --git a/upstream/src/libstilton/libstilton.cc b/upstream/src/libstilton/libstilton.cc
index a7f7073..6dba1ef 100644
--- a/upstream/src/libstilton/libstilton.cc
+++ b/upstream/src/libstilton/libstilton.cc
@@ -35,7 +35,7 @@ void
C_verprintf::
vp( int level, const char* fmt, ...) const
{
- if ( level > verbose_threshold() ) {
+ if ( level < verbose_threshold() ) {
va_list ap;
va_start (ap, fmt);
vprintf( fmt, ap);
@@ -47,7 +47,7 @@ void
C_verprintf::
vp( int level, FILE* f, const char* fmt, ...) const
{
- if ( level > verbose_threshold() ) {
+ if ( level < verbose_threshold() ) {
va_list ap;
va_start (ap, fmt);
vfprintf( f, fmt, ap);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/cnrun.git
More information about the debian-med-commit
mailing list