Lower global static array and record access

This commit is contained in:
2026-01-30 23:21:19 +01:00
parent 08b5325f58
commit a00f0d57b8
3 changed files with 323 additions and 462 deletions

View File

@@ -38,47 +38,14 @@ end
desc 'Convert previous stage language into the current stage language'
task :convert do
File.open('boot/stage19/cl.elna', 'w') do |current_stage|
File.readlines('boot/stage18/cl.elna').each do |line|
current_stage << "\tf();\n" if line.include? "if _compile() then"
File.open('boot/stage20/cl.elna', 'w') do |current_stage|
File.readlines('boot/stage19/cl.elna').each do |line|
if line.include? "_assign_at(@classification, 1, ElnaLexerClass.eof)"
current_stage << "\tclassification[1] := ElnaLexerClass.eof;\n"
else
current_stage << line
if line == "type\n"
current_stage << <<-RECORD
Pair = record
first: Word;
second: Word
end;
R1 = record
field1: Word;
field2: [4]Word;
field3: Word
end;
R2 = record
field1: Word;
field3: Word;
field4: Word;
field5: Word;
field6: Word;
field2: Word
end;
RECORD
end
end
end
current_stage << <<~EPILOGUE
proc f();
var
v1: Word;
r: ^R1;
begin
r := malloc(#size(R1));
v1 := r^.field2[2];
printf("# %i\\n\\0", v1)
end;
EPILOGUE
end
end