Nodo función. Más...
#include <funcNode.h>
Métodos públicos | |
| functionNode (runNode *id, runNode *params, runNode *body, bool priv=false) | |
| void | run () |
| string | print () const |
| runNode * | call (runNode *params, sTable *context=NULL) |
| runNode * | getID () |
| runNode * | setID (runNode *id) |
| string | name () |
| runNode * | getParams () |
| runNode * | getBody () |
| 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 () | |
| runNode * | getMethod (runNode *key) |
| refNode * | getMethodRef (runNode *key) |
| virtual runNode * | getClass () |
| 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 runNode * | clone (runNode *node) |
Métodos públicos estáticos heredados desde runNode | |
| static bool | compare (runNode *node1, runNode *node2, int op=0) |
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.
Constructor de la clase.
| id | Identificador que se utilizará para manipular al la función en la tabla de símbolos. |
| params | Lista 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). |
| body | Lista de sentencias que forman el cuerpo de la función. |
| priv | La función tiene la etiqueta de privada. |
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.
| runNode * functionNode::getID | ( | ) |
Obtiene el ID de la función.
| runNode * functionNode::getParams | ( | ) |
Obtiene la lista de parámetros de la función.
| string functionNode::name | ( | ) |
Obtiene el nombre del ID de la función.
|
virtual |
Devuelve la cadena que se debe imprimir como la declaración de la función, la cual siempre será la cadena vacía.
Implementa printableNode.
|
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.
Modifica el ID de la función.
| id | Nuevo ID. |
| void functionNode::setObj | ( | runNode * | obj | ) |
Establece la función como método de un objeto dado.
| obj | Objeto asociado al método. |
| void functionNode::setParent | ( | classNode * | parent | ) |
Establece el nodo clase asociado como padre durante la llamada a la función.
| parent | Clase 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.
| static_link | Clase que se usará como enlace estático. |