@@ -463,6 +463,11 @@ function generate_tilde_literal(left, right)
463463 end
464464end
465465
466+ assign_or_set!! (lhs:: Symbol , rhs) = AbstractPPL. drop_escape (:($ lhs = $ rhs))
467+ function assign_or_set!! (lhs:: Expr , rhs)
468+ return AbstractPPL. drop_escape (:($ BangBang. @set!! $ lhs = $ rhs))
469+ end
470+
466471"""
467472 generate_tilde(left, right)
468473
@@ -476,9 +481,6 @@ function generate_tilde(left, right)
476481 # if the LHS represents an observation
477482 @gensym vn isassumption value dist supplied_val
478483
479- fixed_expr = :($ BangBang. @set!! $ left = $ (DynamicPPL. getfixed_nested)(
480- __model__. context, $ (DynamicPPL. prefix)(__model__. context, $ vn)
481- ))
482484 return quote
483485 $ dist = $ right
484486 $ vn = $ (DynamicPPL. resolve_varnames)($ (make_varname_expression (left)), $ dist)
@@ -488,7 +490,12 @@ function generate_tilde(left, right)
488490 # use Accessors.@set to safely set it.
489491 # We need overwrite=true to make sure that the parent value `x` is overwritten
490492 # after this statement.
491- $ (AbstractPPL. drop_escape (fixed_expr))
493+ $ (assign_or_set!! (
494+ left,
495+ :($ (DynamicPPL. getfixed_nested)(
496+ __model__. context, $ (DynamicPPL. prefix)(__model__. context, $ vn)
497+ )),
498+ ))
492499 elseif $ isassumption
493500 $ (generate_tilde_assume (left, dist, vn))
494501 else
@@ -515,6 +522,7 @@ function generate_tilde(left, right)
515522 $ vn,
516523 __varinfo__,
517524 )
525+ $ (assign_or_set!! (left, value))
518526 $ value
519527 end
520528 end
0 commit comments