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

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.AGDefFunction
All Implemented Interfaces:
ATAbstractGrammar, ATConversions, ATDefinition, ATDefMethod, ATExpression, ATNil, ATObject, ATStatement, java.io.Serializable

public final class AGDefFunction
extends NATAbstractGrammar
implements ATDefMethod

The native implementation of a function definition abstract grammar element. This AG element covers both method and closure definition.

Author:
tvc
See Also:
Serialized Form

Field Summary
private  ATTable argumentExps_
           
private  ATBegin bodyStmts_
           
private  ATSymbol selectorExp_
           
 
Fields inherited from class edu.vub.at.objects.natives.NATNil
_INSTANCE_
 
Constructor Summary
AGDefFunction(ATSymbol sel, ATTable args, ATBegin bdy)
           
 
Method Summary
 ATTable base_getArguments()
           
 ATBegin base_getBodyExpression()
           
 ATSymbol base_getSelector()
           
 ATObject meta_eval(ATContext ctx)
          Defines a new function (method or closure) in the current scope.
 NATText meta_print()
          Prints out the object in a human-readable way.
 ATObject meta_quote(ATContext ctx)
          Quoting a function definition results in a new quoted function 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

selectorExp_

private final ATSymbol selectorExp_

argumentExps_

private final ATTable argumentExps_

bodyStmts_

private final ATBegin bodyStmts_
Constructor Detail

AGDefFunction

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

base_getSelector

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

base_getArguments

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

base_getBodyExpression

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

meta_eval

public ATObject meta_eval(ATContext ctx)
                   throws InterpreterException
Defines a new function (method or closure) in the current scope. If a function definition is executed in the context of an object, a new method is created. If, however, the function definition is executed in the context of a call frame (i.e. its definition is nested within a method/function) then a closure is created instead. The return value of a function definition is always a closure encapsulating the function. AGDEFFUN(nam,par,bdy).eval(ctx) = if ctx.scope.isCallFrame ctx.scope.defineField(nam, AGCLO(AGMTH(nam,par,bdy), ctx)) else ctx.scope.addMethod(nam, AGMTH(nam,par,bdy))

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 a function definition results in a new quoted function definition. AGDEFFUN(nam,par,bdy).quote(ctx) = AGDEFFUN(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