@@ -2,13 +2,6 @@ open Core_kernel
22open Core_kernel.Poly
33open Middle
44
5- (* XXX fix exn *)
6- let unwrap_return_exn = function
7- | Some (UnsizedType. ReturnType ut ) -> ut
8- | x ->
9- Common.FatalError. fatal_error_msg
10- [% message " Unexpected return type " (x : UnsizedType.returntype option )]
11-
125let trans_fn_kind kind name =
136 let fname = Utils. stdlib_distribution_name name in
147 match kind with
@@ -36,14 +29,9 @@ let%expect_test "format_number1" =
3629 format_number " .123_456" |> print_endline ;
3730 [% expect " .123456" ]
3831
39- let rec op_to_funapp op args =
40- let argtypes =
41- List. map ~f: (fun x -> (x.Ast. emeta.Ast. ad_level, x.emeta.type_)) args in
42- let type_ =
43- Stan_math_signatures. operator_stan_math_return_type op argtypes
44- |> unwrap_return_exn
45- and loc = Ast. expr_loc_lub args
46- and adlevel = Ast. expr_ad_lub args in
32+ let rec op_to_funapp op args type_ =
33+ let loc = Ast. expr_loc_lub args in
34+ let adlevel = Ast. expr_ad_lub args in
4735 Expr.
4836 { Fixed. pattern=
4937 FunApp (StanLib (Operator. to_string op, FnPlain , AoS ), trans_exprs args)
@@ -61,8 +49,8 @@ and trans_expr {Ast.expr; Ast.emeta} =
6149 | Ast. Paren x -> trans_expr x
6250 | BinOp (lhs , And , rhs ) -> EAnd (trans_expr lhs, trans_expr rhs) |> ewrap
6351 | BinOp (lhs , Or , rhs ) -> EOr (trans_expr lhs, trans_expr rhs) |> ewrap
64- | BinOp (lhs , op , rhs ) -> op_to_funapp op [lhs; rhs]
65- | PrefixOp (op , e ) | Ast. PostfixOp (e , op ) -> op_to_funapp op [e]
52+ | BinOp (lhs , op , rhs ) -> op_to_funapp op [lhs; rhs] emeta.type_
53+ | PrefixOp (op , e ) | Ast. PostfixOp (e , op ) -> op_to_funapp op [e] emeta.type_
6654 | Ast. TernaryIf (cond , ifb , elseb ) ->
6755 Expr.Fixed.Pattern. TernaryIf
6856 (trans_expr cond, trans_expr ifb, trans_expr elseb)
@@ -127,12 +115,12 @@ let truncate_dist ud_dists (id : Ast.identifier) ast_obs ast_args t =
127115 { Stmt.Fixed. meta= smeta
128116 ; pattern=
129117 IfElse
130- ( op_to_funapp cond_op [ast_obs; x]
118+ ( op_to_funapp cond_op [ast_obs; x] UInt
131119 , {Stmt.Fixed. meta= smeta; pattern= TargetPE neg_inf}
132120 , Some y ) } in
133121 let targetme loc e =
134- {Stmt.Fixed. meta= loc; pattern = TargetPE (op_to_funapp Operator. PMinus [e])}
135- in
122+ { Stmt.Fixed. meta= loc
123+ ; pattern = TargetPE (op_to_funapp Operator. PMinus [e] e.emeta.type_) } in
136124 let funapp meta kind name args =
137125 { Ast. emeta= meta
138126 ; expr= Ast. FunApp (kind, {name; id_loc= Location_span. empty}, args) } in
@@ -418,7 +406,8 @@ let rec trans_stmt ud_dists (declc : decl_context) (ts : Ast.typed_statement) =
418406 let rhs =
419407 match assign_op with
420408 | Ast. Assign | Ast. ArrowAssign -> trans_expr assign_rhs
421- | Ast. OperatorAssign op -> op_to_funapp op [assignee; assign_rhs] in
409+ | Ast. OperatorAssign op ->
410+ op_to_funapp op [assignee; assign_rhs] assignee.emeta.type_ in
422411 Assignment
423412 ( ( assign_identifier.Ast. name
424413 , id_type_
0 commit comments