mirror of https://github.com/stella-emu/stella.git
"save" command now actually saves functions correctly: their definitions
go in the savefile, not their Expression pointer addresses :) Also, we no longer attempt to save the builtin functions. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@730 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
74efb7b66d
commit
e4172891d9
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Debugger.cxx,v 1.83 2005-08-16 18:34:12 stephena Exp $
|
||||
// $Id: Debugger.cxx,v 1.84 2005-08-20 18:19:51 urchlay Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "bspf.hxx"
|
||||
|
@ -116,7 +116,7 @@ Debugger::Debugger(OSystem* osystem)
|
|||
int res = YaccParser::parse(f.c_str());
|
||||
if(res != 0) cerr << "ERROR in builtin function!" << endl;
|
||||
Expression *exp = YaccParser::getResult();
|
||||
addFunction(builtin_functions[i][0], exp);
|
||||
addFunction(builtin_functions[i][0], builtin_functions[i][1], exp, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -988,8 +988,9 @@ cerr << "Debugger::resizeDialog()\n";
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Debugger::addFunction(string name, Expression *exp) {
|
||||
void Debugger::addFunction(string name, string definition, Expression *exp, bool builtin) {
|
||||
functions.insert(make_pair(name, exp));
|
||||
if(!builtin) functionDefs.insert(make_pair(name, definition));
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -1000,6 +1001,12 @@ void Debugger::delFunction(string name) {
|
|||
|
||||
functions.erase(name);
|
||||
delete iter->second;
|
||||
|
||||
FunctionDefMap::iterator def_iter = functionDefs.find(name);
|
||||
if(def_iter == functionDefs.end())
|
||||
return;
|
||||
|
||||
functionDefs.erase(name);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -1012,8 +1019,17 @@ Expression *Debugger::getFunction(string name) {
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
const FunctionMap Debugger::getFunctionMap() {
|
||||
return functions;
|
||||
string Debugger::getFunctionDef(string name) {
|
||||
FunctionDefMap::iterator iter = functionDefs.find(name);
|
||||
if(iter == functionDefs.end())
|
||||
return "";
|
||||
else
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
const FunctionDefMap Debugger::getFunctionDefMap() {
|
||||
return functionDefs;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Debugger.hxx,v 1.67 2005-08-10 12:23:42 stephena Exp $
|
||||
// $Id: Debugger.hxx,v 1.68 2005-08-20 18:19:52 urchlay Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef DEBUGGER_HXX
|
||||
|
@ -45,6 +45,7 @@ typedef multimap<string,string> ListFile;
|
|||
typedef ListFile::const_iterator ListIter;
|
||||
|
||||
typedef map<string,Expression*> FunctionMap;
|
||||
typedef map<string,string> FunctionDefMap;
|
||||
|
||||
#if 1
|
||||
enum {
|
||||
|
@ -82,7 +83,7 @@ typedef uInt16 (Debugger::*DEBUGGER_WORD_METHOD)();
|
|||
for all debugging operations in Stella (parser, 6502 debugger, etc).
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: Debugger.hxx,v 1.67 2005-08-10 12:23:42 stephena Exp $
|
||||
@version $Id: Debugger.hxx,v 1.68 2005-08-20 18:19:52 urchlay Exp $
|
||||
*/
|
||||
class Debugger : public DialogContainer
|
||||
{
|
||||
|
@ -129,10 +130,11 @@ class Debugger : public DialogContainer
|
|||
*/
|
||||
void quit();
|
||||
|
||||
void addFunction(string name, Expression *exp);
|
||||
void addFunction(string name, string def, Expression *exp, bool builtin=false);
|
||||
string getFunctionDef(string name);
|
||||
void delFunction(string name);
|
||||
Expression *getFunction(string name);
|
||||
const FunctionMap getFunctionMap();
|
||||
const FunctionDefMap getFunctionDefMap();
|
||||
const string builtinHelp();
|
||||
|
||||
/**
|
||||
|
@ -362,6 +364,7 @@ class Debugger : public DialogContainer
|
|||
static Debugger* myStaticDebugger;
|
||||
|
||||
FunctionMap functions;
|
||||
FunctionDefMap functionDefs;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: DebuggerParser.cxx,v 1.75 2005-08-05 02:28:21 urchlay Exp $
|
||||
// $Id: DebuggerParser.cxx,v 1.76 2005-08-20 18:19:52 urchlay Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "bspf.hxx"
|
||||
|
@ -1161,8 +1161,8 @@ bool DebuggerParser::saveScriptFile(string file) {
|
|||
|
||||
ofstream out(file.c_str());
|
||||
|
||||
FunctionMap funcs = debugger->getFunctionMap();
|
||||
for(FunctionMap::const_iterator i = funcs.begin(); i != funcs.end(); ++i)
|
||||
FunctionDefMap funcs = debugger->getFunctionDefMap();
|
||||
for(FunctionDefMap::const_iterator i = funcs.begin(); i != funcs.end(); ++i)
|
||||
out << "function " << i->first << " " << i->second << endl;
|
||||
|
||||
for(unsigned int i=0; i<watches.size(); i++)
|
||||
|
@ -1424,7 +1424,7 @@ void DebuggerParser::executeFunction() {
|
|||
|
||||
int res = YaccParser::parse(argStrings[1].c_str());
|
||||
if(res == 0) {
|
||||
debugger->addFunction(argStrings[0], YaccParser::getResult());
|
||||
debugger->addFunction(argStrings[0], argStrings[1], YaccParser::getResult());
|
||||
commandResult = "Added function " + argStrings[0];
|
||||
} else {
|
||||
commandResult = red("invalid expression");
|
||||
|
|
Loading…
Reference in New Issue