(root)/
glib-2.79.0/
girepository/
girnode-private.h
       1  /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
       2   * GObject introspection: Parsed GIR
       3   *
       4   * Copyright (C) 2005 Matthias Clasen
       5   *
       6   * SPDX-License-Identifier: LGPL-2.1-or-later
       7   *
       8   * This library is free software; you can redistribute it and/or
       9   * modify it under the terms of the GNU Lesser General Public
      10   * License as published by the Free Software Foundation; either
      11   * version 2 of the License, or (at your option) any later version.
      12   *
      13   * This library is distributed in the hope that it will be useful,
      14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      16   * Lesser General Public License for more details.
      17   *
      18   * You should have received a copy of the GNU Lesser General Public
      19   * License along with this library; if not, write to the
      20   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      21   * Boston, MA 02111-1307, USA.
      22   */
      23  
      24  #pragma once
      25  
      26  #include <glib.h>
      27  
      28  #include "girmodule-private.h"
      29  
      30  G_BEGIN_DECLS
      31  
      32  typedef struct _GIIrNode GIIrNode;
      33  typedef struct _GIIrNodeFunction GIIrNodeFunction;
      34  typedef struct _GIIrNodeParam GIIrNodeParam;
      35  typedef struct _GIIrNodeType GIIrNodeType;
      36  typedef struct _GIIrNodeInterface GIIrNodeInterface;
      37  typedef struct _GIIrNodeSignal GIIrNodeSignal;
      38  typedef struct _GIIrNodeProperty GIIrNodeProperty;
      39  typedef struct _GIIrNodeVFunc GIIrNodeVFunc;
      40  typedef struct _GIIrNodeField GIIrNodeField;
      41  typedef struct _GIIrNodeValue GIIrNodeValue;
      42  typedef struct _GIIrNodeEnum GIIrNodeEnum;
      43  typedef struct _GIIrNodeBoxed GIIrNodeBoxed;
      44  typedef struct _GIIrNodeStruct GIIrNodeStruct;
      45  typedef struct _GIIrNodeConstant GIIrNodeConstant;
      46  typedef struct _GIIrNodeXRef GIIrNodeXRef;
      47  typedef struct _GIIrNodeUnion GIIrNodeUnion;
      48  
      49  typedef enum
      50  {
      51    GI_IR_NODE_INVALID      =  0,
      52    GI_IR_NODE_FUNCTION     =  1,
      53    GI_IR_NODE_CALLBACK     =  2,
      54    GI_IR_NODE_STRUCT       =  3,
      55    GI_IR_NODE_BOXED        =  4,
      56    GI_IR_NODE_ENUM         =  5,
      57    GI_IR_NODE_FLAGS        =  6,
      58    GI_IR_NODE_OBJECT       =  7,
      59    GI_IR_NODE_INTERFACE    =  8,
      60    GI_IR_NODE_CONSTANT     =  9,
      61    GI_IR_NODE_INVALID_0    = 10, /* DELETED - used to be ERROR_DOMAIN */
      62    GI_IR_NODE_UNION        = 11,
      63    GI_IR_NODE_PARAM        = 12,
      64    GI_IR_NODE_TYPE         = 13,
      65    GI_IR_NODE_PROPERTY     = 14,
      66    GI_IR_NODE_SIGNAL       = 15,
      67    GI_IR_NODE_VALUE        = 16,
      68    GI_IR_NODE_VFUNC        = 17,
      69    GI_IR_NODE_FIELD        = 18,
      70    GI_IR_NODE_XREF         = 19
      71  } GIIrNodeTypeId;
      72  
      73  struct _GIIrNode
      74  {
      75    GIIrNodeTypeId type;
      76    gchar *name;
      77    GIIrModule *module;
      78  
      79    guint32 offset; /* Assigned as we build the typelib */
      80  
      81    GHashTable *attributes;
      82  };
      83  
      84  struct _GIIrNodeXRef
      85  {
      86    GIIrNode node;
      87  
      88    gchar *namespace;
      89  };
      90  
      91  struct _GIIrNodeFunction
      92  {
      93    GIIrNode node;
      94  
      95    gboolean deprecated;
      96    gboolean is_varargs; /* Not in typelib yet */
      97  
      98    gboolean is_method;
      99    gboolean is_setter;
     100    gboolean is_getter;
     101    gboolean is_constructor;
     102    gboolean wraps_vfunc;
     103    gboolean throws;
     104    gboolean instance_transfer_full;
     105  
     106    gchar *symbol;
     107    char *property;
     108  
     109    GIIrNodeParam *result;
     110    GList *parameters;
     111  };
     112  
     113  struct _GIIrNodeType
     114  {
     115    GIIrNode node;
     116  
     117    gboolean is_pointer;
     118    gboolean is_basic;
     119    gboolean is_array;
     120    gboolean is_glist;
     121    gboolean is_gslist;
     122    gboolean is_ghashtable;
     123    gboolean is_interface;
     124    gboolean is_error;
     125    gint tag;
     126  
     127    gchar *unparsed;
     128  
     129    gboolean zero_terminated;
     130    gboolean has_length;
     131    gint length;
     132    gboolean has_size;
     133    gint size;
     134    gint array_type;
     135  
     136    GIIrNodeType *parameter_type1;
     137    GIIrNodeType *parameter_type2;
     138  
     139    gchar *giinterface;
     140    gchar **errors;
     141  };
     142  
     143  struct _GIIrNodeParam
     144  {
     145    GIIrNode node;
     146  
     147    gboolean in;
     148    gboolean out;
     149    gboolean caller_allocates;
     150    gboolean optional;
     151    gboolean retval;
     152    gboolean nullable;
     153    gboolean skip;
     154    gboolean transfer;
     155    gboolean shallow_transfer;
     156    GIScopeType scope;
     157  
     158    gint8 closure;
     159    gint8 destroy;
     160  
     161    GIIrNodeType *type;
     162  };
     163  
     164  struct _GIIrNodeProperty
     165  {
     166    GIIrNode node;
     167  
     168    gboolean deprecated;
     169  
     170    gchar *name;
     171    gboolean readable;
     172    gboolean writable;
     173    gboolean construct;
     174    gboolean construct_only;
     175    gboolean transfer;
     176    gboolean shallow_transfer;
     177  
     178    char *setter;
     179    char *getter;
     180  
     181    GIIrNodeType *type;
     182  };
     183  
     184  struct _GIIrNodeSignal
     185  {
     186    GIIrNode node;
     187  
     188    gboolean deprecated;
     189  
     190    gboolean run_first;
     191    gboolean run_last;
     192    gboolean run_cleanup;
     193    gboolean no_recurse;
     194    gboolean detailed;
     195    gboolean action;
     196    gboolean no_hooks;
     197    gboolean instance_transfer_full;
     198  
     199    gboolean has_class_closure;
     200    gboolean true_stops_emit;
     201  
     202    gint class_closure;
     203  
     204    GList *parameters;
     205    GIIrNodeParam *result;
     206  };
     207  
     208  struct _GIIrNodeVFunc
     209  {
     210    GIIrNode node;
     211  
     212    gboolean is_varargs; /* Not in typelib yet */
     213    gboolean must_chain_up;
     214    gboolean must_be_implemented;
     215    gboolean must_not_be_implemented;
     216    gboolean is_class_closure;
     217    gboolean throws;
     218    gboolean instance_transfer_full;
     219  
     220    char *invoker;
     221  
     222    GList *parameters;
     223    GIIrNodeParam *result;
     224  
     225    gint offset;
     226  };
     227  
     228  struct _GIIrNodeField
     229  {
     230    GIIrNode node;
     231  
     232    gboolean readable;
     233    gboolean writable;
     234    gint bits;
     235    gint offset;
     236    GIIrNodeFunction *callback;
     237  
     238    GIIrNodeType *type;
     239  };
     240  
     241  struct _GIIrNodeInterface
     242  {
     243    GIIrNode node;
     244  
     245    gboolean abstract;
     246    gboolean deprecated;
     247    gboolean fundamental;
     248    gboolean final_;
     249  
     250    gchar *gtype_name;
     251    gchar *gtype_init;
     252  
     253    gchar *ref_func;
     254    gchar *unref_func;
     255    gchar *set_value_func;
     256    gchar *get_value_func;
     257  
     258    gchar *parent;
     259    gchar *glib_type_struct;
     260  
     261    GList *interfaces;
     262    GList *prerequisites;
     263  
     264    gint alignment;
     265    gint size;
     266  
     267    GList *members;
     268  };
     269  
     270  struct _GIIrNodeValue
     271  {
     272    GIIrNode node;
     273  
     274    gboolean deprecated;
     275  
     276    gint64 value;
     277  };
     278  
     279  struct _GIIrNodeConstant
     280  {
     281    GIIrNode node;
     282  
     283    gboolean deprecated;
     284  
     285    GIIrNodeType *type;
     286  
     287    gchar *value;
     288  };
     289  
     290  struct _GIIrNodeEnum
     291  {
     292    GIIrNode node;
     293  
     294    gboolean deprecated;
     295    gint storage_type;
     296  
     297    gchar *gtype_name;
     298    gchar *gtype_init;
     299    gchar *error_domain;
     300  
     301    GList *values;
     302    GList *methods;
     303  };
     304  
     305  struct _GIIrNodeBoxed
     306  {
     307    GIIrNode node;
     308  
     309    gboolean deprecated;
     310  
     311    gchar *gtype_name;
     312    gchar *gtype_init;
     313  
     314    gint alignment;
     315    gint size;
     316  
     317    GList *members;
     318  };
     319  
     320  struct _GIIrNodeStruct
     321  {
     322    GIIrNode node;
     323  
     324    gboolean deprecated;
     325    gboolean disguised;
     326    gboolean opaque;
     327    gboolean pointer;
     328    gboolean is_gtype_struct;
     329    gboolean foreign;
     330  
     331    gchar *gtype_name;
     332    gchar *gtype_init;
     333  
     334    gchar *copy_func;
     335    gchar *free_func;
     336  
     337    gint alignment;
     338    gint size;
     339  
     340    GList *members;
     341  };
     342  
     343  struct _GIIrNodeUnion
     344  {
     345    GIIrNode node;
     346  
     347    gboolean deprecated;
     348  
     349    GList *members;
     350    GList *discriminators;
     351  
     352    gchar *gtype_name;
     353    gchar *gtype_init;
     354  
     355    gchar *copy_func;
     356    gchar *free_func;
     357  
     358    gint alignment;
     359    gint size;
     360  
     361    gint discriminator_offset;
     362    GIIrNodeType *discriminator_type;
     363  };
     364  
     365  
     366  GIIrNode *gi_ir_node_new             (GIIrNodeTypeId  type,
     367                                        GIIrModule     *module);
     368  void      gi_ir_node_free            (GIIrNode    *node);
     369  guint32   gi_ir_node_get_size        (GIIrNode    *node);
     370  guint32   gi_ir_node_get_full_size   (GIIrNode    *node);
     371  void      gi_ir_node_build_typelib   (GIIrNode         *node,
     372                                        GIIrNode         *parent,
     373                                        GIIrTypelibBuild *build,
     374                                        guint32          *offset,
     375                                        guint32          *offset2,
     376                                        guint16          *count2);
     377  int       gi_ir_node_cmp             (GIIrNode *node,
     378                                        GIIrNode *other);
     379  gboolean  gi_ir_node_can_have_member (GIIrNode *node);
     380  void      gi_ir_node_add_member      (GIIrNode         *node,
     381                                        GIIrNodeFunction *member);
     382  guint32   gi_ir_write_string         (const gchar *str,
     383                                        GHashTable  *strings,
     384                                        guchar      *data,
     385                                        guint32     *offset);
     386  
     387  const gchar * gi_ir_node_param_direction_string (GIIrNodeParam * node);
     388  const gchar * gi_ir_node_type_to_string         (GIIrNodeTypeId type);
     389  
     390  GIIrNode *gi_ir_find_node (GIIrTypelibBuild *build,
     391                             GIIrModule       *module,
     392                             const char       *name);
     393  
     394  /* In giroffsets.c */
     395  
     396  void gi_ir_node_compute_offsets (GIIrTypelibBuild *build,
     397                                   GIIrNode         *node);
     398  
     399  
     400  G_END_DECLS