summaryrefslogtreecommitdiff
path: root/src/options/mkoptions.py
diff options
context:
space:
mode:
authorMathias Preiner <mathias.preiner@gmail.com>2021-06-16 12:59:22 -0700
committerGitHub <noreply@github.com>2021-06-16 12:59:22 -0700
commit20195f66acc63be07b6d8699751a938d1669cf4b (patch)
tree4f5451d64415a2c2b3602357a78d06c2a2823923 /src/options/mkoptions.py
parent6c4891a79458ecfca0fcac65bfa6ef50d890927f (diff)
parent6ae5647e754925a5c963d2b92c7255d7e0de6b03 (diff)
Merge branch 'master' into archiveRunScriptsarchiveRunScripts
Diffstat (limited to 'src/options/mkoptions.py')
-rw-r--r--src/options/mkoptions.py51
1 files changed, 27 insertions, 24 deletions
diff --git a/src/options/mkoptions.py b/src/options/mkoptions.py
index 7e1cf68e4..e2fbd4cf1 100644
--- a/src/options/mkoptions.py
+++ b/src/options/mkoptions.py
@@ -210,6 +210,30 @@ def get_holder_ref_decls(modules):
return concat_format(' options::Holder{id_cap}& {id};', modules)
+def get_handler(option):
+ """Render handler call for assignment functions"""
+ optname = option.long_name if option.long else ""
+ if option.handler:
+ if option.type == 'void':
+ return 'opts.handler().{}("{}", option)'.format(option.handler, optname)
+ else:
+ return 'opts.handler().{}("{}", option, optionarg)'.format(option.handler, optname)
+ elif option.mode:
+ return 'stringTo{}(optionarg)'.format(option.type)
+ elif option.type != 'bool':
+ return 'handleOption<{}>("{}", option, optionarg)'.format(option.type, optname)
+ return None
+
+
+def get_predicates(option):
+ """Render predicate calls for assignment functions"""
+ if not option.predicates:
+ return []
+ optname = option.long_name if option.long else ""
+ assert option.type != 'void'
+ return ['opts.handler().{}("{}", option, value);'.format(x, optname)
+ for x in option.predicates]
+
class Module(object):
"""Options module.
@@ -713,31 +737,10 @@ def codegen_all_modules(modules, build_dir, dst_dir, tpl_options_h, tpl_options_
sphinxgen.add(module, option)
# Generate handler call
- handler = None
- if option.handler:
- if option.type == 'void':
- handler = 'opts.handler().{}(option)'.format(option.handler)
- else:
- handler = \
- 'opts.handler().{}(option, optionarg)'.format(option.handler)
- elif option.mode:
- handler = 'stringTo{}(optionarg)'.format(option.type)
- elif option.type != 'bool':
- handler = \
- 'handleOption<{}>(option, optionarg)'.format(option.type)
+ handler = get_handler(option)
# Generate predicate calls
- predicates = []
- if option.predicates:
- if option.type == 'bool':
- predicates = \
- ['opts.handler().{}(option, value);'.format(x) \
- for x in option.predicates]
- else:
- assert option.type != 'void'
- predicates = \
- ['opts.handler().{}(option, value);'.format(x) \
- for x in option.predicates]
+ predicates = get_predicates(option)
# Generate options_handler and getopt_long
cases = []
@@ -813,7 +816,7 @@ def codegen_all_modules(modules, build_dir, dst_dir, tpl_options_h, tpl_options_
name=option.name,
option='key'))
elif option.handler:
- h = 'handler->{handler}("{smtname}"'
+ h = 'handler->{handler}("{smtname}", key'
if argument_req:
h += ', optionarg'
h += ');'
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback