Gradually adding support for all features

This commit is contained in:
Pavel Shevaev 2022-12-08 14:50:32 +03:00
parent df2827cbaf
commit 70c6c66f2d
2 changed files with 45 additions and 2 deletions

View File

@ -86,6 +86,16 @@ function _add_twig_support(\Twig\Environment $twig)
return \mtg_get_all_fields($meta, $o);
}
));
$twig->addFunction(new \Twig\TwigFunction('count_optional',
function($units)
{
$opts = 0;
foreach($units as $u)
if($u->hasToken('optional'))
++$opts;
return $opts;
}
));
$twig->addFilter(new \Twig\TwigFilter('go_type',
function($type, $tokens)
{

View File

@ -11,6 +11,12 @@
{% endmacro %}
{% macro decl_struct(meta, o) %}
{%- if o.parent and has_token(o, 'POD') -%}
{{Error("@POD structs can't have a parent: " ~ o.name)}}
{%- endif -%}
{%- if o.parent and has_token(o, 'bitfields') -%}
{{Error("@bitfields structs can't have a parent: " ~ o.name)}}
{%- endif ~%}
//==============================
type {{o.name}} struct {
@ -33,7 +39,7 @@ type I{{o.name}} interface {
Ptr{{o.name}}() *{{o.name}}
}
func (*{{o.name}}) CLASS_ID() uint32 {
return %class_id%
return {{o.classid}}
}
func (*{{o.name}}) CLASS_NAME() string {
return "{{o.name}}"
@ -71,7 +77,9 @@ func (self *{{o.name}}) Read(reader meta.Reader) error {
}
func (self *{{o.name}}) ReadFields(reader meta.Reader) error {
self.Reset()
%read_buffer%
{{_self.struct_read_fields(o)}}
return nil
}
func (self *{{o.name}}) Write(writer meta.Writer) error {
@ -121,6 +129,31 @@ fieldsMask meta.FieldsMask //@bitfields support
{% endmacro %}
{% macro struct_read_fields(o) %}
{%if has_token(o, 'bitfields') %}
use_mask, mask, err := reader.TryReadMask()
if err != nil {
return err
}
self.fieldsMask = mask
{%- endif ~%}
_cont_size, err := reader.GetContainerSize()
if err != nil {
return err
}
if _cont_size < {{o.fields|length - count_optional(o.fields)}} {
_cont_size = {{o.fields|length - count_optional(o.fields)}}
}
{%- if o.parent ~%}
if err := self.{{o.parent.name}}.ReadFields(reader); err != nil { return err }
{%- endif -%}
{% endmacro %}
{% macro decl_enum(o) %}
//==============================