trl_macro.h
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:6k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  trl_macro.h  - macrodefinition version of tree processing funcvtions
  3.  *                 GNU SQL compiler
  4.  *
  5.  *  This file is a part of GNU SQL Server
  6.  *
  7.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  8.  *  Developed at the Institute of System Programming, Russia
  9.  *  This file is written by Michael Kimelman
  10.  *
  11.  *  This program is free software; you can redistribute it and/or modify
  12.  *  it under the terms of the GNU General Public License as published by
  13.  *  the Free Software Foundation; either version 2 of the License, or
  14.  *  (at your option) any later version.
  15.  *
  16.  *  This program is distributed in the hope that it will be useful,
  17.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  *  GNU General Public License for more details.
  20.  *
  21.  *  You should have received a copy of the GNU General Public License
  22.  *  along with this program; if not, write to the Free Software
  23.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  *
  25.  *  Contact:  gss@ispras.ru
  26.  *
  27.  */
  28. /* $Id: trl_macro.h,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29. #ifndef __TRL_macro_H__
  30. #define __TRL_macro_H__
  31. #define Ptree(n)  ((trn)Pnode(n))
  32. /********* direct node address ******************************************/
  33. #ifdef CHECK_TRL
  34.   trn   test_exist __P((trn node,i4_t n,char *f,i4_t l));
  35.   trn   test_node __P((trn node,char *f,i4_t l));
  36.   i4_t   tstv_exist __P((trvec vec,i4_t n,char *f,i4_t l));
  37.   trvec tstv_vec __P((trvec vec,char *f,i4_t l));
  38.   tr_union* xOp_parm  __P((trn node,i4_t n,char  c,char *f,i4_t l));
  39.   tr_union* xOp_parms __P((trn node,i4_t n,char *s,char *f,i4_t l));
  40.   i4_t       compatible_tok_fl  __P((enum token code, enum flags fcode));
  41. #  define TEST_EXIST(ptr,n)   test_exist(ptr,n,__FILE__,__LINE__)
  42. #  define TSTV_EXIST(ptr,n)   tstv_exist(ptr,n,__FILE__,__LINE__)
  43. #  define TSTV_VEC(ptr)       tstv_vec(ptr,__FILE__,__LINE__)
  44. #  define TSTV_VEC1(ptr)      tstv_vec(ptr,_FILE__,_LINE__)
  45. #  define TST_NODE(ptr)       test_node(ptr,__FILE__,__LINE__)
  46. #  define TST_NODE1(ptr)      test_node(ptr,_FILE__,_LINE__)
  47. #  define xOp_PARMS(node,n,s) (*xOp_parms(node,n,s,__FILE__,__LINE__))
  48. #  define xOp_PARM(node,n,c)  (*xOp_parm(node,n,c,__FILE__,__LINE__))
  49. #  define IS_COMP(ptr,fl)     (compatible_tok_fl(CODe_TRN(ptr),fl)?ptr:TNULL)
  50. #  define FMT_EQ(str,pat)     fmt_eq(str,pat)
  51. #  define FMT_EQ1(str,pat)    fmt_eq(str,pat)
  52. #else
  53. #  define TEST_EXIST(ptr,n)   ptr
  54. #  define TSTV_VEC(ptr)       ptr
  55. #  define TSTV_VEC1(ptr)      ptr
  56. #  define TST_NODE(node)      node
  57. #  define TST_NODE1(node)     node
  58. #  define xOp_PARMS(node,n,s) xOp_PARM(node,n,s)
  59. #  define xOp_PARM(node,n,c)  (node)->operands[n]
  60. #  define IS_COMP(ptr,fl)     ptr
  61. #  define FMT_EQ(str,pat)     (bcmp(str,pat,strlen(pat))==0)
  62. #  define FMT_EQ1(str,pat)    (*(char*)(str) == (char*)(pat))
  63. #endif
  64. #define   CODe_TRN1(node)       (TST_NODE1(node))->code
  65. #define   CODe_TRN(node)        (TST_NODE(node))->code
  66. #define   MASk_TRN(node)        (TST_NODE(node))->mask
  67. #define   XOp_TRN(node,n)       (TEST_EXIST(node,n))->operands[n]
  68. #define   XTXt_TRN(node,n)      XOp_TRN(node,n).txtp
  69. #define   XVCb_TRN(node,n)      XTXt_TRN(node,n)
  70. #define   XLTr_TRN(node,n)      XOp_TRN(node,n).ltrp
  71. #define   XLNg_TRN(node,n)      XOp_TRN(node,n).l
  72. #define   XFLt_TRN(node,n)      xOp_PARM(node,n,'f').f
  73. #define   XREl_TRN(node,n)      *((Tabid*) &(xOp_PARMS(node,n,"RRR")) )
  74. #define   LOCATIOn_TRN(n)       xOp_PARM(n,0,'p').pos
  75. #define   RIGHt_TRN(n)          xOp_PARM(n,1,'r').txtp
  76. #define   DOWn_TRN(n)           xOp_PARM(n,2,'d').txtp
  77. #define   ARITy_TRN(n)          xOp_PARM(n,3,'a').l
  78. #define   HAS_DOWn(n)           FMT_EQ(FORMAT(CODe_TRN(n))+2,"da")
  79. #define   HAS_LOCATIOn(n)       FMT_EQ1(FORMAT(CODe_TRN(n)),"p")
  80. #define   Setf_TRN(node,FCODE)  SetF(MASk_TRN(IS_COMP(node,FCODE)),FCODE)
  81. #define   Clrf_TRN(node,FCODE)  ClrF(MASk_TRN(IS_COMP(node,FCODE)),FCODE)
  82. #define   Tstf_TRN(node,FCODE)  TstF(MASk_TRN(IS_COMP(node,FCODE)),FCODE)
  83. /********* TXTREF node address ******************************************/
  84. #define   CODE_TRN(node)        CODe_TRN(Ptree(node))
  85. #define   MASK_TRN(node)        MASk_TRN(Ptree(node))
  86. #define   XOP_TRN(node,n)       XOp_TRN(Ptree(node),n)
  87. #define   XTXT_TRN(node,n)      XTXt_TRN(Ptree(node),n)
  88. #define   XVCB_TRN(node,n)      XVCb_TRN(Ptree(node),n)
  89. #define   XLTR_TRN(node,n)      XLTr_TRN(Ptree(node),n)
  90. #define   XLNG_TRN(node,n)      XLNg_TRN(Ptree(node),n)
  91. #define   XFLT_TRN(node,n)      XFLt_TRN(Ptree(node),n)
  92. #define   XREL_TRN(node,n)      XREl_TRN(Ptree(node),n)
  93. #define   LOCATION_TRN(n)       LOCATIOn_TRN(Ptree(n))
  94. #define   RIGHT_TRN(n)          RIGHt_TRN(Ptree(n))
  95. #define   DOWN_TRN(n)           DOWn_TRN(Ptree(n))
  96. #define   ARITY_TRN(n)          ARITy_TRN(Ptree(n))
  97. #define   HAS_DOWN(n)           HAS_DOWn(Ptree(n))
  98. #define   HAS_LOCATION(n)       HAS_LOCATIOn(Ptree(n))
  99. #define   SetF_TRN(node,FCODE)  Setf_TRN(Ptree(node),FCODE)
  100. #define   ClrF_TRN(node,FCODE)  Clrf_TRN(Ptree(node),FCODE)
  101. #define   TstF_TRN(node,FCODE)  Tstf_TRN(Ptree(node),FCODE)
  102. /********* VECTOR processing ******************************************/
  103. #define Ptrvec(n)          ((trvec)Pnode(n))
  104. #define NULL_TRVEC         (trvec)NULL
  105. #define XVEc_TRN(node,n)   XTXt_TRN(node,n)
  106. #define XVEC_TRN(node,n)   XTXT_TRN(node,n)
  107. #define VLEn(vec)          (TSTV_VEC(vec))->num_elem
  108. #define VLEn1(vec)         (TSTV_VEC1(vec))->num_elem
  109. #define VLEN(vec)          VLEn(Ptrvec(vec))
  110. #define VOp(vec,n)         (vec)->elem[TSTV_EXIST(vec,n)]
  111. #define VOP(vec,n)         VOp(Ptrvec(vec),n)
  112. #define XLEN_VEC(node,n)   VLEN(XVEC_TRN(node,n))
  113. /* XOP_VEC(node,n,m)   node -- TXTREF pointer to trn           *
  114. *                      n -- number of param, what is vector     *
  115. *                     m -- number of vectors element          */
  116. #define XOP_VEC(node,n,m)  VOP(XVEC_TRN(node,n),m)
  117. #define XVECEXP(node,n,m)  VOP(XVEC_TRN(node,n),m).txtp
  118. #endif