mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-09 19:12:06 +00:00
added additional debug info to some formula functions, as a test of concept
This commit is contained in:
parent
423667731a
commit
040009ace8
@ -94,8 +94,8 @@ public:
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const map_location loc = convert_variant<location_callable>(args()[0]->evaluate(variables,fdb))->loc();
|
||||
variant items = args()[1]->evaluate(variables,fdb);
|
||||
const map_location loc = convert_variant<location_callable>(args()[0]->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"nearest_loc:location")))->loc();
|
||||
variant items = args()[1]->evaluate(variables,formula_debugger::add_debug_info(fdb,1,"nearest_loc:locations"));
|
||||
int best = 1000000;
|
||||
int best_i = -1;
|
||||
|
||||
@ -322,7 +322,7 @@ public:
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const map_location loc = convert_variant<location_callable>(args()[0]->evaluate(variables,fdb))->loc();
|
||||
const map_location loc = convert_variant<location_callable>(args()[0]->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"nearest_keep:location")))->loc();
|
||||
int best = 1000000;
|
||||
int best_i = -1;
|
||||
|
||||
@ -940,7 +940,7 @@ public:
|
||||
{}
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
variant res = args()[0]->evaluate(variables,fdb);
|
||||
variant res = args()[0]->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"unit_moves:unit_location"));
|
||||
std::vector<variant> vars;
|
||||
if(res.is_null()) {
|
||||
return variant(&vars);
|
||||
|
@ -73,7 +73,7 @@ public:
|
||||
{}
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& /*variables*/, formula_debugger */*fdb*/) const {
|
||||
variant execute(const formula_callable& /*variables*/, formula_debugger * /*fdb*/) const {
|
||||
std::vector<variant> res;
|
||||
std::vector<std::string> function_names = builtin_function_names();
|
||||
std::vector<std::string> more_function_names = symbols_->get_function_names();
|
||||
@ -223,7 +223,7 @@ public:
|
||||
{}
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const variant left = left_->evaluate(variables,fdb);
|
||||
const variant left = left_->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"left."));
|
||||
if(!left.is_callable()) {
|
||||
if(left.is_list()) {
|
||||
list_callable list_call(left);
|
||||
@ -235,7 +235,7 @@ private:
|
||||
}
|
||||
|
||||
dot_callable callable(variables, *left.as_callable());
|
||||
return right_->evaluate(callable,fdb);
|
||||
return right_->evaluate(callable,formula_debugger::add_debug_info(fdb,1,".right"));
|
||||
}
|
||||
|
||||
expression_ptr left_, right_;
|
||||
@ -289,8 +289,8 @@ public:
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const variant left = left_->evaluate(variables,fdb);
|
||||
const variant right = right_->evaluate(variables,fdb);
|
||||
const variant left = left_->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"left_OP"));
|
||||
const variant right = right_->evaluate(variables,formula_debugger::add_debug_info(fdb,1,"OP_right"));
|
||||
switch(op_) {
|
||||
case AND:
|
||||
return left.as_bool() == false ? left : right;
|
||||
|
@ -33,8 +33,41 @@ static lg::log_domain log_formula_debugger("ai/debug/formula");
|
||||
|
||||
namespace game_logic {
|
||||
|
||||
debug_info::debug_info()
|
||||
: arg_number_(-1),f_name_(""),valid_(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
debug_info::debug_info(int arg_number, const char *f_name, bool valid)
|
||||
: arg_number_(arg_number), f_name_(f_name), valid_(valid)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
debug_info::~debug_info()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const char* debug_info::name()
|
||||
{
|
||||
if (valid_ && (f_name_!=NULL) ) {
|
||||
return f_name_;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void debug_info::invalidate()
|
||||
{
|
||||
valid_ = false;
|
||||
}
|
||||
|
||||
|
||||
formula_debugger::formula_debugger()
|
||||
: counter_(0)
|
||||
: counter_(0), info_()
|
||||
{
|
||||
}
|
||||
|
||||
@ -44,12 +77,26 @@ formula_debugger::~formula_debugger()
|
||||
}
|
||||
|
||||
|
||||
void msg(int counter, const char *act, const char *name, const char *formula_str, const char *to="", const char *result = "")
|
||||
{
|
||||
DBG_FDB << "#" << counter << act << std::endl <<" \""<< name << "\"='" << formula_str << "' " << to << result << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void formula_debugger::add_debug_info(int arg_number, const char *f_name)
|
||||
{
|
||||
info_ = debug_info(arg_number,f_name, true);
|
||||
}
|
||||
|
||||
|
||||
variant formula_debugger::evaluate_arg_callback(const formula_expression &expression, const formula_callable &variables)
|
||||
{
|
||||
int counter = counter_++;
|
||||
DBG_FDB << "#" << counter <<": evaluating expression: " << std::endl << " \"" << expression.get_name() << "\"" << std::endl;
|
||||
debug_info i = info_;
|
||||
info_.invalidate();
|
||||
msg(counter," evaluating expression: ",i.name(),"");
|
||||
variant v = expression.execute(variables,this); //work-in-progress
|
||||
DBG_FDB << "#" << counter <<": evaluated expression: " << std::endl << " \"" << expression.get_name() << "\" to " << v.to_debug_string(NULL,true) << std::endl;
|
||||
msg(counter," evaluated expression: ",i.name(),""," to ",v.to_debug_string(NULL,true).c_str());
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -57,22 +104,24 @@ variant formula_debugger::evaluate_arg_callback(const formula_expression &expres
|
||||
variant formula_debugger::evaluate_formula_callback(const formula &f, const formula_callable &variables)
|
||||
{
|
||||
int counter = counter_++;
|
||||
DBG_FDB << "#" << counter <<": evaluating formula "<< std::endl << " \"" << f.str() << "\"" << std::endl;
|
||||
debug_info i = info_;
|
||||
info_.invalidate();
|
||||
msg(counter," evaluating formula: ",i.name(),f.str().c_str());
|
||||
variant v = f.execute(variables,this); //work-in-progress
|
||||
DBG_FDB << "#" << counter <<": evaluated formula "<< std::endl << " \"" << f.str() << "\" to " << v.to_debug_string(NULL,true) << std::endl;
|
||||
msg(counter," evaluated formula: ",i.name(),f.str().c_str()," to ",v.to_debug_string(NULL,true).c_str());
|
||||
return v;
|
||||
|
||||
}
|
||||
|
||||
|
||||
variant formula_debugger::evaluate_formula_callback(const formula &f)
|
||||
{
|
||||
int counter = counter_++;
|
||||
DBG_FDB << "#" << counter <<": evaluating formula without variables: "<<std::endl<<" \"" << f.str() << "\"" << std::endl;
|
||||
debug_info i = info_;
|
||||
info_.invalidate();
|
||||
msg(counter," evaluating formula without variables: ",i.name(),f.str().c_str());
|
||||
variant v = f.execute(this); //work-in-progress
|
||||
DBG_FDB << "#" << counter <<": evaluated formula without variables: "<<std::endl<<" \"" << f.str() << "\" to " << v.to_debug_string(NULL,true) << std::endl;
|
||||
msg(counter," evaluating formula without variables: ",i.name(),f.str().c_str(),v.to_debug_string(NULL,true).c_str());
|
||||
return v;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,21 +32,54 @@ class formula_expression;
|
||||
class formula_callable;
|
||||
class formula;
|
||||
|
||||
class debug_info {
|
||||
public:
|
||||
debug_info();
|
||||
debug_info(int arg_number, const char *f_name, bool valid);
|
||||
virtual ~debug_info();
|
||||
const char* name();
|
||||
void invalidate();
|
||||
private:
|
||||
int arg_number_;
|
||||
const char *f_name_;
|
||||
bool valid_;
|
||||
};
|
||||
|
||||
class formula_debugger {
|
||||
public:
|
||||
formula_debugger();
|
||||
|
||||
virtual ~formula_debugger();
|
||||
|
||||
|
||||
virtual void add_debug_info(int arg_number, const char *f_name);
|
||||
|
||||
|
||||
virtual variant evaluate_arg_callback(const formula_expression &expression, const formula_callable &variables);
|
||||
|
||||
|
||||
virtual variant evaluate_formula_callback(const formula &f, const formula_callable &variables);
|
||||
|
||||
|
||||
virtual variant evaluate_formula_callback(const formula &f);
|
||||
|
||||
|
||||
static formula_debugger* add_debug_info(formula_debugger *fdb, int arg_number, const char *f_name)
|
||||
{
|
||||
if (fdb==NULL) {
|
||||
return NULL;
|
||||
}
|
||||
fdb->add_debug_info(arg_number,f_name);
|
||||
return fdb;
|
||||
}
|
||||
|
||||
private:
|
||||
int counter_;
|
||||
debug_info info_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // end of namespace game_logic
|
||||
|
||||
#endif
|
||||
|
@ -715,7 +715,9 @@ public:
|
||||
{}
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
return variant(new location_callable(map_location(args()[0]->evaluate(variables,fdb).as_int()-1, args()[1]->evaluate(variables,fdb).as_int()-1)));
|
||||
return variant(new location_callable(map_location(
|
||||
args()[0]->evaluate(variables,formula_debugger::add_debug_info(fdb,0,"loc:x")).as_int()-1,
|
||||
args()[1]->evaluate(variables,formula_debugger::add_debug_info(fdb,1,"loc:y")).as_int()-1)));
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user