2121 * prettied up interface to print_objects_when_running
2222 */
2323
24- #include <sc_memmgr.h>
25- #include <stdlib.h>
2624#include "express/object.h"
2725
28- struct Object * OBJ ;
26+ #include "express/scope.h"
27+ #include "express/variable.h"
28+ #include "express/alg.h"
29+ #include "express/schema.h"
30+ #include "express/type.h"
31+ #include "express/expr.h"
32+
33+ Symbol * SCOPE_get_symbol ( void * s );
34+ Symbol * EXPRESS_get_symbol ( void * e );
35+ Symbol * RENAME_get_symbol ( void * r );
36+ Symbol * TYPE_get_symbol ( void * t );
37+ Symbol * EXP_get_symbol ( void * e );
38+ Symbol * WHERE_get_symbol ( void * w );
39+ Symbol * VAR_get_symbol ( void * v );
40+ Symbol * UNK_get_symbol ( void * x );
41+
42+ /* global Object type array */
43+ struct Object OBJ [] = {
44+ [0 ] = {UNK_get_symbol , "of unknown type" , 0 },
45+
46+ [OBJ_VARIABLE ] = {VAR_get_symbol , "variable" , OBJ_VARIABLE_BITS },
47+ [OBJ_ENTITY ] = {SCOPE_get_symbol , "entity" , OBJ_ENTITY_BITS },
48+
49+ [OBJ_EXPRESSION ] = {EXP_get_symbol , "expression" , OBJ_EXPRESSION_BITS },
50+ [OBJ_AMBIG_ENUM ] = {EXP_get_symbol , "ambiguous enumeration" , OBJ_UNUSED_BITS },
51+
52+ [OBJ_RULE ] = {SCOPE_get_symbol , "rule" , OBJ_UNUSED_BITS },
53+ [OBJ_PROCEDURE ] = {SCOPE_get_symbol , "procedure" , OBJ_PROCEDURE_BITS },
54+ [OBJ_FUNCTION ] = {SCOPE_get_symbol , "function" , OBJ_FUNCTION_BITS },
55+ [OBJ_WHERE ] = {WHERE_get_symbol , "where" , OBJ_WHERE_BITS },
56+
57+ [OBJ_SCHEMA ] = {SCOPE_get_symbol , "schema" , OBJ_SCHEMA_BITS },
58+ /* TODO: PASS should also have a symbol */
59+ [OBJ_PASS ] = {UNK_get_symbol , "pass" , OBJ_PASS_BITS },
60+ [OBJ_EXPRESS ] = {EXPRESS_get_symbol , "express file" , OBJ_UNUSED_BITS },
61+ [OBJ_RENAME ] = {RENAME_get_symbol , "rename clause" , OBJ_UNUSED_BITS },
62+
63+ [OBJ_TYPE ] = {TYPE_get_symbol , "type" , OBJ_TYPE_BITS },
64+ [OBJ_TAG ] = {TYPE_get_symbol , "tag" , OBJ_TYPE_BITS },
65+
66+ [OBJ_ALIAS ] = {SCOPE_get_symbol , "alias scope" , OBJ_UNUSED_BITS },
67+ [OBJ_INCREMENT ] = {SCOPE_get_symbol , "increment scope" , OBJ_UNUSED_BITS },
68+
69+ {0 }
70+ };
2971
3072Symbol * UNK_get_symbol ( void * x ) {
3173 (void ) x ; /* quell unused param warning; it appears that the prototype must match other functions */
@@ -34,26 +76,30 @@ Symbol * UNK_get_symbol( void *x ) {
3476 return 0 ;
3577}
3678
37- /** Initialize the Object module */
38- void OBJinitialize () {
39- int i ;
79+ Symbol * VAR_get_symbol ( void * v ) {
80+ return & ( ( Variable )v )-> name -> symbol ;
81+ }
82+
83+ Symbol * SCOPE_get_symbol ( void * s ) {
84+ return & ( ( Scope )s )-> symbol ;
85+ }
86+
87+ Symbol * EXP_get_symbol ( void * e ) {
88+ return & ( ( Expression )e )-> symbol ;
89+ }
90+
91+ Symbol * WHERE_get_symbol ( void * w ) {
92+ return ( ( Where )w )-> label ;
93+ }
4094
41- OBJ = ( struct Object * )sc_malloc ( MAX_OBJECT_TYPES * sizeof ( struct Object ) );
42- for ( i = 0 ; i < MAX_OBJECT_TYPES ; i ++ ) {
43- OBJ [i ].get_symbol = UNK_get_symbol ;
44- OBJ [i ].type = "of unknown_type" ;
45- OBJ [i ].bits = 0 ;
46- }
95+ Symbol * EXPRESS_get_symbol ( void * e ) {
96+ return & ( ( Express )e )-> symbol ;
4797}
4898
49- /** Clean up the Object module */
50- void OBJcleanup () {
51- sc_free ( OBJ );
99+ Symbol * RENAME_get_symbol ( void * r ) {
100+ return ( ( Rename * )r )-> old ;
52101}
53102
54- void OBJcreate ( char type , struct Symbol_ * ( * get_symbol ) ( void * ), char * printable_type , int bits ) {
55- int index = ( int )type ;
56- OBJ [index ].get_symbol = get_symbol ;
57- OBJ [index ].type = printable_type ;
58- OBJ [index ].bits = bits ;
103+ Symbol * TYPE_get_symbol ( void * t ) {
104+ return & ( ( Type )t )-> symbol ;
59105}
0 commit comments