Support variable declaration initializer

This commit is contained in:
2025-08-19 22:58:39 +02:00
parent 569139d44a
commit 0c2a396320
10 changed files with 175 additions and 102 deletions

View File

@@ -183,44 +183,45 @@ proc lexer_escape(escape: Char, result: ^Char) -> Bool;
var
successful: Bool;
begin
if escape = 'n' then
result^ := '\n';
successful := true
elsif escape = 'a' then
result^ := '\a';
successful := true
elsif escape = 'b' then
result^ := '\b';
successful := true
elsif escape = 't' then
result^ := '\t';
successful := true
elsif escape = 'f' then
result^ := '\f';
successful := true
elsif escape = 'r' then
result^ := '\r';
successful := true
elsif escape = 'v' then
result^ := '\v';
successful := true
elsif escape = '\\' then
result^ := '\\';
successful := true
elsif escape = '\'' then
result^ := '\'';
successful := true
elsif escape = '"' then
result^ := '"';
successful := true
elsif escape = '?' then
result^ := '\?';
successful := true
elsif escape = '0' then
result^ := '\0';
successful := true
else
successful := false
case escape of
'n':
result^ := '\n';
successful := true
| 'a':
result^ := '\a';
successful := true
| 'b':
result^ := '\b';
successful := true
| 't':
result^ := '\t';
successful := true
| 'f':
result^ := '\f';
successful := true
| 'r':
result^ := '\r';
successful := true
| 'v':
result^ := '\v';
successful := true
| '\\':
result^ := '\\';
successful := true
| '\'':
result^ := '\'';
successful := true
| '"':
result^ := '"';
successful := true
| '?':
result^ := '\?';
successful := true
| '0':
result^ := '\0';
successful := true
else
successful := false
end;
return successful
end;
@@ -304,11 +305,9 @@ proc lexer_string(source_code: ^SourceCode, token_content: ^StringBuffer) -> Boo
var
token_end, constructed_string: ^Char;
token_length: Word;
is_valid: Bool;
is_valid: Bool := true;
next_char: Char;
begin
is_valid := true;
while is_valid & ~source_code_empty(source_code) & source_code_head(source_code^) <> '"' do
is_valid := lexer_character(source_code, @next_char);
@@ -625,9 +624,8 @@ end;
proc parse(tokens: ^Token, tokens_size: Word);
var
current_token: ^Token;
i: Word;
i: Word := 0;
begin
i := 0u;
while i < tokens_size do
current_token := tokens + i;
@@ -787,11 +785,9 @@ end;
proc compile_in_stages(command_line: ^CommandLine, source_code: SourceCode) -> Int;
var
return_code: Int;
return_code: Int := 0;
lexer: Tokenizer;
begin
return_code := 0;
if command_line^.lex or command_line^.parse then
lexer := lexer_text(source_code)
end;
@@ -808,11 +804,9 @@ var
tokens_size: Word;
source_code: SourceCode;
command_line: ^CommandLine;
return_code: Int;
return_code: Int := 0;
source_file: ^SourceFile;
begin
return_code := 0;
command_line := parse_command_line(argc, argv);
if command_line = nil then
return_code := 2