1 /*----------------------------------------------------------------------------
2 ChucK Concurrent, On-the-fly Audio Programming Language
3 Compiler and Virtual Machine
5 Copyright (c) 2004 Ge Wang and Perry R. Cook. All rights reserved.
6 http://chuck.cs.princeton.edu/
7 http://soundlab.cs.princeton.edu/
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23 -----------------------------------------------------------------------------*/
25 //-----------------------------------------------------------------------------
26 // file: chuck_symbol.h
29 // author: Andrew Appel (appel@cs.princeton.edu)
30 // modified: Ge Wang (gewang@cs.princeton.edu)
31 // Perry R. Cook (prc@cs.princeton.edu)
33 //-----------------------------------------------------------------------------
34 #ifndef __CHUCK_SYMBOL_H__
35 #define __CHUCK_SYMBOL_H__
37 #include "chuck_utils.h"
40 #if defined(_cplusplus) || defined(__cplusplus)
45 typedef struct S_Symbol_
* S_Symbol
;
47 /* Make a unique symbol from a given c_str.
48 * Different calls to make_symbol("foo") will yield the same S_Symbol
49 * value, even if the "foo" c_str are at different locations. */
50 S_Symbol
insert_symbol( c_constr
);
52 /* Extract the underlying c_str from a symbol */
53 c_str
S_name(S_Symbol
);
55 /* S_table is a mapping from S_Symbol->any, where "any" is represented
57 typedef struct TAB_table_
*S_table
;
59 /* Make a new table */
60 S_table
S_empty(void);
61 S_table
S_empty2(unsigned int size
);
63 /* Enter a binding "sym->value" into "t", shadowing but not deleting
64 * any previous binding of "sym". */
65 void S_enter(S_table t
, S_Symbol sym
, void * value
);
66 void S_enter2(S_table t
, c_constr str
, void * value
);
68 /* Look up the most recent binding of "sym" in "t", or return NULL
69 * if sym is unbound. */
70 void * S_look(S_table t
, S_Symbol sym
);
71 void * S_look2(S_table t
, c_constr str
);
73 /* Start a new "scope" in "t". Scopes are nested. */
74 void S_beginScope(S_table t
);
76 /* Remove any bindings entered since the current scope began,
77 and end the current scope. */
78 void S_endScope(S_table t
);
79 void S_pop(S_table t
);
82 #if defined(_cplusplus) || defined(__cplusplus)