Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

lustrec / src / type_predef.ml @ master

History | View | Annotate | Download (3.2 KB)

1
(********************************************************************)
2
(*                                                                  *)
3
(*  The LustreC compiler toolset   /  The LustreC Development Team  *)
4
(*  Copyright 2012 -    --   ONERA - CNRS - INPT - LIFL             *)
5
(*                                                                  *)
6
(*  LustreC is free software, distributed WITHOUT ANY WARRANTY      *)
7
(*  under the terms of the GNU Lesser General Public License        *)
8
(*  version 2.1.                                                    *)
9
(*                                                                  *) 
10
(*  This file was originally from the Prelude compiler              *)
11
(*                                                                  *) 
12
(********************************************************************)
13

    
14
(** Base types and predefined operator types. *)
15

    
16
  
17
module Make (T: Types.S) =
18
struct
19
  (* module T = Types.Make (BT) *)
20
  module BT = T.BasicT
21
  include T 
22
  
23
  let type_int = new_ty type_int
24
  let type_real = new_ty type_real
25
  let type_bool = new_ty type_bool
26
  let type_string = new_ty type_string
27
  let type_clock ty = new_ty (Tclock ty)
28
  let type_const tname = new_ty (Tconst tname)
29
  let type_enum taglist = new_ty (Tenum taglist)
30
  let type_struct fieldlist = new_ty (Tstruct fieldlist)
31
  let type_tuple tl = new_ty (Ttuple tl)
32
  let type_arrow ty1 ty2 = new_ty (Tarrow (ty1, ty2))
33
  let type_array d ty = new_ty (Tarray (d, ty))
34
  let type_static d ty = new_ty (Tstatic (d, ty))
35
    
36
  let type_unary_bool_op =
37
    new_ty (Tarrow (type_bool, type_bool))
38

    
39
  let type_unary_poly_op =
40
    let univ = new_univar () in
41
    type_arrow univ univ
42

    
43
  let type_bin_int_op =
44
    type_arrow (type_tuple [type_int;type_int]) type_int
45

    
46
  let type_bin_bool_op =
47
    type_arrow (type_tuple [type_bool;type_bool]) type_bool
48

    
49
  let type_ite_op =
50
    let univ = new_univar () in
51
    type_arrow (type_tuple [type_bool;univ;univ]) univ
52

    
53
  let type_bin_poly_op =
54
    let univ = new_univar () in
55
    type_arrow (type_tuple [univ;univ]) univ
56

    
57
  let type_bin_comp_op =
58
    let univ = new_univar () in
59
    new_ty (Tarrow (new_ty (Ttuple [univ;univ]), type_bool))
60

    
61
  let type_univ_bool_univ =
62
    let univ = new_univar () in
63
    type_arrow (type_tuple [univ;type_bool]) univ
64

    
65
  let type_bool_univ3 =
66
    let univ = new_univar () in
67
    type_arrow (type_tuple [type_bool;univ;univ]) univ
68

    
69
  let type_access =
70
    let d = Dimension.mkdim Location.dummy_loc Dimension.Dunivar in
71
    let d' = Dimension.mkdim Location.dummy_loc Dimension.Dunivar in
72
    let univ = new_univar () in
73
    type_arrow (type_tuple [type_array d univ; type_static d' type_int]) univ
74

    
75
  let type_power =
76
    let d = Dimension.mkdim Location.dummy_loc Dimension.Dunivar in
77
    let univ = new_univar () in
78
    type_arrow (type_tuple [univ; type_static d type_int]) (type_array d univ)
79
end
80

    
81

    
82
(* module BaseBuilder = *)
83
(* struct *)
84
(*   let type_int_builder = Tbasic Basic.Tint *)
85
(*   let type_real_builder = Tbasic Basic.Treal *)
86
(*   let type_bool_builder = Tbasic Basic.Tbool *)
87
(*   let type_string_builder = Tbasic Basic.Tstring *)
88
(* end *)
89
  
90
module Main = Make (Types.Main)
91
include Main
92

    
93
(* Local Variables: *)
94
(* compile-command:"make -C .." *)
95
(* End: *)