Skip to content
This repository
branch: norman_faceboo…
Fetching contributors…

Cannot retrieve contributors at this time

file 110 lines (88 sloc) 3.208 kb
1 2 3 4 5 6 7 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
(*
Copyright © 2011 MLstate

This file is part of Opa.

Opa is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.

Opa is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.

You should have received a copy of the GNU Affero General Public License
along with Opa. If not, see <http://www.gnu.org/licenses/>.
*)
(**
Some utils related to Pass Tracking for Qml.
@author Mathieu Barbin
*)

(**
This module defines some utils for branching compilers working on QmlAst with
the pass tracking system developed in passlib, in [PassHandler] and [PassTracker]

In particular, it defines, given a [QmlAst.code] extractor some :
+ [printers]
+ [trackers]

Any language should implement a module named [LangTracker], [LangCheck], etc...

@see "passlib/passdesign.ml" for a global overview of the Pass System
*)

(** {6 Utils} *)

val contains_tracker : QmlAst.expr -> bool

(** {6 Printers} *)

(** Regroup some of common printer of the module [Printer] in one list .
The ignored argument is for an optimal branching with PassHandler.

+ code
+ declaration
+ size

TODO: some more flexibility in passhandler options so that we can export
in this list douzen of specific printers without risking that they will
all be printed with a --print-all.
*)
val printers : ('env -> QmlAst.annotmap * (QmlTypes.gamma * QmlTypes.gamma) * QmlAst.code) -> 'opt -> (PassHandler.printer_id * 'env PassHandler.printer) list

module Printer :
sig
  (**
Regular ast printer:
print the full code using the Pretty Printer of the language
and insering multiple new lines so that meld can better do
the correspondancy between values.
*)
  val code : QmlAst.code PassHandler.printer

  (**
Regular ast size printer:
print the size of the code using opatrack conventions.
Used by passtracker hudson.
*)
  val size : QmlAst.code PassHandler.printer

  (**
Outputs only the toplevel values without the bodies, like :
{[
type toto
dbval ...
a
b
c
etc...
]}
Usefull to have a global overview of the code, and tracking
inserted/removed toplevel values by a pass.
*)
  val declaration : QmlAst.code PassHandler.printer

  (**
Print only the code_elt which contains at least one tracked expression
*)
  val tracked : QmlAst.code PassHandler.printer
end

(** {6 Trackers} *)

(** Regroup all the trackers of the module [Tracker] in one list .
The ignored argument is for an optimal branching with PassHandler.*)
val trackers : ('env -> QmlAst.code) -> 'opt -> (PassHandler.tracker_id * 'env PassHandler.tracker) list

module Tracker :
sig
  (**
A tracker for (`tracker Tracker.t) directives
*)
  val directive : QmlAst.code PassHandler.tracker

  (**
A tracker for top level definitions
*)
  val val_ : QmlAst.code PassHandler.tracker
end
Something went wrong with that request. Please try again.