Ticket #1467 (closed task: fixed)

Opened 5 years ago

Last modified 2 years ago

GHC API: expose separate compilation stages

Reported by: simonmar Owned by: nominolo
Priority: normal Milestone: 6.10 branch
Component: GHC API Version: 6.9
Keywords: Cc: claus.reinke@…
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Difficulty: Moderate (less than a day)
Test Case: Blocked By:
Blocking: Related Tickets:

Description

The GHC API is currently hard to use for certain things: extracting the output from various compilation stages; or "hooking in" to the compilation pipeline. The checkModule function works for some uses, but it doesn't let you extract Core, for example, and it doesn't complete the compilation and inject the result into the Session, so the module still has to be compiled.

One way to solve this would be to abstract the compilation pipeline as a series of functions, so that the user could script the compiler. We haven't worked out the details, but in principle it should be possible to write a GHC API client that invokes the following steps:

  • parse a module
  • rename/typecheck
  • deSugar
  • optimise...
  • generate code

and can then inject the compilation results back into the Session for use by future compilations. Each individual stage should provide a result that can be inspected: get the renamed/typechecked code out, get the Core, and so on.

The current checkModule could be built on top of such an interface, but the interface would allow much more flexibility.

Change History

Changed 5 years ago by claus

  • cc claus.reinke@… added

don't forget the output stage(s):-) some people like core, others stg, and i'd like a version of outputable for source that doesn't ignore srclocs in Located.

Changed 5 years ago by Isaac Dupree

see #1373 for an STG-output request

Changed 4 years ago by nominolo

  • owner set to nominolo
  • version changed from 6.6.1 to 6.9

Changed 3 years ago by simonmar

  • architecture changed from Unknown to Unknown/Multiple

Changed 3 years ago by simonmar

  • os changed from Unknown to Unknown/Multiple

Changed 3 years ago by nominolo

  • status changed from new to closed
  • resolution set to fixed

We do have separate access to the front-end passes, now. It would be better to have a separate ticket for further access to compiler phases, or requests for improvements in the current implementation. Closing ticket.

Changed 2 years ago by simonmar

  • difficulty changed from Moderate (1 day) to Moderate (less than a day)
Note: See TracTickets for help on using tickets.