--- parser3/src/include/pa_operation.h 2003/03/21 13:42:29 1.1.2.6.2.1 +++ parser3/src/include/pa_operation.h 2003/11/20 15:35:30 1.3 @@ -9,7 +9,7 @@ #ifndef OPERATION_H #define OPERATION_H -static const char* IDENT_OPERATION_H="$Date: 2003/03/21 13:42:29 $"; +static const char* IDENT_OPERATION_H="$Date: 2003/11/20 15:35:30 $"; #include "pa_array.h" #include "pa_opcode.h" @@ -17,7 +17,7 @@ static const char* IDENT_OPERATION_H="$D // forwards -class Operation; +union Operation; typedef Array ArrayOperation; /** @@ -27,22 +27,39 @@ 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* */ -class Operation { -public: +union Operation { + 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; + } + }; + 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(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