@@ -59,7 +59,7 @@ struct Value final {
5959    } u;
6060
6161    std::unique_ptr<api::vTensor> as_tensor;
62-     api::StagingBuffer as_staging;
62+     std::unique_ptr< api::StagingBuffer>  as_staging;
6363    TensorRef as_tensorref;
6464
6565    std::vector<int64_t > as_int_list;
@@ -73,7 +73,7 @@ struct Value final {
7373
7474    std::string as_string;
7575
76-     SymInt as_symint;
76+     std::unique_ptr< SymInt>  as_symint;
7777
7878    Payload () : u () {}
7979    //  NOLINTNEXTLINE
@@ -117,9 +117,7 @@ struct Value final {
117117      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::INT, as_int);
118118      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::DOUBLE, as_double);
119119      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::BOOL, as_bool);
120-       //  Tensor adjacent types
121-       CASE_MOVE_MOVEABLE_TYPE (
122-           TypeTag::STAGING, api::StagingBuffer, as_staging, StagingBuffer);
120+       //  Tensor adjacent type
123121      CASE_MOVE_MOVEABLE_TYPE (
124122          TypeTag::TENSORREF, TensorRef, as_tensorref, TensorRef);
125123      //  Scalar lists
@@ -134,9 +132,10 @@ struct Value final {
134132          TypeTag::VALUELIST, std::vector<ValueRef>, as_value_list, vector);
135133      CASE_MOVE_MOVEABLE_TYPE (
136134          TypeTag::STRING, std::string, as_string, basic_string);
137-       CASE_MOVE_MOVEABLE_TYPE (TypeTag::SYMINT, SymInt, as_symint, SymInt);
138135      //  Tensor type
139136      CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::TENSOR, as_tensor);
137+       CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::STAGING, as_staging);
138+       CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::SYMINT, as_symint);
140139
141140      case  TypeTag::NONE:
142141        clearToNone ();
@@ -163,9 +162,6 @@ struct Value final {
163162
164163  ~Value () {
165164    switch  (tag) {
166-       case  TypeTag::STAGING:
167-         payload.as_staging .~StagingBuffer ();
168-         break ;
169165      case  TypeTag::TENSORREF:
170166        payload.as_tensorref .~TensorRef ();
171167        break ;
@@ -184,9 +180,6 @@ struct Value final {
184180      case  TypeTag::STRING:
185181        payload.as_string .~basic_string ();
186182        break ;
187-       case  TypeTag::SYMINT:
188-         payload.as_symint .~SymInt ();
189-         break ;
190183      //  Manually list out the types so that if a type here is added later and
191184      //  not handled the compiler can catch it.
192185      case  TypeTag::NONE:
@@ -197,6 +190,12 @@ struct Value final {
197190      case  TypeTag::TENSOR:
198191        payload.as_tensor .reset ();
199192        break ;
193+       case  TypeTag::STAGING:
194+         payload.as_staging .reset ();
195+         break ;
196+       case  TypeTag::SYMINT:
197+         payload.as_symint .reset ();
198+         break ;
200199    }
201200  }
202201
@@ -258,12 +257,6 @@ struct Value final {
258257    return  payload.member_name ;                             \
259258  }
260259
261-   SUPPORT_TRIVIALLY_MOVEABLE_TYPE (
262-       api::StagingBuffer,
263-       Staging,
264-       TypeTag::STAGING,
265-       as_staging);
266- 
267260  SUPPORT_TRIVIALLY_MOVEABLE_TYPE (
268261      TensorRef,
269262      TensorRef,
@@ -300,8 +293,6 @@ struct Value final {
300293      TypeTag::STRING,
301294      as_string);
302295
303-   SUPPORT_TRIVIALLY_MOVEABLE_TYPE (SymInt, SymInt, TypeTag::SYMINT, as_symint);
304- 
305296#undef  SUPPORT_TRIVIALLY_MOVEABLE_TYPE
306297
307298#define  SUPPORT_UNIQUE_PTR_TYPE (type, type_name, type_tag, member_name ) \
@@ -330,6 +321,14 @@ struct Value final {
330321
331322  SUPPORT_UNIQUE_PTR_TYPE (api::vTensor, Tensor, TypeTag::TENSOR, as_tensor);
332323
324+   SUPPORT_UNIQUE_PTR_TYPE (
325+       api::StagingBuffer,
326+       Staging,
327+       TypeTag::STAGING,
328+       as_staging);
329+ 
330+   SUPPORT_UNIQUE_PTR_TYPE (SymInt, SymInt, TypeTag::SYMINT, as_symint);
331+ 
333332#undef  SUPPORT_UNIQUE_PTR_TYPE
334333
335334 private: 
0 commit comments