@@ -2,6 +2,7 @@ use super::argument::{Argument, ArgumentList};
22use super :: intrinsic:: Intrinsic ;
33use super :: types:: IntrinsicType ;
44use serde:: Deserialize ;
5+ use serde_json:: Value ;
56use std:: collections:: HashMap ;
67use std:: path:: Path ;
78
@@ -28,6 +29,14 @@ pub enum ArgPrep {
2829 Nothing { } ,
2930}
3031
32+ impl TryFrom < Value > for ArgPrep {
33+ type Error = serde_json:: Error ;
34+
35+ fn try_from ( value : Value ) -> Result < Self , Self :: Error > {
36+ serde_json:: from_value ( value)
37+ }
38+ }
39+
3140#[ derive( Deserialize , Debug ) ]
3241struct JsonIntrinsic {
3342 #[ serde( rename = "SIMD_ISA" ) ]
@@ -36,7 +45,7 @@ struct JsonIntrinsic {
3645 arguments : Vec < String > ,
3746 return_type : ReturnType ,
3847 #[ serde( rename = "Arguments_Preparation" ) ]
39- args_prep : Option < HashMap < String , ArgPrep > > ,
48+ args_prep : Option < HashMap < String , Value > > ,
4049 #[ serde( rename = "Architectures" ) ]
4150 architectures : Vec < String > ,
4251}
@@ -70,15 +79,13 @@ fn json_to_intrinsic(
7079
7180 let results = IntrinsicType :: from_c ( & intr. return_type . value , target) ?;
7281
73- let mut args_prep = intr. args_prep . as_mut ( ) ;
7482 let args = intr
7583 . arguments
7684 . into_iter ( )
7785 . enumerate ( )
7886 . map ( |( i, arg) | {
79- let arg_name = Argument :: type_and_name_from_c ( & arg) . 1 ;
80- let arg_prep = args_prep. as_mut ( ) . and_then ( |a| a. remove ( arg_name) ) ;
81- let mut arg = Argument :: from_c ( i, & arg, arg_prep, target) ;
87+ // let arg_name = Argument::type_and_name_from_c(&arg).1;
88+ let mut arg = Argument :: from_c ( i, & arg, target, intr. args_prep . as_mut ( ) ) ;
8289 // The JSON doesn't list immediates as const
8390 if let IntrinsicType :: Type {
8491 ref mut constant, ..
0 commit comments