Module: Ruby2CExtension::Parser
- Defined in:
- lib/ruby2cext/parser.rb
Overview
not really a parser, uses rubynode
Class Method Summary collapse
Class Method Details
.parse_string(str, file_name = "(parse)") ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ruby2cext/parser.rb', line 8 def self.parse_string(str, file_name = "(parse)") res = {} # for the first parsing use original str, because it doesn't matter # for BEGIN stuff and we get better exceptions this way. if (tmp = str.parse_begin_to_nodes(file_name, 1)) res[:begin] = tmp end # now wrap str in a class scope and strip the class node of # afterwards, to get a clean scope in the result. src should # not have syntax errors if str didn't. src = "class Object\n#{str}\nend" begin old_verb = $VERBOSE # turn warnings of here to avoid the repetition of parse warnings $VERBOSE = nil if (tmp = src.parse_to_nodes(file_name, 0)) tmp = tmp.nd_next.nd_body if tmp.type == :scope && tmp.nd_next res[:tree] = tmp end end ensure $VERBOSE = old_verb end res end |