Annotation of parser3/src/include/pa_operation.h, revision 1.1.2.6.2.4

1.1.2.1   paf         1: /** @file
                      2:        Parser: compiled code related decls.
                      3: 
1.1.2.4   paf         4:        Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.1.2.1   paf         5: 
                      6:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
                      7: */
                      8: 
1.1.2.2   paf         9: #ifndef OPERATION_H
                     10: #define OPERATION_H
1.1.2.1   paf        11: 
1.1.2.6.2.4! paf        12: static const char* IDENT_OPERATION_H="$Date: 2003/04/02 14:16:17 $";
1.1.2.1   paf        13: 
                     14: #include "pa_array.h"
1.1.2.6   paf        15: #include "pa_opcode.h"
                     16: #include "pa_value.h"
1.1.2.1   paf        17: 
                     18: // forwards
                     19: 
1.1.2.6.2.2  paf        20: union Operation;
1.1.2.6.2.1  paf        21: typedef Array<Operation> ArrayOperation;
1.1.2.1   paf        22: 
                     23: /** 
                     24:        Parser source code got compiled into intermediate form of Operation-s, 
1.1.2.3   paf        25:        which are executed afterwards.
1.1.2.1   paf        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 Value*
1.1.2.3   paf        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*
1.1.2.1   paf        34: */
1.1.2.6.2.2  paf        35: union Operation {
1.1.2.3   paf        36: public:
1.1.2.6.2.4! paf        37:        struct Info {
1.1.2.6.2.3  paf        38:                uint fcode:6; ///< operation code [at the moment, max=58. 2^6=64
1.1.2.6.2.2  paf        39:                //@{ origin
1.1.2.6.2.3  paf        40:                uint file_no:7; ///< file number (max: 128): index in Request::files table
                     41:                uint line:12; ///< line number (max: 4096)
                     42:                uint col:7; ///< column number (max: 128)
1.1.2.6.2.2  paf        43:                //@}
1.1.2.6.2.4! paf        44:                OPCODE code() const { return (OPCODE)fcode; }
        !            45:                void set_code(OPCODE acode) { fcode=acode; }
        !            46:        } info;
        !            47:        OPCODE code() const { return info.code(); }
        !            48:        void set_code(OPCODE acode) { info.set_code(acode); }
1.1.2.6.2.1  paf        49:        Value* value; ///< not an operation, but rather value stored after argumented op
                     50:        ArrayOperation* ops; ///< not an operation, but rather code array stored after argumented op
1.1.2.2   paf        51: 
1.1.2.3   paf        52:        /// needed to fill unused Array entries
                     53:        Operation() {}
1.1.2.6.2.4! paf        54:        Operation(OPCODE acode) {
        !            55:                info.fcode=acode;
        !            56:                info.file_no=0;
        !            57:                info.line=0;
        !            58:                info.col=0;
        !            59:        }
        !            60:        Operation(OPCODE acode, uint afile_no, uint aline, uint acol) {
        !            61:                info.fcode=acode;
        !            62:                info.file_no=afile_no;
        !            63:                info.line=aline;
        !            64:                info.col=acol;
        !            65:        }
1.1.2.6.2.1  paf        66:        Operation(Value* avalue): value(avalue) {}
                     67:        Operation(ArrayOperation* aops): ops(aops) {}   
1.1.2.1   paf        68: };
                     69: 
                     70: #endif

E-mail: