From: "naruse (Yui NARUSE)" Date: 2012-06-24T14:25:47+09:00 Subject: [ruby-core:45816] [ruby-trunk - Feature #6611] Comments requested on implementation of set_parse_func Issue #6611 has been updated by naruse (Yui NARUSE). Generally speaking on ruby, feature request is hard to accept. Submitter must make people understand why the feature is required. The challenger must explain * Background * use case and current workaround * how the new feature make their life well Therefore for your proposal, why ripper is not enough? ---------------------------------------- Feature #6611: Comments requested on implementation of set_parse_func https://bugs.ruby-lang.org/issues/6611#change-27391 Author: cjheath (Clifford Heath) Status: Open Priority: Normal Assignee: Category: Target version: Folk, I've implemented Twister, a new mutation testing tool to replace Heckle. It relies on a new hook into the Ruby parser, in order to modify what the parser thinks it has seen. Although I have written C extensions before, there are some aspects of the Ruby core which I'm unfamiliar with and as a result don't know the right way to handle. I'd like your comments, suggestions and improvements please. https://github.com/cjheath/ruby/commit/ea99527feaf7dd06b3e8433ec640238441b188db In particular, I'd like to know the following: 1) Do you prefer that I move the literal strings (which occur once each) to #defined? https://github.com/cjheath/ruby/commit/ea99527feaf7dd06b3e8433ec640238441b188db#L1R1003 2) Will this line of code mess up the GC, and how should I fix that? https://github.com/cjheath/ruby/commit/ea99527feaf7dd06b3e8433ec640238441b188db#L1R3853 3) The set_parse_func is extern though it should be static, but I need to move the rb_define_global_function out of thread.c. Can someone please tell me where I should move it to, since there is no Init_Parser? https://github.com/cjheath/ruby/commit/ea99527feaf7dd06b3e8433ec640238441b188db#L1R9029 https://github.com/cjheath/ruby/commit/ea99527feaf7dd06b3e8433ec640238441b188db#L3R4705 4) I think I should change set_parse_func to accept a flags argument and a block, instead of assuming all flags, and taking a Proc. What are the downsides of using a block instead of a Proc (does this reduce the number of Bindings that get created)? How do I change set_parse_func to use a block? The initial implementation of Twister is an extension to RSpec which adds the option "--twist file-or-dir". It's still a bit rough - it needs to change the reporting on the twisted runs that follow the first (untwisted) run - but it does prove then concept. Clifford Heath, Data Constellation, http://dataconstellation.com Agile Information Management and Design. -- http://bugs.ruby-lang.org/