From 86dbbf0c02da983123933b89a73f1b2563924d54 Mon Sep 17 00:00:00 2001 From: Son Ho Date: Sat, 29 Jan 2022 21:37:39 +0100 Subject: Make progress on ExtractToFStar.mk_name_formatter --- src/ExtractToFStar.ml | 60 ++++++++++++++++++++++++++++++++++++++------------- src/PureToExtract.ml | 3 ++- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/ExtractToFStar.ml b/src/ExtractToFStar.ml index bb4054c2..e49e7e1a 100644 --- a/src/ExtractToFStar.ml +++ b/src/ExtractToFStar.ml @@ -7,21 +7,51 @@ open PureToExtract open StringUtils module F = Format -(* -let mk_name_formatter = -{ - bool_name : string; - char_name : string; - int_name : integer_type -> string; - str_name : string; - field_name : name -> string option -> string; - variant_name : name -> string -> string; - type_name : name -> string; - fun_name : A.fun_id -> name -> int -> region_group_info option -> string; - var_basename : StringSet.t -> ty -> string; - type_var_basename : StringSet.t -> string; - append_index : string -> int -> string; -}*) +(*let mk_name_formatter = + let int_name (int_ty : integer_type) = + match int_ty with + | Isize -> "isize" + | I8 -> "i8" + | I16 -> "i16" + | I32 -> "i32" + | I64 -> "i64" + | I128 -> "i128" + | Usize -> "usize" + | U8 -> "u8" + | U16 -> "u16" + | U32 -> "u32" + | U64 -> "u64" + | U128 -> "u128" + in + (* For now, we treat only the case where the type name is: + * `Module::Type` + * *) + let type_name name = + let name = Collections.List.pop_last name in + to_snake_case name + in + let field_name (def_name : name) (field_id : FieldId.id) (field_name : string option) : string = + let def_name = type_name def_name in + match field_name with + | Some field_name -> def_name ^ "_" ^ field_name + | None -> def_name ^ "_f" ^ FieldId.to_string field_id + in + let variant_name (def_name :name) (variant : string) : string = + type_name def_name ^ to_camel_case variant + in + { + bool_name : "bool"; + char_name : "char"; + int_name; + str_name : "string"; + field_name; + variant_name; + type_name; + fun_name : A.fun_id -> name -> int -> region_group_info option -> string; + var_basename : StringSet.t -> ty -> string; + type_var_basename : StringSet.t -> string; + append_index : string -> int -> string; + }*) (** [inside] constrols whether we should add parentheses or not around type application (if `true` we add parentheses). diff --git a/src/PureToExtract.ml b/src/PureToExtract.ml index 5313569a..360ef4a6 100644 --- a/src/PureToExtract.ml +++ b/src/PureToExtract.ml @@ -35,9 +35,10 @@ type name_formatter = { char_name : string; int_name : integer_type -> string; str_name : string; - field_name : name -> string option -> string; + field_name : name -> FieldId.id -> string option -> string; (** Inputs: - type name + - field id - field name Note that fields don't always have names, but we still need to -- cgit v1.2.3