|
1 | 1 | import util.common.ty_mach;
|
| 2 | +import util.common.ty_mach_to_str; |
| 3 | +import std._int; |
| 4 | +import std._uint; |
2 | 5 |
|
3 | 6 | type op = tag
|
4 | 7 | (PLUS(),
|
@@ -107,10 +110,10 @@ type token = tag
|
107 | 110 |
|
108 | 111 | /* Literals */
|
109 | 112 | LIT_INT(int),
|
110 |
| - LIT_UINT(int), |
| 113 | + LIT_UINT(uint), |
111 | 114 | LIT_MACH_INT(ty_mach, int),
|
112 | 115 | LIT_STR(str),
|
113 |
| - LIT_CHAR(int), |
| 116 | + LIT_CHAR(char), |
114 | 117 | LIT_BOOL(bool),
|
115 | 118 |
|
116 | 119 | /* Name components */
|
@@ -149,6 +152,149 @@ type token = tag
|
149 | 152 | BRACEQUOTE(str),
|
150 | 153 | EOF());
|
151 | 154 |
|
| 155 | +fn to_str(token t) -> str { |
| 156 | + alt (t) { |
| 157 | + case (OP(_)) { ret "<op>"; } |
| 158 | + case (OPEQ(_)) { ret "<op>="; } |
| 159 | + case (AS()) { ret "as"; } |
| 160 | + case (WITH()) { ret "with"; } |
| 161 | + |
| 162 | + /* Structural symbols */ |
| 163 | + case (AT()) { ret "@"; } |
| 164 | + case (DOT()) { ret "."; } |
| 165 | + case (COMMA()) { ret ","; } |
| 166 | + case (SEMI()) { ret ";"; } |
| 167 | + case (COLON()) { ret ":"; } |
| 168 | + case (RARROW()) { ret "->"; } |
| 169 | + case (SEND()) { ret "<|"; } |
| 170 | + case (LARROW()) { ret "<-"; } |
| 171 | + case (LPAREN()) { ret "("; } |
| 172 | + case (RPAREN()) { ret ")"; } |
| 173 | + case (LBRACKET()) { ret "["; } |
| 174 | + case (RBRACKET()) { ret "]"; } |
| 175 | + case (LBRACE()) { ret "{"; } |
| 176 | + case (RBRACE()) { ret "}"; } |
| 177 | +
|
| 178 | + /* Module and crate keywords */ |
| 179 | + case (MOD()) { ret "mod"; } |
| 180 | + case (USE()) { ret "use"; } |
| 181 | + case (AUTH()) { ret "auth"; } |
| 182 | + case (META()) { ret "meta"; } |
| 183 | + |
| 184 | + /* Metaprogramming keywords */ |
| 185 | + case (SYNTAX()) { ret "syntax"; } |
| 186 | + case (POUND()) { ret "#"; } |
| 187 | + |
| 188 | + /* Statement keywords */ |
| 189 | + case (IF()) { ret "if"; } |
| 190 | + case (ELSE()) { ret "else"; } |
| 191 | + case (DO()) { ret "do"; } |
| 192 | + case (WHILE()) { ret "while"; } |
| 193 | + case (ALT()) { ret "alt"; } |
| 194 | + case (CASE()) { ret "case"; } |
| 195 | + |
| 196 | + case (FAIL()) { ret "fail"; } |
| 197 | + case (DROP()) { ret "drop"; } |
| 198 | + |
| 199 | + case (IN()) { ret "in"; } |
| 200 | + case (FOR()) { ret "for"; } |
| 201 | + case (EACH()) { ret "each"; } |
| 202 | + case (PUT()) { ret "put"; } |
| 203 | + case (RET()) { ret "ret"; } |
| 204 | + case (BE()) { ret "be"; } |
| 205 | + |
| 206 | + /* Type and type-state keywords */ |
| 207 | + case (TYPE()) { ret "type"; } |
| 208 | + case (CHECK()) { ret "check"; } |
| 209 | + case (CLAIM()) { ret "claim"; } |
| 210 | + case (PROVE()) { ret "prove"; } |
| 211 | + |
| 212 | + /* Effect keywords */ |
| 213 | + case (IO()) { ret "io"; } |
| 214 | + case (STATE()) { ret "state"; } |
| 215 | + case (UNSAFE()) { ret "unsafe"; } |
| 216 | + |
| 217 | + /* Type qualifiers */ |
| 218 | + case (NATIVE()) { ret "native"; } |
| 219 | + case (AUTO()) { ret "auto"; } |
| 220 | + case (MUTABLE()) { ret "mutable"; } |
| 221 | + |
| 222 | + /* Name management */ |
| 223 | + case (IMPORT()) { ret "import"; } |
| 224 | + case (EXPORT()) { ret "export"; } |
| 225 | + |
| 226 | + /* Value / stmt declarators */ |
| 227 | + case (LET()) { ret "let"; } |
| 228 | +
|
| 229 | + /* Magic runtime services */ |
| 230 | + case (LOG()) { ret "log"; } |
| 231 | + case (SPAWN()) { ret "spawn"; } |
| 232 | + case (BIND()) { ret "bind"; } |
| 233 | + case (THREAD()) { ret "thread"; } |
| 234 | + case (YIELD()) { ret "yield"; } |
| 235 | + case (JOIN()) { ret "join"; } |
| 236 | + |
| 237 | + /* Literals */ |
| 238 | + case (LIT_INT(i)) { ret _int.to_str(i, 10u); } |
| 239 | + case (LIT_UINT(u)) { ret _uint.to_str(u, 10u); } |
| 240 | + case (LIT_MACH_INT(tm, i)) { |
| 241 | + ret _int.to_str(i, 10u) |
| 242 | + + "_" + ty_mach_to_str(tm); |
| 243 | + } |
| 244 | + |
| 245 | + case (LIT_STR(s)) { |
| 246 | + // FIXME: escape. |
| 247 | + ret "\"" + s + "\""; |
| 248 | + } |
| 249 | + case (LIT_CHAR(c)) { |
| 250 | + // FIXME: escape and encode. |
| 251 | + auto tmp = ""; |
| 252 | + tmp += (c as u8); |
| 253 | + ret tmp; |
| 254 | + } |
| 255 | + |
| 256 | + case (LIT_BOOL(b)) { |
| 257 | + if (b) { ret "true"; } else { ret "false"; } |
| 258 | + } |
| 259 | + |
| 260 | + /* Name components */ |
| 261 | + case (IDENT(s)) { ret s; } |
| 262 | + case (IDX(i)) { ret "_" + _int.to_str(i, 10u); } |
| 263 | + case (UNDERSCORE()) { ret "_"; } |
| 264 | + |
| 265 | + /* Reserved type names */ |
| 266 | + case (BOOL()) { ret "bool"; } |
| 267 | + case (INT()) { ret "int"; } |
| 268 | + case (UINT()) { ret "uint"; } |
| 269 | + case (FLOAT()) { ret "float"; } |
| 270 | + case (CHAR()) { ret "char"; } |
| 271 | + case (STR()) { ret "str"; } |
| 272 | + case (MACH(tm)) { ret ty_mach_to_str(tm); } |
| 273 | + |
| 274 | + /* Algebraic type constructors */ |
| 275 | + case (REC()) { ret "rec"; } |
| 276 | + case (TUP()) { ret "tup"; } |
| 277 | + case (TAG()) { ret "tag"; } |
| 278 | + case (VEC()) { ret "vec"; } |
| 279 | + case (ANY()) { ret "any"; } |
| 280 | + |
| 281 | + /* Callable type constructors */ |
| 282 | + case (FN()) { ret "fn"; } |
| 283 | + case (ITER()) { ret "iter"; } |
| 284 | + |
| 285 | + /* Object type */ |
| 286 | + case (OBJ()) { ret "obj"; } |
| 287 | + |
| 288 | + /* Comm and task types */ |
| 289 | + case (CHAN()) { ret "chan"; } |
| 290 | + case (PORT()) { ret "port"; } |
| 291 | + case (TASK()) { ret "task"; } |
| 292 | + |
| 293 | + case (BRACEQUOTE(_)) { ret "<bracequote>"; } |
| 294 | + case (EOF()) { ret "<eof>"; } |
| 295 | + } |
| 296 | +} |
| 297 | + |
152 | 298 |
|
153 | 299 |
|
154 | 300 | // Local Variables:
|
|
0 commit comments