anchor.diff:      	doc=SHORTDOC*
           struct_add*
           TAG_END_STRUCT SHORTDOC*
  -        -> ^(CLASSDEF ^(DOC $doc) $name struct_add*)
  +        -> ^(CLASSDEF ^(DOC $doc?) $name struct_add*)
       ;
   
   // for the time being, bitflags are converted to enums
  
positive.code:                     ^(OP_LOGICAL_AND[$TAG_START_ADD, "and"]
                          $ver1 $ver2)
                      $cond)
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> {has_ver1 && !has_ver2 && has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  ^(OP_LOGICAL_AND[$TAG_START_ADD, "and"] $ver1 $cond)
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> {!has_ver1 && has_ver2 && has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  ^(OP_LOGICAL_AND[$TAG_START_ADD, "and"] $ver2 $cond)
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> {!has_ver1 && !has_ver2 && has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  $cond
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          // !has_cond
          -> {has_ver1 && has_ver2 && !has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  ^(OP_LOGICAL_AND[$TAG_START_ADD, "and"] $ver1 $ver2)
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> {has_ver1 && !has_ver2 && !has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  $ver1
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> {!has_ver1 && has_ver2 && !has_cond}?
             ^(IF[$TAG_START_ADD, "if"]
                  $ver2
                  ^(FIELDDEF ^(DOC $doc) $type $name))
          -> ^(FIELDDEF ^(DOC $doc) $type $name)
      ;
  
  attr_variable_name
  
negative.code:     	doc=SHORTDOC*
          enum_option+
          TAG_END_BITFLAGS SHORTDOC*
          -> ^(ENUMDEF ^(DOC $doc?) $name $type enum_option+)
      ;
  
  struct_add
  