How to work with value stack types
Reading values
The table below summarizes API calls to read a value of a certain type (e.g. a string).
Value stack entry type | duk_get_xxx() | duk_get_xxx_default() | duk_require_xxx() | duk_opt_xxx() | duk_to_xxx() |
---|---|---|---|---|---|
none (index out of bounds) | default (automatic) | default (explicit) | TypeError | default (explicit) | TypeError |
undefined | default (automatic) | default (explicit) | TypeError | default (explicit) | coercion |
null | default (automatic) | default (explicit) | TypeError | TypeError | coercion |
Matching type | as is | as is | as is | as is | as is |
Non-matching type | default (automatic) | default (explicit) | TypeError | TypeError | coercion |
Concrete example for string values:
Value stack entry type | duk_get_string() | duk_get_string_default() | duk_require_string() | duk_opt_string() | duk_to_string() |
---|---|---|---|---|---|
none (index out of bounds) | NULL | default (explicit) | TypeError | default (explicit) | TypeError |
undefined | NULL | default (explicit) | TypeError | default (explicit) | "undefined" |
null | NULL | default (explicit) | TypeError | TypeError | "null" |
boolean | NULL | default (explicit) | TypeError | TypeError | "true" |
number | NULL | default (explicit) | TypeError | TypeError | "123.4" |
string | "hello" | "hello" | "hello" | "hello" | |
object | NULL | default (explicit) | TypeError | TypeError | "[object Object]" |
buffer | NULL | default (explicit) | TypeError | TypeError | "[object ArrayBuffer]" |
pointer | NULL | default (explicit) | TypeError | TypeError | "0xdeadbeef" |
lightfunc | NULL | default (explicit) | TypeError | TypeError | "function light_08062727_0a11() { [lightfunc code] }" |
Notes:
- Integer getters do a double-to-integer coercion for the API return value. This coercion does not change the number on the value stack which remains a double.