WineDbg: command parsing

Eric Pouech eric.pouech at wanadoo.fr
Sat Feb 15 14:30:16 CST 2003


this patch simplifies a bit the rules. it moves the used expression 
freeing up to the command reduction rule.
btw, it improves the handling of expression in case of errors (which 
actually also get freed)

A+
-- 
Eric Pouech
-------------- next part --------------
Name:          wd_freeexpr
ChangeLog:     moved Expr freeing when translating a command (no longer done on each command which uses an expr)
License:       X11
GenDate:       2003/02/15 20:15:32 UTC
ModifiedFiles: programs/winedbg/dbg.y
AddedFiles:    
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winedbg/dbg.y,v
retrieving revision 1.6
diff -u -u -r1.6 dbg.y
--- programs/winedbg/dbg.y	11 Feb 2003 22:05:06 -0000	1.6
+++ programs/winedbg/dbg.y	15 Feb 2003 11:27:24 -0000
@@ -99,10 +99,10 @@
     | input line
     ;
 
-line: command
+line: command                   { DEBUG_FreeExprMem(); }
     | tEOL
     | tEOF                      { return 1; }
-    | error tEOL               	{ yyerrok; }
+    | error tEOL               	{ yyerrok; DEBUG_FreeExprMem(); }
     ;
 
 command:
@@ -148,8 +148,8 @@
     | tCOND tNUM expr tEOL	{ DEBUG_AddBPCondition($2, $3); }
     | tSOURCE pathname tEOL     { DEBUG_Parser($2); }
     | tSYMBOLFILE pathname tEOL	{ DEBUG_ReadSymbolTable($2, 0); }
-    | tSYMBOLFILE pathname tNUM tEOL	{ DEBUG_ReadSymbolTable($2, $3); }
-    | tWHATIS expr_addr tEOL	{ DEBUG_PrintType(&$2); DEBUG_FreeExprMem(); }
+    | tSYMBOLFILE pathname expr_value tEOL	{ DEBUG_ReadSymbolTable($2, $3); }
+    | tWHATIS expr_addr tEOL    { DEBUG_PrintType(&$2); }
     | tATTACH tNUM tEOL		{ DEBUG_Attach($2, FALSE, TRUE); }
     | tDETACH tEOL              { return DEBUG_Detach(); /* FIXME: we shouldn't return, but since we cannot simply clean the symbol table, exit debugger for now */ }
     | list_command
@@ -162,11 +162,11 @@
     | info_command
     | walk_command
     | run_command
     | noprocess_state
     ;
 
 set_command:
-      tSET lval_addr '=' expr_value tEOL { DEBUG_WriteMemory(&$2, $4); DEBUG_FreeExprMem(); }
+      tSET lval_addr '=' expr_value tEOL { DEBUG_WriteMemory(&$2, $4); }
     | tSET '+' tIDENTIFIER tEOL { DEBUG_DbgChannel(TRUE, NULL, $3); }
     | tSET '-' tIDENTIFIER tEOL { DEBUG_DbgChannel(FALSE, NULL, $3); }
     | tSET tIDENTIFIER '+' tIDENTIFIER tEOL { DEBUG_DbgChannel(TRUE, $2, $4); }
@@ -197,24 +198,21 @@
     | pathname ':' tNUM	       { $$.sourcefile = $1; $$.line = $3; }
     | tIDENTIFIER	       { DEBUG_GetFuncInfo( & $$, NULL, $1); }
     | pathname ':' tIDENTIFIER { DEBUG_GetFuncInfo( & $$, $1, $3); }
-    | '*' expr_addr	       { DEBUG_FindNearestSymbol( & $2.addr, FALSE, NULL, 0, & $$ );
-                                 DEBUG_FreeExprMem(); }
+    | '*' expr_addr	       { DEBUG_FindNearestSymbol( & $2.addr, FALSE, NULL, 0, & $$ ); }
     ;
 
 x_command:
-      tEXAM expr_addr tEOL     { DEBUG_ExamineMemory( &$2, 1, 'x'); DEBUG_FreeExprMem(); }
-    | tEXAM tFORMAT expr_addr tEOL  { DEBUG_ExamineMemory( &$3, $2>>8, $2&0xff );
- 				      DEBUG_FreeExprMem(); }
+      tEXAM expr_addr tEOL     { DEBUG_ExamineMemory( &$2, 1, 'x'); }
+    | tEXAM tFORMAT expr_addr tEOL  { DEBUG_ExamineMemory( &$3, $2>>8, $2&0xff ); }
     ;
 
 print_command:
-      tPRINT expr_addr tEOL    { DEBUG_Print( &$2, 1, 0, 0 ); DEBUG_FreeExprMem(); }
-    | tPRINT tFORMAT expr_addr tEOL { DEBUG_Print( &$3, $2 >> 8, $2 & 0xff, 0 );
- 				      DEBUG_FreeExprMem(); }
+      tPRINT expr_addr tEOL    { DEBUG_Print( &$2, 1, 0, 0 ); }
+    | tPRINT tFORMAT expr_addr tEOL { DEBUG_Print( &$3, $2 >> 8, $2 & 0xff, 0 ); }
     ;
 
 break_command:
-      tBREAK '*' expr_addr tEOL{ DEBUG_AddBreakpointFromValue( &$3 ); DEBUG_FreeExprMem(); }
+      tBREAK '*' expr_addr tEOL{ DEBUG_AddBreakpointFromValue( &$3 ); }
     | tBREAK identifier tEOL   { DEBUG_AddBreakpointFromId($2, -1); }
     | tBREAK identifier ':' tNUM tEOL  { DEBUG_AddBreakpointFromId($2, $4); }
     | tBREAK tNUM tEOL	       { DEBUG_AddBreakpointFromLineno($2); }
@@ -222,7 +220,7 @@
     ;
 
 watch_command:
-      tWATCH '*' expr_addr tEOL { DEBUG_AddWatchpoint( &$3, 1 ); DEBUG_FreeExprMem(); }
+      tWATCH '*' expr_addr tEOL { DEBUG_AddWatchpoint( &$3, 1 ); }
     | tWATCH identifier tEOL    { DEBUG_AddWatchpointFromId($2); }
     ;
 
@@ -230,13 +228,13 @@
       tINFO tBREAK tEOL         { DEBUG_InfoBreakpoints(); }
     | tINFO tCLASS tSTRING tEOL	{ DEBUG_InfoClass( $3 ); }
     | tINFO tSHARE tEOL		{ DEBUG_InfoShare(); }
-    | tINFO tMODULE expr_value tEOL   { DEBUG_DumpModule( $3 ); DEBUG_FreeExprMem(); }
+    | tINFO tMODULE expr_value tEOL   { DEBUG_DumpModule( $3 ); }
     | tINFO tREGS tEOL          { DEBUG_InfoRegisters(&DEBUG_context); }
-    | tINFO tSEGMENTS expr_value tEOL { DEBUG_InfoSegments( $3, 1 ); DEBUG_FreeExprMem(); }
+    | tINFO tSEGMENTS expr_value tEOL { DEBUG_InfoSegments( $3, 1 ); }
     | tINFO tSEGMENTS tEOL      { DEBUG_InfoSegments( 0, -1 ); }
     | tINFO tSTACK tEOL         { DEBUG_InfoStack(); }
     | tINFO tSYMBOL tSTRING tEOL{ DEBUG_InfoSymbols($3); }
-    | tINFO tWND expr_value tEOL{ DEBUG_InfoWindow( (HWND)$3 ); DEBUG_FreeExprMem(); }
+    | tINFO tWND expr_value tEOL{ DEBUG_InfoWindow( (HWND)$3 ); }
     | tINFO tLOCAL tEOL         { DEBUG_InfoLocals(); }
     | tINFO tDISPLAY tEOL       { DEBUG_InfoDisplay(); }
     ;
@@ -245,13 +243,13 @@
       tWALK tCLASS tEOL         { DEBUG_WalkClasses(); }
     | tWALK tMODULE tEOL        { DEBUG_WalkModules(); }
     | tWALK tWND tEOL           { DEBUG_WalkWindows( 0, 0 ); }
-    | tWALK tWND expr_value tEOL{ DEBUG_WalkWindows( (HWND)$3, 0 ); DEBUG_FreeExprMem(); }
+    | tWALK tWND expr_value tEOL{ DEBUG_WalkWindows( (HWND)$3, 0 ); }
     | tWALK tMAPS tEOL          { DEBUG_InfoVirtual(0); }
-    | tWALK tMAPS expr_value tEOL { DEBUG_InfoVirtual($3); DEBUG_FreeExprMem(); }
+    | tWALK tMAPS expr_value tEOL { DEBUG_InfoVirtual($3); }
     | tWALK tPROCESS tEOL       { DEBUG_WalkProcess(); }
     | tWALK tTHREAD tEOL        { DEBUG_WalkThreads(); }
     | tWALK tEXCEPTION tEOL     { DEBUG_WalkExceptions(DEBUG_CurrTid); }
-    | tWALK tEXCEPTION expr_value tEOL{ DEBUG_WalkExceptions($3); DEBUG_FreeExprMem(); }
+    | tWALK tEXCEPTION expr_value tEOL{ DEBUG_WalkExceptions($3); }
     ;
 
 run_command:


More information about the wine-patches mailing list