summaryrefslogtreecommitdiff
path: root/cli/header.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-05-10 11:09:13 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-05-10 11:09:13 +0200
commit4f9022f24c4591391637121c7274d9855b37bd93 (patch)
tree55d15cf4c092e28c588c31daf118cac7b4b5910a /cli/header.cxx
parent963eaef32dc1b35bd065de8b62d4c73a932208b2 (diff)
Add support for options file inclusion
New include-path prefixes, c++: and cli:, are now recognized (e.g., include <cli:foo>;). Without a prefix, the include declarations is considered to be c++-include unless the path ends with the .cli extension. The cli-included files are loaded and parsed. Currently, only inclusion relative to the current file is supported. Duplicate inclusions are detected and ignored based on the absolute filesystem path. If a file cli-includes another file, then the runtime code is assumed to come from the included file and is not generated.
Diffstat (limited to 'cli/header.cxx')
-rw-r--r--cli/header.cxx28
1 files changed, 26 insertions, 2 deletions
diff --git a/cli/header.cxx b/cli/header.cxx
index 3a47c4d..fb714ed 100644
--- a/cli/header.cxx
+++ b/cli/header.cxx
@@ -185,14 +185,38 @@ namespace
//
//
- struct includes: traversal::cxx_includes, context
+ struct includes: traversal::cxx_includes,
+ traversal::cli_includes,
+ context
{
includes (context& c) : context (c) {}
virtual void
traverse (semantics::cxx_includes& i)
{
- os << "#include " << i.file () << endl
+ generate (i.kind (), i.file ().string ());
+ }
+
+ virtual void
+ traverse (semantics::cli_includes& i)
+ {
+ generate (i.kind (),
+ i.file ().base ().string () + options.hxx_suffix ());
+ }
+
+ void
+ generate (semantics::includes::kind_type k, string const& f)
+ {
+ char b, e;
+ if (k == semantics::includes::quote)
+ b = e = '"';
+ else
+ {
+ b = '<';
+ e = '>';
+ }
+
+ os << "#include " << b << f << e << endl
<< endl;
}
};