- allow global names to be used before they are declared. Assume global
if undeclared, and complain in final analysis.
+ If used in 'use' and 'case', then make it a label
+- avoid definition loops in global constants
- allow type names to be used before declared. Need to re-evaluate all
- type sizes after parse.
+ type sizes after parse. avoid loops
- resolve the HACK of allowing assign from struct when name starts space.
- '?' prefix operator returns Boolean, index operator for strings. Can be used to
test for end-of-string
- int nat cyc {i,n,c}{8,16,32,64} - maybe not cyc - it needs size.
- ops: # & | ~ &~ - no shift: use (N * #shift) or (N / #shift)
- op=
+- make '.' modifier interpolate a deref if needed
- enum, with multi-valued names. enum foo { yes, no, many(10) }
bar:foo=.yes; if bar == .no... if ?bar.many: print bar.many, "items"
Maybe .true and .false for Boolean
+- change use/case labels in ".name" which creates a local enum if no
+ type is evident.
- set, with bool or int members. set foo { pinned, memalloc, priority(4) }
bar:foo = .memalloc | .priority(2). if bar.pinned: bar.priority += 1
. array slices - references to arrays
- const structures can inherit from another, and update select fields.
- 'use' labels *must* appear in case statements.
- 'then' can extend a case section into some other.
-
+
## Needs Design
+- const arrays that are initialized incrementally throughout the code,
+ and post-processed at compile-time, e.g. to sort or derive LR tables.
+ Maybe even across modules.
+ Need a syntax
- union types - how do I want to support these? inheritance with variance?
- lambda
- 'error' value for various types. NIL for pointer NaN for float, extra flag bit