Skip to content

Commit

Permalink
[translation] Generate const C++ data from actions_long.
Browse files Browse the repository at this point in the history
Haven't tested this yet.  But it fits nicely within the types I created.
  • Loading branch information
Andy Chu committed Oct 10, 2020
1 parent 641135f commit 95ff4a2
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
5 changes: 4 additions & 1 deletion cpp/frontend_flag_spec.cc
Expand Up @@ -143,8 +143,8 @@ flag_spec::_FlagSpec* CreateSpec(FlagSpec_c* in) {
auto out = new flag_spec::_FlagSpec();
out->arity0 = new List<Str*>();
out->arity1 = new Dict<Str*, args::_Action*>();
out->plus_flags = new List<Str*>();
out->actions_long = new Dict<Str*, args::_Action*>();
out->plus_flags = new List<Str*>();
out->defaults = new Dict<Str*, runtime_asdl::value_t*>();

if (in->arity0) {
Expand All @@ -154,6 +154,9 @@ flag_spec::_FlagSpec* CreateSpec(FlagSpec_c* in) {
if (in->arity1) {
_CreateActions(in->arity1, out->arity1);
}
if (in->actions_long) {
_CreateActions(in->actions_long, out->actions_long);
}
#endif
if (in->plus_flags) {
_CreateStrList(in->plus_flags, out->plus_flags);
Expand Down
1 change: 1 addition & 0 deletions cpp/frontend_flag_spec.h
Expand Up @@ -66,6 +66,7 @@ struct FlagSpec_c {
const char* name; // e.g. 'wait'
const char** arity0; // NULL terminated array
Action_c* arity1; // NULL terminated array
Action_c* actions_long; // NULL terminated array
const char** plus_flags; // NULL terminated array
DefaultPair_c* defaults;
};
Expand Down
17 changes: 14 additions & 3 deletions frontend/flag_gen.py
Expand Up @@ -71,7 +71,8 @@ def _WriteActions(f, var_name, actions, counter):
f.write('Action_c %s[] = {\n' % var_name)
for i, key in enumerate(sorted(actions)):
action = actions[key]
log('%s %s', key, action)
#log('%s %s', key, action)

name = None
if isinstance(action, args.SetToString):
if action.quit_parsing_flags:
Expand Down Expand Up @@ -270,6 +271,7 @@ class %s {
spec = specs[spec_name]
arity0_name = None
arity1_name = None
actions_long_name = None
plus_name = None
defaults_name = None

Expand All @@ -281,6 +283,10 @@ class %s {
arity1_name = 'arity1_%d' % i
_WriteActions(cc_f, arity1_name, spec.arity1, counter)

if spec.actions_long:
actions_long_name = 'actions_long_%d' % i
_WriteActions(cc_f, actions_long_name, spec.actions_long, counter)

if spec.plus_flags:
plus_name = 'plus_%d' % i
_WriteStrArray(cc_f, plus_name, spec.plus_flags)
Expand All @@ -289,7 +295,11 @@ class %s {
defaults_name = 'defaults_%d' % i
_WriteDefaults(cc_f, defaults_name, spec.defaults)

var_names.append((arity0_name, arity1_name, plus_name, defaults_name))
var_names.append(
(arity0_name, arity1_name, actions_long_name, plus_name,
defaults_name)
)

cc_f.write('\n')

cc_f.write('FlagSpec_c kFlagSpecs[] = {\n')
Expand All @@ -298,12 +308,13 @@ class %s {
for i, spec_name in enumerate(sorted(flag_spec.FLAG_SPEC)):
spec = specs[spec_name]
names = var_names[i]
cc_f.write(' { "%s", %s, %s, %s, %s },\n' % (
cc_f.write(' { "%s", %s, %s, %s, %s, %s },\n' % (
spec_name,
names[0] or 'nullptr',
names[1] or 'nullptr',
names[2] or 'nullptr',
names[3] or 'nullptr',
names[4] or 'nullptr',
))

cc_f.write("""\
Expand Down

0 comments on commit 95ff4a2

Please sign in to comment.