Debug information for enumerator values
Iain Buclaw
ibuclaw at ubuntu.com
Tue Sep 17 08:48:07 PDT 2013
On 17 September 2013 10:52, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
> I've implemented this in gdc.
>
> https://github.com/D-Programming-GDC/GDC/commit/021dda8feaba282fec60600729ba8abc2c64cf81
>
>
Now done the same for manifest constants.
https://github.com/D-Programming-GDC/GDC/commit/6b40c481068530374abb0819b80c7d2ef09072fd
---
enum A { a = 42, b = 45 }
enum foo = A.a;
void main()
{
enum bar = A.b;
enum baz = &main;
return;
}
--
(gdb) print 'test.foo'
$1 = enum.A.a
(gdb) print bar
$2 = enum.A.b
(gdb) print baz
$3 = (void (* const)(void)) 0x402a00 <D main>
(gdb) p (int)bar
$4 = 45
Note that these values are purely in the debug code only - they are
not addressable in memory, and are not emitted in non-debug object
files/binaries - meaning there is no bloat added.
(gdb) p &'test.foo'
Can't take address of "test.foo" which isn't an lvalue.
(gdb) p &baz
Can't take address of "baz" which isn't an lvalue.
Hope this helps those who use CTFE a lot. ;-)
--
Iain Buclaw
*(p < e ? p++ : p) = (c & 0x0f) + '0';
More information about the Digitalmars-d
mailing list