Sha256: 6cbe3b64db7538b309a45ca9b553e0681a1911e6b855089b4727d4c143bf6b4a

Contents?: true

Size: 1.71 KB

Versions: 5

Compression:

Stored size: 1.71 KB

Contents

module Mirah
  module AST
    begin
      java_import 'mirah.impl.MirahParser'
    rescue NameError
      $CLASSPATH << File.dirname(__FILE__) + '/../../../javalib/mirah-parser.jar'
      java_import 'mirah.impl.MirahParser'
    end
    java_import 'jmeta.ErrorHandler'

    class MirahErrorHandler
      include ErrorHandler
      def warning(messages, positions)
        print "Warning: "
        messages.each_with_index do |message, i|
          jpos = positions[i]
          if jpos
            dpos = Mirah::Transform::Transformer::JMetaPosition.new(jpos, jpos)
            print "#{message} at "
            Mirah.print_error("", dpos)
          else
            print message
          end
        end
      end
    end

    def parse(src, filename='dash_e', raise_errors=false, transformer=nil)
      ast = parse_ruby(src, filename)
      transformer ||= Transform::Transformer.new(Mirah::Util::CompilationState.new)
      transformer.filename = filename
      ast = transformer.transform(ast, nil)
      if raise_errors
        transformer.errors.each do |e|
          raise e.cause || e
        end
      end
      ast
    end
    module_function :parse

    def parse_ruby(src, filename='-')
      raise ArgumentError if src.nil?
      parser = MirahParser.new
      parser.filename = filename
      parser.errorHandler = MirahErrorHandler.new
      begin
        parser.parse(src)
      rescue => ex
        if ex.cause.kind_of? Java::Jmeta::SyntaxError
          ex = SyntaxError.wrap ex.cause, nil
        end

        if ex.cause.respond_to? :position
          position = ex.cause.position
          Mirah.print_error(ex.cause.message, position)
        end
        raise ex
      end
    end
    module_function :parse_ruby
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mirah-0.0.12-java lib/mirah/transform/ast_ext.rb
mirah-0.0.11-java lib/mirah/transform/ast_ext.rb
mirah-0.0.10-java lib/mirah/transform/ast_ext.rb
mirah-0.0.9-java lib/mirah/transform/ast_ext.rb
mirah-0.0.8-java lib/mirah/transform/ast_ext.rb