#49: debug autoeval issue

This commit is contained in:
Louis Rubet 2017-05-02 11:39:26 +02:00
parent fdb7c8bff8
commit fc4b4dfcd5
3 changed files with 10 additions and 8 deletions

View file

@ -213,9 +213,9 @@ static bool get_symbol(const string& entry, program& prog, string& remaining_ent
obj_len = sizeof(symbol)+1;
// allocate and set object
// symbol beginning with ' is not autoevaluated
symbol* new_obj = (symbol*)prog.allocate_back(obj_len, cmd_symbol);
new_obj->_auto_eval = false;
new_obj->set("", 0);
new_obj->set("", 0, false);
}
else
{
@ -228,9 +228,9 @@ static bool get_symbol(const string& entry, program& prog, string& remaining_ent
obj_len = sizeof(symbol)+naked_entry_len+1;
// allocate and set object
// symbol beginning with ' is not autoevaluated
symbol* new_obj = (symbol*)prog.allocate_back(obj_len, cmd_symbol);
new_obj->_auto_eval = false;
new_obj->set(entry.substr(1, naked_entry_len).c_str(), naked_entry_len);
new_obj->set(entry.substr(1, naked_entry_len).c_str(), naked_entry_len, false);
}
ret = true;
}
@ -255,9 +255,9 @@ static bool get_other(const string& entry, program& prog, string& remaining_entr
obj_len = sizeof(symbol)+naked_entry_len+1;
// allocate and set object
// symbol not beginning with ' is autoevaluated (ie is evaluated when pushed on stack)
symbol* new_obj = (symbol*)prog.allocate_back(obj_len, cmd_symbol);
new_obj->set(entry.c_str(), naked_entry_len);
new_obj->_auto_eval = true;
new_obj->set(entry.c_str(), naked_entry_len, true);
ret = true;
}

View file

@ -153,7 +153,7 @@ void type()
unsigned int string_size = strlen(cmd_type_string[type]);
unsigned int size = sizeof(symbol)+string_size+1;
symbol* sym = (symbol*)allocate_back(size, cmd_symbol);
sym->set(cmd_type_string[type], string_size);
sym->set(cmd_type_string[type], string_size, false);
}
void rpn_default()

View file

@ -319,9 +319,11 @@ struct oprogram : public object
struct symbol : public object
{
//
void set(const char* value, unsigned int len)
void set(const char* value, unsigned int len, bool auto_eval)
{
_type = cmd_symbol;
_auto_eval = auto_eval;
if (value != NULL)
{
if (len>0)