← SPL reference

Data types & literals

Runtime values map to Python types inside the interpreter. Use type.* helpers to branch on kinds.

Numbers

Integers and floats from numeric literals. Many math.* calls normalize results (e.g. int when all operands are integral).

Booleans

Literals true and false become 1 and 0. The test.ifTrue / test.while families require cond == 1 for “true”. Logic operators (and / or / …) treat non-zero numbers as true and null as false—see Null below.

Strings

Double-quoted, with escapes processed by the lexer. Use string.* for concat, case, padding, search/replace, and binary helpers.

Lists

[a, b, c] builds a Python list. Create named lists with list.createList([...], name). Mutate with list.append, list.change, etc.

Hashes (dicts)

{ key: value } — keys must be hashable after evaluation. Bind with hash.createHashTable({...}, name). Empty {} is an empty hash literal in the parser when followed by comma/colon rules as in the grammar (see hash vs set below).

Sets

{ a, b, c } — comma-separated without colons is a set literal (deduplicated). set.createSet binds to a variable; use set.append, remove, removeByIndex.

Tuples

() empty tuple, or (a, b) with commas inside parentheses. Bind with tuple.createTuple((...), name); index with tuple.get.

Null

The name null is pre-bound in global scope (Python None). Use for “missing” results, e.g. return.boolean(null). Detect: type.isNull(x) or test.isNull(x) (both return 1 or 0). Defaulting: null.coalesce(a, b) returns a if a is not null, else b.

test.ifTrue only runs its body when the condition equals 1, so null does not take the branch. Logic operators treat null as falsy (consistent with treating absence as “not true”).

Null & library enums guide →

Enums (library)

No separate enum type yet: use a hash of names to integers and bind it with enum.createEnum({ "A": 0, "B": 1 }, Name);. enum.name(enumHash, numericValue) returns the string key for a value (via hash.getKey); enum.equals(a, b) compares two numeric values. First-class enumDefine syntax may come later.

Null & library enums guide →

Records / structs (today)

No dedicated struct type: model fixed-shape data with a hash (string keys) or a tuple plus agreed field order. Keep field names in comments or a parallel list if you use tuples.