Add --no-cc-enum-traits param
Add a `--no-cc-enum-traits` param that can be used to disable the
generation of C++ `EnumTrait` structures.
diff --git a/compiler/back_end/cpp/emboss_codegen_cpp.py b/compiler/back_end/cpp/emboss_codegen_cpp.py
index ed5e66e..4ac71f0 100644
--- a/compiler/back_end/cpp/emboss_codegen_cpp.py
+++ b/compiler/back_end/cpp/emboss_codegen_cpp.py
@@ -45,6 +45,11 @@
choices=["always", "never", "if_tty", "auto"],
help="Print error messages using color. 'auto' is a "
"synonym for 'if_tty'.")
+ parser.add_argument("--cc-enum-traits",
+ action=argparse.BooleanOptionalAction,
+ default=True,
+ help="""Controls generation of EnumTraits by the C++
+ backend""")
return parser.parse_args(argv[1:])
@@ -58,17 +63,18 @@
os.isatty(sys.stderr.fileno())))
print(error.format_errors(errors, source_codes, use_color), file=sys.stderr)
-def generate_headers_and_log_errors(ir, color_output):
+def generate_headers_and_log_errors(ir, color_output, config: header_generator.Config):
"""Generates a C++ header and logs any errors.
Arguments:
ir: EmbossIr of the module.
color_output: "always", "never", "if_tty", "auto"
+ config: Header generation configuration.
Returns:
A tuple of (header, errors)
"""
- header, errors = header_generator.generate_header(ir)
+ header, errors = header_generator.generate_header(ir, config)
if errors:
_show_errors(errors, ir, color_output)
return (header, errors)
@@ -79,7 +85,8 @@
ir = ir_pb2.EmbossIr.from_json(f.read())
else:
ir = ir_pb2.EmbossIr.from_json(sys.stdin.read())
- header, errors = generate_headers_and_log_errors(ir, flags.color_output)
+ config = header_generator.Config(include_enum_traits=flags.cc_enum_traits)
+ header, errors = generate_headers_and_log_errors(ir, flags.color_output, config)
if errors:
return 1
if flags.output_file:
diff --git a/embossc b/embossc
index 0dac79f..7bc0227 100755
--- a/embossc
+++ b/embossc
@@ -20,6 +20,7 @@
import os
import sys
+
def _parse_args(argv):
parser = argparse.ArgumentParser(description="Emboss compiler")
parser.add_argument("--color-output",
@@ -49,6 +50,11 @@
nargs=1,
help="""File name to be used for the generated output
file. Defaults to input_file suffixed by '.h'""")
+ parser.add_argument("--cc-enum-traits",
+ action=argparse.BooleanOptionalAction,
+ default=True,
+ help="""Controls generation of EnumTraits by the C++
+ backend""")
parser.add_argument("input_file",
type=str,
nargs=1,
@@ -62,7 +68,7 @@
sys.path.append(base_path)
from compiler.back_end.cpp import ( # pylint:disable=import-outside-toplevel
- emboss_codegen_cpp
+ emboss_codegen_cpp, header_generator
)
from compiler.front_end import ( # pylint:disable=import-outside-toplevel
emboss_front_end
@@ -74,8 +80,9 @@
if errors:
return 1
+ config = header_generator.Config(include_enum_traits=flags.cc_enum_traits)
header, errors = emboss_codegen_cpp.generate_headers_and_log_errors(
- ir, flags.color_output)
+ ir, flags.color_output, config)
if errors:
return 1