Skip to content
This repository
tag: v1057
Fetching contributors…

Cannot retrieve contributors at this time

file 60 lines (46 sloc) 1.783 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
(*
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/>.
*)
(*
@author Sebastien Briais
*)

(** Lambda Lifting of typed QML code

References:

Lambda lifting in quadratic time
Olivier Danvy, Ulrik Schultz

ML-Style Typing, Lambda Lifting and Partial Evaluation
Peter Thiemann
*)

(** prerequisite: identifiers are defined only once
[in other words, name analysis has been done]

no coercions

no "let type ... in ..."

@raise QmlTypes.Exception Check if this exception is really raised
@raise QmlTyperException.Exception Check if this exception is really raised
*)

val process_code:
  early:bool ->
  side:[`client | `server] ->
  typed:bool ->
  (* typed mode preserves types but it also needs types everywhere in the annotmap
* untyped mode works on a broken annotmap and breaks it even more *)
  QmlTypes.gamma ->
  QmlAst.annotmap ->
  QmlAst.code ->
  (QmlTypes.gamma * QmlAst.annotmap) * QmlAst.code

(* fun_action works in an untyped way, and 'lifts' only parts of the code in a very
* specific way not to introduce partial applications *)
val process_code_fun_action:
  QmlAst.annotmap ->
  QmlAst.code ->
  QmlAst.annotmap * QmlAst.code
Something went wrong with that request. Please try again.