class token : public term {
public:
//int n;
//char* s;
char* _news(char* p) {
char* x = new char[strlen(p)+1];
strcpy(x,p);
term::_hold(0); term::_garbage->_register(x);
return x;
}
public:
void _regit() {
// term::_hold(this); //AE gives terrible garbage (!)
}
void msg() {
if (n>=0) {
//cerr << "CREATING token: " << n << " " << s << endl;
}
}
token() : term(this) {
_regit(); n = -1; s = "DUMMY"; msg(); v=0;
}
token( char* p ) : term(this) {
_regit(); n = 0; s = _news(p); msg(); v=0;
}
token( int i, char* p = "NULL" ) : term(this) {
_regit(); n = i; s = _news(p);
msg();
}
token( int i, char* p , void* x ) {
_regit(); n = i; s = _news(p); v = (term*) x;
}
token(const token& t) : term(this) {
_regit(); n=t.n; s=t.s;
msg();
}
char* str() const { return s; }
int no() const { return n; }
operator char*() { return s; } // does not work -- C++ 2.0 is buggy
operator int() { return n; }
//VALUETYPE* v;
void print() {
cout << "token:" << n << " " << s << "\n";
}
};
slide: token