affect.jl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #======================================================
  2. AFFECTATION
  3. ======================================================#
  4. struct StarpuExprAffect <: StarpuExpr
  5. var :: StarpuExpr
  6. expr :: StarpuExpr
  7. end
  8. function starpu_parse_affect(x :: Expr)
  9. if (x.head != :(=))
  10. error("Invalid \"affectation\" expression")
  11. end
  12. var = starpu_parse(x.args[1])
  13. expr = starpu_parse(x.args[2])
  14. return StarpuExprAffect(var, expr)
  15. end
  16. function equals(x :: StarpuExprAffect, y :: StarpuExpr)
  17. if typeof(y) != StarpuExprAffect
  18. return false
  19. end
  20. return equals(x.var, y.var) && equals(x.expr, y.expr)
  21. end
  22. function print(io :: IO, x :: StarpuExprAffect ; indent = 0)
  23. print(io, x.var, indent = indent)
  24. print(io, " = ")
  25. need_to_transtyp = isa(x.var, StarpuExprTypedVar) # transtyping to avoid warning (or errors for cuda) during compilation time
  26. if need_to_transtyp
  27. print(io, "(", starpu_type_traduction(x.var.typ), ") (")
  28. end
  29. print(io, x.expr, indent = indent)
  30. if need_to_transtyp
  31. print(io, ")")
  32. end
  33. end
  34. function apply(func :: Function, expr :: StarpuExprAffect)
  35. var = apply(func, expr.var)
  36. new_expr = apply(func, expr.expr)
  37. return func(StarpuExprAffect(var, new_expr))
  38. end