--- parser3/src/include/pa_string.h 2003/04/08 12:47:30 1.144.2.28.2.47 +++ parser3/src/include/pa_string.h 2003/04/11 16:05:43 1.144.2.28.2.50 @@ -8,7 +8,7 @@ #ifndef PA_STRING_H #define PA_STRING_H -static const char* IDENT_STRING_H="$Date: 2003/04/08 12:47:30 $"; +static const char* IDENT_STRING_H="$Date: 2003/04/11 16:05:43 $"; // includes @@ -68,10 +68,12 @@ public: bool is_empty() const { return body==CORD_EMPTY; } void append_know_length(const char *str, size_t known_length) { - body=CORD_cat_char_star(body, str, known_length); + if(known_length) + body=CORD_cat_char_star(body, str, known_length); } void append_strdup_know_length(const char* str, size_t known_length) { - append_know_length(pa_strdup(str, known_length), known_length); + if(known_length) + append_know_length(pa_strdup(str, known_length), known_length); } void append(char c) { body=CORD_cat_char(body, c); } StringBody& operator << (const StringBody src) { body=CORD_cat(body, src.body); return *this; } @@ -162,8 +164,6 @@ public: Language lang; ///< untaint flag, later untaint language size_t length; ///< length Fragment(Language alang, size_t asize): lang(alang), length(asize) { - if(alang==L_UNSPECIFIED) - _asm int 3; assert(alang!=L_UNSPECIFIED); assert(asize!=(size_t)-1); } @@ -190,7 +190,7 @@ public: append(src); return *this; } - void append(const ArrayFragment& src) { append(src, 0, 0); } + void append(const ArrayFragment& src) { append(src, 0, ARRAY_OPTION_LIMIT_ALL); } void append_positions(const ArrayFragment& src, size_t substr_begin, size_t substr_end); size_t length() { @@ -225,18 +225,14 @@ private: public: explicit String(const char* cstr=0, size_t helper_length=0, bool tainted=false); - explicit String(C cstr, bool tainted=false); + explicit String(const C cstr, bool tainted=false); String(const String& src); String(StringBody abody, Language alang): body(abody) { fragments+=Fragment(alang, abody.length()); } -#ifndef NDEBUG - void invariant() { - if(body.length()!=fragments.length()) - _asm int 3; - //assert(body.length()==fragments.length()); - } -#endif + +#define ASSERT_STRING_INVARIANT(string) \ + assert((string).body.length()==(string).fragments.length()) /// for convinient hash lookup operator const StringBody() const { return body; }