Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r48796 - in branches/release: boost/regex boost/regex/v4 libs/regex/build libs/regex/src libs/regex/test/pathology libs/regex/test/regress
From: john_at_[hidden]
Date: 2008-09-16 07:54:26


Author: johnmaddock
Date: 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
New Revision: 48796
URL: http://svn.boost.org/trac/boost/changeset/48796

Log:
Merge changes from Trunk ready for 1.37.
Text files modified:
   branches/release/boost/regex/concepts.hpp | 10 ++++----
   branches/release/boost/regex/icu.hpp | 10 ++++----
   branches/release/boost/regex/v4/basic_regex.hpp | 2
   branches/release/boost/regex/v4/basic_regex_creator.hpp | 18 +++++++-------
   branches/release/boost/regex/v4/cpp_regex_traits.hpp | 6 ++--
   branches/release/boost/regex/v4/perl_matcher.hpp | 16 ++++++------
   branches/release/boost/regex/v4/perl_matcher_non_recursive.hpp | 16 +++++++-----
   branches/release/boost/regex/v4/perl_matcher_recursive.hpp | 2
   branches/release/boost/regex/v4/regex_traits_defaults.hpp | 4 +-
   branches/release/boost/regex/v4/states.hpp | 2
   branches/release/boost/regex/v4/u32regex_iterator.hpp | 2
   branches/release/boost/regex/v4/u32regex_token_iterator.hpp | 10 ++++----
   branches/release/boost/regex/v4/w32_regex_traits.hpp | 24 +++++++++---------
   branches/release/libs/regex/build/Jamfile.v2 | 4 ++
   branches/release/libs/regex/src/usinstances.cpp | 49 +++++++++++++++++++++++++--------------
   branches/release/libs/regex/src/wc_regex_traits.cpp | 45 ++++++++++++++++++++++++------------
   branches/release/libs/regex/test/pathology/bad_expression_test.cpp | 3 +
   branches/release/libs/regex/test/regress/test_tricky_cases.cpp | 3 ++
   18 files changed, 131 insertions(+), 95 deletions(-)

Modified: branches/release/boost/regex/concepts.hpp
==============================================================================
--- branches/release/boost/regex/concepts.hpp (original)
+++ branches/release/boost/regex/concepts.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -87,12 +87,12 @@
 public:
    regex_traits_architype();
    typedef charT char_type;
- typedef std::size_t size_type;
+ // typedef std::size_t size_type;
    typedef std::vector<char_type> string_type;
    typedef copy_constructible_archetype<assignable_archetype<> > locale_type;
    typedef bitmask_archetype char_class_type;
 
- static size_type length(const char_type* ) { return 0; }
+ static std::size_t length(const char_type* ) { return 0; }
 
    charT translate(charT ) const { return charT(); }
    charT translate_nocase(charT ) const { return static_object<charT>::get(); }
@@ -163,21 +163,21 @@
    RegexTraitsConcept();
    // required typedefs:
    typedef typename traits::char_type char_type;
- typedef typename traits::size_type size_type;
+ // typedef typename traits::size_type size_type;
    typedef typename traits::string_type string_type;
    typedef typename traits::locale_type locale_type;
    typedef typename traits::char_class_type char_class_type;
 
    void constraints()
    {
- function_requires<UnsignedIntegerConcept<size_type> >();
+ //function_requires<UnsignedIntegerConcept<size_type> >();
       function_requires<RandomAccessContainerConcept<string_type> >();
       function_requires<DefaultConstructibleConcept<locale_type> >();
       function_requires<CopyConstructibleConcept<locale_type> >();
       function_requires<AssignableConcept<locale_type> >();
       function_requires<BitmaskConcept<char_class_type> >();
 
- size_type n = traits::length(m_pointer);
+ std::size_t n = traits::length(m_pointer);
       ignore_unused_variable_warning(n);
 
       char_type c = m_ctraits.translate(m_char);

Modified: branches/release/boost/regex/icu.hpp
==============================================================================
--- branches/release/boost/regex/icu.hpp (original)
+++ branches/release/boost/regex/icu.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -355,7 +355,7 @@
    return re_detail::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
-#ifndef U_WCHAR_IS_UTF16
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
    return re_detail::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0));
@@ -455,7 +455,7 @@
 {
    return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
 }
-#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_match(const wchar_t* p,
                  match_results<const wchar_t*>& m,
                  const u32regex& e,
@@ -519,7 +519,7 @@
    match_results<const UChar*> m;
    return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
 }
-#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_match(const wchar_t* p,
                  const u32regex& e,
                  match_flag_type flags = match_default)
@@ -640,7 +640,7 @@
 {
    return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
 }
-#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_search(const wchar_t* p,
                  match_results<const wchar_t*>& m,
                  const u32regex& e,
@@ -701,7 +701,7 @@
    match_results<const UChar*> m;
    return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
 }
-#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_search(const wchar_t* p,
                  const u32regex& e,
                  match_flag_type flags = match_default)

Modified: branches/release/boost/regex/v4/basic_regex.hpp
==============================================================================
--- branches/release/boost/regex/v4/basic_regex.hpp (original)
+++ branches/release/boost/regex/v4/basic_regex.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -191,7 +191,7 @@
 {
 public:
    // typedefs:
- typedef typename traits::size_type traits_size_type;
+ typedef std::size_t traits_size_type;
    typedef typename traits::string_type traits_string_type;
    typedef charT char_type;
    typedef traits traits_type;

Modified: branches/release/boost/regex/v4/basic_regex_creator.hpp
==============================================================================
--- branches/release/boost/regex/v4/basic_regex_creator.hpp (original)
+++ branches/release/boost/regex/v4/basic_regex_creator.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -236,7 +236,7 @@
                                  m_traits; // convenience reference to traits class
    re_syntax_base* m_last_state; // the last state we added
    bool m_icase; // true for case insensitive matches
- unsigned m_repeater_id; // the id of the next repeater
+ unsigned m_repeater_id; // the state_id of the next repeater
    bool m_has_backrefs; // true if there are actually any backrefs
    unsigned m_backrefs; // bitmask of permitted backrefs
    boost::uintmax_t m_bad_repeats; // bitmask of repeats we can't deduce a startmap for;
@@ -718,8 +718,8 @@
       case syntax_element_char_rep:
       case syntax_element_short_set_rep:
       case syntax_element_long_set_rep:
- // set the id of this repeat:
- static_cast<re_repeat*>(state)->id = m_repeater_id++;
+ // set the state_id of this repeat:
+ static_cast<re_repeat*>(state)->state_id = m_repeater_id++;
          // fall through:
       case syntax_element_alt:
          std::memset(static_cast<re_alt*>(state)->_map, 0, sizeof(static_cast<re_alt*>(state)->_map));
@@ -1194,11 +1194,11 @@
    case syntax_element_short_set_rep:
    case syntax_element_long_set_rep:
       {
- unsigned id = static_cast<re_repeat*>(pt)->id;
- if(id > sizeof(m_bad_repeats) * CHAR_BIT)
+ unsigned state_id = static_cast<re_repeat*>(pt)->state_id;
+ if(state_id > sizeof(m_bad_repeats) * CHAR_BIT)
             return true; // run out of bits, assume we can't traverse this one.
          static const boost::uintmax_t one = 1uL;
- return m_bad_repeats & (one << id);
+ return m_bad_repeats & (one << state_id);
       }
    default:
       return false;
@@ -1216,10 +1216,10 @@
    case syntax_element_short_set_rep:
    case syntax_element_long_set_rep:
       {
- unsigned id = static_cast<re_repeat*>(pt)->id;
+ unsigned state_id = static_cast<re_repeat*>(pt)->state_id;
          static const boost::uintmax_t one = 1uL;
- if(id <= sizeof(m_bad_repeats) * CHAR_BIT)
- m_bad_repeats |= (one << id);
+ if(state_id <= sizeof(m_bad_repeats) * CHAR_BIT)
+ m_bad_repeats |= (one << state_id);
       }
    default:
       break;

Modified: branches/release/boost/regex/v4/cpp_regex_traits.hpp
==============================================================================
--- branches/release/boost/regex/v4/cpp_regex_traits.hpp (original)
+++ branches/release/boost/regex/v4/cpp_regex_traits.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -799,9 +799,9 @@
       if(pos != m_custom_class_names.end())
          return pos->second;
    }
- std::size_t id = 1 + re_detail::get_default_class_id(p1, p2);
- BOOST_ASSERT(id < sizeof(masks) / sizeof(masks[0]));
- return masks[id];
+ std::size_t state_id = 1 + re_detail::get_default_class_id(p1, p2);
+ BOOST_ASSERT(state_id < sizeof(masks) / sizeof(masks[0]));
+ return masks[state_id];
 }
 
 #ifdef BOOST_REGEX_BUGGY_CTYPE_FACET

Modified: branches/release/boost/regex/v4/perl_matcher.hpp
==============================================================================
--- branches/release/boost/regex/v4/perl_matcher.hpp (original)
+++ branches/release/boost/regex/v4/perl_matcher.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -248,7 +248,7 @@
 {
    repeater_count** stack;
    repeater_count* next;
- int id;
+ int state_id;
    std::size_t count; // the number of iterations so far
    BidiIterator start_pos; // where the last repeat started
 public:
@@ -256,22 +256,22 @@
    {
       stack = s;
       next = 0;
- id = -1;
+ state_id = -1;
       count = 0;
    }
    repeater_count(int i, repeater_count** s, BidiIterator start)
       : start_pos(start)
    {
- id = i;
+ state_id = i;
       stack = s;
       next = *stack;
       *stack = this;
- if(id > next->id)
+ if(state_id > next->state_id)
          count = 0;
       else
       {
          repeater_count* p = next;
- while(p->id != id)
+ while(p->state_id != state_id)
             p = p->next;
          count = p->count;
          start_pos = p->start_pos;
@@ -282,7 +282,7 @@
       *stack = next;
    }
    std::size_t get_count() { return count; }
- int get_id() { return id; }
+ int get_id() { return state_id; }
    std::size_t operator++() { return ++count; }
    bool check_null_repeat(const BidiIterator& pos, std::size_t max)
    {
@@ -331,7 +331,7 @@
    typedef typename traits::char_type char_type;
    typedef perl_matcher<BidiIterator, Allocator, traits> self_type;
    typedef bool (self_type::*matcher_proc_type)(void);
- typedef typename traits::size_type traits_size_type;
+ typedef std::size_t traits_size_type;
    typedef typename is_byte<char_type>::width_type width_type;
    typedef typename regex_iterator_traits<BidiIterator>::difference_type difference_type;
 
@@ -487,7 +487,7 @@
    void push_assertion(const re_syntax_base* ps, bool positive);
    void push_alt(const re_syntax_base* ps);
    void push_repeater_count(int i, repeater_count<BidiIterator>** s);
- void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int id);
+ void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id);
    void push_non_greedy_repeat(const re_syntax_base* ps);
 
 

Modified: branches/release/boost/regex/v4/perl_matcher_non_recursive.hpp
==============================================================================
--- branches/release/boost/regex/v4/perl_matcher_non_recursive.hpp (original)
+++ branches/release/boost/regex/v4/perl_matcher_non_recursive.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -50,13 +50,13 @@
 struct saved_state
 {
    union{
- unsigned int id;
+ unsigned int state_id;
       // this padding ensures correct alignment on 64-bit platforms:
       std::size_t padding1;
       std::ptrdiff_t padding2;
       void* padding3;
    };
- saved_state(unsigned i) : id(i) {}
+ saved_state(unsigned i) : state_id(i) {}
 };
 
 template <class BidiIterator>
@@ -298,7 +298,7 @@
 }
 
 template <class BidiIterator, class Allocator, class traits>
-inline void perl_matcher<BidiIterator, Allocator, traits>::push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int id)
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id)
 {
    saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
    --pmp;
@@ -308,7 +308,7 @@
       pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
       --pmp;
    }
- (void) new (pmp)saved_single_repeat<BidiIterator>(c, r, last_position, id);
+ (void) new (pmp)saved_single_repeat<BidiIterator>(c, r, last_position, state_id);
    m_backup_state = pmp;
 }
 
@@ -477,11 +477,13 @@
       take_second = can_start(*position, rep->_map, (unsigned char)mask_skip);
    }
 
- if(take_first || (next_count->get_id() != rep->id))
+ if((m_backup_state->state_id != saved_state_repeater_count)
+ || (static_cast<saved_repeater<BidiIterator>*>(m_backup_state)->count.get_id() != rep->state_id)
+ || (next_count->get_id() != rep->state_id))
    {
       // we're moving to a different repeat from the last
       // one, so set up a counter object:
- push_repeater_count(rep->id, &next_count);
+ push_repeater_count(rep->state_id, &next_count);
    }
    //
    // If we've had at least one repeat already, and the last one
@@ -882,7 +884,7 @@
    //
    do
    {
- unwinder = s_unwind_table[m_backup_state->id];
+ unwinder = s_unwind_table[m_backup_state->state_id];
       cont = (this->*unwinder)(m_recursive_result);
    }while(cont);
    //

Modified: branches/release/boost/regex/v4/perl_matcher_recursive.hpp
==============================================================================
--- branches/release/boost/regex/v4/perl_matcher_recursive.hpp (original)
+++ branches/release/boost/regex/v4/perl_matcher_recursive.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -291,7 +291,7 @@
    // Always copy the repeat count, so that the state is restored
    // when we exit this scope:
    //
- repeater_count<BidiIterator> r(rep->id, &next_count, position);
+ repeater_count<BidiIterator> r(rep->state_id, &next_count, position);
    //
    // If we've had at least one repeat already, and the last one
    // matched the NULL string then set the repeat count to

Modified: branches/release/boost/regex/v4/regex_traits_defaults.hpp
==============================================================================
--- branches/release/boost/regex/v4/regex_traits_defaults.hpp (original)
+++ branches/release/boost/regex/v4/regex_traits_defaults.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -134,8 +134,8 @@
 BOOST_REGEX_DECL std::string BOOST_REGEX_CALL lookup_default_collate_name(const std::string& name);
 
 //
-// get the id of a character clasification, the individual
-// traits classes then transform that id into a bitmask:
+// get the state_id of a character clasification, the individual
+// traits classes then transform that state_id into a bitmask:
 //
 template <class charT>
 struct character_pointer_range

Modified: branches/release/boost/regex/v4/states.hpp
==============================================================================
--- branches/release/boost/regex/v4/states.hpp (original)
+++ branches/release/boost/regex/v4/states.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -240,7 +240,7 @@
 struct re_repeat : public re_alt
 {
    std::size_t min, max; // min and max allowable repeats
- int id; // Unique identifier for this repeat
+ int state_id; // Unique identifier for this repeat
    bool leading; // True if this repeat is at the start of the machine (lets us optimize some searches)
    bool greedy; // True if this is a greedy repeat
 };

Modified: branches/release/boost/regex/v4/u32regex_iterator.hpp
==============================================================================
--- branches/release/boost/regex/v4/u32regex_iterator.hpp (original)
+++ branches/release/boost/regex/v4/u32regex_iterator.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -166,7 +166,7 @@
    return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m);
 }
 #endif
-#ifndef U_WCHAR_IS_UTF16
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m);

Modified: branches/release/boost/regex/v4/u32regex_token_iterator.hpp
==============================================================================
--- branches/release/boost/regex/v4/u32regex_token_iterator.hpp (original)
+++ branches/release/boost/regex/v4/u32regex_token_iterator.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -271,7 +271,7 @@
 typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator;
 typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator;
 
-// construction from an integral sub_match id:
+// construction from an integral sub_match state_id:
 inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
@@ -282,7 +282,7 @@
    return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
 }
 #endif
-#ifndef U_WCHAR_IS_UTF16
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);
@@ -313,7 +313,7 @@
    return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
 }
 #endif
-#ifndef U_WCHAR_IS_UTF16
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 template <std::size_t N>
 inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
 {
@@ -333,7 +333,7 @@
 }
 #endif // BOOST_MSVC < 1300
 
-// construction from a vector of sub_match id's:
+// construction from a vector of sub_match state_id's:
 inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
@@ -344,7 +344,7 @@
    return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
 }
 #endif
-#ifndef U_WCHAR_IS_UTF16
+#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
 {
    return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);

Modified: branches/release/boost/regex/v4/w32_regex_traits.hpp
==============================================================================
--- branches/release/boost/regex/v4/w32_regex_traits.hpp (original)
+++ branches/release/boost/regex/v4/w32_regex_traits.hpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -76,36 +76,36 @@
 #ifndef BOOST_NO_WREGEX
 BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t, lcid_type);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
-BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type id);
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type state_id);
 #endif
 #endif
 BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char, lcid_type);
 #ifndef BOOST_NO_WREGEX
 BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t, lcid_type);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
-BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type id);
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type state_id);
 #endif
 #endif
 BOOST_REGEX_DECL cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name);
-BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type id, int i, const std::string& def);
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type state_id, int i, const std::string& def);
 #ifndef BOOST_NO_WREGEX
-BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type id, int i, const std::wstring& def);
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type state_id, int i, const std::wstring& def);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
 BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::basic_string<unsigned short>& def);
 #endif
 #endif
-BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const char* p1, const char* p2);
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type state_id, const char* p1, const char* p2);
 #ifndef BOOST_NO_WREGEX
-BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type id, const wchar_t* p1, const wchar_t* p2);
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type state_id, const wchar_t* p1, const wchar_t* p2);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
-BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type id, const unsigned short* p1, const unsigned short* p2);
+BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type state_id, const unsigned short* p1, const unsigned short* p2);
 #endif
 #endif
 BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type);
 #ifndef BOOST_NO_WREGEX
 BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
-BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type id);
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type state_id);
 #endif
 #endif
 BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type);
@@ -116,7 +116,7 @@
 #ifndef BOOST_NO_WREGEX
 BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type, boost::uint32_t mask, wchar_t c);
 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
-BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, unsigned short c);
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type state_id, boost::uint32_t m, unsigned short c);
 #endif
 #endif
 //
@@ -540,9 +540,9 @@
       if(pos != m_custom_class_names.end())
          return pos->second;
    }
- std::size_t id = 1 + re_detail::get_default_class_id(p1, p2);
- if(id < sizeof(masks) / sizeof(masks[0]))
- return masks[id];
+ std::size_t state_id = 1 + re_detail::get_default_class_id(p1, p2);
+ if(state_id < sizeof(masks) / sizeof(masks[0]))
+ return masks[state_id];
    return masks[0];
 }
 

Modified: branches/release/libs/regex/build/Jamfile.v2
==============================================================================
--- branches/release/libs/regex/build/Jamfile.v2 (original)
+++ branches/release/libs/regex/build/Jamfile.v2 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -169,7 +169,8 @@
 
 if [ check-icu-config ]
 {
- BOOST_REGEX_ICU_OPTS = "<define>BOOST_HAS_ICU=1" ;
+ BOOST_REGEX_ICU_OPTS = "<target-os>freebsd:<include>/usr/local/include" ;
+ BOOST_REGEX_ICU_OPTS += "<define>BOOST_HAS_ICU=1" ;
 
    if $(ICU_PATH)
    {
@@ -259,3 +260,4 @@
 
 
 
+

Modified: branches/release/libs/regex/src/usinstances.cpp
==============================================================================
--- branches/release/libs/regex/src/usinstances.cpp (original)
+++ branches/release/libs/regex/src/usinstances.cpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -18,45 +18,58 @@
 
 #define BOOST_REGEX_SOURCE
 
-#include <boost/regex/config.hpp>
-
-#if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES)
-#define BOOST_REGEX_US_INSTANTIATE
-
-#ifdef _DLL_CPPLIB
 #include <boost/detail/workaround.hpp>
 #include <memory>
 #include <string>
+
+#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) \
+ && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))
 //
-// This is a horrible workaround, without declaring these symbols extern we get
+// This is a horrible workaround, but without declaring these symbols extern we get
 // duplicate symbol errors when linking if the application is built without
 // /Zc:wchar_t
 //
+#ifdef _CRTIMP2_PURE
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE
+#else
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2
+#endif
+
 namespace std{
-template _CRTIMP2 bool __cdecl operator==(
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>;
+template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >;
+template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>,
+ allocator<unsigned short> >;
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const unsigned short *,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const unsigned short *);
-template _CRTIMP2 bool __cdecl operator<(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator>(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
-template<> _CRTIMP2 std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
-#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-template _CRTIMP2 allocator<unsigned short>::allocator();
-#endif
 }
 #endif
 
+#include <boost/regex/config.hpp>
+
+#if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES)
+#define BOOST_REGEX_US_INSTANTIATE
 
 #include <boost/regex.hpp>
 

Modified: branches/release/libs/regex/src/wc_regex_traits.cpp
==============================================================================
--- branches/release/libs/regex/src/wc_regex_traits.cpp (original)
+++ branches/release/libs/regex/src/wc_regex_traits.cpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -19,42 +19,57 @@
 
 #define BOOST_REGEX_SOURCE
 
-#include <boost/regex/config.hpp>
 #include <boost/detail/workaround.hpp>
-
-#ifdef _DLL_CPPLIB
 #include <memory>
 #include <string>
+
+#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) \
+ && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))
 //
-// This is a horrible workaround, without declaring these symbols extern we get
+// This is a horrible workaround, but without declaring these symbols extern we get
 // duplicate symbol errors when linking if the application is built without
 // /Zc:wchar_t
 //
+#ifdef _CRTIMP2_PURE
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE
+#else
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2
+#endif
+
 namespace std{
-template _CRTIMP2 bool __cdecl operator==(
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>;
+template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >;
+template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>,
+ allocator<unsigned short> >;
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const unsigned short *,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const unsigned short *);
-template _CRTIMP2 bool __cdecl operator<(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator>(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
-template<> _CRTIMP2 std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
-#endif
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
-template _CRTIMP2 allocator<unsigned short>::allocator();
-#endif
 }
 #endif
 
+#include <boost/regex/config.hpp>
+#include <boost/detail/workaround.hpp>
+
 #if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
 
 #include <boost/regex/v4/c_regex_traits.hpp>

Modified: branches/release/libs/regex/test/pathology/bad_expression_test.cpp
==============================================================================
--- branches/release/libs/regex/test/pathology/bad_expression_test.cpp (original)
+++ branches/release/libs/regex/test/pathology/bad_expression_test.cpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -46,7 +46,7 @@
 
    bad_text.assign((std::string::size_type)500000, 'a');
    e2.assign("aaa*@");
- BOOST_CHECK_THROW(0 == boost::regex_search(bad_text, what, e2), std::runtime_error);
+ BOOST_CHECK_THROW(boost::regex_search(bad_text, what, e2), std::runtime_error);
    good_text.assign((std::string::size_type)5000, 'a');
    BOOST_CHECK(0 == boost::regex_search(good_text, what, e2));
 
@@ -54,3 +54,4 @@
 }
 
 #include <boost/test/included/test_exec_monitor.hpp>
+

Modified: branches/release/libs/regex/test/regress/test_tricky_cases.cpp
==============================================================================
--- branches/release/libs/regex/test/regress/test_tricky_cases.cpp (original)
+++ branches/release/libs/regex/test/regress/test_tricky_cases.cpp 2008-09-16 07:54:24 EDT (Tue, 16 Sep 2008)
@@ -377,6 +377,9 @@
    TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds123456789b", match_default, make_array(0, 34, -2, -2));
    TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds12345678", match_default, make_array(-2, -2));
    TEST_REGEX_SEARCH("(?:\\d{9}.*){2}", perl, "123456789dfsdfsdfsfsdfds", match_default, make_array(-2, -2));
+ TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$", perl, "1.2.03", match_default, make_array(-2, -2));
+ TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}$", perl, "1.2.03", match_default, make_array(-2, -2));
+ TEST_REGEX_SEARCH("^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}?$", perl, "1.2.03", match_default, make_array(-2, -2));
 
 
    //


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk