Passing simple typed values as parameter

Simple data types such as INTEGER, DECIMAL, VARCHAR are passed by value in function parameters. When passing a function parameter by value, the runtime system pushes a copy of the data on the stack.

The STRING data type is an exception to this rule for simple types: elements of this type are passed by reference. In fact the runtime system passes a reference to the string value, so the actual string data is not copied on the stack as for other simple types. However, the value of the caller cannot be modified: If a STRING parameter gets a new value in a function, a new string reference is created. Passed STRING parameters improve performances compared to CHAR/VARCHAR, with the same semantics as VARCHAR().

When passing a simple typed value to a function, the local variable receiving the value can be changed without affecting the variable used by the caller:

MAIN
  DEFINE c CHAR(10), s STRING
  LET c = "abc"
  LET s = "def"
  CALL func(c,s)
  DISPLAY c -- Shows "abc"
  DISPLAY s -- Shows "def"
END MAIN

FUNCTION func(pc,ps)
  DEFINE pc CHAR(10), ps STRING
  DISPLAY c -- Shows "abc" (this is a copy of the string)
  DISPLAY s -- Shows "def" (this is the original string)
  LET pc = "zz" -- Assigns new value to local variable
  LET ps = "zz" -- Assigns new value to local variable
END FUNCTION