[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Accessing .self() in constructor



Hi,
  I'm implementing a circular doubly-linked list in Ozone.  When a list
element is created I want to initialize the 'prev' and 'next' pointers to
point back to the object itself.

Now in straight java this would be:

class elt {
  elt prev, next;
  elt() {
    prev = this;
    next = this;
  }
}

And, if I understand things correctly, in Ozone this becomes:

class eltImpl extends OzoneObject implements elt {
  elt prev, next;
  elt() {
    prev = (elt)self();
    next = (elt)self();
  }
}

The problem is that the self() method accesses something called the state
(line 68 of OzoneObject.java).  That state is not initialized until after
the object is constructed.  (The env object is constructed line 81 of
ObjectSpace.java, but the state isn't created till line 86.)

Now, I think I can work around this in my code, so the following is just
speculation:

I was trying to figure out how to fix Ozone to handle this case correctly.
I can see a couple of solutions:
  -Make an 'OzoneConstructor' that is called after creating each object.
This would mean renaming the constructor of most ozone objects.
  -Modify the OzoneObject constructor so that it takes a reference that
allows it to set the state.  This would mean adding a constructor to all
ozone objects, even those that don't explicitly need one.
  - Modify the methods in OzoneObject so that if they are called when state
is null they work around the problem somehow (yeah, this might not work).

Any other suggestions?

\x/ill        :-}