Browse Source

More work on debugger.

Mark Sibly 9 years ago
parent
commit
c37d9bda3e
2 changed files with 47 additions and 26 deletions
  1. 9 2
      modules/monkey/native/bbdebug.h
  2. 38 24
      src/mx2new/translator_cpp.monkey2

+ 9 - 2
modules/monkey/native/bbdebug.h

@@ -128,14 +128,21 @@ struct bbDBFrame{
 struct bbDBBlock{
 struct bbDBBlock{
 	bbDBVar *locals;
 	bbDBVar *locals;
 	bbDBBlock():locals( bbDB::currentContext->locals ){
 	bbDBBlock():locals( bbDB::currentContext->locals ){
-		--bbDB::currentContext->stopped;
 	}
 	}
 	~bbDBBlock(){
 	~bbDBBlock(){
-		++bbDB::currentContext->stopped;
 		bbDB::currentContext->locals=locals;
 		bbDB::currentContext->locals=locals;
 	}
 	}
 };
 };
 
 
+struct bbDBLoop : public bbDBBlock{
+	bbDBLoop(){
+		--bbDB::currentContext->stopped;
+	}
+	~bbDBLoop(){
+		++bbDB::currentContext->stopped;
+	}
+};
+
 inline void bbDBStmt( int srcPos ){
 inline void bbDBStmt( int srcPos ){
 	bbDB::currentContext->frames->srcPos=srcPos;
 	bbDB::currentContext->frames->srcPos=srcPos;
 	if( bbDB::currentContext->stopped>=0 ) bbDB::stopped();
 	if( bbDB::currentContext->stopped>=0 ) bbDB::stopped();

+ 38 - 24
src/mx2new/translator_cpp.monkey2

@@ -769,8 +769,8 @@ Class Translator_CPP Extends Translator
 	Method BeginBlock()
 	Method BeginBlock()
 
 
 		BeginGCFrame()
 		BeginGCFrame()
-
 		If debug Emit( "bbDBBlock db_blk;" )
 		If debug Emit( "bbDBBlock db_blk;" )
+
 	End
 	End
 	
 	
 	Method EmitStmts( block:Block )
 	Method EmitStmts( block:Block )
@@ -991,24 +991,6 @@ Class Translator_CPP Extends Translator
 		Emit( "}" )
 		Emit( "}" )
 	End
 	End
 	
 	
-	Method EmitStmt( stmt:WhileStmt )
-	
-		Emit( "while("+Trans( stmt.cond )+"){" )
-		
-		EmitBlock( stmt.block )
-		
-		Emit( "}" )
-	End
-	
-	Method EmitStmt( stmt:RepeatStmt )
-	
-		If stmt.cond Emit( "do{" ) Else Emit( "for(;;){" )
-		
-		EmitBlock( stmt.block )
-		
-		If stmt.cond Emit( "}while(!("+Trans( stmt.cond )+"));" ) Else Emit( "}" )
-	End
-	
 	Method EmitStmt( stmt:SelectStmt )
 	Method EmitStmt( stmt:SelectStmt )
 	
 	
 		Local tvalue:=Trans( stmt.value ),head:=True
 		Local tvalue:=Trans( stmt.value ),head:=True
@@ -1035,12 +1017,45 @@ Class Translator_CPP Extends Translator
 		Emit( "}" )
 		Emit( "}" )
 	End
 	End
 	
 	
+	Method EmitStmt( stmt:WhileStmt )
+	
+		If debug
+			Emit( "{" )
+			Emit( "bbDBLoop db_loop;" )
+		Endif
+	
+		Emit( "while("+Trans( stmt.cond )+"){" )
+		
+		EmitBlock( stmt.block )
+		
+		Emit( "}" )
+		
+		If debug Emit( "}" )
+	End
+	
+	Method EmitStmt( stmt:RepeatStmt )
+	
+		If debug
+			Emit( "{" )
+			Emit( "bbDBLoop db_loop;" )
+		Endif
+	
+	
+		If stmt.cond Emit( "do{" ) Else Emit( "for(;;){" )
+		
+		EmitBlock( stmt.block )
+		
+		If stmt.cond Emit( "}while(!("+Trans( stmt.cond )+"));" ) Else Emit( "}" )
+		
+		If debug Emit( "}" )
+	End
+	
 	Method EmitStmt( stmt:ForStmt )
 	Method EmitStmt( stmt:ForStmt )
 	
 	
 		Emit( "{" )
 		Emit( "{" )
-		
-		BeginBlock()
-
+		BeginGCFrame()
+		If debug Emit( "bbDBLoop db_loop;" )
+	
 		EmitStmts( stmt.iblock )
 		EmitStmts( stmt.iblock )
 		
 		
 		Local cond:=Trans( stmt.cond )
 		Local cond:=Trans( stmt.cond )
@@ -1058,9 +1073,8 @@ Class Translator_CPP Extends Translator
 		EmitBlock( stmt.block )
 		EmitBlock( stmt.block )
 		
 		
 		Emit( "}" )
 		Emit( "}" )
-
-		EndBlock()		
 		
 		
+		EndGCFrame()
 		Emit( "}" )
 		Emit( "}" )
 	End
 	End