www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7133] New: [tdpl] There should be no empty statement

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

           Summary: [tdpl] There should be no empty statement
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: andrei metalanguage.com



18:17:17 PST ---
The statement ";" should not exist. It is never needed, never useful, and in
most cases the compiler requires it to be replaced with '{}'.

Walter and I agreed on all of the above so ";" is not present in TDPL. It
should be slowly deprecated and ultimately removed from D. It is just junk in
the trunk.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 18 2011
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


Jonathan M Davis <jmdavisProg gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jmdavisProg gmx.com



PST ---
The one case that I'm aware of where some have argued for its value is labels.
e.g.

LABEL:;

Since labels require a statement, ; makes it so that you can you can use a
label without really having a statement. I'm not sure that that merits keeping
it however, since in every other use case that I can think of, it has no value.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 18 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133




PST ---
I didn't think that that worked, since {} isn't a statement (at least, as far
as I know, it isn't), but if it works, it's certainly better.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 18 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133




20:06:48 PST ---
{} is the empty statement in D.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 18 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133




PST ---
Is that different from C++? I thought that {} was just an empty scope without
any statements in it at all in both C/C++ and D.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 18 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


Stewart Gordon <smjg iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg iname.com
           Platform|Other                       |All
         OS/Version|Mac OS X                    |All
           Severity|normal                      |enhancement




 Is that different from C++? I thought that {} was just an empty scope without
 any statements in it at all in both C/C++ and D.
It is, but in 100% of cases the compiler can optimise away that empty scope and so it's equivalent to an empty statement. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 19 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


jakobovrum gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakobovrum gmail.com




 I didn't think that that worked, since {} isn't a statement (at least, as far
 as I know, it isn't), but if it works, it's certainly better.
It is indeed a statement, it's called a block statement, also in D: http://dlang.org/statement.html#BlockStatement -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 19 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


timon.gehr gmx.ch changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |timon.gehr gmx.ch




 The statement ";" should not exist. It is never needed, never useful, and in
 most cases the compiler requires it to be replaced with '{}'.
 
 Walter and I agreed on all of the above so ";" is not present in TDPL. It
 should be slowly deprecated and ultimately removed from D. It is just junk in
 the trunk.
I think it is useful. This looks odd: int i = 2; for({} i<2; i++){} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 19 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133





 I think it is useful. This looks odd:
 
     int    i = 2;
     for({} i<2; i++){}
The ; you're replacing there isn't a statement - it's something explicitly allowed by the ForStatement syntax. ForStatement: for (Initialize Testopt ; Incrementopt) ScopeStatement Initialize: ; NoScopeNonEmptyStatement -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 19 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug yahoo.com.au




 LABEL: {}
 
 is as good and marginally nicer.
Bear in mind that it only ever happens at the end of a block, so the next character is always a }. The existing label syntax needs to be retained for asm statements, though, since they don't have {}. asm { jmp done; done: ; } which is already ugly, and will look really silly when nude ; statements are gone. I wish we could get rid of that silly semicolon. In fact the oddity is that labels are considered to be statements, yet they don't end with a semicolon. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 24 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133




---

 In fact the oddity is that labels are considered to be statements, yet they
 don't end with a semicolon.
Block, if, while, do, for, foreach, switch, with, etc. Most types of statements don't end with a semicolon. Remember that the label statement is: Identifier : NoScopeStatement The following statement is a sub-statement of the label statement. It's not any more inconsistent than other statements with sub-statements. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 25 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7133


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED



02:23:17 PST ---
I've added a warning for empty statements, but left the ; after the label as
allowed.

https://github.com/D-Programming-Language/dmd/commit/39d850a65ea5766a7cbd7bbe2fc8ed8e784fcdee

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 29 2011