@@ -94,15 +94,14 @@ struct EValue {
9494 int64_t as_int;
9595 double as_double;
9696 bool as_bool;
97- // TODO(jakeszwe): convert back to pointers to optimize size of this
98- // struct
99- executorch::aten::ArrayRef<char > as_string;
100- executorch::aten::ArrayRef<double > as_double_list;
101- executorch::aten::ArrayRef<bool > as_bool_list;
102- BoxedEvalueList<int64_t > as_int_list;
103- BoxedEvalueList<executorch::aten::Tensor> as_tensor_list;
104- BoxedEvalueList<std::optional<executorch::aten::Tensor>>
105- as_list_optional_tensor;
97+
98+ executorch::aten::ArrayRef<char >* as_string_ptr;
99+ executorch::aten::ArrayRef<double >* as_double_list_ptr;
100+ executorch::aten::ArrayRef<bool >* as_bool_list_ptr;
101+ BoxedEvalueList<int64_t >* as_int_list_ptr;
102+ BoxedEvalueList<executorch::aten::Tensor>* as_tensor_list_ptr;
103+ BoxedEvalueList<std::optional<executorch::aten::Tensor>>*
104+ as_list_optional_tensor_ptr;
106105 } copyable_union;
107106
108107 // Since a Tensor just holds a TensorImpl*, there's no value to use Tensor*
@@ -280,9 +279,8 @@ struct EValue {
280279 }
281280
282281 /* ***** String Type ******/
283- /* implicit*/ EValue(const char * s, size_t size) : tag(Tag::String) {
284- payload.copyable_union .as_string =
285- executorch::aten::ArrayRef<char >(s, size);
282+ /* implicit*/ EValue(executorch::aten::ArrayRef<char >* s) : tag(Tag::String) {
283+ payload.copyable_union .as_string_ptr = s;
286284 }
287285
288286 bool isString () const {
@@ -292,13 +290,13 @@ struct EValue {
292290 std::string_view toString () const {
293291 ET_CHECK_MSG (isString (), " EValue is not a String." );
294292 return std::string_view (
295- payload.copyable_union .as_string . data (),
296- payload.copyable_union .as_string . size ());
293+ payload.copyable_union .as_string_ptr -> data (),
294+ payload.copyable_union .as_string_ptr -> size ());
297295 }
298296
299297 /* ***** Int List Type ******/
300- /* implicit*/ EValue(BoxedEvalueList<int64_t > i) : tag(Tag::ListInt) {
301- payload.copyable_union .as_int_list = i;
298+ /* implicit*/ EValue(BoxedEvalueList<int64_t >* i) : tag(Tag::ListInt) {
299+ payload.copyable_union .as_int_list_ptr = i;
302300 }
303301
304302 bool isIntList () const {
@@ -307,12 +305,13 @@ struct EValue {
307305
308306 executorch::aten::ArrayRef<int64_t > toIntList () const {
309307 ET_CHECK_MSG (isIntList (), " EValue is not an Int List." );
310- return payload.copyable_union .as_int_list . get ();
308+ return ( payload.copyable_union .as_int_list_ptr )-> get ();
311309 }
312310
313311 /* ***** Bool List Type ******/
314- /* implicit*/ EValue(executorch::aten::ArrayRef<bool > b) : tag(Tag::ListBool) {
315- payload.copyable_union .as_bool_list = b;
312+ /* implicit*/ EValue(executorch::aten::ArrayRef<bool >* b)
313+ : tag(Tag::ListBool) {
314+ payload.copyable_union .as_bool_list_ptr = b;
316315 }
317316
318317 bool isBoolList () const {
@@ -321,13 +320,13 @@ struct EValue {
321320
322321 executorch::aten::ArrayRef<bool > toBoolList () const {
323322 ET_CHECK_MSG (isBoolList (), " EValue is not a Bool List." );
324- return payload.copyable_union .as_bool_list ;
323+ return *( payload.copyable_union .as_bool_list_ptr ) ;
325324 }
326325
327326 /* ***** Double List Type ******/
328- /* implicit*/ EValue(executorch::aten::ArrayRef<double > d)
327+ /* implicit*/ EValue(executorch::aten::ArrayRef<double >* d)
329328 : tag(Tag::ListDouble) {
330- payload.copyable_union .as_double_list = d;
329+ payload.copyable_union .as_double_list_ptr = d;
331330 }
332331
333332 bool isDoubleList () const {
@@ -336,13 +335,13 @@ struct EValue {
336335
337336 executorch::aten::ArrayRef<double > toDoubleList () const {
338337 ET_CHECK_MSG (isDoubleList (), " EValue is not a Double List." );
339- return payload.copyable_union .as_double_list ;
338+ return *( payload.copyable_union .as_double_list_ptr ) ;
340339 }
341340
342341 /* ***** Tensor List Type ******/
343- /* implicit*/ EValue(BoxedEvalueList<executorch::aten::Tensor> t)
342+ /* implicit*/ EValue(BoxedEvalueList<executorch::aten::Tensor>* t)
344343 : tag(Tag::ListTensor) {
345- payload.copyable_union .as_tensor_list = t;
344+ payload.copyable_union .as_tensor_list_ptr = t;
346345 }
347346
348347 bool isTensorList () const {
@@ -351,14 +350,14 @@ struct EValue {
351350
352351 executorch::aten::ArrayRef<executorch::aten::Tensor> toTensorList () const {
353352 ET_CHECK_MSG (isTensorList (), " EValue is not a Tensor List." );
354- return payload.copyable_union .as_tensor_list . get ();
353+ return payload.copyable_union .as_tensor_list_ptr -> get ();
355354 }
356355
357356 /* ***** List Optional Tensor Type ******/
358357 /* implicit*/ EValue(
359- BoxedEvalueList<std::optional<executorch::aten::Tensor>> t)
358+ BoxedEvalueList<std::optional<executorch::aten::Tensor>>* t)
360359 : tag(Tag::ListOptionalTensor) {
361- payload.copyable_union .as_list_optional_tensor = t;
360+ payload.copyable_union .as_list_optional_tensor_ptr = t;
362361 }
363362
364363 bool isListOptionalTensor () const {
@@ -367,7 +366,7 @@ struct EValue {
367366
368367 executorch::aten::ArrayRef<std::optional<executorch::aten::Tensor>>
369368 toListOptionalTensor () const {
370- return payload.copyable_union .as_list_optional_tensor . get ();
369+ return payload.copyable_union .as_list_optional_tensor_ptr -> get ();
371370 }
372371
373372 /* ***** ScalarType Type ******/
0 commit comments