Referencia de la Clase functionNode

Nodo función. Más...

#include <funcNode.h>

Diagrama de herencias de functionNode
fexpNode expNode objectTypeNode printableNode runNode

Métodos públicos

 functionNode (runNode *id, runNode *params, runNode *body, bool priv=false)
 
void run ()
 
string print () const
 
runNodecall (runNode *params, sTable *context=NULL)
 
runNodegetID ()
 
runNodesetID (runNode *id)
 
string name ()
 
runNodegetParams ()
 
runNodegetBody ()
 
void setObj (runNode *obj)
 
void setStaticLink (runNode *static_link)
 
void setParent (classNode *parent)
 
- Métodos públicos heredados desde fexpNode
bool is_print () const
 
bool is_runlist () const
 
void rmRef ()
 
- Métodos públicos heredados desde expNode
virtual void setNodeValue (runNode *node)
 
- Métodos públicos heredados desde objectTypeNode
 objectTypeNode ()
 
runNodegetMethod (runNode *key)
 
refNodegetMethodRef (runNode *key)
 
virtual runNodegetClass ()
 
virtual void setClass (runNode *c)
 
- Métodos públicos heredados desde runNode
 runNode (string str)
 
 runNode ()
 
virtual void addRef ()
 
virtual bool is_string () const
 
string getPtrString ()
 

Otros miembros heredados

- Métodos públicos estáticos heredados desde expNode
static runNodeclone (runNode *node)
 
- Métodos públicos estáticos heredados desde runNode
static bool compare (runNode *node1, runNode *node2, int op=0)
 

Descripción detallada

Nodo función.

Un nodo función representa la declaración de una función. Internamente sirve como interfaz tanto para la declaración de funciones en las tablas de símbolos como para tratar las llamadas a estas.

Para su inicialización precisa de un nodo identificador, una lista de parámetros para la declaración y un cuerpo.

La declaración de la función hace uso del nodo identificador para acceder a la tabla de funciones y crear una referencia al propio nodo función.

El cuerpo de la función consistirá en un listado de nodos sentencias, que se ejecutarán en cada llamada

Para la llamada a una función se hace uso de la clase de nodo "llamada a función". Esta clase de nodo rescata de la tabla de funciones el nodo función referenciado mediante una determinada clave y ejecuta el método call de la misma pasándole los valores de los parámetros. El método call es el encargado de copiar el valor de los parámetros a un nuevo nivel de la tabla de variables usando como clave los identificadores de la lista de parámetros pasada en la inicialización de forma posicional. Después de copiar el valor de los parámetros ejecuta el cuerpo de la función en su totalidad o hasta que se reciba una excepción de tipo return.

La lista de parámetros para la declaración será una lista de nodos identificadores o nodos refparamNode. Estos últimos son nodos que referencian a un identificador, de forma que cuando el método call lea de la lista de parámetros para la declaración un nodo de este tipo en vez de copiar el valor creará una referencia al mismo.

Los nodos de tipo función son expresiones cuyo valor es la propia función. Esto hace posible que se pueda asignar funciones, permitiendo construir expresiones como "fun = function (a) { echo a; };" o "{ 'success' : function () { echo "Ok";} }

Internamente los métodos definidos en una clase se representan como funciones que se encuentran referenciadas en la tabla de símbolos interna de la clase.

Documentación del constructor y destructor

functionNode::functionNode ( runNode id,
runNode params,
runNode body,
bool  priv = false 
)

Constructor de la clase.

Parámetros
idIdentificador que se utilizará para manipular al la función en la tabla de símbolos.
paramsLista de parámetros de declaración que podrá contener nodos identificadores o nodos refparamNode (los identificadores utilizados en la lista serán los nombres de los parámetros de la función).
bodyLista de sentencias que forman el cuerpo de la función.
privLa función tiene la etiqueta de privada.

Documentación de las funciones miembro

runNode * functionNode::call ( runNode params,
sTable context = NULL 
)

Procesa una llamada a la función. Recibe una lista de valores de parámetros que será copiados en un nuevo nivel de la tabla de variables activa. Luego ejecuta en la lista de sentencias que representa el cuerpo de la función en su totalidad o hasta que sucede una excepción return en cuyo caso devolverá el valor de la excepción.

Si la función ha sido configurada con llamada externa los parámetros serán copiados desde el nivel actual de la tabla de variables indicada, al próximo nivel de la tabla de variables activa, luego se volverá a configurar la función con llamada interna.

Si la función se encuentra configurada con llamada interna los parámetros serán copiados o referenciados desde el nivel actual de la tabla de variables activa.

Si algún parámetro de la lista dada en la inicialización de la función es de tipo referencia, la copia del parámetro se realizará por referencia.

runNode * functionNode::getBody ( )

Obtiene el cuerpo de la función.

Devuelve
Cuerpo de la función.
runNode * functionNode::getID ( )

Obtiene el ID de la función.

Devuelve
ID de la función.
runNode * functionNode::getParams ( )

Obtiene la lista de parámetros de la función.

Devuelve
Parámetros de la función.
string functionNode::name ( )

Obtiene el nombre del ID de la función.

Devuelve
Nombre del ID.
string functionNode::print ( ) const
virtual

Devuelve la cadena que se debe imprimir como la declaración de la función, la cual siempre será la cadena vacía.

Devuelve
Cadena vacía.

Implementa printableNode.

void functionNode::run ( )
virtual

Guarda en la tabla de símbolos activa una referencia al nodo función haciendo uso del identificador pasado en la inicialización.

Implementa runNode.

runNode * functionNode::setID ( runNode id)

Modifica el ID de la función.

Parámetros
idNuevo ID.
Devuelve
ID asignado.
void functionNode::setObj ( runNode obj)

Establece la función como método de un objeto dado.

Parámetros
objObjeto asociado al método.
void functionNode::setParent ( classNode parent)

Establece el nodo clase asociado como padre durante la llamada a la función.

Parámetros
parentClase que se usará como padre.
void functionNode::setStaticLink ( runNode static_link)

Establece la el nodo clase asociado como enlace estático. durante la llamada a la función.

Parámetros
static_linkClase que se usará como enlace estático.

La documentación para esta clase fue generada a partir de los siguientes ficheros:
  • trunk/src/run/table/funcNode.h
  • trunk/src/run/table/funcNode.cpp