RE: [sv-ec] proposal for mantis #1382 - shallow copy

From: Rich, Dave <Dave_Rich_at_.....>
Date: Wed Apr 12 2006 - 12:32:26 PDT
Neil,

1. The current BNF for a class new does not allow arguments to be passed
when doing a shallow copy. That is why we thought the new method wasn't
supposed to be called.

2. There are handles to classes, events, virtual interfaces, and
covergroups. I would expect all of them to point to the original object
being copied when doing a shallow copy.

When you do

covergroup cg; ... endgroup
cg cg_inst = new;


What is stored in cg_inst? A handle to a covergroup instance.


Dave





> -----Original Message-----
> From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
Neil
> Korpusik
> Sent: Wednesday, April 12, 2006 11:33 AM
> To: Ryan, Ray
> Cc: sv-ec@eda.org
> Subject: Re: [sv-ec] proposal for mantis #1382 - shallow copy
> 
> Ray,
> 
> My comments are embedded below.
> 
> Neil
> 
> 
> 
> >
> >
------------------------------------------------------------------------
> >
> > Section 7.11 Assignment, renaming, and copying
> >
> > In 7.11, following the paragraph that begins:
> >
> >                 The last statement has *new* executing a second
time,
> > thus creating a new object p2, whose class properties are copied
from
> > p1. This is known as a /shallow copy/. ...
> >
> > ADD the new paragraph
> >
> >                 A /shallow copy/ executes in the following manner:
> >
> > 1.        An object of the class type being copied is allocated.
This
> > allocation shall not call the objects constructor or execute any
> > variable declaration initialization assignments.
> 
> [NK] Calling the class constructor can have side affects that occur
> outside of the
> instance of the object being constructed. This includes triggering
events,
> assigning values to variables, etc. Do we really want to say that
calling
> the
> new method during a shallow copy will not actually call the new
method? I
> think
> that a lot of people would find this rather confusing.
> 
> When the new method has arguments the values of those arguments may be
> used to
> assign values to class properties. These properties may then be used
by
> the new
> method to update variables outside of the class.
> 
> It seems to me that the new method should be called as the first step
of
> the creation of an object that specifies a shallow copy. It may be
> possible
> for implementations to optimize this step such that a minimal number
of
> operations are performed. For example, in situations where the
constructor
> only sets the values of class properties, the call to new can be
> eliminated
> since those property values will be over-written when the shallow copy
> takes
> place.
> 
> This implies that variable initialization assignments should also take
> place.
> 
> 
> >
> > 2.        All class properties, including the internal states uses
for
> > randomization and coverage are copied to the new object. Object
handles
> > are copied, this includes the object handles for covergroup objects
(See
> > clause 18). The internal states for randomization include the RNG
state,
> > the 'constraint_mode' status of constraints, the 'rand_mode' status
of
> > random variables, and the cyclic state of randc variables (See
clause
> 13).
> 
> [NK] Don't handles only refer to class objects? This proposal is
> introducing
> the notion of a handle to a covergroup.  I would expect each instance
of
> the class
> to have its own copy of any embedded covergoups. Using a shallow copy
> during the
> construction of the object shouldn't change that.
> 
> 
> >
> > 3.        A handle to the newly created object is assigned to the
> > variable on the left-hand side.
> >
> >  Note: A shallow copy does not create new coverage objects
(covergroup
> > instances). As a result, the properties of the new object are not
> covered.
> >
> >
> >
> > MODIFY the example (following the paragraph)
> >
> >               *class* A ;
> >
> >   *integer* j = 5;
> >
> > *endclass*
> >
> > *class* B ;
> >
> >   *integer* i = 1;
> >
> >   A a = *new*;
> >
> > *endclass
> >
> > **class *C extend A ;
> >
> > *  rand int *x;
> >
> > *  constraint *cst1 { x < 10; }
> >
> > *endclass*
> >
> > *function* *integer* test;
> >
> >   B b1 = *new*; // Create an object of class B
> >
> >   B b2 = *new* b1; // Create an object that is a copy of b1
> >
> >   C c1 = new; // Create an object of class C
> >
> >   A c2, c3; // Declare class variables (null value)
> >
> >   b2.i = 10; // i is changed in b2, but not in b1
> >
> >   b2.a.j = 50; // change a.j, shared by both b1 and b2
> >
> >   test = b1.i; // test is set to 1 (b1.i has not changed)
> >
> >   test = b1.a.j; // test is set to 50 (a.j has changed)
> >
> >   c1.x = 3;
> >
> >   c2 = c1;  // c2 refers to the same object as c1
> >
> >   c3 = new c2; // Creates a shallow copy of c1 (including property
x)
> >
> > *endfunction*
> >
> >
> >
> 
> --
> ---------------------------------------------------------------------
> Neil Korpusik                                     Tel: 408-720-4852
> Senior Staff Engineer                             Fax: 408-720-4850
> Frontend Technologies - ASICs & Processors (FTAP)
> Sun Microsystems
> email: neil.korpusik@sun.com
> ---------------------------------------------------------------------
> 
> 
Received on Wed Apr 12 12:32:41 2006

This archive was generated by hypermail 2.1.8 : Wed Apr 12 2006 - 12:32:45 PDT