1 ///////////////////////////////////////////////////////////////////////////////
3 // This file describes the options selected during translation.
5 ///////////////////////////////////////////////////////////////////////////////
9 #include <AD/generic/generic.h>
12 ///////////////////////////////////////////////////////////////////////////////
14 // Include file dependency
16 ///////////////////////////////////////////////////////////////////////////////
17 struct IncludeDependency
{
18 const char * file_name
;
19 IncludeDependency
* next
;
20 inline IncludeDependency(const char * f
, IncludeDependency
* n
)
21 : file_name(f
), next(n
) {}
22 static IncludeDependency
* dependences
;
23 static void add_dependency (const char *);
24 static void print_dependences ();
27 ///////////////////////////////////////////////////////////////////////////////
29 // Options are described by the following structure.
31 ///////////////////////////////////////////////////////////////////////////////
34 PropOptions(const PropOptions
&);
35 void operator = (const PropOptions
&);
37 Bool debug
, // Turn on debugging
38 emit_code
, // Emit code
39 strict_checking
, // Be strict in semantic checking
40 line_directives
, // Generate line directives in output
41 trace
, // Generate tracing code in output
42 nonlinear_patterns
, // Allow nonlinear patterns
43 merge_match
, // Use merging in patterns
44 generate_report
, // Generate report
45 burs
, // Use the BURS algorithm
46 fast_string_match
, // Use fast string matching algorithm
47 adaptive_matching
, // Use adaptive pattern matching
48 inline_casts
, // Generate inline casts
49 save_space
, // Use space saving scheme
50 tagged_pointer
, // Use tagged pointer scheme
51 GNU_style_message
, // Use GNU style error messages
52 new_type_format
, // Use new type format
53 gen_dependences
, // Generate #include file dependences
54 new_list_format
, // Generate new list code
55 visualization
, // Generate VCG output
56 generate_html
, // Generate html output
57 optimize_rewrite
; // Optimize rewriting
58 int max_vector_len
, // The maximum length of vector literals
59 verbosity
; // Verbosity level
60 int optimization_level
; // Optimization level
61 int max_embedded_tags
; // Maximum number of embedded pointer tags
62 const char * prog_name
; // name of prop
63 char output_file_name
[256]; // name of output file
64 char search_paths
[1024]; // search paths
65 const char * input_file_name
; // name of input file
66 int file_count
; // number of input files
67 const char * input_files
[512]; // name of input files
68 int option_count
; // number of options
69 const char * input_options
[64];// options
70 char file_prefix
[256]; // prefix of file name
71 char mangled_file_prefix
[256]; // encoded for program use
72 char mangled_file_name
[256]; // encoded for program use
73 char current_file_path
[1024]; // file path of current input file
74 Bool to_stdout
; // send output to stdout
75 Bool automake
; // automatically recompile changed files
79 void process_command_line_arguments(int argc
, const char * argv
[]);
80 void compute_output_file_name();
81 std::istream
* open_input_file(const char file_name
[]);
84 extern PropOptions options
;
86 ///////////////////////////////////////////////////////////////////////////////
88 // Features used are described by the following structure. We generate
89 // code so that only the features actually used are emitted. We'll keep
90 // track of which features are actually used in this structure.
92 ///////////////////////////////////////////////////////////////////////////////
94 static Bool rewriting
, // Rewriting feature is used
95 infer
, // Inference feature is used
96 gc
, // Garbage collection is used
97 regexp
, // Regular expressions are used
98 string_match
, // String matching is used
99 printer
, // Pretty printer is used
100 refcount
, // Reference counting is used
101 persistence
, // Persistence is used
102 objc
, // Objective-C is used
103 equality
, // Equality is used
104 unification
, // Unification is used
105 vector
, // Vector is used
106 parser
, // Parser is generated
107 quark
, // Quark literals are used
108 bigint
, // Big integer literals are used
109 graph_type
, // graph types are used
110 * tuple
; // Tuples are used