DONE: rework type system DONE: var decl with a type, but no value DONE: type casting DONE: remove optimization option DONE: conditionals DONE: if-then-else DONE: chained if-then-else DONE: optional block around a path if it's only one statement DONE: while-then DONE: for-then DONE: break and continue statements DONE: truthiness rethink DONE: string concat with the + operator DONE: increment & decrement operators DONE: store compound types in variables DONE: += -= *= /= %= operators DONE: && and || operators DONE: functions are invoked by calling their names DONE: function arguments can have specified types DONE: function returns can have specified types DONE: closures are explicitly supported DONE: functions are first-class citizens DONE: functions take a set number of parameters DONE: functions last argument can be a rest parameter DONE: assert needs to kill the whole script, not just functions DONE: native functions DONE: global functions _get, _set, _push, _pop, _length, clear available DONE: change comma to colon in dictionary definition DONE: Address circular references DONE: are compounds shallow or deep copies? Deep copies DONE: third output stream, for lexer/parser/compiler/interpreter errors DONE: Assertion-based test scripts DONE: Import/export keywords DONE: A way to check the type of a variable (typeOf keyword) DONE: slice and dot notation around the builtin _index and _dot functions DONE: maximum recursion/function depth TODO: nested compound assignment TODO: better sugar for _push and _pop TODO: ternary operator TODO: Nullish types? TODO: hooks on the external libraries, triggered on import TODO: standard library TODO: external script runner library TODO: document how it all works - book? TODO: better API TODO: packaging for release? NOPE: a = b = c = 1; NOPE: functions return a set number of values