Structure parsers reintroduced. ** NOT WORKING **
[virt-mem.git] / extract / codegen / code_generation.mli
1 (** Code generation. *)
2 (* Memory info command for virtual domains.
3    (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
4    http://libvirt.org/
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  *)
20
21 (**
22    This module is concerned with actually generating code
23    for types, parsers, etc.
24
25    We generate two output files, [kernel.mli] is the interface
26    to the kernel structures, and [kernel.ml] is the implementation.
27 *)
28
29 (** {2 Generate types} *)
30
31 val generate_types :
32   (string
33    * Struct_classify.shape_field_struct list
34    * Struct_classify.content_field_struct list) list ->
35   Camlp4.PreCast.Syntax.Ast.str_item * Camlp4.PreCast.Syntax.Ast.sig_item
36     (** [generate_types structures] generates the internal
37         types used to store variants of each structure, including:
38         - shape field structures
39         - content field structures
40     *)
41
42 (** {2 Generate parsers} *)
43
44 val generate_parsers : (string * Struct_classify.parser_ list) list ->
45   Camlp4.PreCast.Syntax.Ast.str_item * Camlp4.PreCast.Syntax.Ast.sig_item
46   * (string, string) Hashtbl.t
47     (** [generate_parsers] generates the parser functions.
48
49         We cannot generate the complete code here because we
50         don't want camlp4 parsing this file to substitute bitmatch
51         code yet.  So we only generate labels, which get substituted
52         by the contents of the returned hash table in {!output_implem}.
53     *)
54
55 (** {2 Output final files} *)
56
57 val output_interf : output_file:string ->
58   Camlp4.PreCast.Syntax.Ast.sig_item ->
59   Camlp4.PreCast.Syntax.Ast.sig_item ->
60   unit
61   (** Output the interface file. *)
62
63 val output_implem : output_file:string ->
64   Camlp4.PreCast.Syntax.Ast.str_item ->
65   Camlp4.PreCast.Syntax.Ast.str_item ->
66   (string, string) Hashtbl.t ->
67   unit
68   (** Output the implementation file. *)