manpagez: man pages & more
info gawk
Home | html | info | man

File: gawk.info,  Node: Symbol table by name,  Next: Symbol table by cookie,  Up: Symbol Table Access

17.4.11.1 Variable Access and Update by Name
............................................

The following routines provide the ability to access and update global
'awk'-level variables by name.  In compiler terminology, identifiers of
different kinds are termed "symbols", thus the "sym" in the routines'
names.  The data structure that stores information about symbols is
termed a "symbol table".  The functions are as follows:

'awk_bool_t sym_lookup(const char *name,'
'                      awk_valtype_t wanted,'
'                      awk_value_t *result);'
     Fill in the 'awk_value_t' structure pointed to by 'result' with the
     value of the variable named by the string 'name', which is a
     regular C string.  'wanted' indicates the type of value expected.
     Return true if the actual type matches 'wanted', and false
     otherwise.  In the latter case, 'result->val_type' indicates the
     actual type (*note Table 17.2: table-value-types-returned.).

'awk_bool_t sym_lookup_ns(const char *name,'
'                         const char *name_space,'
'                         awk_valtype_t wanted,'
'                         awk_value_t *result);'
     This is like 'sym_lookup()', but the 'name_space' parameter allows
     you to specify which namespace 'name' is part of.  'name_space'
     cannot be 'NULL'.  If it is '""' or '"awk"', then 'name' is
     searched for in the default 'awk' namespace.

     Note that 'namespace' is a C++ keyword.  For interoperability with
     C++, you should avoid using that identifier in C code.

'awk_bool_t sym_update(const char *name, awk_value_t *value);'
     Update the variable named by the string 'name', which is a regular
     C string.  The variable is added to 'gawk''s symbol table if it is
     not there.  Return true if everything worked, and false otherwise.

     Changing types (scalar to array or vice versa) of an existing
     variable is _not_ allowed, nor may this routine be used to update
     an array.  This routine cannot be used to update any of the
     predefined variables (such as 'ARGC' or 'NF').

'awk_bool_t sym_update_ns(const char *name_space, const char *name, awk_value_t *value);'
     This is like 'sym_update()', but the 'name_space' parameter allows
     you to specify which namespace 'name' is part of.  'name_space'
     cannot be 'NULL'.  If it is '""' or '"awk"', then 'name' is
     searched for in the default 'awk' namespace.

   An extension can look up the value of 'gawk''s special variables.
However, with the exception of the 'PROCINFO' array, an extension cannot
change any of those variables.

   When searching for or updating variables outside the 'awk' namespace
(*note Namespaces::), function and variable names must be simple
identifiers.(1)  In addition, namespace names and variable and function
names must follow the rules given in *note Naming Rules::.

   ---------- Footnotes ----------

   (1) Allowing both namespace plus identifier and 'foo::bar' would have
been too confusing to document, and to code and test.

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.