aboutsummaryrefslogtreecommitdiff
path: root/cl.elna
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-13 18:14:45 +0200
committerEugen Wissner <belka@caraus.de>2026-07-13 18:14:45 +0200
commit500c0676b3f6cd5a2297987d5b0dc7ccf34a28d9 (patch)
treea394c73de9273489e6045f3d252714b5ac69b17c /cl.elna
parent97741a01323021ccec8b0b60c6f8318c88ac373a (diff)
downloadelna-500c0676b3f6cd5a2297987d5b0dc7ccf34a28d9.tar.gz
Make return statement part of the body and not a statement
Diffstat (limited to 'cl.elna')
-rw-r--r--cl.elna213
1 files changed, 0 insertions, 213 deletions
diff --git a/cl.elna b/cl.elna
index f716676..fb076ab 100644
--- a/cl.elna
+++ b/cl.elna
@@ -4728,23 +4728,6 @@ begin
return first_procedure
end
-(**
- * Skips comments.
- *)
-proc elna_lexer_skip_empty_lines(cursor: ^ElnaLexerCursor)
-var
- token: ^ElnaLexerToken
-begin
- .skip_empty_lines_rerun;
-
- token := elna_lexer_peek(cursor);
-
- if token^.kind = ElnaLexerKind.comment then
- elna_lexer_read(cursor);
- goto skip_empty_lines_rerun
- end
-end
-
proc elna_parser_type_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeTypeDeclaration
var
result: ^ElnaTreeTypeDeclaration
@@ -6163,202 +6146,6 @@ begin
elna_symbol_table_enter(symbol_table_global, "String".ptr, 6, current_info)
end
-(**
- * One time lexer initialization.
- *)
-proc elna_lexer_initialize(cursor: ^ElnaLexerCursor; code_pointer: Word)
-begin
- elna_lexer_classifications();
- elna_lexer_transitions();
-
- cursor^.start := code_pointer;
- cursor^.finish := code_pointer;
- cursor^.token := nil;
- cursor^.position.start_location.line := 1;
- cursor^.position.start_location.column := 1;
- cursor^.position.end_location.line := 1;
- cursor^.position.end_location.column := 1
-end
-
-proc elna_lexer_classify_finalize(start_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
-var
- character: Char
- result: ^ElnaLexerToken
-begin
- character := start_position^;
-
- if character = ':' then
- result := elna_lexer_token_create(ElnaLexerKind.colon, position)
- elsif character = '.' then
- result := elna_lexer_token_create(ElnaLexerKind.dot, position)
- elsif character = '(' then
- result := elna_lexer_token_create(ElnaLexerKind.left_paren, position)
- elsif character = '-' then
- result := elna_lexer_token_create(ElnaLexerKind.minus, position)
- elsif character = '<' then
- result := elna_lexer_token_create(ElnaLexerKind.less_than, position)
- elsif character = '>' then
- result := elna_lexer_token_create(ElnaLexerKind.greater_than, position)
- end;
- return result
-end
-
-proc elna_lexer_classify_single(start_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
-var
- character: Char
- result: ^ElnaLexerToken
-begin
- result := malloc(#size(ElnaLexerToken));
- character := start_position^;
-
- if character = ';' then
- result := elna_lexer_token_create(ElnaLexerKind.semicolon, position)
- elsif character = ',' then
- result := elna_lexer_token_create(ElnaLexerKind.comma, position)
- elsif character = ')' then
- result := elna_lexer_token_create(ElnaLexerKind.right_paren, position)
- elsif character = '@' then
- result := elna_lexer_token_create(ElnaLexerKind.at, position)
- elsif character = '~' then
- result := elna_lexer_token_create(ElnaLexerKind.not, position)
- elsif character = '&' then
- result := elna_lexer_token_create(ElnaLexerKind.and, position)
- elsif character = '+' then
- result := elna_lexer_token_create(ElnaLexerKind.plus, position)
- elsif character = '*' then
- result := elna_lexer_token_create(ElnaLexerKind.multiplication, position)
- elsif character = '=' then
- result := elna_lexer_token_create(ElnaLexerKind.equals, position)
- elsif character = '%' then
- result := elna_lexer_token_create(ElnaLexerKind.remainder, position)
- elsif character = '/' then
- result := elna_lexer_token_create(ElnaLexerKind.division, position)
- elsif character = '.' then
- result := elna_lexer_token_create(ElnaLexerKind.dot, position)
- elsif character = '^' then
- result := elna_lexer_token_create(ElnaLexerKind.hat, position)
- elsif character = '[' then
- result := elna_lexer_token_create(ElnaLexerKind.left_square, position)
- elsif character = ']' then
- result := elna_lexer_token_create(ElnaLexerKind.right_square, position)
- end;
- return result
-end
-
-proc elna_lexer_classify_composite(start_position, one_before_last: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
-var
- first_character: Char
- last_character: Char
- result: ^ElnaLexerToken
-begin
- first_character := start_position^;
- last_character := one_before_last^;
-
- if first_character = ':' then
- result := elna_lexer_token_create(ElnaLexerKind.assignment, position)
- elsif first_character = '<' then
- if last_character = '=' then
- result := elna_lexer_token_create(ElnaLexerKind.less_equal, position)
- elsif last_character = '>' then
- result := elna_lexer_token_create(ElnaLexerKind.not_equal, position)
- end
- elsif first_character = '>' then
- if last_character = '=' then
- result := elna_lexer_token_create(ElnaLexerKind.greater_equal, position)
- end
- elsif first_character = '-' then
- result := elna_lexer_token_create(ElnaLexerKind.arrow, position)
- end;
- return result
-end
-
-proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: Word): ^ElnaLexerToken
-var
- token: ^ElnaLexerToken
-begin
- token := nil;
-
- if action_to_perform = ElnaLexerAction.none then
- elsif action_to_perform = ElnaLexerAction.accumulate then
- elna_lexer_advance(cursor)
- elsif action_to_perform = ElnaLexerAction.skip then
- elna_lexer_classify_space(cursor^.start, @cursor^.position.end_location);
- cursor^.start := cursor^.start + 1;
- cursor^.finish := cursor^.finish + 1
- elsif action_to_perform = ElnaLexerAction.single then
- elna_lexer_advance(cursor);
-
- token := elna_lexer_classify_single(cursor^.start, @cursor^.position)
- elsif action_to_perform = ElnaLexerAction.eof then
- token := malloc(#size(ElnaLexerToken));
- token^.kind := ElnaLexerKind.eof
- elsif action_to_perform = ElnaLexerAction.finalize then
- token := elna_lexer_classify_finalize(cursor^.start, @cursor^.position)
- elsif action_to_perform = ElnaLexerAction.composite then
- token := elna_lexer_classify_composite(cursor^.start, cursor^.finish, @cursor^.position);
-
- elna_lexer_advance(cursor)
- elsif action_to_perform = ElnaLexerAction.key_id then
- token := elna_lexer_classify_keyword(cursor^.start, cursor^.finish, @cursor^.position)
- elsif action_to_perform = ElnaLexerAction.integer then
- token := elna_lexer_classify_integer(cursor^.start, cursor^.finish, @cursor^.position)
- elsif action_to_perform = ElnaLexerAction.delimited then
- elna_lexer_advance(cursor);
-
- token := elna_lexer_classify_delimited(cursor^.start, cursor^.finish, @cursor^.position)
- end;
- return token
-end
-
-proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor; kind: ^ElnaLexerKind): ^ElnaLexerToken
-var
- next_transition: ^ElnaLexerTransition
- current_character: Char
-begin
- current_character := cursor^.finish^;
- next_transition := elna_lexer_get_transition(cursor^.state, classification[current_character + 1]);
- cursor^.state := next_transition^.next_state;
-
- return elna_lexer_execute_action(cursor, next_transition^.action, kind)
-end
-
-(**
- * Reads the next token and writes its type into the address in the kind parameter.
- * Resets the lexer state for reading the next token.
- *)
-proc elna_lexer_peek(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
-var
- token: ^ElnaLexerToken
-begin
- if cursor^.token = nil then
- cursor^.state := ElnaLexerState.start;
-
- .elna_lexer_peek_loop;
- token := elna_lexer_execute_transition(cursor);
-
- if cursor^.state <> ElnaLexerState.finish then
- goto elna_lexer_peek_loop
- end;
- cursor^.token := token
- end;
- return cursor^.token
-end
-
-(**
- * Reads the token and advance the lexer.
- *)
-proc elna_lexer_read(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
-var
- token: ^ElnaLexerToken
-begin
- token := elna_lexer_peek(cursor);
- cursor^.token := nil;
- cursor^.start := cursor^.finish;
- cursor^.position.start_location := cursor^.position.end_location;
-
- return token
-end
-
proc initialize_global_state()
begin
stdin := fdopen(0, "r\0".ptr);