edu.vub.at.objects
Interface ATMethod

All Superinterfaces:
ATConversions, ATObject
All Known Implementing Classes:
JavaMethod, NATClosureMethod, NativeAnonymousMethod, NativeMethod, NATMethod, PrimitiveMethod

public interface ATMethod
extends ATObject

ATMethods are ambienttalk's representation of methods as named functions. These functions do not close over an environment allowing for them to be shared between different clones. The environment is to be supplied during lookup (which wraps ATMethods into ATClosures). As a consequence it is not possible to get hold of an ATMethod at the base-level (since lookup implies wrapping) TODO: turn base_getxxx into meta_getxxx?

Author:
smostinc, tvcutsem

Method Summary
 ATObject base_apply(ATTable arguments, ATContext ctx)
          Applies the method to the given arguments in the given context.
 ATObject base_applyInScope(ATTable arguments, ATContext ctx)
          Applies the method to the given arguments in the given context.
 ATBegin base_getBodyExpression()
          Structural access to the body of the method.
 ATSymbol base_getName()
          Structural access to the name of the method.
 ATTable base_getParameters()
          Structural access to the parameter list of the method, which is normally a table of symbols.
 
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_eval, 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_print, meta_quote, 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
 

Method Detail

base_apply

public ATObject base_apply(ATTable arguments,
                           ATContext ctx)
                    throws InterpreterException
Applies the method to the given arguments in the given context. The context is usually supplied by a closure and is necessary in order to pair a method with its current receiver (its 'self') The method itself is responsible for creating the appropriate 'call frame' or activation record in which to define temporary variables and parameter bindings.

Parameters:
arguments - the actual arguments, already eagerly evaluated
ctx - the context in which to evaluate the method body, call frame not yet inserted
Returns:
the value of evaluating the method body in a context derived from the given context
Throws:
InterpreterException

base_applyInScope

public ATObject base_applyInScope(ATTable arguments,
                                  ATContext ctx)
                           throws InterpreterException
Applies the method to the given arguments in the given context. The context is usually supplied by a closure and is necessary in order to pair a method with its current receiver (its 'self') The method will use the given context 'as-is', and will *not* insert an additional call frame.

Parameters:
arguments - the actual arguments, already eagerly evaluated
ctx - the context in which to evaluate the method body, to be used without inserting a call frame
Returns:
the value of evaluating the method body in the given context
Throws:
InterpreterException

base_getName

public ATSymbol base_getName()
                      throws InterpreterException
Structural access to the name of the method. Note that all methods (defined using def name( ...args... ) { ... } of def foo: arg bar: arg { ... }) retain the name with which they were first bound. Literal blocks which may be created outside of a definition are implicitly named 'lambda'.

Throws:
InterpreterException

base_getParameters

public ATTable base_getParameters()
                           throws InterpreterException
Structural access to the parameter list of the method, which is normally a table of symbols.

Throws:
InterpreterException

base_getBodyExpression

public ATBegin base_getBodyExpression()
                               throws InterpreterException
Structural access to the body of the method.

Throws:
InterpreterException