Re: Typechecking integral types, retaining most access.

2002-08-22 Thread Walter Briscoe

In article 
[EMAIL PROTECTED] of Wed, 
21 Aug 2002 10:19:27 in , David Evans [EMAIL PROTECTED] writes

You could fake this by making them enum types:

# ifdef S_SPLINT_S
typedef enum { S_JUNK1 } seconds;
typedef enum { S_JUNK2 } minutes;
# else
typedef int seconds;
typedef int minutes;
# endif

If you used the -enumint flag, then you'll get the warnings you want for
this.

--- Dave

On Wed, 21 Aug 2002, Simon Hosie wrote:

 Was searching the archives and found the post about using 
/*@abstract@*/ in a typedef.  That's almost what I'm after, but it's 
much too obstructive for me.  What I'd like is something along these 
lines:

  typedef /*@abstract@*/ int seconds;
  typedef /*@abstract@*/ int minutes;

  void test(void)
  {
  seconds tod_sec = (seconds)5;   // legal
  minutes tod_min = (minutes)7;   // legal

  tod_min++;  // legal
  tod_sec = tod_min;  // illegal
  tod_min = 10;   // illegal

  if (tod_min  tod_sec)  // illegal
  ;
  }

 'tod_min = 10' may be clear in context, but it could easily be 
obfuscated by macros or less obvious variable names... so I'd be happy 
to see it trapped.



I suggest you look at Strong Type Checking introduced to the 
www.gimpel.com PC/Flexelint range in 1991.

I recently posted news:[EMAIL PROTECTED]
It shows errors given assignment type mismatches.

The following shows the controls and the types; The controls could be in 
an initialisation file or on a command line.

/*lint -strong(AXJ) -fhd Be fussy about typedef mismatches */

typedef signed long fruit;
typedef fruit orange;
typedef fruit banana;

Of course, those products cost money.
I am a BETA tester and no longer pay for my copies.
-- 
Walter Briscoe




Typechecking integral types, retaining most access.

2002-08-21 Thread Simon Hosie

Was searching the archives and found the post about using /*@abstract*/ in a typedef. 
 That's almost what I'm after, but it's much too obstructive for me.  What I'd like is 
something along these lines:

typedef /*@abstract*/ int seconds;
typedef /*@abstract*/ int minutes;

void test(void)
{
seconds tod_sec = (seconds)5;   // legal
minutes tod_min = (minutes)7;   // legal

tod_min++;  // legal
tod_sec = tod_min;  // illegal
tod_min = 10;   // illegal

if (tod_min  tod_sec)  // illegal
;
}

'tod_min = 10' may be clear in context, but it could easily be obfuscated by macros or 
less obvious variable names... so I'd be happy to see it trapped.




Re: Typechecking integral types, retaining most access.

2002-08-21 Thread David Evans


You could fake this by making them enum types:

# ifdef S_SPLINT_S
typedef enum { S_JUNK1 } seconds;
typedef enum { S_JUNK2 } minutes;
# else
typedef int seconds;
typedef int minutes;
# endif

If you used the -enumint flag, then you'll get the warnings you want for
this.

--- Dave

On Wed, 21 Aug 2002, Simon Hosie wrote:

 Was searching the archives and found the post about using /*@abstract*/ in a 
typedef.  That's almost what I'm after, but it's much too obstructive for me.  What 
I'd like is something along these lines:

   typedef /*@abstract*/ int seconds;
   typedef /*@abstract*/ int minutes;

   void test(void)
   {
   seconds tod_sec = (seconds)5;   // legal
   minutes tod_min = (minutes)7;   // legal

   tod_min++;  // legal
   tod_sec = tod_min;  // illegal
   tod_min = 10;   // illegal

   if (tod_min  tod_sec)  // illegal
   ;
   }

 'tod_min = 10' may be clear in context, but it could easily be obfuscated by macros 
or less obvious variable names... so I'd be happy to see it trapped.