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: