--- parser3/src/include/Attic/code.h 2001/03/08 10:07:09 1.16 +++ parser3/src/include/Attic/code.h 2001/05/07 13:29:59 1.28 @@ -1,5 +1,11 @@ -/* - $Id: code.h,v 1.16 2001/03/08 10:07:09 paf Exp $ +/** @file + Parser: compiled code related decls. + + Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) + + Author: Alexander Petrosyan (http://design.ru/paf) + + $Id: code.h,v 1.28 2001/05/07 13:29:59 paf Exp $ */ #ifndef CODE_H @@ -8,15 +14,21 @@ #include "pa_string.h" #include "pa_array.h" +class Value; +class Array; + +/// Compiled operation code enum OPCODE { - // literals - OP_VALUE, OP_CODE__STORE_PARAM, + //@{ @name literals + OP_VALUE, OP_CURLY_CODE__STORE_PARAM, OP_EXPR_CODE__STORE_PARAM, + //@} - // actions + //@{ + /// @name actions OP_WITH_SELF, OP_WITH_ROOT, OP_WITH_READ, OP_WITH_WRITE, OP_GET_CLASS, - OP_CONSTRUCT, - OP_WRITE, + OP_CONSTRUCT_VALUE, OP_CONSTRUCT_EXPR, + OP_WRITE_VALUE, OP_WRITE_EXPR_RESULT, OP_STRING__WRITE, OP_GET_ELEMENT, OP_GET_ELEMENT__WRITE, OP_CREATE_EWPOOL, OP_REDUCE_EWPOOL, OP_CREATE_RWPOOL, OP_REDUCE_RWPOOL, @@ -24,23 +36,41 @@ enum OPCODE { OP_GET_METHOD_FRAME, OP_STORE_PARAM, OP_CALL, + //@} + + //@{ + /// @name expression ops: unary + OP_NEG, OP_INV, OP_NOT, OP_DEF, OP_IN, OP_FEXISTS, OP_DEXISTS, + //@} - // expression ops: unary - OP_NEG, OP_INV, OP_NOT, OP_DEF, OP_IN, OP_FEXISTS, - // expression ops: binary + //@{ + /// @name expression ops: binary OP_SUB, OP_ADD, OP_MUL, OP_DIV, OP_MOD, OP_BIN_AND, OP_BIN_OR, OP_BIN_XOR, OP_LOG_AND, OP_LOG_OR, OP_LOG_XOR, OP_NUM_LT, OP_NUM_GT, OP_NUM_LE, OP_NUM_GE, OP_NUM_EQ, OP_NUM_NE, - OP_STR_LT, OP_STR_GT, OP_STR_LE, OP_STR_GE, OP_STR_EQ, OP_STR_NE + OP_STR_LT, OP_STR_GT, OP_STR_LE, OP_STR_GE, OP_STR_EQ, OP_STR_NE, + OP_IS + //@} }; +/** + Parser source code got compiled into intermediate form of Operation-s, + which is executed afterwards. + + It is compiled into Array of Operation-s. + Each Operation can be either OPCODE or data pointer, + following the literal-instruction. + - OP_VALUE followed by Value* + - OP_CURLY_CODE__STORE_PARAM followed by Array* + - OP_EXPR_CODE__STORE_PARAM followed by Array* +*/ union Operation { - void *cast; // casting helper + void *cast; ///< casting helper - OPCODE code; - String *string; - Array *array; + OPCODE code; ///< operation code + Value *value; ///< not an operation, but rather value stored after argumented op + Array *array; ///< not an operation, but rather code array stored after argumented op }; #endif