diff options
Diffstat (limited to 'upb')
-rw-r--r-- | upb/descriptor/reader.c | 1 | ||||
-rw-r--r-- | upb/google/bridge.cc | 4 | ||||
-rw-r--r-- | upb/handlers-inl.h | 13 | ||||
-rw-r--r-- | upb/handlers.h | 22 |
4 files changed, 28 insertions, 12 deletions
diff --git a/upb/descriptor/reader.c b/upb/descriptor/reader.c index e1b0c92..43bbdea 100644 --- a/upb/descriptor/reader.c +++ b/upb/descriptor/reader.c @@ -296,6 +296,7 @@ static bool enum_startmsg(void *closure, const void *hd) { } static bool enum_endmsg(void *closure, const void *hd, upb_status *status) { + UPB_UNUSED(hd); upb_descreader *r = closure; upb_enumdef *e = upb_downcast_enumdef_mutable(upb_descreader_last(r)); if (upb_def_fullname(upb_descreader_last(r)) == NULL) { diff --git a/upb/google/bridge.cc b/upb/google/bridge.cc index 97a91ea..9386427 100644 --- a/upb/google/bridge.cc +++ b/upb/google/bridge.cc @@ -131,8 +131,8 @@ FieldDef* AddFieldDef(const goog::Message& m, const goog::FieldDescriptor* f, : upb::FieldDef::ConvertDescriptorType(f->type())); if (weak_prototype) { - const string& name = weak_prototype->GetDescriptor()->full_name(); - upb_f->set_subdef_name(name, &status); + upb_f->set_subdef_name( + weak_prototype->GetDescriptor()->full_name(), &status); } else { switch (upb_f->type()) { case UPB_TYPE_INT32: diff --git a/upb/handlers-inl.h b/upb/handlers-inl.h index 65f21a2..6b46b47 100644 --- a/upb/handlers-inl.h +++ b/upb/handlers-inl.h @@ -303,8 +303,8 @@ inline Handlers::StringHandler BindHandler( template <> \ inline bool Handlers::SetValueHandler<vtype>( \ const FieldDef *f, \ - const typename ValueHandler<typename CanonicalType<vtype>::Type>::H & \ - handler) { \ + const Handlers::utype ## Handler& handler) { \ + assert(!handler.registered_); \ handler.registered_ = true; \ return upb_handlers_set##ltype(this, f, handler.handler_, handler.data_, \ handler.cleanup_); \ @@ -394,54 +394,63 @@ inline const MessageDef *Handlers::message_def() const { } inline bool Handlers::SetStartMessageHandler( const Handlers::StartMessageHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setstartmsg(this, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetEndMessageHandler( const Handlers::EndMessageHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setendmsg(this, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetStartStringHandler(const FieldDef *f, const StartStringHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setstartstr(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetEndStringHandler(const FieldDef *f, const EndFieldHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setendstr(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetStringHandler(const FieldDef *f, const StringHandler& handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setstring(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetStartSequenceHandler( const FieldDef *f, const StartFieldHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setstartseq(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetStartSubMessageHandler( const FieldDef *f, const StartFieldHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setstartsubmsg(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetEndSubMessageHandler(const FieldDef *f, const EndFieldHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setendsubmsg(this, f, handler.handler_, handler.data_, handler.cleanup_); } inline bool Handlers::SetEndSequenceHandler(const FieldDef *f, const EndFieldHandler &handler) { + assert(!handler.registered_); handler.registered_ = true; return upb_handlers_setendseq(this, f, handler.handler_, handler.data_, handler.cleanup_); diff --git a/upb/handlers.h b/upb/handlers.h index a80e401..2108046 100644 --- a/upb/handlers.h +++ b/upb/handlers.h @@ -116,13 +116,13 @@ class upb::Handlers { typedef Handler<bool(*)(void *, const void *, T)> H; }; - typedef ValueHandler<upb_int32_t>::H Int32Handler; - typedef ValueHandler<upb_int64_t>::H Int64Handler; - typedef ValueHandler<upb_uint32_t>::H UInt32Handler; - typedef ValueHandler<upb_uint64_t>::H UInt64Handler; - typedef ValueHandler<float>::H FloatHandler; - typedef ValueHandler<double>::H DoubleHandler; - typedef ValueHandler<bool>::H BoolHandler; + typedef ValueHandler<int32_t>::H Int32Handler; + typedef ValueHandler<int64_t>::H Int64Handler; + typedef ValueHandler<uint32_t>::H UInt32Handler; + typedef ValueHandler<uint64_t>::H UInt64Handler; + typedef ValueHandler<float>::H FloatHandler; + typedef ValueHandler<double>::H DoubleHandler; + typedef ValueHandler<bool>::H BoolHandler; // Any function pointer can be converted to this and converted back to its // correct type. @@ -470,8 +470,14 @@ template <class T> class Handler { Handler(FuncPtr h, void *d, void (*c)(void *)) : handler_(h), data_(d), cleanup_(c), registered_(false) {} - Handler(const Handler&); void operator=(const Handler&); +#ifdef UPB_CXX11 + // C++98 doesn't support binding a const ref to a temporary, at least + // according to Clang. It is still intended that users NOT create instances + // of this object via this copy constructor, and any attempts to register + // such an object more than once will assert-fail. + Handler(const Handler&); +#endif FuncPtr handler_; void *data_; |