### Current version (Cataract Creek)
+- 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
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
-- allow global names to be used before they are declared. Assume global
- if undeclared, and complain in final analysis.
. array slices - references to arrays
- array access to read bytes from strings. How to get length? "?string[4]" ??
array[] gets length??