www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4937] New: std.bitmanip: Allow repeated (identical) bitfield declarations

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4937

           Summary: std.bitmanip: Allow repeated (identical) bitfield
                    declarations
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: ah08010-d yahoo.com


--- Comment #0 from Austin Hastings <ah08010-d yahoo.com> 2010-09-24 18:06:53
PDT ---
I'm trying to describe an opcode layout - the arrangement of bits used by a CPU
- and the resulting description is generally a union of bitfields:

opcode, displacement
opcode, register, register, register
opcode, constant
...etc

In my case, the opcode represents a common prefix, which leaves me declaring
something like this in D:

opcode, displacement
    "", register, register, register
    "", constant

I would prefer, for reasons of clarity, to be able to repeat the declaration of
opcode - the best comment is source code, as it were.

So I would like the bitmanip code to permit redeclaration of bitfields that are
identical in all respects.

That is, obviously the names are the same, but the field width, offset, and
type representation has to be the same as well.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 24 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4937


Andrei Alexandrescu <andrei metalanguage.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |andrei metalanguage.com
         AssignedTo|nobody puremagic.com        |andrei metalanguage.com


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 24 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4937


bearophile_hugs eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs eml.cc


--- Comment #1 from bearophile_hugs eml.cc 2010-09-24 18:46:51 PDT ---
See also bug 4425

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 24 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4937


Era Scarecrow <rtcvb32 yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rtcvb32 yahoo.com


--- Comment #2 from Era Scarecrow <rtcvb32 yahoo.com> 2012-07-31 19:11:09 PDT
---
 Also, I think I'm going to request that repeated bitfield definitions be
 allowed if they are identical - I'd like to redeclare "opcode" rather than "".
How would you tell them apart? If i know how you may want to call them, i may be able to make something. I can understand with registers, but still need some way to work with them. Perhaps as a set then?
 So I would like the bitmanip code to permit redeclaration of bitfields that
 are identical in all respects.
That is, obviously the names are the same, but the field width, offset, and
type representation has to be the same as well.
Maybe....? struct S { mixin(bitfields!( uint, "opcode", 4, uint, "register", 4, uint, "register", 4, uint, "register", 4 )); } and using the registers would have function signature like... struct Register { uint register_1; uint register_2; uint register_3; } //setters, likely can't be propery void register(uint reg1, uint reg2, uint reg3); void register(uint[] register ...); //maybe? void register(Register register); //getter ?? Register register() const; Or perhaps... struct S { mixin(bitfields!( uint, "opcode", 4, uint, "reg1", 4, uint, "reg2", 4, uint, "reg3", 4 )); mixin(sharedNameSet( "nameForGetterAndSetter", "struct name for returning/passing", "reg1", "reg2", "reg3" //named variables as a set )); //nameForGetterAndSetter's would be added here, perhaps as above. } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 31 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4937



--- Comment #3 from Andrei Alexandrescu <andrei erdani.com> 2013-02-26 08:58:34
PST ---
I think we're good as we are. OK to close?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 26 2013