- Enhanced internal variables framework (including read/save to
registry and typing)
- Finalized use of Windows' Console I/O interface (instead of Unix std
streams)
- Now handling registers as internal variables (they are no longer
seen as a specific type)
diff --git a/debugger/dbg.y b/debugger/dbg.y
index fea90c0..903c42e 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -25,7 +25,6 @@
static void issue_prompt(void);
static void mode_command(int);
-void flush_symbols(void);
int yylex(void);
int yyerror(char *);
@@ -34,7 +33,6 @@
%union
{
DBG_VALUE value;
- enum debug_regs reg;
char * string;
int integer;
struct list_id listing;
@@ -50,9 +48,8 @@
%token tFRAME tSHARE tCOND tDISPLAY tUNDISPLAY tDISASSEMBLE
%token tSTEPI tNEXTI tFINISH tSHOW tDIR tWHATIS
%token <string> tPATH
-%token <string> tIDENTIFIER tSTRING tDEBUGSTR
+%token <string> tIDENTIFIER tSTRING tDEBUGSTR tINTVAR
%token <integer> tNUM tFORMAT
-%token <reg> tREG
%token tSYMBOLFILE
%token tCHAR tSHORT tINT tLONG tFLOAT tDOUBLE tUNSIGNED tSIGNED
@@ -159,9 +156,7 @@
| walk_command
set_command:
- tSET tREG '=' expr_value tEOL { DEBUG_SetRegister( $2, $4 );
- DEBUG_FreeExprMem(); }
- | tSET lval_addr '=' expr_value tEOL { DEBUG_WriteMemory( &$2.addr, $4 );
+ tSET lval_addr '=' expr_value tEOL { DEBUG_WriteMemory( &$2, $4 );
DEBUG_FreeExprMem(); }
pathname:
@@ -313,11 +308,10 @@
expr { $$ = DEBUG_EvalExpr($1); }
expr_value:
- expr { DBG_VALUE value = DEBUG_EvalExpr($1);
- /* expr_value is typed as an integer */
- if (!value.addr.off ||
- !DEBUG_READ_MEM((void*)value.addr.off, &$$, sizeof($$)))
- $$ = 0; }
+ expr { DBG_VALUE value = DEBUG_EvalExpr($1);
+ /* expr_value is typed as an integer */
+ $$ = DEBUG_ReadMemory(&value); }
+
/*
* The expr rule builds an expression tree. When we are done, we call
* EvalExpr to evaluate the value of the expression. The advantage of
@@ -327,7 +321,7 @@
expr:
tNUM { $$ = DEBUG_ConstExpr($1); }
| tSTRING { $$ = DEBUG_StringExpr($1); }
- | tREG { $$ = DEBUG_RegisterExpr($1); }
+ | tINTVAR { $$ = DEBUG_IntVarExpr($1); }
| tIDENTIFIER { $$ = DEBUG_SymbolExpr($1); }
| expr OP_DRF tIDENTIFIER { $$ = DEBUG_StructPExpr($1, $3); }
| expr '.' tIDENTIFIER { $$ = DEBUG_StructExpr($1, $3); }
@@ -335,8 +329,8 @@
| tIDENTIFIER '(' expr ')' { $$ = DEBUG_CallExpr($1, 1, $3); }
| tIDENTIFIER '(' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 2, $3, $5); }
| tIDENTIFIER '(' expr ',' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 3, $3, $5, $7); }
- | tIDENTIFIER '(' expr ',' expr ',' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 3, $3, $5, $7, $9); }
- | tIDENTIFIER '(' expr ',' expr ',' expr ',' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 3, $3, $5, $7, $9, $11); }
+ | tIDENTIFIER '(' expr ',' expr ',' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 4, $3, $5, $7, $9); }
+ | tIDENTIFIER '(' expr ',' expr ',' expr ',' expr ',' expr ')' { $$ = DEBUG_CallExpr($1, 5, $3, $5, $7, $9, $11); }
| expr '[' expr ']' { $$ = DEBUG_BinopExpr(EXP_OP_ARR, $1, $3); }
| expr ':' expr { $$ = DEBUG_BinopExpr(EXP_OP_SEG, $1, $3); }
| expr OP_LOR expr { $$ = DEBUG_BinopExpr(EXP_OP_LOR, $1, $3); }
@@ -379,7 +373,7 @@
lvalue:
tNUM { $$ = DEBUG_ConstExpr($1); }
- | tREG { $$ = DEBUG_RegisterExpr($1); }
+ | tINTVAR { $$ = DEBUG_IntVarExpr($1); }
| tIDENTIFIER { $$ = DEBUG_SymbolExpr($1); }
| lvalue OP_DRF tIDENTIFIER { $$ = DEBUG_StructPExpr($1, $3); }
| lvalue '.' tIDENTIFIER { $$ = DEBUG_StructExpr($1, $3); }