RE: [sv-ec] disable class method

From: Arturo Salz <Arturo.Salz_at_.....>
Date: Wed Jul 18 2007 - 15:43:23 PDT
I agree with Steve:

- Disabling a method ought to disable all invocations of the task.

- Disabling a virtual method should be illegal.

	Arturo

-----Original Message-----
From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
Steven Sharp
Sent: Wednesday, July 18, 2007 11:35 AM
To: sv-ec@eda.org; danielm@aldec.com.pl
Subject: Re: [sv-ec] disable class method


>From: "danielm" <danielm@aldec.com.pl>

>I cannot found  in LRM  statements describing if "disable" is allowed
on
>class method (task) and how it should work.
> 
>I assume that if LRM doesn't forbid such usage so this is allowed, but
I
>still have doubts how it should work.

It is a task, so I agree that it would be allowed.  However, as with
other re-entrant tasks, it isn't very useful.  This is because of your
next question.


>1)
>Generally there are 2 possibilities. Disable can work per object(*) or
per
>class(**).

As specified in the LRM, it will disable all invocations of the task.
There is nothing special specified for class methods that changes this,
and passing a different 'this' argument does not make it a different
task.
Regardless of the object used to reference it, they are all calling the
same task.  I would expect the task name in a disable to be a static
reference, so you wouldn't even need to specify an object in the
disable.

I would expect the tasks in different specializations of a class to be
considered different tasks.  Since any static storage that they used
would
be distinct, I would expect them to be distinct for this purpose also.
This matches other tasks, where different instantiations of the same
task,
which therefore use different static storage, are distinct for
disabling.
The disabling mechanism was essentially static, and was left static when
automatic tasks were added to the language.


>2)
>Another question is what should happen if we try to disable method of
an
>non-existing object (below sample) - should it be runtime error(imho in
case
>we aprove disabling per object the it shoudl be runtime) or task called
in
>fork should be disabled in time 20 (this how it may work if we aprove
>disabling per class)?

If it would be legal to reference a static property this way, then it
should be legal to disable this way.  It is a static reference.  I would
also assume that you could reference without an object, with something
like "disable C::t", even for a task that is not a static method.


>3) 
>The simplest possibility is to try disable static task - because it can
be
>done with :: operator. There is no problem with null references, and
this
>obviously works per class. So maybe disabling should be allowed only
for
>static methods? and should disable all task being  currently in
progress

It would be best not to call it a "static task" if you mean "static
method".
A static task has static storage, and could be a static or non-static
member
of a class, or outside a class.  Conversely, a static method can be a
static
or automatic task.

Anyway, I agree that static methods are the simplest case, and I agree
with your description of how this would work.

As I mentioned above, if disabling non-static methods is allowed, I
would
expect it to work the same way as static methods.  Since disabling does
not require any access to any non-static members of the class, there is
no need for an object.  If this seems too confusing, your suggestion of
disallowing it for non-static methods may be a good idea.

Upon further thought, there is one situation where an object might get
involved, and that would be virtual methods.  The actual type of the
object might determine which implementation of the task would get
disabled
(i.e. the task declared in which base class).  This is so strange that I
would support making it illegal.


Steven Sharp
sharp@cadence.com


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jul 18 15:43:47 2007

This archive was generated by hypermail 2.1.8 : Wed Jul 18 2007 - 15:44:04 PDT