Allow settings::Builder to be reused.

When constructing the Flags object from the Builder, don't consume it,
but take a reference instead.

This makes it possible for the parser to accept multiple 'set' lines and
apply them to different ISA specifications.
This commit is contained in:
Jakob Stoklund Olesen
2016-09-20 16:09:45 -07:00
parent 26332f6f91
commit 83adf341ec
5 changed files with 23 additions and 23 deletions

View File

@@ -183,18 +183,18 @@ def gen_constructor(sgrp, parent, fmt):
"""
with fmt.indented('impl Flags {', '}'):
args = 'builder: Builder'
args = 'builder: &Builder'
if sgrp.parent:
p = sgrp.parent
args = '{}: &{}::Flags, {}'.format(p.name, p.qual_mod, args)
with fmt.indented(
'pub fn new({}) -> Flags {{'.format(args), '}'):
fmt.line('let bvec = builder.finish("{}");'.format(sgrp.name))
fmt.line('let bvec = builder.state_for("{}");'.format(sgrp.name))
fmt.line('let mut bytes = [0; {}];'.format(sgrp.byte_size()))
fmt.line('assert_eq!(bvec.len(), {});'.format(sgrp.settings_size))
with fmt.indented(
'for (i, b) in bvec.into_iter().enumerate() {', '}'):
fmt.line('bytes[i] = b;')
'for (i, b) in bvec.iter().enumerate() {', '}'):
fmt.line('bytes[i] = *b;')
# Stop here without predicates.
if len(sgrp.predicate_number) == sgrp.boolean_settings: