Add an else to the case statement

This commit is contained in:
2025-04-11 15:28:43 +02:00
parent f68667d5e5
commit 6fd1bda112
6 changed files with 173 additions and 169 deletions

View File

@ -518,138 +518,139 @@ begin
while i < tokens_size do
current_token := tokens + i;
if current_token^.kind = TokenKind._if then
write_s("IF")
elsif current_token^.kind = TokenKind._then then
write_s("THEN")
elsif current_token^.kind = TokenKind._else then
write_s("ELSE")
elsif current_token^.kind = TokenKind._elsif then
write_s("ELSIF")
elsif current_token^.kind = TokenKind._while then
write_s("WHILE")
elsif current_token^.kind = TokenKind._do then
write_s("DO")
elsif current_token^.kind = TokenKind._proc then
write_s("PROC")
elsif current_token^.kind = TokenKind._begin then
write_s("BEGIN")
elsif current_token^.kind = TokenKind._end then
write_s("END")
elsif current_token^.kind = TokenKind._extern then
write_s("EXTERN")
elsif current_token^.kind = TokenKind._const then
write_s("CONST")
elsif current_token^.kind = TokenKind._var then
write_s("VAR")
elsif current_token^.kind = TokenKind.array then
write_s("ARRAY")
elsif current_token^.kind = TokenKind._of then
write_s("OF")
elsif current_token^.kind = TokenKind._type then
write_s("TYPE")
elsif current_token^.kind = TokenKind._record then
write_s("RECORD")
elsif current_token^.kind = TokenKind._union then
write_s("UNION")
elsif current_token^.kind = TokenKind.pointer then
write_s("POINTER")
elsif current_token^.kind = TokenKind.to then
write_s("TO")
elsif current_token^.kind = TokenKind.boolean then
write_s("BOOLEAN<");
write_b(current_token^.value.boolean_value);
write_c('>')
elsif current_token^.kind = TokenKind._nil then
write_s("NIL")
elsif current_token^.kind = TokenKind.and then
write_s("AND")
elsif current_token^.kind = TokenKind._or then
write_s("OR")
elsif current_token^.kind = TokenKind.not then
write_s("NOT")
elsif current_token^.kind = TokenKind._return then
write_s("RETURN")
elsif current_token^.kind = TokenKind._cast then
write_s("CAST")
elsif current_token^.kind = TokenKind.shift_left then
write_s("<<")
elsif current_token^.kind = TokenKind.shift_right then
write_s(">>")
elsif current_token^.kind = TokenKind.identifier then
write_c('<');
write_s(current_token^.value.string);
write_c('>')
elsif current_token^.kind = TokenKind.left_paren then
write_s("(")
elsif current_token^.kind = TokenKind.right_paren then
write_s(")")
elsif current_token^.kind = TokenKind.left_square then
write_s("[")
elsif current_token^.kind = TokenKind.right_square then
write_s("]")
elsif current_token^.kind = TokenKind.greater_equal then
write_s(">=")
elsif current_token^.kind = TokenKind.less_equal then
write_s("<=")
elsif current_token^.kind = TokenKind.greater_than then
write_s(">")
elsif current_token^.kind = TokenKind.less_than then
write_s("<")
elsif current_token^.kind = TokenKind.equal then
write_s("=")
elsif current_token^.kind = TokenKind.not_equal then
write_s("<>")
elsif current_token^.kind = TokenKind.semicolon then
write_c(';')
elsif current_token^.kind = TokenKind.dot then
write_c('.')
elsif current_token^.kind = TokenKind.comma then
write_c(',')
elsif current_token^.kind = TokenKind.plus then
write_c('+')
elsif current_token^.kind = TokenKind.minus then
write_c('-')
elsif current_token^.kind = TokenKind.multiplication then
write_c('*')
elsif current_token^.kind = TokenKind.division then
write_c('/')
elsif current_token^.kind = TokenKind.remainder then
write_c('%')
elsif current_token^.kind = TokenKind.assignment then
write_s(":=")
elsif current_token^.kind = TokenKind.colon then
write_c(':')
elsif current_token^.kind = TokenKind.hat then
write_c('^')
elsif current_token^.kind = TokenKind.at then
write_c('@')
elsif current_token^.kind = TokenKind.comment then
write_s("(* COMMENT *)")
elsif current_token^.kind = TokenKind.integer then
write_c('<');
write_i(current_token^.value.int_value);
write_c('>')
elsif current_token^.kind = TokenKind.word then
write_c('<');
write_i(current_token^.value.int_value);
write_s("u>")
elsif current_token^.kind = TokenKind.character then
write_c('<');
write_i(cast(current_token^.value.char_value: Int));
write_s("c>")
elsif current_token^.kind = TokenKind.string then
write_s("\"...\"")
elsif current_token^.kind = TokenKind._defer then
write_s("DEFER")
elsif current_token^.kind = TokenKind.exclamation then
write_c('!')
elsif current_token^.kind = TokenKind.arrow then
write_s("->")
else
write_s("UNKNOWN<");
write_i(cast(current_token^.kind: Int));
write_c('>')
case current_token^.kind of
TokenKind._if:
write_s("IF")
| TokenKind._then:
write_s("THEN")
| TokenKind._else:
write_s("ELSE")
| TokenKind._elsif:
write_s("ELSIF")
| TokenKind._while:
write_s("WHILE")
| TokenKind._do:
write_s("DO")
| TokenKind._proc:
write_s("PROC")
| TokenKind._begin:
write_s("BEGIN")
| TokenKind._end:
write_s("END")
| TokenKind._extern:
write_s("EXTERN")
| TokenKind._const:
write_s("CONST")
| TokenKind._var:
write_s("VAR")
| TokenKind.array:
write_s("ARRAY")
| TokenKind._of:
write_s("OF")
| TokenKind._type:
write_s("TYPE")
| TokenKind._record:
write_s("RECORD")
| TokenKind._union:
write_s("UNION")
| TokenKind.pointer:
write_s("POINTER")
| TokenKind.to:
write_s("TO")
| TokenKind.boolean:
write_s("BOOLEAN<");
write_b(current_token^.value.boolean_value);
write_c('>')
| TokenKind._nil:
write_s("NIL")
| TokenKind.and:
write_s("AND")
| TokenKind._or:
write_s("OR")
| TokenKind.not:
write_s("NOT")
| TokenKind._return:
write_s("RETURN")
| TokenKind._cast:
write_s("CAST")
| TokenKind.shift_left:
write_s("<<")
| TokenKind.shift_right:
write_s(">>")
| TokenKind.identifier:
write_c('<');
write_s(current_token^.value.string);
write_c('>')
| TokenKind.left_paren:
write_s("(")
| TokenKind.right_paren:
write_s(")")
| TokenKind.left_square:
write_s("[")
| TokenKind.right_square:
write_s("]")
| TokenKind.greater_equal:
write_s(">=")
| TokenKind.less_equal:
write_s("<=")
| TokenKind.greater_than:
write_s(">")
| TokenKind.less_than:
write_s("<")
| TokenKind.equal:
write_s("=")
| TokenKind.not_equal:
write_s("<>")
| TokenKind.semicolon:
write_c(';')
| TokenKind.dot:
write_c('.')
| TokenKind.comma:
write_c(',')
| TokenKind.plus:
write_c('+')
| TokenKind.minus:
write_c('-')
| TokenKind.multiplication:
write_c('*')
| TokenKind.division:
write_c('/')
| TokenKind.remainder:
write_c('%')
| TokenKind.assignment:
write_s(":=")
| TokenKind.colon:
write_c(':')
| TokenKind.hat:
write_c('^')
| TokenKind.at:
write_c('@')
| TokenKind.comment:
write_s("(* COMMENT *)")
| TokenKind.integer:
write_c('<');
write_i(current_token^.value.int_value);
write_c('>')
| TokenKind.word:
write_c('<');
write_i(current_token^.value.int_value);
write_s("u>")
| TokenKind.character:
write_c('<');
write_i(cast(current_token^.value.char_value: Int));
write_s("c>")
| TokenKind.string:
write_s("\"...\"")
| TokenKind._defer:
write_s("DEFER")
| TokenKind.exclamation:
write_c('!')
| TokenKind.arrow:
write_s("->")
else
write_s("UNKNOWN<");
write_i(cast(current_token^.kind: Int));
write_c('>')
end;
write_c(' ');