# Re: Bug?: Ruby2Ruby and ParseTree on IronRuby

**URL:** <https://www.ruby-forum.com/t/re-bug-ruby2ruby-and-parsetree-on-ironruby/181780>\
**Category:** IronRuby\
**Created:** [January 18, 2010, 6:25am UTC](https://www.ruby-forum.com/t/re-bug-ruby2ruby-and-parsetree-on-ironruby/181780 "2010-01-18T06:25:49Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![raker\_t](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/ecae2f/32.png) [@raker\_t](https://www.ruby-forum.com/u/raker_t)\
**Post date:** [January 18, 2010, 6:25am UTC](https://www.ruby-forum.com/t/re-bug-ruby2ruby-and-parsetree-on-ironruby/181780/1 "2010-01-18T06:25:49Z")

</div>

ParseTree is actually already implemented for IronRuby. Tomas did that  
to get merb running last year. Ruby2Ruby will probably need some work  
though.

* * *

From: Michael L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Sunday, January 17, 2010 7:01 PM  
To: removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Bug?: Ruby2Ruby and ParseTree on IronRuby

Considering we have access to the AST… I would think that… in theory  
at least, it would be EASIER to implement than CRuby…

But yeah, what Jimmy said 🙂

On Sun, Jan 17, 2010 at 9:32 PM, Jimmy S.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
wrote:

> Any ideas on this? It’s using Ruby2Ruby and ParseTree. Is it because it’s  
> based around C extensions? Anyone know how to do it on the CLR?

[http://parsetree.rubyforge.org/](http://parsetree.rubyforge.org/)

ParseTree hooks into MRI’s internals and exposes the parse tree for a  
given chunk of Ruby code. For this to work on IronRuby you’d have to  
rewrite the C-extension-portion of this library to look at the DLR trees  
(may require changes to ironruby as well to expose the tree, but I’m not  
sure).

Ruby2Ruby is just a Ruby parser written in Ruby, but depends on racc,  
which uses a C extension, though it seems like you can run racc without  
it.

~Jimmy

---

<div class="post-metadata">

**Author:** ![raker\_t](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/ecae2f/32.png) [@raker\_t](https://www.ruby-forum.com/u/raker_t)\
**Post date:** [January 18, 2010, 7:09am UTC](https://www.ruby-forum.com/t/re-bug-ruby2ruby-and-parsetree-on-ironruby/181780/2 "2010-01-18T07:09:07Z")

</div>

Yes, the base ParseTree functionality is implemented in  
Merlin\Main\Languages\Ruby\Libraries.LCA\_RESTRICTED\ParseTree\IronRubyParseTreeOps.cs  
and Merlin\Main\Languages\Ruby\Libs\parse\_tree.rb. It’s not well tested  
code so it might be missing something or not exactly emulate Ruby’s  
behavior (it’s somewhat difficult to figure out how the tree should look  
like for some syntax elements). So, please, file a bug if you fined  
differences that matter. We also accept unit test contributions in a  
form of a spec :).

IronRuby 0.9.3.0 on .NET 2.0.50727.4927  
Copyright (c) Microsoft Corporation. All rights reserved.

> > > require ‘parse\_tree’  
> > > =\> true  
> > > ParseTree.translate(“puts ‘hello’”)  
> > > =\> [:fcall, :puts, [:array, [:str, “hello”]]]

You can get a parse tree for a string and for a method. So far blocks  
are not supported. Do blocks work in Ruby 1.8.6?  
Note that the ability to retrieve a parse tree for an arbitrary method  
or a block makes all apps more memory consuming and thus also slower.  
Ruby trees of every single method and block need to stay in the memory  
for the case someone might call ParseTree.translate on them. We might  
need to do something about that for v1.0. Ideally, there would be a  
syntax in Ruby to define a quoted block or a method - that is a syntax  
that takes a method or block declaration and turns it into a parse tree.  
Something like ParseTree.translate but with a real code instead of a  
string.

Tomas

From: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Jim D.  
Sent: Sunday, January 17, 2010 9:26 PM  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Bug?: Ruby2Ruby and ParseTree on IronRuby

ParseTree is actually already implemented for IronRuby. Tomas did that  
to get merb running last year. Ruby2Ruby will probably need some work  
though.

* * *

From: Michael L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Sunday, January 17, 2010 7:01 PM  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Bug?: Ruby2Ruby and ParseTree on IronRuby  
Considering we have access to the AST.. I would think that.. in theory  
at least, it would be EASIER to implement than CRuby…

But yeah, what Jimmy said 🙂

On Sun, Jan 17, 2010 at 9:32 PM, Jimmy S.  
\<[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
wrote:

> Any ideas on this? It’s using Ruby2Ruby and ParseTree. Is it because it’s  
> based around C extensions? Anyone know how to do it on the CLR?  
> [http://parsetree.rubyforge.org/](http://parsetree.rubyforge.org/)

ParseTree hooks into MRI’s internals and exposes the parse tree for a  
given chunk of Ruby code. For this to work on IronRuby you’d have to  
rewrite the C-extension-portion of this library to look at the DLR trees  
(may require changes to ironruby as well to expose the tree, but I’m not  
sure).

Ruby2Ruby is just a Ruby parser written in Ruby, but depends on racc,  
which uses a C extension, though it seems like you can run racc without  
it.

~Jimmy
