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

1.1       paf         1: /*
1.22    ! paf         2:   $Id: compile_tools.C,v 1.21 2001/03/08 17:14:53 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.15      paf        10: #include "pa_vdouble.h"
1.1       paf        11: 
1.17      paf        12: void PV(Array/*<op>*/ *result, Value *value) {
1.16      paf        13:        // append OP_VALUE
                     14:        Operation op; op.code=OP_VALUE;
1.6       paf        15:        *result+=op.cast;
1.1       paf        16: 
1.17      paf        17:        // append 'value'
                     18:        *result+=value;
1.12      paf        19: }
1.13      paf        20: 
                     21: void PCA(Array/*<op>*/ *result, Array/*<op>*/ *code_array) {
                     22:        // append OP_CODE
1.18      paf        23:        Operation op; op.code=OP_CODE__STORE_PARAM;
1.13      paf        24:        *result+=op.cast;
                     25: 
                     26:        // append 'vstring'
                     27:        *result+=code_array;
                     28: }
                     29: 
1.12      paf        30: 
1.17      paf        31: Array *VL(Value *value) {
1.12      paf        32:        // empty ops array
1.17      paf        33:        Array *result=N(value->pool());
1.12      paf        34: 
1.17      paf        35:        // append 'value' to 'result'
                     36:        PV(result, value);
1.14      paf        37: 
                     38:        return result;
                     39: }
1.1       paf        40: 
1.14      paf        41: String *SLA2S(Array *literal_string_array, int offset) {
1.11      paf        42:        Operation op;
                     43:        op.cast=literal_string_array->get(offset+0);
1.16      paf        44:        if(op.code!=OP_VALUE)
1.11      paf        45:                return 0;
                     46: 
1.10      paf        47:        return static_cast<VString *>(literal_string_array->get(offset+1))->get_string();
1.15      paf        48: }
                     49: 
                     50: void change_string_literal_to_double_literal(Array *literal_string_array) {
                     51:        VString *vstring=static_cast<VString *>(literal_string_array->get(1));
1.22    ! paf        52:        Value *value=vstring->get_expr_result();
        !            53:        literal_string_array->put(1, value);
1.1       paf        54: }
                     55: 
                     56: 
1.5       paf        57: void push_LS(struct parse_control *pc, lexical_state new_state) {
1.1       paf        58:        if(pc->sp<MAX_LEXICAL_STATES) {
1.5       paf        59:                pc->stack[pc->sp++]=pc->ls;  pc->ls=new_state;
1.1       paf        60:        } else
1.7       paf        61:                pc->pool->THROW(0, 0, 0, "push_LS: stack overflow");
1.1       paf        62: }
                     63: void pop_LS(struct parse_control *pc) {
                     64:        if(--pc->sp>=0)
                     65:                pc->ls=pc->stack[pc->sp];
                     66:        else
1.7       paf        67:                pc->pool->THROW(0, 0, 0, "push_LS: stack underflow");
1.1       paf        68: }

E-mail: