Thread overview
[Issue 3125] New: statement foreach semantic opApply should be tried if range funcs not satisfied
Jul 02, 2009
davidl@126.com
Jul 02, 2009
david
Jul 02, 2009
Sobirari Muhomori
Jul 03, 2009
Walter Bright
Jul 03, 2009
david
Jul 03, 2009
Walter Bright
Jul 03, 2009
Koroskin Denis
July 02, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125

           Summary: statement foreach semantic opApply should be tried if
                    range funcs not satisfied
           Product: D
           Version: 2.028
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: davidl@126.com


in ForeachStatement::semantic

should be:
        Dsymbol *shead = search_function(ad, idhead);
        if (!shead || !search_function(ad, idnext) || !search_function(ad,
Id::Fempty) )
        goto Lapply;

only try to apply range semantic when all prerequisite func available.

This makes easier to port legacy code to d2. People won't try to figure why it tries to call the func called empty/next which doesn't provided in my aggregate however the func named head had been accidentally added.

This could block tango CircularList

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125





--- Comment #1 from david <davidl@126.com>  2009-07-02 01:19:48 PDT ---
why not create something like IUnknown?
e.g. IRange

all classes inherited from IRange get the tag of being a range class.

This is less hackish of testting funcs.

IRange can enforces users to provide those funcs.
If there're some problems for optimization, IRange can still be an empty
interface for hinting the compiler or treated specially.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 02, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125





--- Comment #2 from Sobirari Muhomori <maxmo@pochta.ru>  2009-07-02 01:55:05 PDT ---
There was a discussion on introducing concepts to D.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 03, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com




--- Comment #3 from Walter Bright <bugzilla@digitalmars.com>  2009-07-02 17:47:19 PDT ---
I need an example, please, as I can't reproduce the problem.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 03, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125





--- Comment #4 from david <davidl@126.com>  2009-07-02 19:52:44 PDT ---
Here it is:

class c
{
        int head()
        {
                return 0;
        }
        int opApply(int delegate(ref int x) dg)
        {
                int i;
                i=3;
                dg(i);
                return 1;
        }
}

void main()
{
        c c;
        c= new c;
        foreach(m;c)
        {
                assert(m==3);
        }
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 03, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125


Jarrett Billingsley <jarrett.billingsley@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jarrett.billingsley@gmail.c
                   |                            |om




--- Comment #5 from Jarrett Billingsley <jarrett.billingsley@gmail.com>  2009-07-02 20:37:27 PDT ---
(In reply to comment #4)
> Here it is:
> 
> class c
> {
>         int head()
>         {
>                 return 0;
>         }
>         int opApply(int delegate(ref int x) dg)
>         {
>                 int i;
>                 i=3;
>                 dg(i);
>                 return 1;
>         }
> }
> 
> void main()
> {
>         c c;
>         c= new c;
>         foreach(m;c)
>         {
>                 assert(m==3);
>         }
> }

You fail it.  The error from this code is not related to the reported bug at all.  The lines

>         c c;
>         c= new c;

are illegal.  If you change it to

>         c c = new c;

it works fine in 2.029.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 03, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WORKSFORME




--- Comment #6 from Walter Bright <bugzilla@digitalmars.com>  2009-07-03 00:55:17 PDT ---
I'll close this for now as "WORKSFORME". Please reopen if there's a reproducible test case.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 03, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3125


Koroskin Denis <2korden@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |2korden@gmail.com




--- Comment #7 from Koroskin Denis <2korden@gmail.com>  2009-07-03 01:29:00 PDT ---
Perhaps, it is a duplicate of issue 2984

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