Implement shift operators

This commit is contained in:
2025-02-15 00:38:46 +01:00
parent ee4ebf64b9
commit 82b3806fd2
7 changed files with 53 additions and 23 deletions

View File

@ -173,7 +173,7 @@ end
proc write_i(value: Int);
var
digit: Int, n: Word,
buffer: array 10 of Char;
buffer: array 10 of Char
begin
n := 10u;
@ -230,7 +230,7 @@ end
proc string_dup(origin: String) -> String;
var
copy: pointer to Char;
copy: pointer to Char
begin
copy := cast(malloc(origin.length): pointer to Char);
strncpy(copy, origin.ptr, origin.length);
@ -244,7 +244,7 @@ end
proc make_position() -> Position;
var
result: Position;
result: Position
begin
return Position(1u, 1u)
end
@ -253,7 +253,7 @@ proc read_source(filename: pointer to Char, result: pointer to String) -> Bool;
var
input_file: pointer to FILE,
source_size: Int,
input: pointer to Byte;
input: pointer to Byte
begin
input_file := fopen(filename, "rb\0".ptr);
@ -349,7 +349,7 @@ end
proc lex_identifier(source_code: pointer to SourceCode, token_content: pointer to String);
var
content_length: Word;
content_length: Word
begin
content_length := 0u;
token_content^ := source_code^.text;
@ -363,7 +363,7 @@ end
proc lex_comment(source_code: pointer to SourceCode, token_content: pointer to String) -> Bool;
var
content_length: Word;
content_length: Word
begin
content_length := 0u;
token_content^ := source_code^.text;
@ -401,7 +401,7 @@ var
token_end: pointer to Char,
constructed_string: pointer to Char,
token_length: Word,
is_valid: Bool;
is_valid: Bool
begin
token_end := input;
@ -439,7 +439,7 @@ end
proc print_tokens(tokens: pointer to Token, tokens_size: Word);
var
current_token: pointer to Token,
i: Word;
i: Word
begin
i := 0u;
while i < tokens_size do
@ -583,7 +583,7 @@ end
proc categorize_identifier(token_content: String) -> Token;
var
current_token: Token;
current_token: Token
begin
if "if" = token_content then
current_token.kind := TOKEN_IF
@ -662,7 +662,7 @@ var
current_token: pointer to Token,
token_length: Word,
first_char: Char,
token_content: String;
token_content: String
begin
tokens_size^ := 0u;
tokens := nil;
@ -827,7 +827,7 @@ end
proc parse_constant_definition(tokens: pointer to pointer to Token,
tokens_size: pointer to Word) -> pointer to ConstantDefinition;
var
result: pointer to ConstantDefinition;
result: pointer to ConstantDefinition
begin
result := cast(calloc(1u, ConstantDefinition.size): pointer to ConstantDefinition);
@ -851,7 +851,7 @@ end
proc parse_program(tokens: pointer to pointer to Token, tokens_size: pointer to Word) -> pointer to Program;
var
result: pointer to Program,
current_constant: pointer to pointer to ConstantDefinition;
current_constant: pointer to pointer to ConstantDefinition
begin
result := cast(calloc(1u, Program.size): pointer to Program);
@ -885,7 +885,7 @@ proc parse_command_line*(argc: Int, argv: pointer to pointer to Char) -> pointer
var
parameter: pointer to pointer to Char,
i: Int,
result: pointer to CommandLine;
result: pointer to CommandLine
begin
i := 1;
result := cast(malloc(CommandLine.size): pointer to CommandLine);
@ -927,7 +927,7 @@ var
tokens: pointer to Token,
tokens_size: Word,
source_code: SourceCode,
command_line: pointer to CommandLine;
command_line: pointer to CommandLine
begin
command_line := parse_command_line(argc, argv);
if command_line = nil then