diff --git a/clangml-transforms/for_memcad.ml b/clangml-transforms/for_memcad.ml index b75279242fc4188b3b289c1998d0f8129d05b080..a7c87dc5e0b22426582eeeb1dea32ff532099dd8 100644 --- a/clangml-transforms/for_memcad.ml +++ b/clangml-transforms/for_memcad.ml @@ -14,11 +14,15 @@ let fresh_var_name () = fresh_var_counter := index + 1; Printf.sprintf "__tmp_%d" index +let identifier_name name : Clang.Ast.ident_ref = + { nested_name_specifier = None; + name = IdentifierName name } + let declare_tmp qual_type = let tmp = fresh_var_name () in let decl_tmp = Clang.Ast.node ~qual_type (Clang.Ast.Decl [ Clang.Ast.node ~qual_type (Clang.Ast.Var (Clang.Ast.var tmp qual_type))]) in - let tmp_var = Clang.Ast.node ~qual_type (Clang.Ast.DeclRef (Ident tmp)) in + let tmp_var = Clang.Ast.node ~qual_type (Clang.Ast.DeclRef (identifier_name tmp)) in tmp_var, decl_tmp let assign_to_tmp ?qual_type expr = @@ -87,17 +91,17 @@ let close_node ((stmt, _stmts) as node) = let rec name_anonymous_fields (decl : Clang.Ast.decl list) = match decl with | [] -> [] - | { desc = RecordDecl { keyword; name = ""; fields; bases; final }; _} as record :: + | { desc = RecordDecl ({ keyword; name = ""; _ } as record_decl); _} as record :: ({ desc = Field { name; qual_type = { desc = - Elaborated { keyword = keyword'; - named_type = { desc = Record (Ident ""); _ } as named_type}; _} + Elaborated ({ keyword = keyword'; + named_type = { desc = Record { name = IdentifierName ""; _ }; _ } as named_type; _ } as elaborated); _} as qual_type; bitwidth; init }; _} as field) :: tail when keyword = keyword' -> { record with - desc = Clang.Ast.RecordDecl { keyword; name = "anon"; fields; bases; final }} :: + desc = Clang.Ast.RecordDecl { record_decl with name = "anon" }} :: { field with desc = Field { name; bitwidth; init; - qual_type = { qual_type with desc = Elaborated { - keyword; named_type = { named_type with desc = Record (Ident "anon") }}}}} :: + qual_type = { qual_type with desc = Elaborated { elaborated with + named_type = { named_type with desc = Record (identifier_name "anon") }}}}} :: name_anonymous_fields tail | hd :: tl -> hd :: name_anonymous_fields tl @@ -173,7 +177,7 @@ let transform = object (self) Expr { stmt with desc = BinaryOperator { lhs = Clang.Ast.node ~qual_type:var_type - (Clang.Ast.DeclRef (Ident var_name)); + (Clang.Ast.DeclRef (identifier_name var_name)); kind = Assign; rhs = init }}} in close_stmts init_stmts [decl; init] | { desc = Do { body; cond; _ }; _} -> @@ -302,7 +306,7 @@ let transform = object (self) method! visit_Call env callee args = match callee, args with - | { desc = DeclRef (Ident "assert"); _ }, [cond] -> + | { desc = DeclRef { name = IdentifierName "assert"; _ }; _ }, [cond] -> let cond, cond_stmts = self#visit_expr { env with in_condition = true } cond in Call { callee; args = [cond] }, cond_stmts diff --git a/visitors/clangml_visitors.ml b/visitors/clangml_visitors.ml index ec4931465792e16a493e9be3c356a3e2f86e76a0..589b7420155cac56a6be653d1f64217c7c84432d 100644 --- a/visitors/clangml_visitors.ml +++ b/visitors/clangml_visitors.ml @@ -52,6 +52,10 @@ Clang__.Clang__bindings.clang_ext_lambdacapturedefault [@opaque] [@@rewrite] [@@remove] type clang_ext_predefinedexpr_identkind = Clang__.Clang__bindings.clang_ext_predefinedexpr_identkind [@opaque] [@@rewrite] [@@remove] + type clang_ext_stringkind = + Clang__.Clang__bindings.clang_ext_stringkind [@opaque] [@@rewrite] [@@remove] + type clang_ext_overloadedoperatorkind = + Clang__.Clang__bindings.clang_ext_overloadedoperatorkind [@opaque] [@@rewrite] [@@remove] end module%import Clang__types = struct type language = language [@opaque] [@@rewrite] [@@remove]