diff --git a/src/codegen.inc.php b/src/codegen.inc.php index 787eb2d..0fbe879 100644 --- a/src/codegen.inc.php +++ b/src/codegen.inc.php @@ -122,10 +122,10 @@ function _add_twig_support(\Twig\Environment $twig) return is_primary_field($o, $f); } )); - $twig->addFunction(new \Twig\TwigFunction('get_diff_class_units', - function($meta, $o) + $twig->addFunction(new \Twig\TwigFunction('get_diff_related_units', + function($o) { - return get_diff_class_units($meta, $o); + return get_diff_related_units($o); } )); } @@ -440,7 +440,18 @@ function is_nullable_type(\mtgType $type) ($type instanceof \mtgMetaStruct && !$type->hasToken('POD')); } -function get_diff_class_units(\mtgMetaInfo $meta, \mtgMetaStruct $struct) +function get_diff_units(\mtgMetaStruct $struct) { - return []; + $result = array(); + foreach($struct->getFields() as $field) + { + if($field->hasToken('nodiff')) + continue; + + if($field->getType() instanceof mtgMetaStruct) + $result[] = $field->getType(); + else if($field->getType() instanceof mtgArrType) + $result[] = $field->getType()->getValue(); + } + return $result; } diff --git a/tpl/macro.twig b/tpl/macro.twig index a02256a..06594a4 100644 --- a/tpl/macro.twig +++ b/tpl/macro.twig @@ -3,17 +3,17 @@ {%- for u in meta.getunits ~%} {%- if u.object is instanceof('\\mtgMetaStruct') -%} -{{ _self.decl_struct(meta, u.object) }} +{{ _self.decl_struct(u.object) }} {%- elseif u.object is instanceof('\\mtgMetaEnum') -%} {{ _self.decl_enum(u.object) }} {%- elseif u.object is instanceof('\\mtgMetaRPC') -%} -{{ _self.decl_rpc(meta, u.object) }} +{{ _self.decl_rpc(u.object) }} {%- endif ~%} {%- endfor ~%} {% endmacro %} -{% macro decl_struct(meta, o, extra = '') %} +{% macro decl_struct(o, extra = '') %} {%- if o.parent and has_token(o, 'POD') -%} {{Error("@POD structs can't have a parent: " ~ o.name)}} {%- endif -%} @@ -108,7 +108,7 @@ public {{_self.struct_type(o)}} {{o.name}} {{_self.base_struct_class(o)}} {%- endif -%} {%- if has_token(o, 'diffable') ~%} - {{_self.diffable_support(meta, o)}} + {{_self.diffable_support(o)}} {%- endif -%} {{extra}} @@ -293,10 +293,10 @@ public enum {{o.name}} } {% endmacro %} -{% macro decl_rpc(meta, o) %} +{% macro decl_rpc(o) %} -{{_self.decl_struct(meta, o.req)}} -{{_self.decl_struct(meta, o.rsp)}} +{{_self.decl_struct(o.req)}} +{{_self.decl_struct(o.rsp)}} public class {{o.name}} : IRpc { @@ -332,9 +332,9 @@ public class {{o.name}} : IRpc {% endmacro %} -{%- macro diffable_support(meta, o) -%} +{%- macro diffable_support(o) -%} - {% for u in get_diff_class_units(meta, o) %} + {% for u in get_diff_related_units(o) %} {{_self.diff_methods(u)}} {% endfor %}