diff options
author | Chimrod <> | 2023-11-09 16:04:09 +0100 |
---|---|---|
committer | Chimrod <> | 2023-11-09 16:14:17 +0100 |
commit | 0d5bcaea3370697822675d9f8d25bca34c02505e (patch) | |
tree | f9aed3bae5e94ae2ae2b214ecf4f051b3aa9819c /lib/syntax/nested_strings.ml | |
parent | ebf072326e2315ace952c80dbc442198c44faf7d (diff) |
Made the compose evaluation lazy
Diffstat (limited to 'lib/syntax/nested_strings.ml')
-rw-r--r-- | lib/syntax/nested_strings.ml | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/lib/syntax/nested_strings.ml b/lib/syntax/nested_strings.ml index fcd0b91..7e49ace 100644 --- a/lib/syntax/nested_strings.ml +++ b/lib/syntax/nested_strings.ml @@ -10,35 +10,42 @@ module Expression = TypeBuilder.Make (struct type t = Report.t list type t' = Report.t list - let v : Get_type.t * t -> t' = snd + let v : Get_type.t Lazy.t * t -> t' = snd (** Identify the expressions reprented as string. That’s here that the report are added. All the rest of the module only push thoses warning to the top level. *) - let literal : S.pos -> (Get_type.t * t) T.literal list -> Get_type.t -> t = + let literal : + S.pos -> (Get_type.t Lazy.t * t) T.literal list -> Get_type.t Lazy.t -> t + = fun pos content _type_of -> match content with | [ T.Expression [ (t', _) ]; T.Text "" ] -> ( - match Get_type.get_type t' with + match Get_type.get_type (Lazy.force t') with | Get_type.Integer -> [] | _ -> let msg = Report.debug pos "This expression can be simplified" in [ msg ]) | _ -> [] - let ident : (S.pos, Get_type.t * t) S.variable -> Get_type.t -> t = + let ident : + (S.pos, Get_type.t Lazy.t * t) S.variable -> Get_type.t Lazy.t -> t = fun variable _type_of -> match variable.index with None -> [] | Some (_, t) -> t - let integer : S.pos -> string -> Get_type.t -> t = + let integer : S.pos -> string -> Get_type.t Lazy.t -> t = fun pos t _type_of -> ignore pos; ignore t; [] let function_ : - S.pos -> T.function_ -> (Get_type.t * t) list -> Get_type.t -> t = + S.pos -> + T.function_ -> + (Get_type.t Lazy.t * t) list -> + Get_type.t Lazy.t -> + t = fun pos f expressions _type_of -> ignore pos; ignore f; @@ -48,7 +55,8 @@ module Expression = TypeBuilder.Make (struct in exprs - let uoperator : S.pos -> T.uoperator -> Get_type.t * t -> Get_type.t -> t = + let uoperator : + S.pos -> T.uoperator -> Get_type.t Lazy.t * t -> Get_type.t Lazy.t -> t = fun pos op r _type_of -> ignore op; ignore pos; @@ -57,9 +65,9 @@ module Expression = TypeBuilder.Make (struct let boperator : S.pos -> T.boperator -> - Get_type.t * t -> - Get_type.t * t -> - Get_type.t -> + Get_type.t Lazy.t * t -> + Get_type.t Lazy.t * t -> + Get_type.t Lazy.t -> t = fun pos op (_, r1) (_, r2) _type_of -> ignore pos; |