@@ -370,6 +370,108 @@ impl<T: TryFrom<Expr>> TryExtractFrom<Expr> for T {
370370 }
371371}
372372
373+ #[ cfg( feature = "ergotree-proc-macro" ) ]
374+ impl syn:: parse:: Parse for Expr {
375+ fn parse ( input : syn:: parse:: ParseStream ) -> syn:: Result < Self > {
376+ let name: syn:: Ident = input. parse ( ) ?;
377+ match name. to_string ( ) . as_str ( ) {
378+ "FuncValue" => {
379+ let content;
380+ let _paren = syn:: parenthesized!( content in input) ;
381+
382+ Ok ( Expr :: FuncValue ( content. parse ( ) ?) )
383+ }
384+ "BoolToSigmaProp" => Ok ( Expr :: BoolToSigmaProp ( input. parse ( ) ?) ) ,
385+ "ValUse" => Ok ( Expr :: ValUse ( input. parse ( ) ?) ) ,
386+ _ => Err ( syn:: Error :: new_spanned ( name, "Unknown `Expr` variant name" ) ) ,
387+ }
388+ }
389+ }
390+
391+ #[ cfg( feature = "ergotree-proc-macro" ) ]
392+ impl quote:: ToTokens for Expr {
393+ fn to_tokens ( & self , tokens : & mut proc_macro2:: TokenStream ) {
394+ use quote:: quote;
395+ tokens. extend ( match self {
396+ Expr :: Append ( a) => {
397+ quote ! { ergotree_ir:: mir:: expr:: Expr :: Append { #a } }
398+ }
399+
400+ Expr :: Const ( _) => todo ! ( ) ,
401+ Expr :: ConstPlaceholder ( _) => todo ! ( ) ,
402+ Expr :: SubstConstants ( _) => todo ! ( ) ,
403+ Expr :: ByteArrayToLong ( _) => todo ! ( ) ,
404+ Expr :: ByteArrayToBigInt ( _) => todo ! ( ) ,
405+ Expr :: LongToByteArray ( _) => todo ! ( ) ,
406+ Expr :: Collection ( _) => todo ! ( ) ,
407+ Expr :: Tuple ( _) => todo ! ( ) ,
408+ Expr :: CalcBlake2b256 ( _) => todo ! ( ) ,
409+ Expr :: CalcSha256 ( _) => todo ! ( ) ,
410+ Expr :: Context => todo ! ( ) ,
411+ Expr :: Global => todo ! ( ) ,
412+ Expr :: GlobalVars ( _) => todo ! ( ) ,
413+ Expr :: FuncValue ( f) => {
414+ quote ! { ergotree_ir:: mir:: expr:: Expr :: FuncValue ( #f) }
415+ }
416+ Expr :: Apply ( _) => todo ! ( ) ,
417+ Expr :: MethodCall ( _) => todo ! ( ) ,
418+ Expr :: ProperyCall ( _) => todo ! ( ) ,
419+ Expr :: BlockValue ( _) => todo ! ( ) ,
420+ Expr :: ValDef ( _) => todo ! ( ) ,
421+ Expr :: ValUse ( v) => {
422+ quote ! { ergotree_ir:: mir:: expr:: Expr :: ValUse ( #v) }
423+ }
424+ Expr :: If ( _) => todo ! ( ) ,
425+ Expr :: BinOp ( _) => todo ! ( ) ,
426+ Expr :: And ( _) => todo ! ( ) ,
427+ Expr :: Or ( _) => todo ! ( ) ,
428+ Expr :: Xor ( _) => todo ! ( ) ,
429+ Expr :: Atleast ( _) => todo ! ( ) ,
430+ Expr :: LogicalNot ( _) => todo ! ( ) ,
431+ Expr :: Negation ( _) => todo ! ( ) ,
432+ Expr :: BitInversion ( _) => todo ! ( ) ,
433+ Expr :: OptionGet ( _) => todo ! ( ) ,
434+ Expr :: OptionIsDefined ( _) => todo ! ( ) ,
435+ Expr :: OptionGetOrElse ( _) => todo ! ( ) ,
436+ Expr :: ExtractAmount ( _) => todo ! ( ) ,
437+ Expr :: ExtractRegisterAs ( _) => todo ! ( ) ,
438+ Expr :: ExtractBytes ( _) => todo ! ( ) ,
439+ Expr :: ExtractBytesWithNoRef ( _) => todo ! ( ) ,
440+ Expr :: ExtractScriptBytes ( _) => todo ! ( ) ,
441+ Expr :: ExtractCreationInfo ( _) => todo ! ( ) ,
442+ Expr :: ExtractId ( _) => todo ! ( ) ,
443+ Expr :: ByIndex ( _) => todo ! ( ) ,
444+ Expr :: SizeOf ( _) => todo ! ( ) ,
445+ Expr :: Slice ( _) => todo ! ( ) ,
446+ Expr :: Fold ( _) => todo ! ( ) ,
447+ Expr :: Map ( _) => todo ! ( ) ,
448+ Expr :: Filter ( _) => todo ! ( ) ,
449+ Expr :: Exists ( _) => todo ! ( ) ,
450+ Expr :: ForAll ( _) => todo ! ( ) ,
451+ Expr :: SelectField ( _) => todo ! ( ) ,
452+ Expr :: BoolToSigmaProp ( b) => {
453+ quote ! { ergotree_ir:: mir:: expr:: Expr :: BoolToSigmaProp ( #b) }
454+ }
455+ Expr :: Upcast ( _) => todo ! ( ) ,
456+ Expr :: Downcast ( _) => todo ! ( ) ,
457+ Expr :: CreateProveDlog ( _) => todo ! ( ) ,
458+ Expr :: CreateProveDhTuple ( _) => todo ! ( ) ,
459+ Expr :: SigmaPropBytes ( _) => todo ! ( ) ,
460+ Expr :: DecodePoint ( _) => todo ! ( ) ,
461+ Expr :: SigmaAnd ( _) => todo ! ( ) ,
462+ Expr :: SigmaOr ( _) => todo ! ( ) ,
463+ Expr :: GetVar ( _) => todo ! ( ) ,
464+ Expr :: DeserializeRegister ( _) => todo ! ( ) ,
465+ Expr :: DeserializeContext ( _) => todo ! ( ) ,
466+ Expr :: MultiplyGroup ( _) => todo ! ( ) ,
467+ Expr :: Exponentiate ( _) => todo ! ( ) ,
468+ Expr :: XorOf ( _) => todo ! ( ) ,
469+ Expr :: TreeLookup ( _) => todo ! ( ) ,
470+ Expr :: CreateAvlTree ( _) => todo ! ( ) ,
471+ } ) ;
472+ }
473+ }
474+
373475#[ cfg( feature = "arbitrary" ) ]
374476#[ allow( clippy:: unwrap_used) ]
375477#[ allow( clippy:: panic) ]
0 commit comments