edu.vub.at.objects.mirrors
Class NATMirage

java.lang.Object
  extended byedu.vub.at.objects.natives.NATNil
      extended byedu.vub.at.objects.natives.NATByRef
          extended byedu.vub.at.objects.natives.NATCallframe
              extended byedu.vub.at.objects.natives.NATObject
                  extended byedu.vub.at.objects.mirrors.NATMirage
All Implemented Interfaces:
ATAbstractGrammar, ATConversions, ATExpression, ATNil, ATObject, ATStatement, java.io.Serializable

public class NATMirage
extends NATObject

A NATMirage is an object that forwards all meta-operations invoked upon it (at the java-level) to its designated mirror object. To cut off infinite meta-regress it also has magic_ variants of them which delegate to the default implementation. Mirages can currently only be created for 'objects', not for 'isolates'. Allowing isolates to be mirrored would require the introduction of 'isolate mirrors', since an isolate can only be copied if its mirror can be copied.

Author:
smostinc
See Also:
Serialized Form

Field Summary
protected  NATIntercessiveMirror mirror_
           
 
Fields inherited from class edu.vub.at.objects.natives.NATObject
_EQL_NAME_, _INI_NAME_, _IS_A_, _NEW_NAME_, _NO_STRIPES_, _SHARES_A_, _SUPER_NAME_, stripes_
 
Fields inherited from class edu.vub.at.objects.natives.NATCallframe
customFields_, lexicalParent_, stateVector_, variableMap_
 
Fields inherited from class edu.vub.at.objects.natives.NATNil
_INSTANCE_
 
Constructor Summary
  NATMirage(ATObject dynamicParent, ATObject lexicalParent, NATIntercessiveMirror mirror, boolean parentType)
           
  NATMirage(ATObject lexicalParent, NATIntercessiveMirror mirror)
           
protected NATMirage(FieldMap map, java.util.Vector state, java.util.LinkedList customFields, MethodDictionary methodDict, ATObject dynamicParent, ATObject lexicalParent, byte flags, ATStripe[] stripes, NATIntercessiveMirror mirror)
          Constructs a new ambienttalk mirage as a clone of an existing one.
  NATMirage(NATIntercessiveMirror mirror)
           
 
Method Summary
 ATMirror base_asMirror()
           
 boolean base_isMirror()
           
protected  NATObject createClone(FieldMap map, java.util.Vector state, java.util.LinkedList customFields, MethodDictionary methodDict, ATObject dynamicParent, ATObject lexicalParent, byte flags, ATStripe[] stripes)
           
(package private)  NATIntercessiveMirror getMirror()
           
 ATNil magic_addField(ATField field)
           
 ATNil magic_addMethod(ATMethod method)
           
 ATNil magic_assignField(ATObject receiver, ATSymbol selector, ATObject value)
           
 ATNil magic_assignVariable(ATSymbol name, ATObject value)
           
 NATMirage magic_clone()
           
 ATNil magic_defineField(ATSymbol name, ATObject value)
           
 ATObject magic_doesNotUnderstand(ATSymbol selector)
           
 ATObject magic_eval(ATContext ctx)
           
 ATObject magic_extend(ATClosure code)
           
 ATObject magic_getDynamicParent()
           
 ATField magic_getField(ATSymbol selector)
           
 ATObject magic_getLexicalParent()
           
 ATMethod magic_getMethod(ATSymbol selector)
           
 ATTable magic_getStripes()
           
 ATObject magic_invoke(ATObject receiver, ATSymbol selector, ATTable arguments)
           
 ATBoolean magic_isStripedWith(ATStripe stripe)
           
 ATTable magic_listFields()
           
 ATTable magic_listMethods()
           
 ATObject magic_lookup(ATSymbol selector)
           
 ATObject magic_newInstance(ATTable initargs)
           
 ATObject magic_pass()
           
 NATText magic_print()
           
 ATObject magic_quote(ATContext ctx)
           
 ATObject magic_resolve()
           
 ATBoolean magic_respondsTo(ATSymbol selector)
           
 ATObject magic_select(ATObject receiver, ATSymbol selector)
           
 ATObject magic_send(ATAsyncMessage message)
           
 ATNil magic_setMirror(NATIntercessiveMirror mirror)
           
 ATObject magic_share(ATClosure code)
           
 ATNil meta_addField(ATField field)
          Adds a field slot to an object at runtime.
 ATNil meta_addMethod(ATMethod method)
          When a method is added to an object, it is first checked whether the method does not already exist.
 ATNil meta_assignField(ATObject receiver, ATSymbol selector, ATObject value)
          meta_assignField is used to evaluate code of the form o.m := v.
 ATNil meta_assignVariable(ATSymbol name, ATObject value)
          Sets the value of the variable to the given value.
 ATObject meta_clone()
          When cloning an object, it is first determined whether the parent has to be shared by the clone, or whether the parent must also be cloned.
 ATNil meta_defineField(ATSymbol name, ATObject value)
          When a new field is defined in an object, it is important to check whether or not the field map is shared between clones or not.
 ATObject meta_doesNotUnderstand(ATSymbol selector)
          Called when a selection fails because the selector was not found along the dynamic delegation hierarchy.
 ATObject meta_eval(ATContext ctx)
          Evaluates a particular parsetree with respect to a particular context.
 ATObject meta_extend(ATClosure code)
          Create an is-a extension of the receiver object.
 ATObject meta_getDynamicParent()
          Objects have a classical dynamic parent chain created using extension primitives.
 ATObject meta_getLexicalParent()
          Objects also have a lexical parent which is the scope in which their definitions are nested.
 ATTable meta_getStripes()
          Return the stripes that were directly attached to this object.
 ATField meta_grabField(ATSymbol selector)
          Queries an object for one of its field slots.
 ATMethod meta_grabMethod(ATSymbol selector)
          Queries an object for one of its method slots.
 ATObject meta_invoke(ATObject receiver, ATSymbol selector, ATTable arguments)
          Invocations on an object ( o.m( args ) ) are handled by looking up the requested selector in the dynamic parent chain of the receiver.
 ATBoolean meta_isStripedWith(ATStripe stripe)
          Check whether one of the stripes of this object is a substripe of the given stripe.
 ATTable meta_listFields()
          Queries an object for a list of all of its field slots.
 ATTable meta_listMethods()
          Queries an object for a list of all of its method slots.
 ATObject meta_lookup(ATSymbol selector)
          This method is used to evaluate code of the form selector within the scope of this object.
 ATObject meta_newInstance(ATTable initargs)
          When new is invoked on an object's mirror, the object is first cloned by the mirror, after which the method named 'init' is invoked on it.
 ATObject meta_pass()
          An isolate object does not return a proxy representation of itself during serialization, hence it is serialized itself.
 NATText meta_print()
          Prints out the object in a human-readable way.
 ATObject meta_quote(ATContext ctx)
          Quotes a parsetree, in other words allows the parsetree to return itself instead of evaluating.
 ATObject meta_resolve()
          An isolate object represents itself upon deserialization.
 ATBoolean meta_respondsTo(ATSymbol selector)
          An ambienttalk object can respond to a message if a corresponding field or method exists either in the receiver object locally, or in one of its dynamic parents.
 ATObject meta_select(ATObject receiver, ATSymbol selector)
          meta_select is used to evaluate code of the form o.m.
 ATObject meta_send(ATAsyncMessage message)
          Sends a newly created message asynchronously by this object.
 ATObject meta_share(ATClosure code)
          Create a shares-a extension of the receiver object.
 
Methods inherited from class edu.vub.at.objects.natives.NATObject
asAmbientTalkObject, base_asActorMirror, base_asAsyncMessage, base_asBegin, base_asBoolean, base_asClosure, base_asDefinition, base_asExpression, base_asField, base_asHandler, base_asMessage, base_asMessageCreation, base_asMethod, base_asNumber, base_asSplice, base_asStatement, base_asStripe, base_asSymbol, base_asTable, base_asUnquoteSplice, base_isBoolean, base_isCallFrame, base_isClosure, base_isMethod, base_isSplice, base_isStripe, base_isSymbol, base_isTable, base_isUnquoteSplice, createChild, createIsolate, isAmbientTalkObject, isPrimitive, listTransitiveFields, listTransitiveMethods, meta_isCloneOf, meta_isRelatedTo
 
Methods inherited from class edu.vub.at.objects.natives.NATCallframe
getLocalCustomField, getLocalField, hasLocalCustomField, hasLocalField, hasLocalNativeField, setLocalField
 
Methods inherited from class edu.vub.at.objects.natives.NATNil
asJavaClassUnderSymbiosis, asJavaObjectUnderSymbiosis, asNativeBoolean, asNativeException, asNativeFarReference, asNativeFraction, asNativeNumber, asNativeNumeric, asNativeTable, asNativeText, base__opeql__opeql_, base_asFarReference, base_asVariableAssignment, base_init, base_isFarReference, base_isMessageCreation, base_isVariableAssignment, base_new, equals, isJavaObjectUnderSymbiosis, isNativeBoolean, isNativeField, isNativeText, meta_receive, readResolve, toString, writeReplace
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface edu.vub.at.objects.ATObject
base__opeql__opeql_, base_init, base_new, meta_receive
 
Methods inherited from interface edu.vub.at.objects.coercion.ATConversions
asJavaClassUnderSymbiosis, asJavaObjectUnderSymbiosis, asNativeBoolean, asNativeException, asNativeFarReference, asNativeFraction, asNativeNumber, asNativeNumeric, asNativeTable, asNativeText, base_asFarReference, base_asVariableAssignment, base_isFarReference, base_isMessageCreation, base_isVariableAssignment, isJavaObjectUnderSymbiosis, isNativeBoolean, isNativeField, isNativeText
 

Field Detail

mirror_

protected NATIntercessiveMirror mirror_
Constructor Detail

NATMirage

public NATMirage(NATIntercessiveMirror mirror)

NATMirage

public NATMirage(ATObject lexicalParent,
                 NATIntercessiveMirror mirror)

NATMirage

public NATMirage(ATObject dynamicParent,
                 ATObject lexicalParent,
                 NATIntercessiveMirror mirror,
                 boolean parentType)

NATMirage

protected NATMirage(FieldMap map,
                    java.util.Vector state,
                    java.util.LinkedList customFields,
                    MethodDictionary methodDict,
                    ATObject dynamicParent,
                    ATObject lexicalParent,
                    byte flags,
                    ATStripe[] stripes,
                    NATIntercessiveMirror mirror)
             throws InterpreterException
Constructs a new ambienttalk mirage as a clone of an existing one.

Method Detail

magic_setMirror

public ATNil magic_setMirror(NATIntercessiveMirror mirror)

magic_addMethod

public ATNil magic_addMethod(ATMethod method)
                      throws InterpreterException
Throws:
InterpreterException

magic_assignField

public ATNil magic_assignField(ATObject receiver,
                               ATSymbol selector,
                               ATObject value)
                        throws InterpreterException
Throws:
InterpreterException

magic_clone

public NATMirage magic_clone()
                      throws InterpreterException
Throws:
InterpreterException

createClone

protected NATObject createClone(FieldMap map,
                                java.util.Vector state,
                                java.util.LinkedList customFields,
                                MethodDictionary methodDict,
                                ATObject dynamicParent,
                                ATObject lexicalParent,
                                byte flags,
                                ATStripe[] stripes)
                         throws InterpreterException
Overrides:
createClone in class NATObject
Throws:
InterpreterException

getMirror

NATIntercessiveMirror getMirror()

magic_defineField

public ATNil magic_defineField(ATSymbol name,
                               ATObject value)
                        throws InterpreterException
Throws:
InterpreterException

magic_extend

public ATObject magic_extend(ATClosure code)
                      throws InterpreterException
Throws:
InterpreterException

magic_getMethod

public ATMethod magic_getMethod(ATSymbol selector)
                         throws InterpreterException
Throws:
InterpreterException

magic_invoke

public ATObject magic_invoke(ATObject receiver,
                             ATSymbol selector,
                             ATTable arguments)
                      throws InterpreterException
Throws:
InterpreterException

magic_listMethods

public ATTable magic_listMethods()
                          throws InterpreterException
Throws:
InterpreterException

magic_lookup

public ATObject magic_lookup(ATSymbol selector)
                      throws InterpreterException
Throws:
InterpreterException

magic_newInstance

public ATObject magic_newInstance(ATTable initargs)
                           throws InterpreterException
Throws:
InterpreterException

magic_print

public NATText magic_print()
                    throws InterpreterException
Throws:
InterpreterException

magic_respondsTo

public ATBoolean magic_respondsTo(ATSymbol selector)
                           throws InterpreterException
Throws:
InterpreterException

magic_select

public ATObject magic_select(ATObject receiver,
                             ATSymbol selector)
                      throws InterpreterException
Throws:
InterpreterException

magic_share

public ATObject magic_share(ATClosure code)
                     throws InterpreterException
Throws:
InterpreterException

magic_addField

public ATNil magic_addField(ATField field)
                     throws InterpreterException
Throws:
InterpreterException

magic_assignVariable

public ATNil magic_assignVariable(ATSymbol name,
                                  ATObject value)
                           throws InterpreterException
Throws:
InterpreterException

magic_doesNotUnderstand

public ATObject magic_doesNotUnderstand(ATSymbol selector)
                                 throws InterpreterException
Throws:
InterpreterException

magic_getField

public ATField magic_getField(ATSymbol selector)
                       throws InterpreterException
Throws:
InterpreterException

magic_listFields

public ATTable magic_listFields()
                         throws InterpreterException
Throws:
InterpreterException

magic_send

public ATObject magic_send(ATAsyncMessage message)
                    throws InterpreterException
Throws:
InterpreterException

magic_eval

public ATObject magic_eval(ATContext ctx)
                    throws InterpreterException
Throws:
InterpreterException

magic_quote

public ATObject magic_quote(ATContext ctx)
                     throws InterpreterException
Throws:
InterpreterException

magic_getDynamicParent

public ATObject magic_getDynamicParent()
                                throws InterpreterException
Throws:
InterpreterException

magic_getLexicalParent

public ATObject magic_getLexicalParent()
                                throws InterpreterException
Throws:
InterpreterException

magic_pass

public ATObject magic_pass()
                    throws InterpreterException
Throws:
InterpreterException

magic_resolve

public ATObject magic_resolve()
                       throws InterpreterException
Throws:
InterpreterException

magic_isStripedWith

public ATBoolean magic_isStripedWith(ATStripe stripe)
                              throws InterpreterException
Throws:
InterpreterException

magic_getStripes

public ATTable magic_getStripes()
                         throws InterpreterException
Throws:
InterpreterException

meta_addMethod

public ATNil meta_addMethod(ATMethod method)
                     throws InterpreterException
Description copied from class: NATObject
When a method is added to an object, it is first checked whether the method does not already exist. Also, care has to be taken that the method dictionary of an object does not affect clones. Therefore, if the method dictionary is shared, a copy of the dictionary is taken before adding the method. One exception to method addition are primitive methods: if the method added would conflict with a primitive method, the primitive is replaced by the new method instead.

Specified by:
meta_addMethod in interface ATObject
Overrides:
meta_addMethod in class NATObject
Throws:
InterpreterException

meta_assignField

public ATNil meta_assignField(ATObject receiver,
                              ATSymbol selector,
                              ATObject value)
                       throws InterpreterException
Description copied from class: NATObject
meta_assignField is used to evaluate code of the form o.m := v. To assign a field in an object: - first, the list of fields of the current receiver ('this') is searched. If a matching field exists, its value is set. - If the field is not found, the search for the slot is carried out recursively in the dynamic parent. As such, field assignment traverses the dynamic parent chain up to a dynamic root. The dynamic root deals with an unbound field by throwing an error.

Specified by:
meta_assignField in interface ATObject
Overrides:
meta_assignField in class NATObject
Parameters:
value - the value to assign to the field
selector - the field to assign
Returns:
NIL
Throws:
InterpreterException

meta_clone

public ATObject meta_clone()
                    throws InterpreterException
Description copied from class: NATObject
When cloning an object, it is first determined whether the parent has to be shared by the clone, or whether the parent must also be cloned. This depends on whether the dynamic parent is an 'is-a' parent or a 'shares-a' parent. This is determined by the _ISAPARENT_FLAG_ object flag. A cloned object shares with its original both the variable map (to avoid having to copy space for field names) and the method dictionary (method bindings are constant and can hence be shared). Should either the original or the clone later modify the map or the dictionary (at the meta-level), the map or dictionary will be copied first. Hence, sharing between clones is an implementation-level optimization: clones are completely self-sufficient and do not influence one another by meta-level operations.

Specified by:
meta_clone in interface ATObject
Overrides:
meta_clone in class NATObject
Throws:
InterpreterException

meta_defineField

public ATNil meta_defineField(ATSymbol name,
                              ATObject value)
                       throws InterpreterException
Description copied from class: NATObject
When a new field is defined in an object, it is important to check whether or not the field map is shared between clones or not. If it is shared, the map must be cloned first.

Specified by:
meta_defineField in interface ATObject
Overrides:
meta_defineField in class NATObject
Throws:
InterpreterException

meta_extend

public ATObject meta_extend(ATClosure code)
                     throws InterpreterException
Description copied from interface: ATObject
Create an is-a extension of the receiver object. The base-level code is represented at the meta-level by Triggers the objectExtended event on this object's beholders (mirror observers).

Specified by:
meta_extend in interface ATObject
Overrides:
meta_extend in class NATObject
Throws:
InterpreterException

meta_grabMethod

public ATMethod meta_grabMethod(ATSymbol selector)
                         throws InterpreterException
Description copied from interface: ATObject
Queries an object for one of its method slots. Triggers the methodAccessed event on this object's beholders (mirror observers).

Specified by:
meta_grabMethod in interface ATObject
Overrides:
meta_grabMethod in class NATObject
Throws:
InterpreterException

meta_invoke

public ATObject meta_invoke(ATObject receiver,
                            ATSymbol selector,
                            ATTable arguments)
                     throws InterpreterException
Description copied from class: NATObject
Invocations on an object ( o.m( args ) ) are handled by looking up the requested selector in the dynamic parent chain of the receiver. This dynamic lookup process yields exactly the same result as a selection (e.g. o.m). The result ought to be a closure (a method and its corresponding evaluation context), which is applied to the provided arguments. The code for meta_invoke is actually equivalent to return this.meta_select(receiver, selector).asClosure().meta_apply(arguments); but has a specialized implementation for performance reasons (no unnecessary closure is created)

Specified by:
meta_invoke in interface ATObject
Overrides:
meta_invoke in class NATObject
Throws:
InterpreterException

meta_listMethods

public ATTable meta_listMethods()
                         throws InterpreterException
Description copied from interface: ATObject
Queries an object for a list of all of its method slots. TODO(beholders) should this method trigger beholders? if so, using a single 'methodsQueried' event or by invoking 'methodAccessed' for each field in the list returned?

Specified by:
meta_listMethods in interface ATObject
Overrides:
meta_listMethods in class NATObject
Throws:
InterpreterException

meta_lookup

public ATObject meta_lookup(ATSymbol selector)
                     throws InterpreterException
Description copied from class: NATObject
This method is used to evaluate code of the form selector within the scope of this object. An object resolves such a lookup request as follows: - If a field corresponding to the selector exists locally, the field's value is returned. - If a method corresponding to the selector exists locally, the method is wrapped using the current object itself as implementor AND as 'self'. The reason for setting the closure's 'self' to the implementor is because a lookup can only be initiated by the object itself or a lexically nested one. Lexical nesting, however, has nothing to do with dynamic delegation, and it would be wrong to bind 'self' to a nested object which need not be a dynamic child of the implementor. - Otherwise, the search continues recursively in the object's lexical parent.

Specified by:
meta_lookup in interface ATObject
Overrides:
meta_lookup in class NATObject
Throws:
InterpreterException

meta_newInstance

public ATObject meta_newInstance(ATTable initargs)
                          throws InterpreterException
Description copied from class: NATObject
When new is invoked on an object's mirror, the object is first cloned by the mirror, after which the method named 'init' is invoked on it. meta_newInstance(t) = base_init(t) o meta_clone Care should be taken that a shares-a child implements its own init method which does NOT perform a super-send. If this is not the case, then it is possible that a shared parent is accidentally re-initialized because a sharing child is cloned via new.

Specified by:
meta_newInstance in interface ATObject
Overrides:
meta_newInstance in class NATObject
Throws:
InterpreterException

meta_print

public NATText meta_print()
                   throws InterpreterException
Description copied from interface: ATObject
Prints out the object in a human-readable way.

Specified by:
meta_print in interface ATObject
Overrides:
meta_print in class NATObject
Throws:
InterpreterException

meta_respondsTo

public ATBoolean meta_respondsTo(ATSymbol selector)
                          throws InterpreterException
Description copied from class: NATObject
An ambienttalk object can respond to a message if a corresponding field or method exists either in the receiver object locally, or in one of its dynamic parents.

Specified by:
meta_respondsTo in interface ATObject
Overrides:
meta_respondsTo in class NATObject
Throws:
InterpreterException

meta_select

public ATObject meta_select(ATObject receiver,
                            ATSymbol selector)
                     throws InterpreterException
Description copied from class: NATObject
meta_select is used to evaluate code of the form o.m. To select a slot from an object: - first, the list of fields of the current receiver ('this') is searched. If a matching field exists, its value is returned. - second, the list of methods of the current receiver is searched. If a matching method exists, it is returned, but wrapped in a closure. This wrapping is vital to ensure that the method is paired with the correct 'self'. This 'self' does not necessarily equal 'this'. - third, the search for the slot is carried out recursively in the dynamic parent. As such, slot selection traverses the dynamic parent chain up to a dynamic root. The dynamic root deals with an unbound slot by sending the 'doesNotUnderstand' message to the original receiver.

Specified by:
meta_select in interface ATObject
Overrides:
meta_select in class NATObject
Parameters:
receiver - the original receiver of the selection
selector - the selector to look up
Returns:
the value of the found field, or a closure wrapping a found method
Throws:
InterpreterException

meta_share

public ATObject meta_share(ATClosure code)
                    throws InterpreterException
Description copied from interface: ATObject
Create a shares-a extension of the receiver object. The base-level code obj.share { code } is represented at the meta-level by mirror(obj).meta_share(code) Triggers the objectShared event on this object's beholders (mirror observers).

Specified by:
meta_share in interface ATObject
Overrides:
meta_share in class NATObject
Throws:
InterpreterException

meta_addField

public ATNil meta_addField(ATField field)
                    throws InterpreterException
Description copied from interface: ATObject
Adds a field slot to an object at runtime. Triggers the fieldAdded event on this object's beholders (mirror observers) if the field is added successfully.

Specified by:
meta_addField in interface ATObject
Overrides:
meta_addField in class NATCallframe
Throws:
InterpreterException

meta_assignVariable

public ATNil meta_assignVariable(ATSymbol name,
                                 ATObject value)
                          throws InterpreterException
Description copied from interface: ATObject
Sets the value of the variable to the given value. Triggers the fieldAssigned event on this object's beholders (mirror observers). Normally, a variable assignment can only be triggered from within the lexical scope of an object.

Specified by:
meta_assignVariable in interface ATObject
Overrides:
meta_assignVariable in class NATCallframe
Throws:
InterpreterException

meta_doesNotUnderstand

public ATObject meta_doesNotUnderstand(ATSymbol selector)
                                throws InterpreterException
Description copied from interface: ATObject
Called when a selection fails because the selector was not found along the dynamic delegation hierarchy. Note the differences with Smalltalk's well-known 'doesNotUnderstand': - dNU is a meta-level operation in AmbientTalk; it is applied to mirrors. - dNU relates to attribute selection, not to method invocation. Hence, dNU in AmbientTalk is more general: it can be used to model 'virtual' fields by returning a value and it can be used to model 'virtual' methods by returning a block closure.

Specified by:
meta_doesNotUnderstand in interface ATObject
Overrides:
meta_doesNotUnderstand in class NATCallframe
Throws:
InterpreterException

meta_grabField

public ATField meta_grabField(ATSymbol selector)
                       throws InterpreterException
Description copied from interface: ATObject
Queries an object for one of its field slots. Triggers the fieldAccessed event on this object's beholders (mirror observers).

Specified by:
meta_grabField in interface ATObject
Overrides:
meta_grabField in class NATCallframe
Throws:
InterpreterException

meta_listFields

public ATTable meta_listFields()
                        throws InterpreterException
Description copied from interface: ATObject
Queries an object for a list of all of its field slots. TODO(beholders) should this method trigger beholders? if so, using a single 'fieldsQueried' event or by invoking 'fieldAccessed' for each field in the list returned?

Specified by:
meta_listFields in interface ATObject
Overrides:
meta_listFields in class NATCallframe
Throws:
InterpreterException

meta_send

public ATObject meta_send(ATAsyncMessage message)
                   throws InterpreterException
Description copied from interface: ATObject
Sends a newly created message asynchronously by this object. The message may be scheduled in the current actor's outbox if the current ATObject is a remote reference.

Specified by:
meta_send in interface ATObject
Overrides:
meta_send in class NATNil
Throws:
InterpreterException

meta_eval

public ATObject meta_eval(ATContext ctx)
                   throws InterpreterException
Description copied from interface: ATObject
Evaluates a particular parsetree with respect to a particular context.

Specified by:
meta_eval in interface ATObject
Overrides:
meta_eval in class NATNil
Throws:
InterpreterException

meta_quote

public ATObject meta_quote(ATContext ctx)
                    throws InterpreterException
Description copied from interface: ATObject
Quotes a parsetree, in other words allows the parsetree to return itself instead of evaluating. This mode is triggered when a quotation parsetree element was encountered and is switched off again when an unquotation parsetree element is found. The context is passed on behalf of these possible future evaluations.

Specified by:
meta_quote in interface ATObject
Overrides:
meta_quote in class NATNil
Throws:
InterpreterException

meta_getDynamicParent

public ATObject meta_getDynamicParent()
                               throws InterpreterException
Description copied from interface: ATObject
Objects have a classical dynamic parent chain created using extension primitives. This getter method allows accessing the parent alongside this dynamic parent chain to be accessed as a field of the object's mirror.

Specified by:
meta_getDynamicParent in interface ATObject
Overrides:
meta_getDynamicParent in class NATCallframe
Throws:
InterpreterException

meta_getLexicalParent

public ATObject meta_getLexicalParent()
                               throws InterpreterException
Description copied from interface: ATObject
Objects also have a lexical parent which is the scope in which their definitions are nested. This scope is visible using receiverless messages. This getter method allows accessing the parent alongside the lexical nesting chain to be accessed as a field of the object's mirror.

Specified by:
meta_getLexicalParent in interface ATObject
Overrides:
meta_getLexicalParent in class NATCallframe
Throws:
InterpreterException

meta_pass

public ATObject meta_pass()
                   throws InterpreterException
Description copied from class: NATObject
An isolate object does not return a proxy representation of itself during serialization, hence it is serialized itself. If the object is not an isolate, invoke the default behaviour for by-reference objects

Specified by:
meta_pass in interface ATObject
Overrides:
meta_pass in class NATObject
Throws:
InterpreterException

meta_resolve

public ATObject meta_resolve()
                      throws InterpreterException
Description copied from class: NATObject
An isolate object represents itself upon deserialization. If this object is not an isolate, the default behaviour for by-reference objects is invoked.

Specified by:
meta_resolve in interface ATObject
Overrides:
meta_resolve in class NATObject
Throws:
InterpreterException

meta_isStripedWith

public ATBoolean meta_isStripedWith(ATStripe stripe)
                             throws InterpreterException
Description copied from class: NATObject
Check whether one of the stripes of this object is a substripe of the given stripe. If not, then delegate the query to the dynamic parent.

Specified by:
meta_isStripedWith in interface ATObject
Overrides:
meta_isStripedWith in class NATObject
Throws:
InterpreterException

meta_getStripes

public ATTable meta_getStripes()
                        throws InterpreterException
Description copied from class: NATObject
Return the stripes that were directly attached to this object.

Specified by:
meta_getStripes in interface ATObject
Overrides:
meta_getStripes in class NATObject
Throws:
InterpreterException

base_isMirror

public boolean base_isMirror()
Specified by:
base_isMirror in interface ATConversions
Overrides:
base_isMirror in class NATObject

base_asMirror

public ATMirror base_asMirror()
                       throws InterpreterException
Specified by:
base_asMirror in interface ATConversions
Overrides:
base_asMirror in class NATObject
Throws:
InterpreterException