Runtime stack
The runtime stack is used to pass/return values to/from functions.
When passing arguments to a function or when returning values from a function, you are using the
runtime stack. When you call a function, parameters are pushed on the stack;
before the function code executes, parameters are popped from the stack in the local
variables defined in the function. On the other hand, each parameter returned by a function
is pushed on the stack and popped into variables specified in the RETURNING
clause of the caller.
Elements are pushed on the stack in a given order, then popped from the stack in the reverse order. This is transparent to the programmer. However, if you want to implement a C extension, you must keep this in mind.
According to the data type, parameters are passed and returned by value or by reference. When an element is passed/returned by value, a complete copy of the value is passed. When an element is passed by reference, only the handle of the object is passed/returned. If the type allows it, elements passed by reference can be manipulated in the called function to modify the value.
| Mode | Data type or data structure |
|---|---|
| By value | BOOLEAN, BIGINT,
INTEGER , SMALLINT, TINYINT,
FLOAT , SMALLFLOAT, DECIMAL,
MONEY, CHAR, VARCHAR, DATE,
DATETIME, INTERVAL, records (by default, expanded) and static
arrays (cannot be returned). |
| By reference | Dynamic arrays, dictionaries, objects (from Java,
built-in or extension classes), BYTE/TEXT, STRING
(but cannot be modified), records (in methods, and/or with INOUT) |