From 7aa297aee1b96d1dea2fde78580ce5ac8d9e0ed1 Mon Sep 17 00:00:00 2001 From: charguer <arthur@chargueraud.org> Date: Wed, 25 Nov 2015 16:19:38 +0100 Subject: [PATCH] progress3 --- generator/js_of_ast.ml | 52 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/generator/js_of_ast.ml b/generator/js_of_ast.ml index bd1e542..ed2ca8e 100644 --- a/generator/js_of_ast.ml +++ b/generator/js_of_ast.ml @@ -119,7 +119,7 @@ let ppf_match_case c = Printf.sprintf "case %s" c let ppf_match_binders binders = - let binds = show_list ", " binders in + let binds = show_list ", " (List.map (fun (id,se) -> Print.sprintf "%s = %s" id se) binders) in Printf.sprintf "@[<v 0>var %s;@]" binds let ppf_array values = @@ -230,15 +230,37 @@ let ctx_initial = "ctx_empty" +(****************************************************************) +(* MODES *) + +type generate_mode = + | Mode_unlogged + | Mode_line_token + | Mode_logged + +let current_mode = Mode_unlogged + + (****************************************************************) (* LOGGED CONSTRUCTORS *) -let generate_logged_case spat binders ctx newctx sbody need_break = "" +let generate_logged_case spat binders ctx newctx sbody need_break = + (* Note: binders is a list of pairs of id *) (* Note: if binders = [], then newctx = ctx *) + match current_mode with + | Mode_line_token + | Mode_logged + | Mode_unlogged -> + let sbinders = ppf_match_binders binders in + (Printf.sprintf "%s@,%s@,%s" spat sbinders sbody) + ^ (if need_break then Printf.sprintf "@,break;" else "") + + + (* generate_logged_case implement using [insertCaseCode(caseBody,bindings,ctx,newctx,sbody)] -£4424;case(caseBody);codeOf(bindings);sbody;break +£4424;caseBody;codeOf(bindings);sbody;break case(caseBody); codeOf(bindings); newctx=ctx_push(ctx,bindings); logEvent(LINEOF(432423), "case", newctx);sbody;break with help of @@ -252,8 +274,14 @@ with help of *) -let generate_logged_return ctx sbody = "" +let generate_logged_return ctx sbody = + match current_mode with + | Mode_line_token + | Mode_logged + | Mode_unlogged -> + Printf.sprintf "return %s;" sbody + (* Printf.sprintf "@[<v 0>return %s;@]" sbody *) (* ---- [insertReturnCode(e,ctx)] @@ -264,7 +292,14 @@ var t=e; logEvent(LINEOF(432423), ctx_push(ctx, {"return",t}), "return"); return ---- *) -let generate_logged_let ids ctx newctx sdecl sbody = "" + + +let generate_logged_let ids ctx newctx sdecl sbody = + match current_mode with + | Mode_line_token + | Mode_logged + | Mode_unlogged -> + Printf.sprintf "%s@,%s" sdecl sbody (* @@ -277,7 +312,12 @@ var x=e; var newctx=ctx_push(ctx,x,e); logEvent(LINEOF(432423), "let", ctx);sbod ---- *) -let generate_logged_enter arg_ids ctx newctx sbody = "" +let generate_logged_enter arg_ids ctx newctx sbody = + match current_mode with + | Mode_line_token + | Mode_logged + | Mode_unlogged -> + sbody (* -- GitLab