Skip to content

Commit 20f40d8

Browse files
committed
consolidate flags
1 parent 81995fd commit 20f40d8

File tree

11 files changed

+66
-68
lines changed

11 files changed

+66
-68
lines changed

src/as_config/flags.ml

+4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
(* common flags for the asc compiler *)
22

3+
type compile_mode = WasmMode | AncientMode | ICMode
4+
35
let trace = ref false
46
let verbose = ref false
57
let print_depth = ref 2
68
let release_mode = ref false
9+
let compile_mode = ref ICMode
10+
let multi_value = ref false
711
let await_lowering = ref true
812
let async_lowering = ref true
913
let dump_parse = ref false

src/codegen/compile.ml

+45-47
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ this keeps documentation close to the code (a lesson learned from Simon PJ).
1313
open Ir_def
1414
open As_values
1515
open As_types
16+
open As_config
1617

1718
open Wasm.Ast
1819
open Wasm.Types
@@ -106,9 +107,6 @@ The fields fall into the following categories:
106107

107108
(* Before we can define the environment, we need some auxillary types *)
108109

109-
type mode = WasmMode | AncientMode | ICMode
110-
111-
112110
module E = struct
113111

114112
(* Utilities, internal to E *)
@@ -136,7 +134,7 @@ module E = struct
136134
type t = {
137135
(* Global fields *)
138136
(* Static *)
139-
mode : mode;
137+
mode : Flags.compile_mode;
140138
prelude : Ir.prog; (* The prelude. Re-used when compiling actors *)
141139
rts : Wasm_exts.CustomModule.extended_module option; (* The rts. Re-used when compiling actors *)
142140
trap_with : t -> string -> G.t;
@@ -233,7 +231,7 @@ module E = struct
233231
ignore (reg env.exports e)
234232

235233
let add_dfinity_type (env : t) e =
236-
assert (mode env = AncientMode);
234+
assert (mode env = Flags.AncientMode);
237235
ignore (reg env.dfinity_types e)
238236

239237
let add_global (env : t) name g =
@@ -678,14 +676,14 @@ module RTS = struct
678676
let get_len = G.i (LocalGet (nr 1l)) in
679677
get_str ^^ get_len ^^
680678
match E.mode env with
681-
| AncientMode ->
679+
| Flags.AncientMode ->
682680
E.call_import env "data" "externalize" ^^
683681
E.call_import env "test" "print" ^^
684682
G.i Unreachable
685-
| ICMode ->
683+
| Flags.ICMode ->
686684
E.call_import env "debug" "print" ^^
687685
G.i Unreachable
688-
| WasmMode -> G.i Unreachable
686+
| Flags.WasmMode -> G.i Unreachable
689687
)
690688
) in
691689
E.add_export env (nr {
@@ -718,7 +716,7 @@ module Heap = struct
718716
(* Page allocation. Ensures that the memory up to the given unskewed pointer is allocated. *)
719717
let grow_memory env =
720718
(* No growing of memory on drun yet *)
721-
if E.mode env = ICMode
719+
if E.mode env = Flags.ICMode
722720
then G.i Drop
723721
else Func.share_code1 env "grow_memory" ("ptr", I32Type) [] (fun env get_ptr ->
724722
let (set_pages_needed, get_pages_needed) = new_local env "pages_needed" in
@@ -2970,14 +2968,14 @@ module Dfinity = struct
29702968

29712969
let system_imports env =
29722970
match E.mode env with
2973-
| ICMode ->
2971+
| Flags.ICMode ->
29742972
E.add_func_import env "debug" "print" [I32Type; I32Type] [];
29752973
E.add_func_import env "msg" "arg_data_size" [I64Type] [I32Type];
29762974
E.add_func_import env "msg" "arg_data_copy" [I64Type; I32Type; I32Type; I32Type] [];
29772975
E.add_func_import env "msg" "reply" [I64Type; I32Type; I32Type] [];
29782976
E.add_func_import env "msg" "reject" [I64Type; I32Type] [];
29792977
E.add_func_import env "msg" "error_code" [I64Type] [I32Type]
2980-
| AncientMode ->
2978+
| Flags.AncientMode ->
29812979
E.add_func_import env "test" "print" [I32Type] [];
29822980
E.add_func_import env "test" "show_i32" [I32Type] [I32Type];
29832981
E.add_func_import env "data" "externalize" [I32Type; I32Type] [I32Type];
@@ -3016,14 +3014,14 @@ module Dfinity = struct
30163014

30173015
let prim_print env =
30183016
match E.mode env with
3019-
| WasmMode -> G.i Drop
3020-
| ICMode ->
3017+
| Flags.WasmMode -> G.i Drop
3018+
| Flags.ICMode ->
30213019
Func.share_code1 env "print_text" ("str", I32Type) [] (fun env get_str ->
30223020
get_str ^^ Text.payload_ptr_unskewed ^^
30233021
get_str ^^ Heap.load_field (Text.len_field) ^^
30243022
system_call env "debug" "print"
30253023
)
3026-
| AncientMode ->
3024+
| Flags.AncientMode ->
30273025
compile_databuf_of_text env ^^
30283026
system_call env "test" "print"
30293027

@@ -3037,7 +3035,7 @@ module Dfinity = struct
30373035
compile_static_print env "\n"
30383036

30393037
let trap_with env s =
3040-
if E.mode env = WasmMode
3038+
if E.mode env = Flags.WasmMode
30413039
then G.i Unreachable
30423040
else compile_static_print env (s ^ "\n") ^^ G.i Unreachable
30433041

@@ -3054,7 +3052,7 @@ module Dfinity = struct
30543052
})
30553053

30563054
let export_start_stub env =
3057-
assert (E.mode env = AncientMode);
3055+
assert (E.mode env = Flags.AncientMode);
30583056
let empty_f = Func.of_body env [] [] (fun env1 ->
30593057
(* Set up memory *)
30603058
G.i (Call (nr (E.built_in env1 "restore_mem"))) ^^
@@ -3071,7 +3069,7 @@ module Dfinity = struct
30713069
E.add_dfinity_type env (fi, [])
30723070

30733071
let export_start env start_fi =
3074-
assert (E.mode env = ICMode);
3072+
assert (E.mode env = Flags.ICMode);
30753073
(* Create an empty message *)
30763074
let empty_f = Func.of_body env ["api_nonce",I64Type] [] (fun env1 ->
30773075
G.i (Call (nr start_fi)) ^^
@@ -3141,7 +3139,7 @@ module OrthogonalPersistence = struct
31413139
*)
31423140

31433141
let register_globals env =
3144-
assert (E.mode env = AncientMode);
3142+
assert (E.mode env = Flags.AncientMode);
31453143
(* We want to put all persistent globals first:
31463144
The index in the persist annotation refers to the index in the
31473145
list of *exported* globals, not all globals (at least with v8/dvm) *)
@@ -3153,7 +3151,7 @@ module OrthogonalPersistence = struct
31533151
E.persist env (E.get_global env "elemstore") Wasm_exts.CustomModule.ElemBuf
31543152

31553153
let register env start_funid =
3156-
assert (E.mode env = AncientMode);
3154+
assert (E.mode env = Flags.AncientMode);
31573155
let mem_global = E.get_global env "datastore" in
31583156
let elem_global = E.get_global env "elemstore" in
31593157

@@ -3213,11 +3211,11 @@ module OrthogonalPersistence = struct
32133211
)
32143212

32153213
let save_mem env =
3216-
assert (E.mode env = AncientMode);
3214+
assert (E.mode env = Flags.AncientMode);
32173215
G.i (Call (nr (E.built_in env "save_mem")))
32183216

32193217
let restore_mem env =
3220-
assert (E.mode env = AncientMode);
3218+
assert (E.mode env = Flags.AncientMode);
32213219
G.i (Call (nr (E.built_in env "restore_mem")))
32223220

32233221
end (* OrthogonalPersistence *)
@@ -4038,9 +4036,9 @@ module Serialization = struct
40384036
let serialize env ts : G.t =
40394037
let ts_name = String.concat "," (List.map typ_id ts) in
40404038
let name = "@serialize<" ^ ts_name ^ ">" in
4041-
if E.mode env = ICMode then assert (List.for_all has_no_references ts);
4039+
if E.mode env = Flags.ICMode then assert (List.for_all has_no_references ts);
40424040
(* On ancient API returns databuf/elembuf, on new API returns nothing *)
4043-
let ret_tys = if E.mode env = ICMode then [] else [I32Type; I32Type] in
4041+
let ret_tys = if E.mode env = Flags.ICMode then [] else [I32Type; I32Type] in
40444042
Func.share_code1 env name ("x", I32Type) ret_tys (fun env get_x ->
40454043
let (set_data_size, get_data_size) = new_local env "data_size" in
40464044
let (set_refs_size, get_refs_size) = new_local env "refs_size" in
@@ -4085,15 +4083,15 @@ module Serialization = struct
40854083
E.else_trap_with env "data buffer not filled " ^^
40864084

40874085
match E.mode env with
4088-
| AncientMode ->
4086+
| Flags.AncientMode ->
40894087
(* Store it all in a databuf and an elembuf *)
40904088
get_data_start ^^ get_data_size ^^
40914089
Dfinity.system_call env "data" "externalize" ^^
40924090

40934091
get_refs_start ^^ get_refs_size ^^
40944092
Dfinity.system_call env "elem" "externalize"
40954093

4096-
| ICMode ->
4094+
| Flags.ICMode ->
40974095
get_refs_size ^^
40984096
compile_unboxed_const 0l ^^
40994097
G.i (Compare (Wasm.Values.I32 I32Op.Eq)) ^^
@@ -4102,22 +4100,22 @@ module Serialization = struct
41024100
(* Copy out the bytes *)
41034101
reply_with_data env get_data_start get_data_size
41044102

4105-
| WasmMode -> assert false
4103+
| Flags.WasmMode -> assert false
41064104
)
41074105

41084106
let deserialize env ts =
4109-
if E.mode env = ICMode then assert (List.for_all has_no_references ts);
4107+
if E.mode env = Flags.ICMode then assert (List.for_all has_no_references ts);
41104108
let ts_name = String.concat "," (List.map typ_id ts) in
41114109
let name = "@deserialize<" ^ ts_name ^ ">" in
4112-
let args = if E.mode env = ICMode then [] else [("databuf",I32Type);("elembuf", I32Type)] in
4110+
let args = if E.mode env = Flags.ICMode then [] else [("databuf",I32Type);("elembuf", I32Type)] in
41134111
Func.share_code env name args (List.map (fun _ -> I32Type) ts) (fun env ->
41144112
let (set_data_size, get_data_size) = new_local env "data_size" in
41154113
let (set_refs_size, get_refs_size) = new_local env "refs_size" in
41164114
let (set_data_start, get_data_start) = new_local env "data_start" in
41174115
let (set_refs_start, get_refs_start) = new_local env "refs_start" in
41184116

41194117
begin match E.mode env with
4120-
| AncientMode ->
4118+
| Flags.AncientMode ->
41214119
let get_databuf = G.i (LocalGet (nr 0l)) in
41224120
let get_elembuf = G.i (LocalGet (nr 1l)) in
41234121

@@ -4132,7 +4130,7 @@ module Serialization = struct
41324130
get_refs_size ^^ compile_mul_const Heap.word_size ^^ Text.dyn_alloc_scratch env ^^ set_refs_start ^^
41334131
get_refs_start ^^ get_refs_size ^^ get_elembuf ^^ compile_unboxed_const 0l ^^
41344132
Dfinity.system_call env "elem" "internalize"
4135-
| ICMode ->
4133+
| Flags.ICMode ->
41364134
(* Allocate space for the data buffer and copy it *)
41374135
argument_data_size env ^^ set_data_size ^^
41384136
get_data_size ^^ Text.dyn_alloc_scratch env ^^ set_data_start ^^
@@ -4762,7 +4760,7 @@ module FuncDec = struct
47624760
- Fake orthogonal persistence
47634761
*)
47644762
let compile_message outer_env outer_ae cc restore_env args mk_body at =
4765-
assert (E.mode outer_env = AncientMode);
4763+
assert (E.mode outer_env = Flags.AncientMode);
47664764
assert (cc.Call_conv.n_res = 0);
47674765
let ae0 = ASEnv.mk_fun_ae outer_ae in
47684766
Func.of_body outer_env ["clos", I32Type; "databuf", I32Type; "elembuf", I32Type] [] (fun env -> G.with_region at (
@@ -4800,7 +4798,7 @@ module FuncDec = struct
48004798

48014799
let compile_static_message outer_env outer_ae cc args mk_body ret_tys at : E.func_with_names =
48024800
match E.mode outer_env with
4803-
| AncientMode ->
4801+
| Flags.AncientMode ->
48044802
assert (cc.Call_conv.n_res = 0);
48054803
let ae0 = ASEnv.mk_fun_ae outer_ae in
48064804
Func.of_body outer_env ["databuf", I32Type; "elembuf", I32Type] [] (fun env -> G.with_region at (
@@ -4825,7 +4823,7 @@ module FuncDec = struct
48254823
(* Save memory *)
48264824
OrthogonalPersistence.save_mem env
48274825
))
4828-
| ICMode ->
4826+
| Flags.ICMode ->
48294827
let ae0 = ASEnv.mk_fun_ae outer_ae in
48304828
Func.of_body outer_env ["api_nonce", I64Type] [] (fun env -> G.with_region at (
48314829
G.i (LocalGet (nr 0l)) ^^ Dfinity.set_api_nonce env ^^
@@ -4841,10 +4839,10 @@ module FuncDec = struct
48414839
(* Collect garbage *)
48424840
G.i (Call (nr (E.built_in env "collect")))
48434841
))
4844-
| WasmMode -> assert false
4842+
| Flags.WasmMode -> assert false
48454843

48464844
let declare_dfinity_type env has_closure fi =
4847-
if E.mode env = AncientMode then
4845+
if E.mode env = Flags.AncientMode then
48484846
E.add_dfinity_type env (fi,
48494847
(if has_closure then [ Wasm_exts.CustomModule.I32 ] else []) @
48504848
[ Wasm_exts.CustomModule.DataBuf; Wasm_exts.CustomModule.ElemBuf ]
@@ -6167,17 +6165,17 @@ and compile_exp (env : E.t) ae exp =
61676165
Error.compile_make_error (compile_exp_vanilla env ae e1) (compile_exp_vanilla env ae e2)
61686166

61696167
| ICReplyPrim t, [e] ->
6170-
assert (E.mode env = ICMode);
6168+
assert (E.mode env = Flags.ICMode);
61716169
SR.unit,
61726170
compile_exp_vanilla env ae e ^^
61736171
Serialization.serialize env [t]
61746172

61756173
| ICRejectPrim, [e] ->
6176-
assert (E.mode env = ICMode);
6174+
assert (E.mode env = Flags.ICMode);
61776175
Dfinity.reject env (compile_exp_vanilla env ae e)
61786176

61796177
| ICErrorCodePrim, [] ->
6180-
assert (E.mode env = ICMode);
6178+
assert (E.mode env = Flags.ICMode);
61816179
Dfinity.error_code env
61826180

61836181
(* Unknown prim *)
@@ -6724,8 +6722,8 @@ and export_actor_field env ae (f : Ir.field) =
67246722
FuncDec.declare_dfinity_type env false fi;
67256723
E.add_export env (nr {
67266724
name = Wasm.Utf8.decode (match E.mode env with
6727-
| AncientMode -> f.it.name
6728-
| ICMode -> "canister_update " ^ f.it.name
6725+
| Flags.AncientMode -> f.it.name
6726+
| Flags.ICMode -> "canister_update " ^ f.it.name
67296727
| _ -> assert false);
67306728
edesc = nr (FuncExport (nr fi))
67316729
})
@@ -6740,7 +6738,7 @@ and actor_lit outer_env this ds fs at =
67406738
(E.get_trap_with outer_env)
67416739
ClosureTable.table_end in
67426740

6743-
if E.mode mod_env = AncientMode then OrthogonalPersistence.register_globals mod_env;
6741+
if E.mode mod_env = Flags.AncientMode then OrthogonalPersistence.register_globals mod_env;
67446742
Heap.register_globals mod_env;
67456743
ElemHeap.register_globals mod_env;
67466744
Stack.register_globals mod_env;
@@ -6769,8 +6767,8 @@ and actor_lit outer_env this ds fs at =
67696767
prelude_code ^^ decls_code) in
67706768
let start_fi = E.add_fun mod_env "start" start_fun in
67716769

6772-
if E.mode mod_env = ICMode then Dfinity.export_start mod_env start_fi;
6773-
if E.mode mod_env = AncientMode then OrthogonalPersistence.register mod_env start_fi;
6770+
if E.mode mod_env = Flags.ICMode then Dfinity.export_start mod_env start_fi;
6771+
if E.mode mod_env = Flags.AncientMode then OrthogonalPersistence.register mod_env start_fi;
67746772

67756773
let m = conclude_module mod_env this None in
67766774
let (_map, wasm_binary) = Wasm_exts.CustomModuleEncode.encode m in
@@ -6876,7 +6874,7 @@ and conclude_module env module_name start_fi_o =
68766874
let compile mode module_name rts (prelude : Ir.prog) (progs : Ir.prog list) : Wasm_exts.CustomModule.extended_module =
68776875
let env = E.mk_global mode rts prelude Dfinity.trap_with ClosureTable.table_end in
68786876

6879-
if E.mode env = AncientMode then OrthogonalPersistence.register_globals env;
6877+
if E.mode env = Flags.AncientMode then OrthogonalPersistence.register_globals env;
68806878
Heap.register_globals env;
68816879
ElemHeap.register_globals env;
68826880
Stack.register_globals env;
@@ -6889,11 +6887,11 @@ let compile mode module_name rts (prelude : Ir.prog) (progs : Ir.prog list) : Wa
68896887
let start_fun = compile_start_func env (prelude :: progs) in
68906888
let start_fi = E.add_fun env "start" start_fun in
68916889
let start_fi_o = match E.mode env with
6892-
| AncientMode ->
6890+
| Flags.AncientMode ->
68936891
OrthogonalPersistence.register env start_fi;
68946892
Dfinity.export_start_stub env;
68956893
None
6896-
| ICMode -> Dfinity.export_start env start_fi; None
6897-
| WasmMode -> Some (nr start_fi) in
6894+
| Flags.ICMode -> Dfinity.export_start env start_fi; None
6895+
| Flags.WasmMode -> Some (nr start_fi) in
68986896

68996897
conclude_module env module_name start_fi_o

src/codegen/compile.mli

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
open Ir_def
22

3-
type mode = WasmMode | AncientMode | ICMode
4-
5-
val compile : mode -> string -> Wasm_exts.CustomModule.extended_module option -> Ir.prog -> Ir.prog list -> Wasm_exts.CustomModule.extended_module
3+
val compile : As_config.Flags.compile_mode -> string -> Wasm_exts.CustomModule.extended_module option -> Ir.prog -> Ir.prog list -> Wasm_exts.CustomModule.extended_module

src/codegen/dune

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
(library
22
(name codegen)
3-
(libraries wasm lib lang_utils wasm_exts ir_def linking)
3+
(libraries wasm lib as_config lang_utils wasm_exts ir_def linking)
44
)

src/codegen/flags.ml

-1
This file was deleted.

0 commit comments

Comments
 (0)