def classify.go

bolt@1.27.0.0 · src/syntax/lex.bend:99

import bolt@1.27.0.0/src/syntax/lex.bend as Lex
import Base

99# the class of a code point, given the class any other character would get.
100# Written as comparisons rather than as `case '.':` arms: a character literal
101# in a pattern is a U32 literal inside a constructor pattern, and bend's C
102# backend pays about 90 MB for each one -- these eighteen cost 1.57 GB as
103# literal arms and 0.10 GB written this way.
104def classify.go(+xx: U32, other: Class) -> Class:
105  Bool.pick(Class, U32.is_eq(xx, 46), CDot{},  # '.'
106  Bool.pick(Class, U32.is_eq(xx, 34), CQuote{},  # '"'
107  Bool.pick(Class, U32.is_eq(xx, 39), CTick{},  # '\''
108  Bool.pick(Class, U32.is_eq(xx, 92), CBack{},  # '\\'
109  Bool.pick(Class, U32.is_eq(xx, 35), CHash{},  # '#'
110  Bool.pick(Class, U32.is_eq(xx, 32), CSpace{},  # ' '
111  Bool.pick(Class, U32.is_eq(xx, 9), CSpace{},  # '\t'
112  Bool.pick(Class, U32.is_eq(xx, 13), CSpace{},  # '\r'
113  Bool.pick(Class, U32.is_eq(xx, 10), CNewline{},  # '\n'
114  Bool.pick(Class, U32.is_eq(xx, 58), CColon{},  # ':'
115  Bool.pick(Class, U32.is_eq(xx, 44), CComma{},  # ','
116  Bool.pick(Class, U32.is_eq(xx, 40), COpen{},  # '('
117  Bool.pick(Class, U32.is_eq(xx, 91), COpen{},  # '['
118  Bool.pick(Class, U32.is_eq(xx, 123), COpen{},  # '{'
119  Bool.pick(Class, U32.is_eq(xx, 41), CClose{},  # ')'
120  Bool.pick(Class, U32.is_eq(xx, 93), CClose{},  # ']'
121  Bool.pick(Class, U32.is_eq(xx, 125), CClose{},  # '}'
122  Bool.pick(Class, U32.is_eq(xx, 95), CAlpha{},  # '_'
123    other))))))))))))))))))

Uses (4)

Used by (1)