@@ -37,7 +37,8 @@ AttributeProxyPolicy<CLASS>::AttributeProxy::operator=(const T& rhs) {
3737template <typename CLASS >
3838template <typename T>
3939AttributeProxyPolicy<CLASS >::AttributeProxy::operator T () const {
40- return as<T>(get ());
40+ Shield<SEXP > x (get ());
41+ return as<T>(x);
4142}
4243
4344template <typename CLASS >
@@ -48,7 +49,8 @@ AttributeProxyPolicy<CLASS>::AttributeProxy::operator SEXP() const {
4849template <typename CLASS >
4950template <typename T>
5051AttributeProxyPolicy<CLASS >::const_AttributeProxy::operator T () const {
51- return as<T>(get ());
52+ Shield<SEXP > x (get ());
53+ return as<T>(x);
5254}
5355
5456template <typename CLASS >
@@ -68,13 +70,15 @@ NamesProxyPolicy<CLASS>::NamesProxy::operator=(const T& rhs) {
6870template <typename CLASS >
6971template <typename T>
7072NamesProxyPolicy<CLASS >::NamesProxy::operator T () const {
71- return as<T>( get () );
73+ Shield<SEXP > x (get ());
74+ return as<T>(x);
7275}
7376
7477template <typename CLASS >
7578template <typename T>
7679NamesProxyPolicy<CLASS >::const_NamesProxy::operator T () const {
77- return as<T>( get () );
80+ Shield<SEXP > x (get ());
81+ return as<T>(x);
7882}
7983
8084// SlotProxy
@@ -89,7 +93,8 @@ SlotProxyPolicy<CLASS>::SlotProxy::operator=(const T& rhs) {
8993template <typename CLASS >
9094template <typename T>
9195SlotProxyPolicy<CLASS >::SlotProxy::operator T () const {
92- return as<T>(get ());
96+ Shield<SEXP > x (get ());
97+ return as<T>(x);
9398}
9499
95100// TagProxy
@@ -104,7 +109,8 @@ TagProxyPolicy<CLASS>::TagProxy::operator=(const T& rhs) {
104109template <typename CLASS >
105110template <typename T>
106111TagProxyPolicy<CLASS >::TagProxy::operator T () const {
107- return as<T>(get ());
112+ Shield<SEXP > x (get ());
113+ return as<T>(x);
108114}
109115
110116template <typename CLASS >
@@ -115,7 +121,8 @@ TagProxyPolicy<CLASS>::TagProxy::operator SEXP() const {
115121template <typename CLASS >
116122template <typename T>
117123TagProxyPolicy<CLASS >::const_TagProxy::operator T () const {
118- return as<T>(get ());
124+ Shield<SEXP > x (get ());
125+ return as<T>(x);
119126}
120127
121128template <typename CLASS >
@@ -135,13 +142,15 @@ BindingPolicy<CLASS>::Binding::operator=(const T& rhs) {
135142template <typename CLASS >
136143template <typename T>
137144BindingPolicy<CLASS >::Binding::operator T () const {
138- return as<T>(get ());
145+ Shield<SEXP > x (get ());
146+ return as<T>(x);
139147}
140148
141149template <typename CLASS >
142150template <typename T>
143151BindingPolicy<CLASS >::const_Binding::operator T () const {
144- return as<T>(get ());
152+ Shield<SEXP > x (get ());
153+ return as<T>(x);
145154}
146155
147156// DottedPairProxy
@@ -163,20 +172,25 @@ DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator=(const traits::named_obj
163172template <typename CLASS >
164173template <typename T>
165174DottedPairProxyPolicy<CLASS >::DottedPairProxy::operator T () const {
166- return as<T>(get ());
175+ Shield<SEXP > x (get ());
176+ return as<T>(x);
167177}
168178
169179template <typename CLASS >
170180template <typename T>
171181DottedPairProxyPolicy<CLASS >::const_DottedPairProxy::operator T () const {
172- return as<T>(get ());
182+ Shield<SEXP > x (get ());
183+ return as<T>(x);
173184}
174185
175186// FieldProxy
176187template <typename CLASS >
177188typename FieldProxyPolicy<CLASS >::FieldProxy&
178189FieldProxyPolicy<CLASS >::FieldProxy::operator =(const FieldProxyPolicy<CLASS >::FieldProxy& rhs) {
179- if (this != &rhs) set (rhs.get ());
190+ if (this != &rhs) {
191+ Shield<SEXP > x (rhs.get ());
192+ set (x);
193+ }
180194 return *this ;
181195}
182196
@@ -191,13 +205,15 @@ FieldProxyPolicy<CLASS>::FieldProxy::operator=(const T& rhs) {
191205template <typename CLASS >
192206template <typename T>
193207FieldProxyPolicy<CLASS >::FieldProxy::operator T () const {
194- return as<T>(get ());
208+ Shield<SEXP > x (get ());
209+ return as<T>(x);
195210}
196211
197212template <typename CLASS >
198213template <typename T>
199214FieldProxyPolicy<CLASS >::const_FieldProxy::operator T () const {
200- return as<T>(get ());
215+ Shield<SEXP > x (get ());
216+ return as<T>(x);
201217}
202218
203219}
0 commit comments