Compile static initializers
This commit is contained in:
41
Rakefile
41
Rakefile
@@ -39,11 +39,44 @@ end
|
||||
|
||||
desc 'Convert previous stage language into the current stage language'
|
||||
task :convert do
|
||||
File.open('boot/stage4.elna', 'w') do |current_stage|
|
||||
li_value = nil
|
||||
File.open('boot/stage8.elna', 'w') do |current_stage|
|
||||
File.readlines('boot/stage7.elna').each do |line|
|
||||
if line == ".section .bss\n"
|
||||
current_stage << <<~SECTION
|
||||
const
|
||||
symbol_builtin_name_int := "Int";
|
||||
symbol_builtin_name_word := "Word";
|
||||
symbol_builtin_name_pointer := "Pointer";
|
||||
symbol_builtin_name_char := "Char";
|
||||
symbol_builtin_name_bool := "Bool";
|
||||
|
||||
File.readlines('boot/stage3.elna').each do |line|
|
||||
current_stage << line
|
||||
# Every type info starts with a word describing what type it is.
|
||||
#
|
||||
# PRIMITIVE_TYPE = 1
|
||||
#
|
||||
# Primitive types have only type size.
|
||||
symbol_builtin_type_int := S(1, 4);
|
||||
symbol_builtin_type_word := S(1, 4);
|
||||
symbol_builtin_type_pointer := S(1, 4);
|
||||
symbol_builtin_type_char := S(1, 1);
|
||||
symbol_builtin_type_bool := S(1, 1);
|
||||
|
||||
# Info objects start with a word describing its type.
|
||||
#
|
||||
# INFO_TYPE = 1
|
||||
#
|
||||
# Type info has the type it belongs to.
|
||||
symbol_type_info_int := S(1, @symbol_builtin_type_int);
|
||||
symbol_type_info_word := S(1, @symbol_builtin_type_word);
|
||||
symbol_type_info_pointer := S(1, @symbol_builtin_type_pointer);
|
||||
symbol_type_info_char := S(1, @symbol_builtin_type_char);
|
||||
symbol_type_info_bool := S(1, @symbol_builtin_type_bool);
|
||||
SECTION
|
||||
elsif line == ".section .data\n"
|
||||
current_stage << "var\n"
|
||||
elsif !(line == ".section .text\n" || line == ".globl _start\n")
|
||||
current_stage << line
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user