prism 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -1
- data/README.md +1 -1
- data/config.yml +86 -21
- data/ext/prism/api_node.c +213 -67
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +133 -83
- data/include/prism/diagnostic.h +1 -0
- data/include/prism/node.h +7 -0
- data/include/prism/util/pm_constant_pool.h +20 -6
- data/include/prism/version.h +2 -2
- data/include/prism.h +1 -1
- data/lib/prism/compiler.rb +9 -0
- data/lib/prism/debug.rb +30 -26
- data/lib/prism/dispatcher.rb +42 -0
- data/lib/prism/dsl.rb +23 -8
- data/lib/prism/ffi.rb +2 -2
- data/lib/prism/lex_compat.rb +9 -9
- data/lib/prism/mutation_compiler.rb +18 -3
- data/lib/prism/node.rb +580 -120
- data/lib/prism/serialize.rb +83 -77
- data/lib/prism/visitor.rb +9 -0
- data/prism.gemspec +1 -1
- data/src/diagnostic.c +1 -0
- data/src/node.c +99 -18
- data/src/prettyprint.c +102 -45
- data/src/prism.c +288 -88
- data/src/serialize.c +95 -57
- data/src/util/pm_constant_pool.c +25 -11
- metadata +2 -2
    
        data/lib/prism/lex_compat.rb
    CHANGED
    
    | @@ -357,6 +357,7 @@ module Prism | |
| 357 357 | 
             
                      @dedent_next = true
         | 
| 358 358 | 
             
                      @dedent = nil
         | 
| 359 359 | 
             
                      @embexpr_balance = 0
         | 
| 360 | 
            +
                      @ended_on_newline = false
         | 
| 360 361 | 
             
                    end
         | 
| 361 362 |  | 
| 362 363 | 
             
                    # As tokens are coming in, we track the minimum amount of common leading
         | 
| @@ -366,13 +367,14 @@ module Prism | |
| 366 367 | 
             
                      case token.event
         | 
| 367 368 | 
             
                      when :on_embexpr_beg, :on_heredoc_beg
         | 
| 368 369 | 
             
                        @embexpr_balance += 1
         | 
| 370 | 
            +
                        @dedent = 0 if @dedent_next && @ended_on_newline
         | 
| 369 371 | 
             
                      when :on_embexpr_end, :on_heredoc_end
         | 
| 370 372 | 
             
                        @embexpr_balance -= 1
         | 
| 371 373 | 
             
                      when :on_tstring_content
         | 
| 372 374 | 
             
                        if embexpr_balance == 0
         | 
| 373 375 | 
             
                          line = token.value
         | 
| 374 376 |  | 
| 375 | 
            -
                          if !(line.strip.empty? && line.end_with?("\n")) | 
| 377 | 
            +
                          if dedent_next && !(line.strip.empty? && line.end_with?("\n"))
         | 
| 376 378 | 
             
                            leading = line[/\A(\s*)\n?/, 1]
         | 
| 377 379 | 
             
                            next_dedent = 0
         | 
| 378 380 |  | 
| @@ -385,11 +387,16 @@ module Prism | |
| 385 387 | 
             
                            end
         | 
| 386 388 |  | 
| 387 389 | 
             
                            @dedent = [dedent, next_dedent].compact.min
         | 
| 390 | 
            +
                            @dedent_next = true
         | 
| 391 | 
            +
                            @ended_on_newline = line.end_with?("\n")
         | 
| 392 | 
            +
                            tokens << token
         | 
| 393 | 
            +
                            return
         | 
| 388 394 | 
             
                          end
         | 
| 389 395 | 
             
                        end
         | 
| 390 396 | 
             
                      end
         | 
| 391 397 |  | 
| 392 398 | 
             
                      @dedent_next = token.event == :on_tstring_content && embexpr_balance == 0
         | 
| 399 | 
            +
                      @ended_on_newline = false
         | 
| 393 400 | 
             
                      tokens << token
         | 
| 394 401 | 
             
                    end
         | 
| 395 402 |  | 
| @@ -440,28 +447,21 @@ module Prism | |
| 440 447 |  | 
| 441 448 | 
             
                        while index < max_index
         | 
| 442 449 | 
             
                          token = tokens[index]
         | 
| 450 | 
            +
                          results << token
         | 
| 443 451 | 
             
                          index += 1
         | 
| 444 452 |  | 
| 445 453 | 
             
                          case token.event
         | 
| 446 454 | 
             
                          when :on_embexpr_beg, :on_heredoc_beg
         | 
| 447 455 | 
             
                            embexpr_balance += 1
         | 
| 448 | 
            -
                            results << token
         | 
| 449 456 | 
             
                          when :on_embexpr_end, :on_heredoc_end
         | 
| 450 457 | 
             
                            embexpr_balance -= 1
         | 
| 451 | 
            -
                            results << token
         | 
| 452 458 | 
             
                          when :on_tstring_content
         | 
| 453 459 | 
             
                            if embexpr_balance == 0
         | 
| 454 | 
            -
                              results << token
         | 
| 455 | 
            -
             | 
| 456 460 | 
             
                              while index < max_index && tokens[index].event == :on_tstring_content
         | 
| 457 461 | 
             
                                token.value << tokens[index].value
         | 
| 458 462 | 
             
                                index += 1
         | 
| 459 463 | 
             
                              end
         | 
| 460 | 
            -
                            else
         | 
| 461 | 
            -
                              results << token
         | 
| 462 464 | 
             
                            end
         | 
| 463 | 
            -
                          else
         | 
| 464 | 
            -
                            results << token
         | 
| 465 465 | 
             
                          end
         | 
| 466 466 | 
             
                        end
         | 
| 467 467 |  | 
| @@ -97,7 +97,7 @@ module Prism | |
| 97 97 |  | 
| 98 98 | 
             
                # Copy a CallAndWriteNode node
         | 
| 99 99 | 
             
                def visit_call_and_write_node(node)
         | 
| 100 | 
            -
                  node.copy(receiver: visit(node.receiver),  | 
| 100 | 
            +
                  node.copy(receiver: visit(node.receiver), value: visit(node.value))
         | 
| 101 101 | 
             
                end
         | 
| 102 102 |  | 
| 103 103 | 
             
                # Copy a CallNode node
         | 
| @@ -107,12 +107,12 @@ module Prism | |
| 107 107 |  | 
| 108 108 | 
             
                # Copy a CallOperatorWriteNode node
         | 
| 109 109 | 
             
                def visit_call_operator_write_node(node)
         | 
| 110 | 
            -
                  node.copy(receiver: visit(node.receiver),  | 
| 110 | 
            +
                  node.copy(receiver: visit(node.receiver), value: visit(node.value))
         | 
| 111 111 | 
             
                end
         | 
| 112 112 |  | 
| 113 113 | 
             
                # Copy a CallOrWriteNode node
         | 
| 114 114 | 
             
                def visit_call_or_write_node(node)
         | 
| 115 | 
            -
                  node.copy(receiver: visit(node.receiver),  | 
| 115 | 
            +
                  node.copy(receiver: visit(node.receiver), value: visit(node.value))
         | 
| 116 116 | 
             
                end
         | 
| 117 117 |  | 
| 118 118 | 
             
                # Copy a CapturePatternNode node
         | 
| @@ -350,6 +350,21 @@ module Prism | |
| 350 350 | 
             
                  node.copy(pattern: visit(node.pattern), statements: visit(node.statements))
         | 
| 351 351 | 
             
                end
         | 
| 352 352 |  | 
| 353 | 
            +
                # Copy a IndexAndWriteNode node
         | 
| 354 | 
            +
                def visit_index_and_write_node(node)
         | 
| 355 | 
            +
                  node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
         | 
| 356 | 
            +
                end
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                # Copy a IndexOperatorWriteNode node
         | 
| 359 | 
            +
                def visit_index_operator_write_node(node)
         | 
| 360 | 
            +
                  node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
         | 
| 361 | 
            +
                end
         | 
| 362 | 
            +
             | 
| 363 | 
            +
                # Copy a IndexOrWriteNode node
         | 
| 364 | 
            +
                def visit_index_or_write_node(node)
         | 
| 365 | 
            +
                  node.copy(receiver: visit(node.receiver), arguments: visit(node.arguments), block: visit(node.block), value: visit(node.value))
         | 
| 366 | 
            +
                end
         | 
| 367 | 
            +
             | 
| 353 368 | 
             
                # Copy a InstanceVariableAndWriteNode node
         | 
| 354 369 | 
             
                def visit_instance_variable_and_write_node(node)
         | 
| 355 370 | 
             
                  node.copy(value: visit(node.value))
         |