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: