--- parser3/src/include/pa_operation.h 2003/04/02 12:42:42 1.1.2.6.2.2 +++ parser3/src/include/pa_operation.h 2003/04/03 15:34:01 1.1.2.6.2.5 @@ -9,7 +9,7 @@ #ifndef OPERATION_H #define OPERATION_H -static const char* IDENT_OPERATION_H="$Date: 2003/04/02 12:42:42 $"; +static const char* IDENT_OPERATION_H="$Date: 2003/04/03 15:34:01 $"; #include "pa_array.h" #include "pa_opcode.h" @@ -27,33 +27,42 @@ typedef Array ArrayOperation; 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_VALUE followed by Origin, followed by Value* - OP_CURLY_CODE__STORE_PARAM followed by ArrayOperation* - OP_EXPR_CODE__STORE_PARAM followed by ArrayOperation* - OP_NESTED_CODE followed by ArrayOperation* */ union Operation { -public: - union { - OPCODE code:8; ///< operation code - //@{ origin - uint file_no:8; ///< file number: index in Request::files table - uint line:8; ///< line number - uint col:8; ///< column number - //@} + struct Origin { + uint file_no:8; ///< file number (max: 255): index in Request::file_list + uint line:8+8; ///< line number (max: 64535) + uint col:8; ///< column number (max: 255) + + static Origin create(uint afile_no, uint aline, uint acol) { + Origin result={afile_no, aline, acol}; + return result;/* + result.file_no=afile_no; + result.line=aline; + result.col=acol;*/ + } }; + + OPCODE code; ///< operation code + Origin origin; ///< not an operation, but rather debug information: [OP_VALUE; debug_info; Value*] Value* value; ///< not an operation, but rather value stored after argumented op ArrayOperation* ops; ///< not an operation, but rather code array stored after argumented op /// needed to fill unused Array entries Operation() {} Operation(OPCODE acode): code(acode) {} - Operation(OPCODE acode, uint afile_no, uint aline, uint acol): - code(acode), - file_no(afile_no), - line(aline), col(acol) {} + Operation(uint afile_no, uint aline, uint acol): + origin(Origin::create(afile_no, aline, acol)) {} Operation(Value* avalue): value(avalue) {} Operation(ArrayOperation* aops): ops(aops) {} }; +// defines + +#define OPERATIONS_PER_OPVALUE 3 + #endif