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

1.1       paf         1: /*
1.2     ! paf         2:   $Id: compile_tools.C,v 1.1 2001/02/20 18:45:52 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"
                      9: 
                     10: void *N(void *apool) {
                     11:        Pool& pool=*static_cast<Pool *>(apool);
                     12:        return new(pool) Array(pool);
                     13: }
                     14: 
                     15: void A(void **result, enum OPCODE acode) {
                     16:        int code=acode;
                     17:        (*static_cast<Array *>(*result))+=reinterpret_cast<Array::Item *>(code);
                     18: }
                     19: 
1.2     ! paf        20: void G(void **result, void *param) {
1.1       paf        21:        (*static_cast<Array *>(*result))+=param;
                     22: }
                     23: 
                     24: void *L(void *astring) {
                     25:        String *string=static_cast<String *>(astring);
                     26: 
                     27:        // empty ops array
                     28:        void *result=N(&string->pool());
                     29: 
                     30:        // append OP_STRING
                     31:        int code=OP_STRING;
                     32:        *(static_cast<Array *>(result))+=reinterpret_cast<Array::Item *>(code);
                     33: 
                     34:        // append 'string'
                     35:        *(static_cast<Array *>(result))+=string;
                     36: 
                     37:        return result;
                     38: }
                     39: 
                     40: void *LS(void *literal) {
                     41:        return const_cast<void *>(static_cast<Array *>(literal)->get(1));
                     42: }
                     43: 
                     44: void P(void **result, void *code_array) {
1.2     ! paf        45:        (*(static_cast<Array *>(*result))).append_array(*static_cast<Array *>(code_array));
1.1       paf        46: }
                     47: 
                     48: 
                     49: 
                     50: void push_LS(struct parse_control *pc) {
                     51:        if(pc->sp<MAX_LEXICAL_STATES) {
                     52:                pc->stack[pc->sp++]=pc->ls;  pc->ls=LS_VAR_NAME_SIMPLE;
                     53:        } else
                     54:                (static_cast<Pool *>(pc->pool))->exception().raise(0, 0, 0, 
                     55:                        "push_LS: stack overflow");
                     56: }
                     57: void pop_LS(struct parse_control *pc) {
                     58:        if(--pc->sp>=0)
                     59:                pc->ls=pc->stack[pc->sp];
                     60:        else
                     61:                (static_cast<Pool *>(pc->pool))->exception().raise(0, 0, 0, 
                     62:                        "push_LS: stack underflow");
                     63: }
                     64: 
                     65: void *string_create(void *apool) {
                     66:        Pool& pool=*static_cast<Pool *>(apool);
                     67:        return new(pool) String(pool);
                     68: }
                     69: 
                     70: void real_cstring_append(CSTRING_APPEND_PARAMS) {
                     71:        static_cast<String *>(astring)->APPEND(piece, size, file, line);
                     72: }
                     73: 
                     74: char *string_cstr(void *astring) {
                     75:        return static_cast<String *>(astring)->cstr();
                     76: }
                     77: 
                     78: /* exception */
                     79: 
                     80: void exception(void *pool, 
                     81:                void *atype, void *acode,
                     82:                void *aproblem_source, 
                     83:                char *acomment) {
                     84:        static_cast<Pool *>(pool)->exception().raise(
                     85:                static_cast<class String *>(atype), 
                     86:                static_cast<class String *>(acode), 
                     87:                static_cast<class String *>(aproblem_source), 
                     88:                acomment);
                     89: }

E-mail: