/* Sun-$Revision: 23.2 $ */ /* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. */ # pragma interface struct String: ParseNode { char* str; smi len; // Necessary since strings may contain '\0'. String(char* s) { str = s; len = strlen(str); } String(char* s, smi l) { str = s; len = l; } char* AsCharP() { return str; } fint arg_count() { return str_arg_count(str); } bool equals(String* other) { return strcmp(AsCharP(), other->AsCharP()) == 0; } fint line_count(); void Print(); }; struct StringListElement: ListElement { StringListElement(String* d, StringListElement* n = 0) : ListElement(d, n) {} String* Data() { return (String*) ListElement::Data(); } StringListElement* Next() { return (StringListElement*) ListElement::Next(); } }; struct StringList: List { StringList() : List() {} StringList(String* e) : List(e) {} StringListElement* Head() { return (StringListElement*) List::Head(); } StringListElement* Tail() { return (StringListElement*) List::Tail(); } StringList* Append(String* e) { return (StringList*) List::Append(e); } String* AsSelector(); };