diff options
Diffstat (limited to 'Rakefile')
| -rw-r--r-- | Rakefile | 44 |
1 files changed, 35 insertions, 9 deletions
@@ -41,17 +41,43 @@ end desc 'Convert previous stage language into the current stage language' task :convert do - File.open('boot/stage14.elna', 'w') do |current_stage| - previous_line = nil - - File.readlines('boot/stage13.elna').each do |line| - if !previous_line.nil? && previous_line.start_with?('begin') && line.strip.start_with?('return') - else - current_stage << previous_line unless previous_line.nil? + File.open('boot/stage16.elna', 'w') do |current_stage| + skip = false + + File.readlines('boot/stage15.elna').each do |line| + if line.strip == 'type' + current_stage << <<~SNIP + type + _elna_tac_declaration = record + next: Word; + name: Word; + length: Word; + body: Word + end; + _integer_literal_node = record + kind: Word; + value: Word; + length: Word + end; + SNIP + elsif line.start_with?('proc _elna_tac_declaration_size') + skip = true + elsif line.start_with?('proc _elna_tac_declaration_get_') + skip = true + elsif line.start_with?('proc _elna_tac_declaration_set_') + skip = true + elsif line.start_with?('proc _integer_literal_node_size') + skip = true + elsif line.start_with?('proc _integer_literal_node_get_') + skip = true + elsif line.start_with?('proc _integer_literal_node_set_') + skip = true + elsif line.start_with?('end') && skip + skip = false + elsif !skip + current_stage << line end - previous_line = line end - current_stage << previous_line end end |
