Annotation of parser3/src/main/compile_tools.C, revision 1.29
1.29 ! paf 1: /** @file
1.25 paf 2: Parser
3: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.26 paf 4: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
1.25 paf 5:
1.29 ! paf 6: $Id: compile_tools.C,v 1.28 2001/03/16 09:52:59 paf Exp $
1.1 paf 7: */
8:
9: #include "compile_tools.h"
10: #include "pa_string.h"
11: #include "pa_array.h"
12: #include "pa_exception.h"
1.9 paf 13: #include "pa_vstring.h"
1.15 paf 14: #include "pa_vdouble.h"
1.1 paf 15:
1.27 paf 16: void PV(Array/*<Operation>*/ *result, Value *value) {
1.16 paf 17: // append OP_VALUE
18: Operation op; op.code=OP_VALUE;
1.6 paf 19: *result+=op.cast;
1.1 paf 20:
1.17 paf 21: // append 'value'
22: *result+=value;
1.12 paf 23: }
1.13 paf 24:
1.27 paf 25: void PCA(Array/*<Operation>*/ *result, Array/*<Operation>*/ *code_array) {
1.13 paf 26: // append OP_CODE
1.28 paf 27: Operation op; op.code=OP_CURLY_CODE__STORE_PARAM;
1.13 paf 28: *result+=op.cast;
29:
30: // append 'vstring'
31: *result+=code_array;
32: }
33:
1.28 paf 34: void PEA(Array/*<Operation>*/ *result, Array/*<Operation>*/ *code_array) {
35: // append OP_CODE
36: Operation op; op.code=OP_EXPR_CODE__STORE_PARAM;
37: *result+=op.cast;
38:
39: // append 'vstring'
40: *result+=code_array;
41: }
1.12 paf 42:
1.17 paf 43: Array *VL(Value *value) {
1.12 paf 44: // empty ops array
1.17 paf 45: Array *result=N(value->pool());
1.12 paf 46:
1.17 paf 47: // append 'value' to 'result'
48: PV(result, value);
1.14 paf 49:
50: return result;
51: }
1.1 paf 52:
1.23 paf 53: const String *SLA2S(Array *literal_string_array, int offset) {
1.11 paf 54: Operation op;
55: op.cast=literal_string_array->get(offset+0);
1.16 paf 56: if(op.code!=OP_VALUE)
1.11 paf 57: return 0;
58:
1.10 paf 59: return static_cast<VString *>(literal_string_array->get(offset+1))->get_string();
1.15 paf 60: }
61:
62: void change_string_literal_to_double_literal(Array *literal_string_array) {
63: VString *vstring=static_cast<VString *>(literal_string_array->get(1));
1.22 paf 64: Value *value=vstring->get_expr_result();
65: literal_string_array->put(1, value);
1.1 paf 66: }
1.24 paf 67: void change_string_literal_to_write_string_literal(Array *literal_string_array) {
68: Operation op; op.code=OP_STRING__WRITE;
69: literal_string_array->put(0, op.cast);
70: }
1.1 paf 71:
1.5 paf 72: void push_LS(struct parse_control *pc, lexical_state new_state) {
1.1 paf 73: if(pc->sp<MAX_LEXICAL_STATES) {
1.5 paf 74: pc->stack[pc->sp++]=pc->ls; pc->ls=new_state;
1.1 paf 75: } else
1.7 paf 76: pc->pool->THROW(0, 0, 0, "push_LS: stack overflow");
1.1 paf 77: }
78: void pop_LS(struct parse_control *pc) {
79: if(--pc->sp>=0)
80: pc->ls=pc->stack[pc->sp];
81: else
1.7 paf 82: pc->pool->THROW(0, 0, 0, "push_LS: stack underflow");
1.1 paf 83: }
E-mail: