*** empty log message ***
[chuck-blob.git] / v2 / chuck_symbol.h
blob660ecdf654f4d0aa98677392a690b5c1bc9fbfcc
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
22 U.S.A.
23 -----------------------------------------------------------------------------*/
25 //-----------------------------------------------------------------------------
26 // file: chuck_symbol.h
27 // desc: ...
29 // author: Andrew Appel (appel@cs.princeton.edu)
30 // modified: Ge Wang (gewang@cs.princeton.edu)
31 // Perry R. Cook (prc@cs.princeton.edu)
32 // date: Autumn 2002
33 //-----------------------------------------------------------------------------
34 #ifndef __CHUCK_SYMBOL_H__
35 #define __CHUCK_SYMBOL_H__
37 #include "chuck_utils.h"
40 #if defined(_cplusplus) || defined(__cplusplus)
41 extern "C" {
42 #endif
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
56 * here by void* */
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)
84 #endif
89 #endif