Thread overview
[Issue 2120] New: scope class assignment doesn't copy the whole class content
May 21, 2008
d-bugmail
May 21, 2008
d-bugmail
May 22, 2008
d-bugmail
May 22, 2008
d-bugmail
[Issue 2120] scope class spec unclear
May 22, 2008
d-bugmail
May 21, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2120

           Summary: scope class assignment doesn't copy the whole class
                    content
           Product: D
           Version: 1.030
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: davidl@126.com


Not sure if following is a bug. I need the semantic of backing up a class in
the stack.
class Scope
{
    int i;
    int j;
}

void func(Scope m)
{
    scope Scope save=m;
    m.i=4;
    assert(save.i==3);
}

void main()
{
    Scope t=new Scope;
    t.i=3;
    t.j=3;
    func(t);
}


-- 

May 21, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2120





------- Comment #1 from shro8822@vandals.uidaho.edu  2008-05-21 11:11 -------
I don't think this isn't a bug (unless I'm missing something again). In D classes use reference semantics and I don't /think/ that adding scope to the variable declaration changes this. Adding scope to the class declaration OTOH will (I think).

That said, I've never used scope so I may be off in the weeds.


-- 

May 22, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2120


bugzilla@digitalmars.com changed:

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




------- Comment #2 from bugzilla@digitalmars.com  2008-05-22 05:11 -------
Classes are by reference, not by value. This is by design, and the behavior you are seeing is typical reference semantics. Not a bug.


-- 

May 22, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2120


davidl@126.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |




------- Comment #3 from davidl@126.com  2008-05-22 05:48 -------
I can't find any use case of this in: http://www.digitalmars.com/d/2.0/class.html

maybe the spec should mention when a class type is not defined as 'scope', the instance declared with 'scope' keyword, and when a class type is defined as 'scope', the instance declared without 'scope' keyword, how the compiler will inteprete the semantic.

Clearfying that following code:
class Scope
{
}

void func()
{
   scope Scope t = new Scope(); // t is on the stack(or not) and it will be
deleted(or not) when exit the func scope. And any assignment of instance of
other Scope instance only means the reference assignment.
}


-- 

May 22, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2120


davidl@126.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|scope class assignment      |scope class spec unclear
                   |doesn't copy the whole class|
                   |content                     |




------- Comment #4 from davidl@126.com  2008-05-22 05:49 -------
umm, the bug is no longer about the assignment. the bug is about the spec.


--