class Fancy AST {
  class ExpressionList : Node {
    read_slot: 'expressions

    def initialize: @line list: @expressions ([]);

    def unshift_expression: expression {
      @expressions unshift(expression)
    }

    def add_expression: expression {
      @expressions << expression
    }

    def empty? {
      @expressions empty?
    }

    def bytecode: g {
      pos(g)
      size = @expressions size
      @expressions each: @{ bytecode: g } in_between: { g pop() }
    }

    # This method is only used by Rubinius' compiler classes and
    # defined to be able to use their bytecode generation toolchain.
    def strip_arguments {
      []
    }

    def docstring {
      if: (@expressions first kind_of?(Rubinius AST StringLiteral)) then: {
        @expressions first
      }
    }
  }
}
