Re-order some token.ID numbers
diff --git a/lang/token/list.go b/lang/token/list.go
index 839b582..867d334 100644
--- a/lang/token/list.go
+++ b/lang/token/list.go
@@ -208,229 +208,228 @@
 }
 
 // nBuiltInIDs is the number of built-in IDs. The packing is:
-//  - Zero is invalid.
-//  - [ 0x01,  0x0F] are squiggly punctuation, such as "(", ")" and ";".
-//  - [ 0x10,  0x2F] are squiggly assignments, such as "=" and "+=".
-//  - [ 0x30,  0x5F] are operators, such as "+", "==" and "not".
-//  - [ 0x60,  0x9F] are x-ops (disambiguation forms): unary vs binary "+".
-//  - [ 0xA0,  0xBF] are keywords, such as "if" and "return".
-//  - [ 0xC0,  0xCF] are type modifiers, such as "ptr" and "slice".
-//  - [ 0xD0,  0xEF] are literals, such as "false" and "true".
-//  - [ 0xE0,  0xFF] are reserved.
-//  - [0x100, 0x3FF] are identifiers, such as "bool", "u32" and "read_u8".
+//  -            0x00 is invalid.
+//  -  0x01 ..=  0x0F are squiggly punctuation, such as ";", "." and "?".
+//  -  0x10 ..=  0x1F are squiggly bookends, such as "(", ")" and "]".
+//  -  0x20 ..=  0x3F are squiggly assignments, such as "=" and "+=".
+//  -  0x40 ..=  0x6F are operators, such as "+", "==" and "not".
+//  -  0x70 ..=  0xAF are x-ops (disambiguation forms): unary vs binary "+".
+//  -  0xB0 ..=  0xCF are keywords, such as "if" and "return".
+//  -  0xD0 ..=  0xDF are type modifiers, such as "ptr" and "slice".
+//  -  0xE0 ..=  0xFF are literals, such as "ok" and "true".
+//  - 0x100 ..= 0x3FF are identifiers, such as "bool", "u32" and "read_u8".
 //
-// "Squiggly" means a sequence of non-alpha-numeric characters, such as "+" and
-// "&=". Roughly speaking, their IDs range in [0x01, 0x4F], or disambiguation
-// forms range in [0x50, 0x7F], but vice versa does not necessarily hold. For
-// example, the "and" operator is not "squiggly" but it is within [0x01, 0x4F].
+// Squiggly means a sequence of non-alpha-numeric bytes, such as "+" and "&=".
 const (
-	nBuiltInSymbolicIDs = ID(0xA0)  // 160
+	nBuiltInSymbolicIDs = ID(0xB0)  // 176
 	nBuiltInIDs         = ID(0x400) // 1024
 )
 
 const (
-	IDInvalid   = ID(0)
+	IDInvalid = ID(0x00)
+
 	IDSemicolon = ID(0x01)
-
-	minOpen = 0x02
-	maxOpen = 0x04
-
-	IDOpenParen   = ID(0x02)
-	IDOpenBracket = ID(0x03)
-	IDOpenCurly   = ID(0x04)
-
-	minClose = 0x05
-	maxClose = 0x07
-
-	IDCloseParen   = ID(0x05)
-	IDCloseBracket = ID(0x06)
-	IDCloseCurly   = ID(0x07)
-
-	IDDot      = ID(0x08)
-	IDDotDot   = ID(0x09)
-	IDDotDotEq = ID(0x0A)
-	IDComma    = ID(0x0B)
-	IDExclam   = ID(0x0C)
-	IDQuestion = ID(0x0D)
-	IDColon    = ID(0x0E)
+	IDDot       = ID(0x02)
+	IDDotDot    = ID(0x03)
+	IDDotDotEq  = ID(0x04)
+	IDComma     = ID(0x05)
+	IDExclam    = ID(0x06)
+	IDQuestion  = ID(0x07)
+	IDColon     = ID(0x08)
 )
 
 const (
-	minAssign = 0x10
-	maxAssign = 0x2F
+	minOpen = 0x10
+	maxOpen = 0x17
 
-	IDPlusEq    = ID(0x10)
-	IDMinusEq   = ID(0x11)
-	IDStarEq    = ID(0x12)
-	IDSlashEq   = ID(0x13)
-	IDShiftLEq  = ID(0x14)
-	IDShiftREq  = ID(0x15)
-	IDAmpEq     = ID(0x16)
-	IDPipeEq    = ID(0x17)
-	IDHatEq     = ID(0x18)
-	IDPercentEq = ID(0x19)
+	IDOpenParen   = ID(0x10)
+	IDOpenBracket = ID(0x11)
+	IDOpenCurly   = ID(0x12)
 
-	IDTildeModPlusEq   = ID(0x20)
-	IDTildeModMinusEq  = ID(0x21)
-	IDTildeModStarEq   = ID(0x22)
-	IDTildeModShiftLEq = ID(0x24)
+	minClose = 0x18
+	maxClose = 0x1F
 
-	IDTildeSatPlusEq  = ID(0x28)
-	IDTildeSatMinusEq = ID(0x29)
-
-	IDEq         = ID(0x2E)
-	IDEqQuestion = ID(0x2F)
+	IDCloseParen   = ID(0x18)
+	IDCloseBracket = ID(0x19)
+	IDCloseCurly   = ID(0x1A)
 )
 
 const (
-	minOp          = 0x30
-	minAmbiguousOp = 0x30
-	maxAmbiguousOp = 0x5F
-	minXOp         = 0x60
-	maxXOp         = 0x9F
-	maxOp          = 0x9F
+	minAssign = 0x20
+	maxAssign = 0x3F
 
-	IDPlus    = ID(0x30)
-	IDMinus   = ID(0x31)
-	IDStar    = ID(0x32)
-	IDSlash   = ID(0x33)
-	IDShiftL  = ID(0x34)
-	IDShiftR  = ID(0x35)
-	IDAmp     = ID(0x36)
-	IDPipe    = ID(0x37)
-	IDHat     = ID(0x38)
-	IDPercent = ID(0x39)
+	IDPlusEq    = ID(0x20)
+	IDMinusEq   = ID(0x21)
+	IDStarEq    = ID(0x22)
+	IDSlashEq   = ID(0x23)
+	IDShiftLEq  = ID(0x24)
+	IDShiftREq  = ID(0x25)
+	IDAmpEq     = ID(0x26)
+	IDPipeEq    = ID(0x27)
+	IDHatEq     = ID(0x28)
+	IDPercentEq = ID(0x29)
 
-	IDTildeModPlus   = ID(0x40)
-	IDTildeModMinus  = ID(0x41)
-	IDTildeModStar   = ID(0x42)
-	IDTildeModShiftL = ID(0x44)
+	IDTildeModPlusEq   = ID(0x30)
+	IDTildeModMinusEq  = ID(0x31)
+	IDTildeModStarEq   = ID(0x32)
+	IDTildeModShiftLEq = ID(0x34)
 
-	IDTildeSatPlus  = ID(0x48)
-	IDTildeSatMinus = ID(0x49)
+	IDTildeSatPlusEq  = ID(0x38)
+	IDTildeSatMinusEq = ID(0x39)
 
-	IDNotEq       = ID(0x50)
-	IDLessThan    = ID(0x51)
-	IDLessEq      = ID(0x52)
-	IDEqEq        = ID(0x53)
-	IDGreaterEq   = ID(0x54)
-	IDGreaterThan = ID(0x55)
+	IDEq         = ID(0x3E)
+	IDEqQuestion = ID(0x3F)
+)
 
-	IDAnd = ID(0x58)
-	IDOr  = ID(0x59)
-	IDAs  = ID(0x5A)
+const (
+	minOp          = 0x40
+	minAmbiguousOp = 0x40
+	maxAmbiguousOp = 0x6F
+	minXOp         = 0x70
+	maxXOp         = 0xAF
+	maxOp          = 0xAF
 
-	IDNot = ID(0x5F)
+	IDPlus    = ID(0x40)
+	IDMinus   = ID(0x41)
+	IDStar    = ID(0x42)
+	IDSlash   = ID(0x43)
+	IDShiftL  = ID(0x44)
+	IDShiftR  = ID(0x45)
+	IDAmp     = ID(0x46)
+	IDPipe    = ID(0x47)
+	IDHat     = ID(0x48)
+	IDPercent = ID(0x49)
+
+	IDTildeModPlus   = ID(0x50)
+	IDTildeModMinus  = ID(0x51)
+	IDTildeModStar   = ID(0x52)
+	IDTildeModShiftL = ID(0x54)
+
+	IDTildeSatPlus  = ID(0x58)
+	IDTildeSatMinus = ID(0x59)
+
+	IDNotEq       = ID(0x60)
+	IDLessThan    = ID(0x61)
+	IDLessEq      = ID(0x62)
+	IDEqEq        = ID(0x63)
+	IDGreaterEq   = ID(0x64)
+	IDGreaterThan = ID(0x65)
+
+	IDAnd = ID(0x68)
+	IDOr  = ID(0x69)
+	IDAs  = ID(0x6A)
+
+	IDNot = ID(0x6F)
 
 	// The IDXFoo IDs are not returned by the tokenizer. They are used by the
 	// ast.Node ID-typed fields to disambiguate e.g. unary vs binary plus.
 
-	IDXBinaryPlus    = ID(0x60)
-	IDXBinaryMinus   = ID(0x61)
-	IDXBinaryStar    = ID(0x62)
-	IDXBinarySlash   = ID(0x63)
-	IDXBinaryShiftL  = ID(0x64)
-	IDXBinaryShiftR  = ID(0x65)
-	IDXBinaryAmp     = ID(0x66)
-	IDXBinaryPipe    = ID(0x67)
-	IDXBinaryHat     = ID(0x68)
-	IDXBinaryPercent = ID(0x69)
+	IDXBinaryPlus    = ID(0x70)
+	IDXBinaryMinus   = ID(0x71)
+	IDXBinaryStar    = ID(0x72)
+	IDXBinarySlash   = ID(0x73)
+	IDXBinaryShiftL  = ID(0x74)
+	IDXBinaryShiftR  = ID(0x75)
+	IDXBinaryAmp     = ID(0x76)
+	IDXBinaryPipe    = ID(0x77)
+	IDXBinaryHat     = ID(0x78)
+	IDXBinaryPercent = ID(0x79)
 
-	IDXBinaryTildeModPlus   = ID(0x70)
-	IDXBinaryTildeModMinus  = ID(0x71)
-	IDXBinaryTildeModStar   = ID(0x72)
-	IDXBinaryTildeModShiftL = ID(0x74)
+	IDXBinaryTildeModPlus   = ID(0x80)
+	IDXBinaryTildeModMinus  = ID(0x81)
+	IDXBinaryTildeModStar   = ID(0x82)
+	IDXBinaryTildeModShiftL = ID(0x84)
 
-	IDXBinaryTildeSatPlus  = ID(0x78)
-	IDXBinaryTildeSatMinus = ID(0x79)
+	IDXBinaryTildeSatPlus  = ID(0x88)
+	IDXBinaryTildeSatMinus = ID(0x89)
 
-	IDXBinaryNotEq       = ID(0x80)
-	IDXBinaryLessThan    = ID(0x81)
-	IDXBinaryLessEq      = ID(0x82)
-	IDXBinaryEqEq        = ID(0x83)
-	IDXBinaryGreaterEq   = ID(0x84)
-	IDXBinaryGreaterThan = ID(0x85)
+	IDXBinaryNotEq       = ID(0x90)
+	IDXBinaryLessThan    = ID(0x91)
+	IDXBinaryLessEq      = ID(0x92)
+	IDXBinaryEqEq        = ID(0x93)
+	IDXBinaryGreaterEq   = ID(0x94)
+	IDXBinaryGreaterThan = ID(0x95)
 
-	IDXBinaryAnd = ID(0x88)
-	IDXBinaryOr  = ID(0x89)
-	IDXBinaryAs  = ID(0x8A)
+	IDXBinaryAnd = ID(0x98)
+	IDXBinaryOr  = ID(0x99)
+	IDXBinaryAs  = ID(0x9A)
 
-	IDXAssociativePlus = ID(0x90)
-	IDXAssociativeStar = ID(0x91)
-	IDXAssociativeAmp  = ID(0x92)
-	IDXAssociativePipe = ID(0x93)
-	IDXAssociativeHat  = ID(0x94)
-	IDXAssociativeAnd  = ID(0x95)
-	IDXAssociativeOr   = ID(0x96)
+	IDXAssociativePlus = ID(0xA0)
+	IDXAssociativeStar = ID(0xA1)
+	IDXAssociativeAmp  = ID(0xA2)
+	IDXAssociativePipe = ID(0xA3)
+	IDXAssociativeHat  = ID(0xA4)
+	IDXAssociativeAnd  = ID(0xA5)
+	IDXAssociativeOr   = ID(0xA6)
 
-	IDXUnaryPlus  = ID(0x9C)
-	IDXUnaryMinus = ID(0x9D)
-	IDXUnaryNot   = ID(0x9F)
+	IDXUnaryPlus  = ID(0xAC)
+	IDXUnaryMinus = ID(0xAD)
+	IDXUnaryNot   = ID(0xAF)
 )
 
 const (
-	minKeyword = 0xA0
-	maxKeyword = 0xBF
+	minKeyword = 0xB0
+	maxKeyword = 0xCF
 
-	IDAssert     = ID(0xA0)
-	IDBreak      = ID(0xA1)
-	IDConst      = ID(0xA2)
-	IDContinue   = ID(0xA3)
-	IDElse       = ID(0xA4)
-	IDEndwhile   = ID(0xA5)
-	IDFunc       = ID(0xA6)
-	IDIOBind     = ID(0xA7)
-	IDIOLimit    = ID(0xA8)
-	IDIf         = ID(0xA9)
-	IDImplements = ID(0xAA)
-	IDInv        = ID(0xAB)
-	IDIterate    = ID(0xAC)
-	IDPost       = ID(0xAD)
-	IDPre        = ID(0xAE)
-	IDPri        = ID(0xAF)
-	IDPub        = ID(0xB0)
-	IDReturn     = ID(0xB1)
-	IDStruct     = ID(0xB2)
-	IDUse        = ID(0xB3)
-	IDVar        = ID(0xB4)
-	IDVia        = ID(0xB5)
-	IDWhile      = ID(0xB6)
-	IDYield      = ID(0xB7)
+	IDAssert     = ID(0xB0)
+	IDBreak      = ID(0xB1)
+	IDConst      = ID(0xB2)
+	IDContinue   = ID(0xB3)
+	IDElse       = ID(0xB4)
+	IDEndwhile   = ID(0xB5)
+	IDFunc       = ID(0xB6)
+	IDIOBind     = ID(0xB7)
+	IDIOLimit    = ID(0xB8)
+	IDIf         = ID(0xB9)
+	IDImplements = ID(0xBA)
+	IDInv        = ID(0xBB)
+	IDIterate    = ID(0xBC)
+	IDPost       = ID(0xBD)
+	IDPre        = ID(0xBE)
+	IDPri        = ID(0xBF)
+	IDPub        = ID(0xC0)
+	IDReturn     = ID(0xC1)
+	IDStruct     = ID(0xC2)
+	IDUse        = ID(0xC3)
+	IDVar        = ID(0xC4)
+	IDVia        = ID(0xC5)
+	IDWhile      = ID(0xC6)
+	IDYield      = ID(0xC7)
 )
 
 const (
-	minTypeModifier = 0xC0
-	maxTypeModifier = 0xCF
+	minTypeModifier = 0xD0
+	maxTypeModifier = 0xDF
 
-	IDArray = ID(0xC0)
-	IDNptr  = ID(0xC1)
-	IDPtr   = ID(0xC2)
-	IDSlice = ID(0xC3)
-	IDTable = ID(0xC4)
+	IDArray = ID(0xD0)
+	IDNptr  = ID(0xD1)
+	IDPtr   = ID(0xD2)
+	IDSlice = ID(0xD3)
+	IDTable = ID(0xD4)
 )
 
 const (
-	minBuiltInLiteral    = 0xD0
-	minBuiltInNumLiteral = 0xE0
-	maxBuiltInNumLiteral = 0xEF
-	maxBuiltInLiteral    = 0xEF
+	minBuiltInLiteral    = 0xE0
+	minBuiltInNumLiteral = 0xF0
+	maxBuiltInNumLiteral = 0xFF
+	maxBuiltInLiteral    = 0xFF
 
-	IDFalse   = ID(0xD0)
-	IDTrue    = ID(0xD1)
-	IDNothing = ID(0xD2)
-	IDNullptr = ID(0xD3)
-	IDOk      = ID(0xD4)
+	IDFalse   = ID(0xE0)
+	IDTrue    = ID(0xE1)
+	IDNothing = ID(0xE2)
+	IDNullptr = ID(0xE3)
+	IDOk      = ID(0xE4)
 
-	ID0   = ID(0xE0)
-	ID1   = ID(0xE1)
-	ID2   = ID(0xE2)
-	ID4   = ID(0xE3)
-	ID8   = ID(0xE4)
-	ID16  = ID(0xE5)
-	ID32  = ID(0xE6)
-	ID64  = ID(0xE7)
-	ID128 = ID(0xE8)
-	ID256 = ID(0xE9)
+	ID0   = ID(0xF0)
+	ID1   = ID(0xF1)
+	ID2   = ID(0xF2)
+	ID4   = ID(0xF3)
+	ID8   = ID(0xF4)
+	ID16  = ID(0xF5)
+	ID32  = ID(0xF6)
+	ID64  = ID(0xF7)
+	ID128 = ID(0xF8)
+	ID256 = ID(0xF9)
 )
 
 const (
@@ -662,13 +661,7 @@
 )
 
 var builtInsByID = [nBuiltInIDs]string{
-	IDOpenParen:    "(",
-	IDCloseParen:   ")",
-	IDOpenBracket:  "[",
-	IDCloseBracket: "]",
-	IDOpenCurly:    "{",
-	IDCloseCurly:   "}",
-
+	IDSemicolon: ";",
 	IDDot:       ".",
 	IDDotDot:    "..",
 	IDDotDotEq:  "..=",
@@ -676,7 +669,14 @@
 	IDExclam:    "!",
 	IDQuestion:  "?",
 	IDColon:     ":",
-	IDSemicolon: ";",
+
+	IDOpenParen:   "(",
+	IDCloseParen:  ")",
+	IDOpenBracket: "[",
+
+	IDCloseBracket: "]",
+	IDOpenCurly:    "{",
+	IDCloseCurly:   "}",
 
 	IDPlusEq:    "+=",
 	IDMinusEq:   "-=",