On Apr 26, 2008, at 4:35 PM, Romain Tarti=E8re wrote:
> Hello FreeBSD hackers!
>
> I'm using avr-gcc from the ports and relying on the 0b prefix notation
> for binary constants, that is:
>
> foo =3D 0b00101010;
>
> Thanks to /usr/ports/devel/avr-gcc/files/patch-0b-constants this is
> possible :-)
>
> But I would like to use indent(1) to reformat contributed code
> automatically. Unfortunately, the 0b notation is not supported by that
> program, and the resulting code looks like this:
>
> foo =3D 0 b00101010;
>
> ... then compilation fails, bla bla bla...
>
> A quick look at indent(1) source code leaded me to tweak
> /usr/src/usr.bin/indent/lexi.c so that the 0b notation is supported
> (patch attached).
>
> I was so wondering how useful(less) it was to support this extension =
in
> FreeBSD indent(1) program. The version of gcc provided with the base
> system does not support this syntax, and AFAIK, only the avr-gcc port
> support this kind of constructs...
>
> So options are:
> - Add support for 0b notation to FreeBSD indent(1) (maybe requiring
> the use of an extra command line argument to support this =
feature);
> - Provide a patch for indent(1) that can be conditionally applied on
> the code when compiling the world;
> - Create another port, say avr-indent(1), that is not more than a=20
> copy
> of indent(1) with support of 0b constructs;
> - Do nothing: tweaking indent(1) for supporting this is so trivial
> that the few individuals interested in this can have their local
> version of indent.
>
> Can you please tell me your opinion about this?
>
> Thank you in advance,
> Romain
>
> PS: I also took a look at GNU indent (gindent(1) from the ports), but=20=
> it
> does not support 0b notation too.
>
> --=20
> Romain Tarti=E8re <romain@blogreen.org> =20
> http://romain.blogreen.org/
> pgp: 8DAB A124 0DA4 7024 F82A E748 D8E9 A33F FF56 FF43 (ID:=20
> 0xFF56FF43)
> (plain text =3Dnon-HTML=3D PGP/GPG encrypted/signed e-mail much=20
> appreciated)
>
Why not just have a base2.h file that is a list of defines such as:
#define b00000001 1
#define b00000010 2
Then you just use a b00 syntax, perfectly valid, and all's well=20
everywhere. Considering that the 0b syntax isn't valid without a patch=20=
that's only available with one compiler that's probably not regularly=20
used, it'd probably be much more maintainable and not require anyone=20
compiling the program to install that specific port with that specific=20=
patch.
But of course, writing software that deals directly with bit fiddling=20
is annoying without using binary representation.
The man page for indent does say "it has a 'forgiving' parser" so I=20
don't see why it can't just treat any token starting with a zero as=20
special, treat 0b01, 0x0A, 0f4 and 010 as a number regardless of the=20
base, even if it doesn't know the base.=
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"