www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Cover handler for a statement or a block of statements.

reply vincent <vincent.risi gmail.com> writes:
Cover handler for a statement or a block of statements.

I would like to suggest a method for defining code statement
covering. Some examp1es of a cover are as follows :-
  - try ... finally - this is defined in dotnet as a using
  - try ... (catch)+
  - cursor save and display others ... restore saved cursor

a possible syntax -

  cover hourglass(Application &app)
  {
    Cursor save = app.cursor;
	app.cursor = HOURGLASS_CURSOR;
	~ code ~
	app.cursor = save;
  }

usage could be something like -

  void function(Application &app)
  {
    hourglass(app)
    {
      ... // code to be run by cover
    }
  }
Jun 08 2011
parent reply "Jonathan M Davis" <jmdavisProg gmx.com> writes:
On 2011-06-08 12:06, vincent wrote:
 Cover handler for a statement or a block of statements.
 
 I would like to suggest a method for defining code statement
 covering. Some examp1es of a cover are as follows :-
 - try ... finally - this is defined in dotnet as a using
 - try ... (catch)+
 - cursor save and display others ... restore saved cursor
 
 a possible syntax -
 
 cover hourglass(Application &app)
 {
 Cursor save = app.cursor;
 app.cursor = HOURGLASS_CURSOR;
 ~ code ~
 app.cursor = save;
 }
 
 usage could be something like -
 
 void function(Application &app)
 {
 hourglass(app)
 {
 ... // code to be run by cover
 }
 }

That would typically be done with either a struct with a destructor or with a scope statement. - Jonathan M Davis
Jun 08 2011
parent simendsjo <simen.endsjo pandavre.com> writes:
On 08.06.2011 21:09, Jonathan M Davis wrote:
 On 2011-06-08 12:06, vincent wrote:
 Cover handler for a statement or a block of statements.

 I would like to suggest a method for defining code statement
 covering. Some examp1es of a cover are as follows :-
 - try ... finally - this is defined in dotnet as a using
 - try ... (catch)+
 - cursor save and display others ... restore saved cursor

 a possible syntax -

 cover hourglass(Application&app)
 {
 Cursor save = app.cursor;
 app.cursor = HOURGLASS_CURSOR;
 ~ code ~
 app.cursor = save;
 }

 usage could be something like -

 void function(Application&app)
 {
 hourglass(app)
 {
 ... // code to be run by cover
 }
 }

That would typically be done with either a struct with a destructor or with a scope statement. - Jonathan M Davis

To give Jonathan's answer an example. import std.stdio; void main() { class Cursor { string name = "regular"; } class Application { private Cursor _cursor; property Cursor cursor() { return _cursor; } property void cursor(Cursor value) { writeln("setting cursor ", value.name); _cursor = value; } this() { _cursor = new Cursor(); } } auto app = new Application(); auto HOURGLASS_CURSOR = new Cursor(); HOURGLASS_CURSOR.name = "hourglass"; writeln("try/finally:"); auto save = app.cursor; try { app.cursor = HOURGLASS_CURSOR; writeln("code here"); } finally { app.cursor = save; } writeln("\nor scope(exit):"); { save = app.cursor; scope(exit) app.cursor = save; app.cursor = HOURGLASS_CURSOR; writeln("code here"); } } Outputs try/finally: setting cursor hourglass code here setting cursor regular or scope(exit): setting cursor hourglass code here setting cursor regular
Jun 08 2011