On Wed, Apr 20, 2016 at 7:57 PM, Julia Lawall <[email protected]> wrote: > On Wed, 20 Apr 2016, Luis R. Rodriguez wrote: > >> Is there a way to split a function in 2 with SmPL? For example, let's >> say I've created a helper routine which accepts a callback to be set, >> it will then use the callback. The code that goes into the callback >> will be the code you had below an old API call. >> >> For instance I'm writing a new firmware API for the kernel and I'd >> like to help developers to do conversion by supplying a transformation >> set of SmPL rules for them, so their work is minimized, and so the >> changes on the API can also more easily be understood. The firmware >> API has to types of calls, async and sync calls, for the async >> functionality I believe I have a good solution already given that a >> callback is always expected so we can re-use that. For sync mechanism >> the old firmware API never required one, but I'd like to do that now. >> I do this to help the API do more work for the users, to help avoid >> bugs. This borrows some ideas from the devm functionality, so for >> instance it does the free'ing of the firmware for you now. >> >> So for instance, this works really well, but it does not let me move a >> section of statements below the old API to a new routine. I take it, >> that this would probably be hard to do as Coccinelle would need to >> somehow figure out on its own all the required declarations it may >> need. Since a human can do it, I'm confident we can figure this out, >> however I'd like to know if this is a known limitation or if I can get >> this to work as-is already with the engine. >> >> Here's the rule I have so far: >> >> http://drvbp1.linux-foundation.org/~mcgrof/2016/04/20/convert-sysdata-sync-v1.cocci >> >> It works but that's because I haven't tried / figured out how to lift >> the statement S1 out from f() and into the new sync_found_cb() I'm >> adding. > > Do you have some test data?
Sure, the target I'm using right now, as an example is: spatch --sp-file convert-sysdata-sync-v1.cocci --in-place --recursive-includes --relax-include-path --dir drivers/net/wireless/intersil/p54/ --jobs 4 --use-coccigrep That should get the engine going on: drivers/net/wireless/intersil/p54/p54spi.c Luis _______________________________________________ Cocci mailing list [email protected] https://systeme.lip6.fr/mailman/listinfo/cocci
