From 216dc59f0b1507a7529ce34332463f9443a05cd4 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 10 Sep 2025 23:57:56 +0200 Subject: Support comments between (* and *) --- Rakefile | 47 ++++++++++------------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) (limited to 'Rakefile') diff --git a/Rakefile b/Rakefile index 55f9f01..32157d0 100644 --- a/Rakefile +++ b/Rakefile @@ -14,7 +14,7 @@ directory 'build/boot' directory 'build/valid' def compile(input, output) - sh ENV.fetch('CC', 'gcc'), '-nostdlib', '-o', output, input + sh ENV.fetch('CC', 'gcc'), '-nostdlib', '-fpie', '-g', '-o', output, input end def run(exe) @@ -39,43 +39,16 @@ end desc 'Convert previous stage language into the current stage language' task :convert do - 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"; - - # 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") + File.open('boot/stage9.elna', 'w') do |current_stage| + File.readlines('boot/stage8.elna').each do |line| + comment_match = /^(\s*)#(.*)/.match line + + if comment_match.nil? current_stage << line + elsif comment_match[2].empty? + current_stage << "\n" + else + current_stage << "#{comment_match[1]}(* #{comment_match[2].strip} *)\n" end end end -- cgit v1.2.3