Annotation of parser3/src/main/compile_tools.C, revision 1.14

1.1       paf         1: /*
1.14    ! paf         2:   $Id: compile_tools.C,v 1.13 2001/02/24 08:28:37 paf Exp $
1.1       paf         3: */
                      4: 
                      5: #include "compile_tools.h"
                      6: #include "pa_string.h"
                      7: #include "pa_array.h"
                      8: #include "pa_exception.h"
1.9       paf         9: #include "pa_vstring.h"
1.1       paf        10: 
1.12      paf        11: void PVS(Array/*<op>*/ *result, VString *vstring) {
1.1       paf        12:        // append OP_STRING
1.9       paf        13:        Operation op; op.code=OP_STRING;
1.6       paf        14:        *result+=op.cast;
1.1       paf        15: 
1.9       paf        16:        // append 'vstring'
                     17:        *result+=vstring;
1.12      paf        18: }
1.13      paf        19: 
                     20: void PCA(Array/*<op>*/ *result, Array/*<op>*/ *code_array) {
                     21:        // append OP_CODE
                     22:        Operation op; op.code=OP_CODE;
                     23:        *result+=op.cast;
                     24: 
                     25:        // append 'vstring'
                     26:        *result+=code_array;
                     27: }
                     28: 
1.12      paf        29: 
1.14    ! paf        30: Array *SL(VString *vstring) {
1.12      paf        31:        // empty ops array
                     32:        Array *result=N(vstring->pool());
                     33: 
                     34:        // append 'vstring' to 'result'
                     35:        PVS(result, vstring);
1.1       paf        36: 
                     37:        return result;
                     38: }
1.14    ! paf        39: Array *CL(VClass *vclass) {
        !            40:        // empty ops array
        !            41:        Array *result=N(vclass->pool());
        !            42: 
        !            43:        // append OP_CLASS
        !            44:        Operation op; op.code=OP_CLASS;
        !            45:        *result+=op.cast;
        !            46: 
        !            47:        // append 'vclass'
        !            48:        *result+=vclass;
        !            49: 
        !            50:        return result;
        !            51: }
1.1       paf        52: 
1.14    ! paf        53: String *SLA2S(Array *literal_string_array, int offset) {
1.11      paf        54:        Operation op;
                     55:        op.cast=literal_string_array->get(offset+0);
                     56:        if(op.code!=OP_STRING)
                     57:                return 0;
                     58: 
1.10      paf        59:        return static_cast<VString *>(literal_string_array->get(offset+1))->get_string();
1.1       paf        60: }
                     61: 
                     62: 
1.5       paf        63: void push_LS(struct parse_control *pc, lexical_state new_state) {
1.1       paf        64:        if(pc->sp<MAX_LEXICAL_STATES) {
1.5       paf        65:                pc->stack[pc->sp++]=pc->ls;  pc->ls=new_state;
1.1       paf        66:        } else
1.7       paf        67:                pc->pool->THROW(0, 0, 0, "push_LS: stack overflow");
1.1       paf        68: }
                     69: void pop_LS(struct parse_control *pc) {
                     70:        if(--pc->sp>=0)
                     71:                pc->ls=pc->stack[pc->sp];
                     72:        else
1.7       paf        73:                pc->pool->THROW(0, 0, 0, "push_LS: stack underflow");
1.1       paf        74: }

E-mail: