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 TODO: slice and dot notation around the _index function TODO: ternary operator TODO: Nullish types TODO: A way to check the type of a variable (typeOf keyword) TODO: a = b = c = 1; ? TODO: are compounds shallow or deep copies? TODO: Address circular references? TODO: Assertion-based test scripts TODO: standard library TODO: external runner library TODO: document how it all works TODO: third output stream, for parser/compiler/interpreter errors TODO: better and more consistent error messages NOPE: functions return a set number of values