Skip to content
Snippets Groups Projects
Select Git revision
  • 0683be9c77db4c4ad67a16c06cf7e4561f33bd67
  • master default protected
  • 9.0
  • 8.0
  • 7.8
  • 7.6
  • 7.4
  • 7.2
  • 7.0
  • 0.6
  • rosuav/latex-markdown-renderer
  • rxnpatch/rxnpatch
  • marcus/gobject-introspection
  • rxnpatch/8.0
  • rosuav/pre-listening-ports
  • nt-tools
  • rosuav/async-annotations
  • rosuav/pgsql-ssl
  • rxnpatch/rxnpatch-broken/2023-10-06T094250
  • grubba/fdlib
  • grubba/wip/sakura/8.0
  • v8.0.2000
  • v8.0.1998
  • v8.0.1996
  • v8.0.1994
  • v8.0.1992
  • v8.0.1990
  • v8.0.1988
  • v8.0.1986
  • rxnpatch/clusters/8.0/2025-04-29T124414
  • rxnpatch/2025-04-29T124414
  • v8.0.1984
  • v8.0.1982
  • v8.0.1980
  • v8.0.1978
  • v8.0.1976
  • v8.0.1974
  • v8.0.1972
  • v8.0.1970
  • v8.0.1968
  • v8.0.1966
41 results

operators.c

Blame
  • errors.h 2.75 KiB
    
    #ifdef ERR_DECLARE
    #define DECLARE_ERROR(NAME, INHERIT, DECL) \
    static struct program *PIKE_CONCAT(NAME,_error_program); \
    static int PIKE_CONCAT(NAME,_error_offset); \
    struct PIKE_CONCAT(NAME,_error_struct) { \
      DECL \
    };
    
    #define ERR_VAR(TYPE,CTYPE,RUNTYPE,NAME) TYPE NAME ;
    #endif
    
    
    #ifdef ERR_SETUP
    #define DECLARE_ERROR(NAME, INHERIT, DECL) do{ \
      int current_offset=0; \
      struct PIKE_CONCAT(NAME,_error_struct) foo; \
      start_new_program(); \
      INHERIT \
      current_offset = PIKE_CONCAT(NAME,_error_offset)=ADD_STORAGE(struct PIKE_CONCAT(NAME,_error_struct));\
      add_string_constant("error_type",#NAME "_error",0); \
      add_integer_constant("is_" #NAME "_error",1,0); \
      DECL \
      PIKE_CONCAT(NAME,_error_program)=end_program(); \
    }while(0);
    
    #define ERR_VAR(TYPE,CTYPE,RUNTYPE,NAME2) \
      map_variable("__" #NAME2, #CTYPE, 0, \
    	       current_offset + (((char *)&(foo.NAME2))-((char *)&foo)), RUNTYPE);
    
    #define ERR_INHERIT(NAME) \
      low_inherit(PIKE_CONCAT(NAME,_error_program),0,0,0,0,0);
    
    #define ERR_FUNC(NAME,FUNC,TYPE,FLAGS) \
      ADD_FUNCTION(NAME,FUNC,TYPE,FLAGS);
    
    #endif
    
    #ifdef ERR_CLEANUP
    #define DECLARE_ERROR(NAME, INHERIT, DECL) \
      if(PIKE_CONCAT(NAME,_error_program)) {\
        free_program(PIKE_CONCAT(NAME,_error_program)); \
        PIKE_CONCAT(NAME,_error_program)=0;\
      }
    #endif
    
    
    #ifndef ERR_INHERIT
    #define ERR_INHERIT(NAME)
    #endif
    
    #ifndef ERR_VAR
    #define ERR_VAR(TYPE,CTYPE,RUNTYPE,NAME)
    #endif
    
    #ifndef ERR_FUNC
    #define ERR_FUNC(NAME,FUNC,TYPE,FLAGS)
    #endif
    
    DECLARE_ERROR(generic, /* no inherit */ ,
      ERR_VAR(struct pike_string *,string,T_STRING,desc)
      ERR_VAR(struct array *,array,T_ARRAY,backtrace)
      ERR_FUNC("cast",f_error_cast,tFunc(tString,tMixed),0)
      ERR_FUNC("`[]",f_error_index,tFunc(tString,tMixed),0)
      ERR_FUNC("describe",f_error_describe,tFunc(tVoid,tString),0)
      ERR_FUNC("backtrace",f_error_backtrace,tFunc(tVoid,tArr(tMixed)),0)
    )
    
    #define GENERIC_ERROR_THIS ((struct generic_error_struct *)fp->current_storage)