aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobin Ehlis <tobin@lunarg.com>2015-06-11 09:37:00 -0600
committerTobin Ehlis <tobin@lunarg.com>2015-06-12 12:50:02 -0600
commit300a45e8fb5f1d83d726fecd2705a9c6a798ac4d (patch)
treeea19d2cd379ee34f7f1c2a964f71c347c4eee46d
parent89ad7526e020e0c968720c684efb098f568fab42 (diff)
downloadusermoji-300a45e8fb5f1d83d726fecd2705a9c6a798ac4d.tar.xz
layers: Xchange #54 fix - Update vk_helper.py string helper to handle arrays of enums
-rwxr-xr-xvk_helper.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/vk_helper.py b/vk_helper.py
index 3f16c3d0..7d201253 100755
--- a/vk_helper.py
+++ b/vk_helper.py
@@ -755,7 +755,7 @@ class StructWrapperGen:
sh_funcs.append('string %s(const %s* pStruct, const string prefix);' % (self._get_sh_func_name(s), typedef_fwd_dict[s]))
sh_funcs.append('\n')
for s in sorted(self.struct_dict):
- num_non_enum_elems = [is_type(self.struct_dict[s][elem]['type'], 'enum') for elem in self.struct_dict[s]].count(False)
+ num_non_enum_elems = [(is_type(self.struct_dict[s][elem]['type'], 'enum') and not self.struct_dict[s][elem]['ptr']) for elem in self.struct_dict[s]].count(False)
stp_list = [] # stp == "struct to print" a list of structs for this API call that should be printed as structs
# This pre-pass flags embedded structs and pNext
for m in sorted(self.struct_dict[s]):
@@ -770,7 +770,7 @@ class StructWrapperGen:
if (0 != num_non_enum_elems):
sh_funcs.append('%sstringstream ss[%u];' % (indent, num_non_enum_elems))
num_stps = len(stp_list)
- # First generate code for any embedded structs
+ # First generate code for any embedded structs or arrays
if 0 < num_stps:
sh_funcs.append('%sstring stp_strs[%u];' % (indent, num_stps))
idx_ss_decl = False # Make sure to only decl this once
@@ -797,12 +797,13 @@ class StructWrapperGen:
indent += ' '
sh_funcs.append('%sindex_ss.str("");' % (indent))
sh_funcs.append('%sindex_ss << i;' % (indent))
- if not is_type(stp_list[index]['type'], 'struct'):
+ if is_type(stp_list[index]['type'], 'enum'):
#sh_funcs.append('/* AD */');
addr_char = ''
- sh_funcs.append('%sss[%u] << %spStruct->%s[i];' % (indent, index, addr_char, stp_list[index]['name']))
+ #value_print = 'string_%s(%spStruct->%s)' % (self.struct_dict[s][m]['type'], deref, self.struct_dict[s][m]['name'])
+ sh_funcs.append('%sss[%u] << string_%s(pStruct->%s[i]);' % (indent, index, stp_list[index]['type'], stp_list[index]['name']))
sh_funcs.append('%sstp_strs[%u] += " " + prefix + "%s[" + index_ss.str() + "] = " + ss[%u].str() + "\\n";' % (indent, index, stp_list[index]['name'], index))
- else:
+ elif is_type(stp_list[index]['type'], 'struct'):
#sh_funcs.append('/* AD */');
sh_funcs.append('%sss[%u] << %spStruct->%s[i];' % (indent, index, addr_char, stp_list[index]['name']))
sh_funcs.append('%stmp_str = %s(%spStruct->%s[i], extra_indent);' % (indent, self._get_sh_func_name(stp_list[index]['type']), addr_char, stp_list[index]['name']))
@@ -812,6 +813,11 @@ class StructWrapperGen:
else:
#sh_funcs.append('/* ADB */');
sh_funcs.append('%sstp_strs[%u] += " " + prefix + "%s[" + index_ss.str() + "] (" + ss[%u].str() + ")\\n" + tmp_str;' % (indent, index, stp_list[index]['name'], index))
+ else:
+ #sh_funcs.append('/* AD */');
+ addr_char = ''
+ sh_funcs.append('%sss[%u] << %spStruct->%s[i];' % (indent, index, addr_char, stp_list[index]['name']))
+ sh_funcs.append('%sstp_strs[%u] += " " + prefix + "%s[" + index_ss.str() + "] = " + ss[%u].str() + "\\n";' % (indent, index, stp_list[index]['name'], index))
sh_funcs.append('%sss[%u].str("");' % (indent, index))
indent = indent[4:]
sh_funcs.append('%s}' % (indent))
@@ -846,7 +852,7 @@ class StructWrapperGen:
else:
sh_funcs.append(' stp_strs[%u] = " " + prefix + "%s (" + ss[%u].str() + ")\\n" + tmp_str;' % (index, stp_list[index]['name'], index))
sh_funcs.append(' ss[%u].str("");' % index)
- # Now print non-enum data members
+ # Now print one-line info for all data members
index = 0
final_str = ''
for m in sorted(self.struct_dict[s]):
@@ -875,9 +881,17 @@ class StructWrapperGen:
value_print = 'ss[%u].str()' % index
index += 1
else:
+ # For an non-empty array of enums just print address w/ note that array will be displayed below
if self.struct_dict[s][m]['ptr']:
- deref = '*'
- value_print = 'string_%s(%spStruct->%s)' % (self.struct_dict[s][m]['type'], deref, self.struct_dict[s][m]['name'])
+ sh_funcs.append(' if (pStruct->%s)' % (self.struct_dict[s][m]['name']))
+ sh_funcs.append(' ss[%u] << pStruct->%s << " (See individual array values below)";' % (index, self.struct_dict[s][m]['name']))
+ sh_funcs.append(' else')
+ sh_funcs.append(' ss[%u].str("NULL");' % (index))
+ value_print = 'ss[%u].str()' % index
+ index += 1
+ # For single enum just print the string representation
+ else:
+ value_print = 'string_%s(pStruct->%s)' % (self.struct_dict[s][m]['type'], self.struct_dict[s][m]['name'])
final_str += ' + prefix + "%s = " + %s + "\\n"' % (self.struct_dict[s][m]['name'], value_print)
final_str = final_str[3:] # strip off the initial ' + '
if 0 != num_stps: # Append data for any embedded structs