edu.vub.at.objects.natives.grammar
Class AGDefExternalMethod

java.lang.Object
  extended byedu.vub.at.objects.natives.NATNil
      extended byedu.vub.at.objects.natives.NATByCopy
          extended byedu.vub.at.objects.natives.grammar.NATAbstractGrammar
              extended byedu.vub.at.objects.natives.grammar.AGDefExternalMethod
All Implemented Interfaces:
ATAbstractGrammar, ATConversions, ATDefExternalMethod, ATDefinition, ATExpression, ATNil, ATObject, ATStatement, java.io.Serializable

public final class AGDefExternalMethod
extends NATAbstractGrammar
implements ATDefExternalMethod

The native implementation of an external method definition abstract grammar element.

Author:
tvcutsem
See Also:
Serialized Form

Field Summary
private  ATTable argumentExps_
           
private  ATBegin bodyStmts_
           
private  ATSymbol rcvNam_
           
private  ATSymbol selectorExp_
           
 
Fields inherited from class edu.vub.at.objects.natives.NATNil
_INSTANCE_
 
Constructor Summary
AGDefExternalMethod(ATSymbol rcv, ATSymbol sel, ATTable args, ATBegin bdy)
           
 
Method Summary
 ATTable base_getArguments()
           
 ATBegin base_getBodyExpression()
           
 ATSymbol base_getReceiver()
           
 ATSymbol base_getSelector()
           
 ATObject meta_eval(ATContext ctx)
          Evaluates the receiver symbol to an object to which a new 'closure method' will be added.
 NATText meta_print()
          Prints out the object in a human-readable way.
 ATObject meta_quote(ATContext ctx)
          Quoting an external method definition results in a new quoted external method definition.
 
Methods inherited from class edu.vub.at.objects.natives.grammar.NATAbstractGrammar
meta_getStripes
 
Methods inherited from class edu.vub.at.objects.natives.NATByCopy
meta_pass, meta_resolve
 
Methods inherited from class edu.vub.at.objects.natives.NATNil
asAmbientTalkObject, asJavaClassUnderSymbiosis, asJavaObjectUnderSymbiosis, asNativeBoolean, asNativeException, asNativeFarReference, asNativeFraction, asNativeNumber, asNativeNumeric, asNativeTable, asNativeText, base__opeql__opeql_, base_asActorMirror, base_asAsyncMessage, base_asBegin, base_asBoolean, base_asClosure, base_asDefinition, base_asExpression, base_asFarReference, base_asField, base_asHandler, base_asMessage, base_asMessageCreation, base_asMethod, base_asMirror, base_asNumber, base_asSplice, base_asStatement, base_asStripe, base_asSymbol, base_asTable, base_asUnquoteSplice, base_asVariableAssignment, base_init, base_isBoolean, base_isCallFrame, base_isClosure, base_isFarReference, base_isMessageCreation, base_isMethod, base_isMirror, base_isSplice, base_isStripe, base_isSymbol, base_isTable, base_isUnquoteSplice, base_isVariableAssignment, base_new, createChild, equals, isAmbientTalkObject, isJavaObjectUnderSymbiosis, isNativeBoolean, isNativeField, isNativeText, meta_addField, meta_addMethod, meta_assignField, meta_assignVariable, meta_clone, meta_defineField, meta_doesNotUnderstand, meta_extend, meta_getDynamicParent, meta_getLexicalParent, meta_grabField, meta_grabMethod, meta_invoke, meta_isCloneOf, meta_isRelatedTo, meta_isStripedWith, meta_listFields, meta_listMethods, meta_lookup, meta_newInstance, meta_receive, meta_respondsTo, meta_select, meta_send, meta_share, 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_addField, meta_addMethod, meta_assignField, meta_assignVariable, meta_clone, meta_defineField, meta_doesNotUnderstand, meta_extend, meta_getDynamicParent, meta_getLexicalParent, meta_getStripes, meta_grabField, meta_grabMethod, meta_invoke, meta_isCloneOf, meta_isRelatedTo, meta_isStripedWith, meta_listFields, meta_listMethods, meta_lookup, meta_newInstance, meta_pass, meta_receive, meta_resolve, meta_respondsTo, meta_select, meta_send, meta_share
 
Methods inherited from interface edu.vub.at.objects.coercion.ATConversions
asAmbientTalkObject, asJavaClassUnderSymbiosis, asJavaObjectUnderSymbiosis, asNativeBoolean, asNativeException, asNativeFarReference, asNativeFraction, asNativeNumber, asNativeNumeric, asNativeTable, asNativeText, base_asActorMirror, base_asAsyncMessage, base_asBegin, base_asBoolean, base_asClosure, base_asDefinition, base_asExpression, base_asFarReference, base_asField, base_asHandler, base_asMessage, base_asMessageCreation, base_asMethod, base_asMirror, base_asNumber, base_asSplice, base_asStatement, base_asStripe, base_asSymbol, base_asTable, base_asUnquoteSplice, base_asVariableAssignment, base_isBoolean, base_isCallFrame, base_isClosure, base_isFarReference, base_isMessageCreation, base_isMethod, base_isMirror, base_isSplice, base_isStripe, base_isSymbol, base_isTable, base_isUnquoteSplice, base_isVariableAssignment, isAmbientTalkObject, isJavaObjectUnderSymbiosis, isNativeBoolean, isNativeField, isNativeText
 

Field Detail

rcvNam_

private final ATSymbol rcvNam_

selectorExp_

private final ATSymbol selectorExp_

argumentExps_

private final ATTable argumentExps_

bodyStmts_

private final ATBegin bodyStmts_
Constructor Detail

AGDefExternalMethod

public AGDefExternalMethod(ATSymbol rcv,
                           ATSymbol sel,
                           ATTable args,
                           ATBegin bdy)
Method Detail

base_getReceiver

public ATSymbol base_getReceiver()
Specified by:
base_getReceiver in interface ATDefExternalMethod

base_getSelector

public ATSymbol base_getSelector()
Specified by:
base_getSelector in interface ATDefExternalMethod

base_getArguments

public ATTable base_getArguments()
Specified by:
base_getArguments in interface ATDefExternalMethod

base_getBodyExpression

public ATBegin base_getBodyExpression()
Specified by:
base_getBodyExpression in interface ATDefExternalMethod

meta_eval

public ATObject meta_eval(ATContext ctx)
                   throws InterpreterException
Evaluates the receiver symbol to an object to which a new 'closure method' will be added. Such a closure captures the current lexical scope, but not the values for 'self' and 'super'. For an explanation of this rationale, see my interface description in ATDefExternalMethod. The return value of an external method definition is always the external method itself. AGDEFEXTMTH(rcv,nam,par,bdy).eval(ctx) = rcv.eval(ctx).defineField(nam, NATCLOMTH(ctx.cur,nam,par,bdy)) This method may fail with an XIllegalOperation if the receiver is an instance of a native type (whose method dictionaries are sealed) or if the receiver is an isolate.

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
Quoting an external method definition results in a new quoted external method definition. AGDEFEXTMTH(rcv,nam,par,bdy).quote(ctx) = AGDEFEXTMTH(rcv.quote(ctx),nam.quote(ctx), par.quote(ctx), bdy.quote(ctx))

Specified by:
meta_quote in interface ATObject
Overrides:
meta_quote in class NATNil
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 NATNil
Throws:
InterpreterException