+
+--------------------------
+
+Thinking about bit operators.
+
+#foo is 2^foo
+So #12-#4 is
+ 1000000000000 -
+ 10000
+= 111111110000
+which is bits 4 thru 11
+
+I'm wondering if it is useful to have a field-select operator,
+which could be '#' as infix (rather than prefix) so
+
+ var # field
+
+would be an lval which can only modify the selected bits
+
+ var # #12-#4 = #6-#4
+would clear bits 6-11. Doesn't actually read very well, does it?
+Probably better to use field syntax, with a way to declare fields for an int.
+This would be a record.
+
+Still.
+ var &~= #4
+ var |= #4
+to clear and set bits looks OK.
+But ... what syntax do I want for test-and-set? More genericly cmpxchg.
+An operator that modifies a variable is something I wanted to avoid.
+ var ? oldval = newval
+could 'use false' if it fails.
+
+# decided so far:
+
+ + addition or abs value
+ - subtraction or negation
+ * multiply
+ / div
+ % remainder
+ ++ catentate
+ () group
+ if else conditional
+ and, or, not Boolean
+ and then Boolean
+ or else Boolean
+ = assignment
+ : type
+ < > != == <= >= comparison
+ [ ] array access
+ . field access
+ " ' ` quoting
+ , ; list
+ { } grouping
+
+# expect
+ & bit and
+ | bit or
+ &^ bit subtract
+ ^ bit invert (prefix or infix)
+ # 1<< (prefix)
+ << >> shift
+
+ += -= *= /= %= ++= &= |= &^= ^=
+ What about boolean? and=?
+ if c: a=True // if not c: a=False
+
+# undecided
+ ? ! @ $ \ ~
+ -- ** @@ ^^
+
+ Equiv of "a ?: b". i.e. a if a else b. Only works if non-Bools can be tested.