aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2017-10-03 18:11:54 -0700
committerChris Forbes <chrisf@ijw.co.nz>2017-10-04 07:26:55 -0700
commit569247a4c5c4f7aa57b61fe563bccada3b8d3d6b (patch)
treec0a495c520d056fed6057ddf1c1c491504d5ac22 /scripts
parentb2e9cb9c3ed05f568bd32d8fd703e56edcffe23d (diff)
downloadusermoji-569247a4c5c4f7aa57b61fe563bccada3b8d3d6b.tar.xz
scripts: Generate copy assignment operators for safe_*
Diffstat (limited to 'scripts')
-rw-r--r--scripts/helper_file_generator.py3
1 files changed, 3 insertions, 0 deletions
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
index a9d9390f..4cdea71b 100644
--- a/scripts/helper_file_generator.py
+++ b/scripts/helper_file_generator.py
@@ -559,6 +559,7 @@ class HelperFileOutputGenerator(OutputGenerator):
safe_struct_header += '%s;\n' % member.cdecl
safe_struct_header += ' safe_%s(const %s* in_struct);\n' % (item.name, item.name)
safe_struct_header += ' safe_%s(const safe_%s& src);\n' % (item.name, item.name)
+ safe_struct_header += ' safe_%s& operator=(const safe_%s& src);\n' % (item.name, item.name)
safe_struct_header += ' safe_%s();\n' % item.name
safe_struct_header += ' ~safe_%s();\n' % item.name
safe_struct_header += ' void initialize(const %s* in_struct);\n' % item.name
@@ -883,7 +884,9 @@ class HelperFileOutputGenerator(OutputGenerator):
copy_construct_txt = construct_txt.replace(' (in_struct->', ' (src.') # Exclude 'if' blocks from next line
copy_construct_txt = copy_construct_txt.replace('(in_struct->', '(*src.') # Pass object to copy constructors
copy_construct_txt = copy_construct_txt.replace('in_struct->', 'src.') # Modify remaining struct refs for src object
+ copy_assign_txt = ' if (&src == this) return *this;\n\n' + destruct_txt + '\n' + copy_construct_init + copy_construct_txt + '\n return *this;'
safe_struct_body.append("\n%s::%s(const %s& src)\n{\n%s%s}" % (ss_name, ss_name, ss_name, copy_construct_init, copy_construct_txt)) # Copy constructor
+ safe_struct_body.append("\n%s& %s::operator=(const %s& src)\n{\n%s\n}" % (ss_name, ss_name, ss_name, copy_assign_txt)) # Copy assignment operator
safe_struct_body.append("\n%s::~%s()\n{\n%s}" % (ss_name, ss_name, destruct_txt))
safe_struct_body.append("\nvoid %s::initialize(const %s* in_struct)\n{\n%s%s}" % (ss_name, item.name, init_func_txt, construct_txt))
# Copy initializer uses same txt as copy constructor but has a ptr and not a reference