Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions Bitfield.pm
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,12 @@ sub render_bitfield_core {
emit "static const bitfield_item_info bits[bit_count];";
} "template<> struct ${export_prefix}bitfield_$traits_name ", ";";
emit_block {
emit "static const bitfield_identity identity;";
emit "static const bitfield_identity *get() { return &identity; }";
emit "static const type_identity_for<$full_name> identity;";
emit "static const type_identity_for<$full_name> *get() { return &identity; }";
} "template<> struct ${export_prefix}identity_$traits_name ", ";";
header_ref("Export.h");
header_ref("DataDefs.h");
header_ref("DataIdentity.h");
};

with_emit_static {
Expand All @@ -112,7 +113,7 @@ sub render_bitfield_core {
$lines[-1] =~ s/,$//;
} "const bitfield_item_info bitfield_${traits_name}::bits[bit_count] = ", ";";

emit "const bitfield_identity identity_${traits_name}::identity(",
emit "const type_identity_for<$full_name> identity_${traits_name}::identity(",
"sizeof($full_name), ",
type_identity_reference($tag,-parent => 1), ', ',
"\"$name\", bitfield_${traits_name}::bit_count, bitfield_${traits_name}::bits);";
Expand Down
6 changes: 3 additions & 3 deletions Common.pm
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ sub fully_qualified_name($$;$) {
sub type_identity_reference($%) {
my ($tag, %flags) = @_;

return 'NULL' unless $tag;
return 'nullptr' unless $tag;

my $name = $tag->nodeName;

Expand All @@ -431,7 +431,7 @@ sub type_identity_reference($%) {
last if $tag->getAttribute('ld:typedef-name');
}

return 'NULL' unless $tag;
return 'nullptr' unless $tag;
}

return '&global::_identity' if $name eq 'ld:global-object';
Expand Down Expand Up @@ -540,7 +540,7 @@ sub generate_field_table(&$) {

&with_anon($blk, 'T_'.$ftable_name);

return 'NULL' unless @field_defs;
return 'nullptr' unless @field_defs;

emit "#define CUR_STRUCT $full_name";
if (%field_defs_extra) {
Expand Down
21 changes: 11 additions & 10 deletions Enum.pm
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,12 @@ sub render_enum_tables($$$$$$) {

with_emit_traits {
emit_block {
emit "const static enum_identity identity;";
emit "const static enum_identity *get() { return &identity; }";
emit "const static type_identity_for<$full_name> identity;";
emit "const static type_identity_for<$full_name> *get() { return &identity; }";
} "template<> struct ${export_prefix}identity_$traits_name ", ";";
header_ref("Export.h");
header_ref("DataDefs.h");
header_ref("DataIdentity.h");
};

# Enumerate enum attributes
Expand Down Expand Up @@ -175,7 +176,7 @@ sub render_enum_tables($$$$$$) {
for (my $i = 0; $i < @anames; $i++) {
emit "$atypes[$i] $anames[$i];";
}
emit "const static struct_identity _identity;";
emit "const static type_identity_for<attr_entry_type> _identity;";
} "struct attr_entry_type ", ";";
emit "static const attr_entry_type attr_table[", $count, "+1];";
emit "static const attr_entry_type &attrs(enum_type value);";
Expand All @@ -201,7 +202,7 @@ sub render_enum_tables($$$$$$) {

# Emit complex data

my $complex_ptr = 'NULL';
my $complex_ptr = 'nullptr';
if ($complex) {
my @items = $tag->findnodes('child::enum-item');
my $last_value = -1;
Expand All @@ -223,8 +224,8 @@ sub render_enum_tables($$$$$$) {

# Emit attrs

my $atable_ptr = 'NULL';
my $atable_meta = 'NULL';
my $atable_ptr = 'nullptr';
my $atable_meta = 'nullptr';

if (@anames) {
my @table_entries;
Expand Down Expand Up @@ -296,17 +297,17 @@ sub render_enum_tables($$$$$$) {
@field_defs = @field_meta;
} $entry_type;

emit "const struct_identity ${entry_type}::_identity(",
"sizeof($entry_type), NULL, ",
emit "const type_identity_for<${entry_type}> ${entry_type}::_identity(",
"sizeof($entry_type), nullptr, ",
type_identity_reference($tag), ', ',
"\"_attr_entry_type\", NULL, $ftable);";
"\"_attr_entry_type\", nullptr, $ftable);";
} 'fields';

$atable_ptr = "enum_${traits_name}::attr_table";
$atable_meta = "&${entry_type}::_identity";
}

emit "const enum_identity identity_${traits_name}::identity(",
emit "const type_identity_for<$full_name> identity_${traits_name}::identity(",
"sizeof($full_name), ",
type_identity_reference($tag,-parent => 1), ', ',
"\"$name\", TID($base_type), $base, ",
Expand Down
24 changes: 14 additions & 10 deletions StructFields.pm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ sub with_struct_block(&$;$%) {
my $exp = $name ? $export_prefix : '';
header_ref("Export.h");
header_ref("DataDefs.h");
header_ref("DataIdentity.h");
my $prefix = $kwd.' '.$exp.($name ? $name.' ' : '');

emit_comment $tag, -attr => 1;
Expand Down Expand Up @@ -693,19 +694,21 @@ sub emit_struct_fields($$;%) {
if ($in_union_body) {
my $traits_name = 'identity_traits<'.$full_name.'>';

emit "using df_identity_base = $identity_type;";

with_emit_traits {
emit_block {
emit "static const $identity_type identity;";
emit "static const $identity_type *get() { return &identity; }";
emit "static const type_identity_for<$full_name> identity;";
emit "static const type_identity_for<$full_name> *get() { return &identity; }";
} "template<> struct ${export_prefix}$traits_name ", ";";
};

with_emit_static {
my $ftable = render_field_metadata $tag, $full_name, @fields, %info;
emit "const $identity_type ${traits_name}::identity(",
emit "const type_identity_for<$full_name> ${traits_name}::identity(",
"sizeof($full_name), &allocator_fn<${full_name}>, ",
type_identity_reference($tag,-parent => 1), ', ',
"\"$name\", NULL, $ftable);";
"\"$name\", nullptr, $ftable);";
} 'fields-' . $fields_group;

# Needed for unions with fields with non-default ctors (e.g. bitfields)
Expand All @@ -731,7 +734,8 @@ sub emit_struct_fields($$;%) {
my $inherits = $flags{-inherits};
my $original_name = $tag->getAttribute('original-name');

emit "static const $identity_type _identity;";
emit "using df_identity_base = $identity_type;";
emit "static const type_identity_for<$full_name> _identity;";

with_emit_static {
local @simple_inits;
Expand Down Expand Up @@ -771,18 +775,18 @@ sub emit_struct_fields($$;%) {
my $ftable = render_field_metadata $tag, $full_name, @fields, %info;

if ($flags{-class}) {
emit "const virtual_identity ${full_name}::_identity(",
emit "const type_identity_for<${full_name}> ${full_name}::_identity(",
"sizeof($full_name), &${alloc_fn}<${full_name}>, ",
"\"$name\", ",
($original_name ? "\"$original_name\"" : 'NULL'), ', ',
($inherits ? "&${inherits}::_identity" : 'NULL'), ', ',
($original_name ? "\"$original_name\"" : 'nullptr'), ', ',
($inherits ? "&${inherits}::_identity" : 'nullptr'), ', ',
"$ftable);";
} else {
emit "const $identity_type ${full_name}::_identity(",
emit "const type_identity_for<${full_name}> ${full_name}::_identity(",
"sizeof($full_name), &allocator_fn<${full_name}>, ",
type_identity_reference($tag,-parent => 1), ', ',
"\"$name\", ",
($inherits ? "&${inherits}::_identity" : 'NULL'), ', ',
($inherits ? "&${inherits}::_identity" : 'nullptr'), ', ',
"${ftable}${maybe_index_enum});";
}
} 'fields-' . $fields_group unless $flags{-noidentity};
Expand Down
1 change: 1 addition & 0 deletions codegen.pl
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ BEGIN

emit_block {
emit "void InitGlobals();";
header_ref("DataIdentity.h");
emit "extern ", $export_prefix, "global_identity _identity;";

for my $name (sort { $a cmp $b } keys %globals) {
Expand Down
Loading