code: def _create_type(self, env, item):
          
          if item.name in env:
              existing_dt = env[item.name]
              raise InvalidSpec(
                  'Symbol %s already defined (%s:%d).' %
                  (quote(item.name), existing_dt._ast_node.path,
                   existing_dt._ast_node.lineno), item.lineno, item.path)
          namespace = self.api.ensure_namespace(env.namespace_name)
          if isinstance(item, AstStructDef):
              try:
                  api_type = Struct(name=item.name, namespace=namespace,
                                    ast_node=item)
              except ParameterError as e:
                  raise InvalidSpec(
                      'Bad declaration of %s: %s' % (quote(item.name), e.args[0]),
                      item.lineno, item.path)
          elif isinstance(item, AstUnionDef):
              api_type = Union(
                  name=item.name, namespace=namespace, ast_node=item,
                  closed=item.closed)
          else:
              raise AssertionError('Unknown type definition %r' % type(item))
  
          env[item.name] = api_type
          return api_type
docs: Create a forward reference for a union or struct.