token


  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