Annotation of 43BSDReno/contrib/emacs-18.55/gdb/expression.h, revision 1.1

1.1     ! root        1: /* Definitions for expressions stored in reversed prefix form, for GDB.
        !             2:    Copyright (C) 1986 Free Software Foundation, Inc.
        !             3: 
        !             4: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
        !             5: WARRANTY.  No author or distributor accepts responsibility to anyone
        !             6: for the consequences of using it or for whether it serves any
        !             7: particular purpose or works at all, unless he says so in writing.
        !             8: Refer to the GDB General Public License for full details.
        !             9: 
        !            10: Everyone is granted permission to copy, modify and redistribute GDB,
        !            11: but only under the conditions described in the GDB General Public
        !            12: License.  A copy of this license is supposed to have been given to you
        !            13: along with GDB so you can know your rights and responsibilities.  It
        !            14: should be in a file named COPYING.  Among other things, the copyright
        !            15: notice and this notice must be preserved on all copies.
        !            16: 
        !            17: In other words, go ahead and share GDB, but don't try to stop
        !            18: anyone else from sharing it farther.  Help stamp out software hoarding!
        !            19: */
        !            20: 
        !            21: /* Definitions for saved C expressions.  */
        !            22: 
        !            23: /* An expression is represented as a vector of union exp_element's.
        !            24:    Each exp_element is an opcode, except that some opcodes cause
        !            25:    the following exp_element to be treated as a long or double constant
        !            26:    or as a variable.  The opcodes are obeyed, using a stack for temporaries.
        !            27:    The value is left on the temporary stack at the end.  */
        !            28: 
        !            29: /* When it is necessary to include a string,
        !            30:    it can occupy as many exp_elements as it needs.
        !            31:    We find the length of the string using strlen,
        !            32:    divide to find out how many exp_elements are used up,
        !            33:    and skip that many.  Strings, like numbers, are indicated
        !            34:    by the preceding opcode.  */
        !            35: 
        !            36: enum exp_opcode
        !            37: {
        !            38: /* BINOP_... operate on two values computed by following subexpressions,
        !            39:    replacing them by one result value.  They take no immediate arguments.  */
        !            40:   BINOP_ADD,           /* + */
        !            41:   BINOP_SUB,           /* - */
        !            42:   BINOP_MUL,           /* * */
        !            43:   BINOP_DIV,           /* / */
        !            44:   BINOP_REM,           /* % */
        !            45:   BINOP_LSH,           /* << */
        !            46:   BINOP_RSH,           /* >> */
        !            47:   BINOP_AND,           /* && */
        !            48:   BINOP_OR,            /* || */
        !            49:   BINOP_LOGAND,                /* & */
        !            50:   BINOP_LOGIOR,                /* | */
        !            51:   BINOP_LOGXOR,                /* ^ */
        !            52:   BINOP_EQUAL,         /* == */
        !            53:   BINOP_NOTEQUAL,      /* != */
        !            54:   BINOP_LESS,          /* < */
        !            55:   BINOP_GTR,           /* > */
        !            56:   BINOP_LEQ,           /* <= */
        !            57:   BINOP_GEQ,           /* >= */
        !            58:   BINOP_REPEAT,                /* @ */
        !            59:   BINOP_ASSIGN,                /* = */
        !            60:   BINOP_COMMA,         /* , */
        !            61:   BINOP_SUBSCRIPT,     /* x[y] */
        !            62:   BINOP_EXP,           /* Exponentiation */
        !            63:   BINOP_END,
        !            64: 
        !            65:   BINOP_ASSIGN_MODIFY, /* +=, -=, *=, and so on.
        !            66:                           The following exp_element is another opcode,
        !            67:                           a BINOP_, saying how to modify.
        !            68:                           Then comes another BINOP_ASSIGN_MODIFY,
        !            69:                           making three exp_elements in total.  */
        !            70: 
        !            71: /* Operates on three values computed by following subexpressions.  */
        !            72:   TERNOP_COND,         /* ?: */
        !            73: 
        !            74: /* The OP_... series take immediate following arguments.
        !            75:    After the arguments come another OP_... (the same one)
        !            76:    so that the grouping can be recognized from the end.  */
        !            77: 
        !            78: /* OP_LONG is followed by a type pointer in the next exp_element
        !            79:    and the long constant value in the following exp_element.
        !            80:    Then comes another OP_LONG.
        !            81:    Thus, the operation occupies four exp_elements.  */
        !            82: 
        !            83:   OP_LONG,
        !            84: /* OP_DOUBLE is similar but takes a double constant instead of a long one.  */
        !            85:   OP_DOUBLE,
        !            86: /* OP_VAR_VALUE takes one struct symbol * in the following exp_element,
        !            87:    followed by another OP_VAR_VALUE, making three exp_elements.  */
        !            88:   OP_VAR_VALUE,
        !            89: /* OP_LAST is followed by an integer in the next exp_element.
        !            90:    The integer is zero for the last value printed,
        !            91:    or it is the absolute number of a history element.
        !            92:    With another OP_LAST at the end, this makes three exp_elements.  */
        !            93:   OP_LAST,
        !            94: /* OP_REGISTER is followed by an integer in the next exp_element.
        !            95:    This is the number of a register to fetch (as an int).
        !            96:    With another OP_REGISTER at the end, this makes three exp_elements.  */
        !            97:   OP_REGISTER,
        !            98: /* OP_INTERNALVAR is followed by an internalvar ptr in the next exp_element.
        !            99:    With another OP_INTERNALVAR at the end, this makes three exp_elements.  */
        !           100:   OP_INTERNALVAR,
        !           101: /* OP_FUNCALL is followed by an integer in the next exp_element.
        !           102:    The integer is the number of args to the function call.
        !           103:    That many plus one values from following subexpressions
        !           104:    are used, the first one being the function.
        !           105:    The integer is followed by a repeat of OP_FUNCALL,
        !           106:    making three exp_elements.  */
        !           107:   OP_FUNCALL,
        !           108: /* OP_STRING represents a string constant.
        !           109:    Its format is the same as that of a STRUCTOP, but the string
        !           110:    data is just made into a string constant when the operation
        !           111:    is executed.  */
        !           112:   OP_STRING,
        !           113: 
        !           114: /* UNOP_CAST is followed by a type pointer in the next exp_element.
        !           115:    With another UNOP_CAST at the end, this makes three exp_elements.
        !           116:    It casts the value of the following subexpression.  */
        !           117:   UNOP_CAST,
        !           118: /* UNOP_MEMVAL is followed by a type pointer in the next exp_element
        !           119:    With another UNOP_MEMVAL at the end, this makes three exp_elements.
        !           120:    It casts the contents of the word addressed by the value of the
        !           121:    following subexpression.  */
        !           122:   UNOP_MEMVAL,
        !           123: /* UNOP_... operate on one value from a following subexpression
        !           124:    and replace it with a result.  They take no immediate arguments.  */
        !           125:   UNOP_NEG,            /* Unary - */
        !           126:   UNOP_ZEROP,          /* Unary ! */
        !           127:   UNOP_LOGNOT,         /* Unary ~ */
        !           128:   UNOP_IND,            /* Unary * */
        !           129:   UNOP_ADDR,           /* Unary & */
        !           130:   UNOP_PREINCREMENT,   /* ++ before an expression */
        !           131:   UNOP_POSTINCREMENT,  /* ++ after an expression */
        !           132:   UNOP_PREDECREMENT,   /* -- before an expression */
        !           133:   UNOP_POSTDECREMENT,  /* -- after an expression */
        !           134:   UNOP_SIZEOF,         /* Unary sizeof (followed by expression) */
        !           135: 
        !           136: /* STRUCTOP_... operate on a value from a following subexpression
        !           137:    by extracting a structure component specified by a string
        !           138:    that appears in the following exp_elements (as many as needed).
        !           139:    STRUCTOP_STRUCT is used for "." and STRUCTOP_PTR for "->".
        !           140:    They differ only in the error message given in case the value is
        !           141:    not suitable or the structure component specified is not found.
        !           142: 
        !           143:    The length of the string follows in the next exp_element,
        !           144:    (after the string), followed by another STRUCTOP_... code.  */
        !           145:   STRUCTOP_STRUCT,
        !           146:   STRUCTOP_PTR,
        !           147: };
        !           148: 
        !           149: union exp_element
        !           150: {
        !           151:   enum exp_opcode opcode;
        !           152:   struct symbol *symbol;
        !           153:   long longconst;
        !           154:   double doubleconst;
        !           155:   char string;
        !           156:   struct type *type;
        !           157:   struct internalvar *internalvar;
        !           158: };
        !           159: 
        !           160: struct expression
        !           161: {
        !           162:   int nelts;
        !           163:   union exp_element elts[1];
        !           164: };
        !           165: 
        !           166: struct expression *parse_c_expression ();
        !           167: struct expression *parse_c_1 ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.