Annotation of parser3/src/include/pa_opcode.h, revision 1.1
1.1 ! paf 1: /** @file
! 2: Parser: compiled code related decls.
! 3:
! 4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
! 5:
! 6: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
! 7:
! 8: $Id: code.h,v 1.28 2001/05/07 13:29:59 paf Exp $
! 9: */
! 10:
! 11: #ifndef CODE_H
! 12: #define CODE_H
! 13:
! 14: #include "pa_string.h"
! 15: #include "pa_array.h"
! 16:
! 17: class Value;
! 18: class Array;
! 19:
! 20: /// Compiled operation code
! 21: enum OPCODE {
! 22: //@{
! 23: /// @name literals
! 24: OP_VALUE, OP_CURLY_CODE__STORE_PARAM, OP_EXPR_CODE__STORE_PARAM,
! 25: //@}
! 26:
! 27: //@{
! 28: /// @name actions
! 29: OP_WITH_SELF, OP_WITH_ROOT, OP_WITH_READ, OP_WITH_WRITE,
! 30: OP_GET_CLASS,
! 31: OP_CONSTRUCT_VALUE, OP_CONSTRUCT_EXPR,
! 32: OP_WRITE_VALUE, OP_WRITE_EXPR_RESULT, OP_STRING__WRITE,
! 33: OP_GET_ELEMENT, OP_GET_ELEMENT__WRITE,
! 34: OP_CREATE_EWPOOL, OP_REDUCE_EWPOOL,
! 35: OP_CREATE_RWPOOL, OP_REDUCE_RWPOOL,
! 36: OP_CREATE_SWPOOL, OP_REDUCE_SWPOOL,
! 37: OP_GET_METHOD_FRAME,
! 38: OP_STORE_PARAM,
! 39: OP_CALL,
! 40: //@}
! 41:
! 42: //@{
! 43: /// @name expression ops: unary
! 44: OP_NEG, OP_INV, OP_NOT, OP_DEF, OP_IN, OP_FEXISTS, OP_DEXISTS,
! 45: //@}
! 46:
! 47: //@{
! 48: /// @name expression ops: binary
! 49: OP_SUB, OP_ADD, OP_MUL, OP_DIV, OP_MOD,
! 50: OP_BIN_AND, OP_BIN_OR, OP_BIN_XOR,
! 51: OP_LOG_AND, OP_LOG_OR, OP_LOG_XOR,
! 52: OP_NUM_LT, OP_NUM_GT, OP_NUM_LE, OP_NUM_GE, OP_NUM_EQ, OP_NUM_NE,
! 53: OP_STR_LT, OP_STR_GT, OP_STR_LE, OP_STR_GE, OP_STR_EQ, OP_STR_NE,
! 54: OP_IS
! 55: //@}
! 56: };
! 57:
! 58: /**
! 59: Parser source code got compiled into intermediate form of Operation-s,
! 60: which is executed afterwards.
! 61:
! 62: It is compiled into Array of Operation-s.
! 63: Each Operation can be either OPCODE or data pointer,
! 64: following the literal-instruction.
! 65: - OP_VALUE followed by Value*
! 66: - OP_CURLY_CODE__STORE_PARAM followed by Array*
! 67: - OP_EXPR_CODE__STORE_PARAM followed by Array*
! 68: */
! 69: union Operation {
! 70: void *cast; ///< casting helper
! 71:
! 72: OPCODE code; ///< operation code
! 73: Value *value; ///< not an operation, but rather value stored after argumented op
! 74: Array *array; ///< not an operation, but rather code array stored after argumented op
! 75: };
! 76:
! 77: #endif
E-mail: