Annotation of parser3/src/include/pa_operation.h, revision 1.2
1.2 ! paf 1: /** @file
! 2: Parser: compiled code related decls.
! 3:
! 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
! 5:
! 6: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
! 7: */
! 8:
! 9: #ifndef OPERATION_H
! 10: #define OPERATION_H
! 11:
! 12: static const char* IDENT_OPERATION_H="$Date: 2003/04/03 15:34:01 $";
! 13:
! 14: #include "pa_array.h"
! 15: #include "pa_opcode.h"
! 16: #include "pa_value.h"
! 17:
! 18: // forwards
! 19:
! 20: union Operation;
! 21: typedef Array<Operation> ArrayOperation;
! 22:
! 23: /**
! 24: Parser source code got compiled into intermediate form of Operation-s,
! 25: which are executed afterwards.
! 26:
! 27: It is compiled into Array of Operation-s.
! 28: Each Operation can be either OPCODE or data pointer,
! 29: following the literal-instruction.
! 30: - OP_VALUE followed by Origin, followed by Value*
! 31: - OP_CURLY_CODE__STORE_PARAM followed by ArrayOperation*
! 32: - OP_EXPR_CODE__STORE_PARAM followed by ArrayOperation*
! 33: - OP_NESTED_CODE followed by ArrayOperation*
! 34: */
! 35: union Operation {
! 36: struct Origin {
! 37: uint file_no:8; ///< file number (max: 255): index in Request::file_list
! 38: uint line:8+8; ///< line number (max: 64535)
! 39: uint col:8; ///< column number (max: 255)
! 40:
! 41: static Origin create(uint afile_no, uint aline, uint acol) {
! 42: Origin result={afile_no, aline, acol};
! 43: return result;/*
! 44: result.file_no=afile_no;
! 45: result.line=aline;
! 46: result.col=acol;*/
! 47: }
! 48: };
! 49:
! 50: OPCODE code; ///< operation code
! 51: Origin origin; ///< not an operation, but rather debug information: [OP_VALUE; debug_info; Value*]
! 52: Value* value; ///< not an operation, but rather value stored after argumented op
! 53: ArrayOperation* ops; ///< not an operation, but rather code array stored after argumented op
! 54:
! 55: /// needed to fill unused Array entries
! 56: Operation() {}
! 57: Operation(OPCODE acode): code(acode) {}
! 58: Operation(uint afile_no, uint aline, uint acol):
! 59: origin(Origin::create(afile_no, aline, acol)) {}
! 60: Operation(Value* avalue): value(avalue) {}
! 61: Operation(ArrayOperation* aops): ops(aops) {}
! 62: };
! 63:
! 64: // defines
! 65:
! 66: #define OPERATIONS_PER_OPVALUE 3
! 67:
! 68: #endif
E-mail: