Skip to content

Commit 6584312

Browse files
committed
C._zero_for_deref -> Pulse.Lib.Pervasives._zero_for_deref
1 parent b050c64 commit 6584312

5 files changed

Lines changed: 17 additions & 10 deletions

File tree

lib/pulse/lib/Pulse.Lib.Pervasives.fst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,9 @@ instance duplicable_slprop_ref_pts_to x y : duplicable (slprop_ref_pts_to x y) =
179179

180180
ghost fn dup_emp () : duplicable_f emp = { }
181181
instance duplicable_emp : duplicable emp = { dup_f = dup_emp }
182+
183+
// An index to be used as argument to `Pulse.Lib.Array.Core.mask_read` (and derivatives) so that
184+
// b[_zero_for_deref] is turned into *b
185+
// Special treatment: marked to not be emitted to C
186+
// in CStarToC11.builtin_names
187+
let _zero_for_deref : FStar.UInt32.t = 0ul

mk/test.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ $(OUTPUT_DIR)/$(subst .,_,%).krml:
104104
$(call msg, "EXTRACT", $(basename $(notdir $@)))
105105
$(FSTAR) $< --codegen krml --extract_module $(subst .fst.checked,,$(notdir $<))
106106

107-
$(OUTPUT_DIR)/%.c: $(OUTPUT_DIR)/%.krml
107+
$(OUTPUT_DIR)/%.c: $(OUTPUT_DIR)/%.krml $(OUTPUT_DIR)/Pulse_Lib_Pervasives.krml
108108
$(call msg, "KRML", $(basename $(notdir $@)))
109109
if ! which $(KRML_EXE); then echo "krml ($(KRML_EXE)) not found" >&2; false; fi
110110
$(KRML_EXE) $(KRML_FLAGS) -skip-makefiles -header=$(PULSE_ROOT)/mk/krmlheader -bundle $*=* -skip-linking $+ -tmpdir $(OUTPUT_DIR)

share/pulse/examples/c/PulsePointStruct.fst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ open Pulse.Lib.Pervasives
2020
open Pulse.C.Types
2121

2222
module U32 = FStar.UInt32
23-
// module C = C // for _zero_for_deref
2423

2524

2625
fn swap (#v1 #v2: Ghost.erased U32.t) (r1 r2: ref (scalar U32.t))

src/extraction/ExtractPulse.fst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ let head_and_args (e : mlexpr) : mlexpr & list mlexpr =
5656
in
5757
aux [] e
5858

59-
let zero_for_deref = EQualified (["C"], "_zero_for_deref")
59+
let zero_for_deref = EQualified (["Pulse"; "Lib"; "Pervasives"], "_zero_for_deref")
6060

6161
type goto_env_elem =
6262
| ReturnLabel

src/extraction/ExtractPulseC.fst

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ let my_types () = register_pre_translate_type begin fun env t ->
135135
| _ -> raise NotSupportedByKrmlExtension
136136
end
137137
138+
let zero_for_deref = EQualified (["Pulse"; "Lib"; "Pervasives"], "_zero_for_deref")
139+
138140
let my_exprs () = register_pre_translate_expr begin fun env e ->
139141
match e.expr with
140142
| MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ _ (* typedef *) ])
@@ -197,7 +199,7 @@ let my_exprs () = register_pre_translate_expr begin fun env e ->
197199
->
198200
EAddrOf (EField (
199201
TQualified (Option.must (lident_of_string struct_name)),
200-
EBufRead (translate_expr env r, EQualified (["C"], "_zero_for_deref")),
202+
EBufRead (translate_expr env r, zero_for_deref),
201203
field_name))
202204
203205
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, (t :: _))},
@@ -212,17 +214,17 @@ let my_exprs () = register_pre_translate_expr begin fun env e ->
212214
->
213215
EAddrOf (EField (
214216
translate_type env t,
215-
EBufRead (translate_expr env r, EQualified (["C"], "_zero_for_deref")),
217+
EBufRead (translate_expr env r, zero_for_deref),
216218
field_name))
217219
218220
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [_ (* value *) ; _ (* perm *) ; r])
219221
when string_of_mlpath p = "Pulse.C.Types.Scalar.read0" ->
220-
EBufRead (translate_expr env r, EQualified (["C"], "_zero_for_deref"))
222+
EBufRead (translate_expr env r, zero_for_deref)
221223
222224
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [_ (* value *); r; x])
223225
when string_of_mlpath p = "Pulse.C.Types.Scalar.write" ->
224226
EAssign (
225-
EBufRead (translate_expr env r, EQualified (["C"], "_zero_for_deref")),
227+
EBufRead (translate_expr env r, zero_for_deref),
226228
translate_expr env x)
227229
228230
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [
@@ -235,8 +237,8 @@ let my_exprs () = register_pre_translate_expr begin fun env e ->
235237
])
236238
when string_of_mlpath p = "Pulse.C.Types.Base.copy" ->
237239
EAssign (
238-
EBufRead (translate_expr env dst, EQualified (["C"], "_zero_for_deref")),
239-
EBufRead (translate_expr env src, EQualified (["C"], "_zero_for_deref")))
240+
EBufRead (translate_expr env dst, zero_for_deref),
241+
EBufRead (translate_expr env src, zero_for_deref))
240242
241243
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [
242244
_ (* typedef *);
@@ -268,7 +270,7 @@ let my_exprs () = register_pre_translate_expr begin fun env e ->
268270
])
269271
when string_of_mlpath p = "Pulse.C.Types.Array.array_ref_of_base" ->
270272
// this is not a true read, this is how Karamel models arrays decaying into pointers
271-
EBufRead (translate_expr env r, EQualified (["C"], "_zero_for_deref"))
273+
EBufRead (translate_expr env r, zero_for_deref)
272274
273275
| MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [
274276
_ (* typedef *);

0 commit comments

Comments
 (0)