Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/typechecker/check-expr.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/typechecker/check-expr.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4042, Fri Jun 24 19:04:21 2016 UTC revision 4043, Sun Jun 26 14:00:38 2016 UTC
# Line 547  Line 547 
547                      | ((e', ty as Ty.T_Sequence _), [NONE]) => expectedTensor ty                      | ((e', ty as Ty.T_Sequence _), [NONE]) => expectedTensor ty
548                      | ((e', ty as Ty.T_Sequence _), _) => expectedTensor ty                      | ((e', ty as Ty.T_Sequence _), _) => expectedTensor ty
549                      | ((e', ty as _), _) => let                      | ((e', ty as _), _) => let
550                        (* for tensor slicing/indexing, the indices must be constant expressions *)                        (* for tensor/field slicing/indexing, the indices must be constant expressions *)
551                          fun chkConstIndex NONE = NONE                          fun chkConstIndex NONE = NONE
552                            | chkConstIndex (SOME e) = (case chkIndex e                            | chkConstIndex (SOME e) = (case chkIndex e
553                                 of (_, Ty.T_Error) => SOME bogusExp                                 of (_, Ty.T_Error) => SOME bogusExp
# Line 566  Line 566 
566                                      Ty.T_Field{diff=diff, dim=dim, shape=s}                                      Ty.T_Field{diff=diff, dim=dim, shape=s}
567                                  | Ty.T_Tensor shape => TU.mkTensorTy order                                  | Ty.T_Tensor shape => TU.mkTensorTy order
568                                  | Ty.T_Field _ => raise Fail "unknown field type"                                  | Ty.T_Field _ => raise Fail "unknown field type"
569                                  |  _ => raise Fail "unknow type"                                  |  _ => raise Fail "unknown type"
570                                (* end case *))                                (* end case *))
571                          val resultTy = TU.slice(expectedTy, List.map Option.isSome indices')                          val resultTy = TU.slice(expectedTy, List.map Option.isSome indices')
572                          in                          in
# Line 632  Line 632 
632                  end                  end
633              | PT.E_Var x => (case E.findVar (env, x)              | PT.E_Var x => (case E.findVar (env, x)
634                   of SOME x' => (AST.E_Var(useVar(cxt, x')), Var.monoTypeOf x')                   of SOME x' => (AST.E_Var(useVar(cxt, x')), Var.monoTypeOf x')
635                      | NONE => (case E.findKernel (env, x)
636                           of SOME h => (AST.E_Kernel h, Ty.T_Kernel(Ty.DiffConst(Kernel.continuity h)))
637                    | NONE => err(cxt, [S "undeclared variable ", A x])                    | NONE => err(cxt, [S "undeclared variable ", A x])
638                  (* end case *))                  (* end case *))
639              | PT.E_Kernel(kern, dim) => (case E.findVar (env, kern)                  (* end case *))
640                   of SOME kern' => (case Var.monoTypeOf kern'              | PT.E_Kernel(kern, dim) => let
                        of ty as Ty.T_Kernel(Ty.DiffConst k) => let  
641                              val k' = Int.fromLarge dim handle Overflow => 1073741823                              val k' = Int.fromLarge dim handle Overflow => 1073741823
642                              val e = AST.E_Var(useVar(cxt, kern'))                  fun mkExp (e, k, ty) = if (k = k')
                             in  
                               if (k = k')  
643                                  then (e, ty)                                  then (e, ty)
644                                  else let                                  else let
645                                    val ty' = Ty.T_Kernel(Ty.DiffConst k')                                    val ty' = Ty.T_Kernel(Ty.DiffConst k')
646                                    in                                    in
647                                      (AST.E_Coerce{srcTy = ty, dstTy = ty', e = e}, ty')                                      (AST.E_Coerce{srcTy = ty, dstTy = ty', e = e}, ty')
648                                    end                                    end
649                              end                  in
650                          | _ => err(cxt, [S "expected kernel, but found ", S(Var.kindToString kern')])                    case E.findVar (env, kern)
651                       of SOME h => (case Var.monoTypeOf h
652                             of ty as Ty.T_Kernel(Ty.DiffConst k) =>
653                                  mkExp (AST.E_Var(useVar(cxt, h)), k, ty)
654                              | _ => err(cxt, [
655                                    S "expected kernel, but found ", S(Var.kindToString h)
656                                  ])
657                        (* end case *))                        (* end case *))
658                        | NONE => (case E.findKernel (env, kern)
659                             of SOME h => let
660                                  val k = Kernel.continuity h
661                                  in
662                                    mkExp (AST.E_Kernel h, k, Ty.T_Kernel(Ty.DiffConst k))
663                                  end
664                    | NONE => err(cxt, [S "unknown kernel ", A kern])                    | NONE => err(cxt, [S "unknown kernel ", A kern])
665                  (* end case *))                  (* end case *))
666                      (* end case *)
667                    end
668              | PT.E_Lit lit => checkLit lit              | PT.E_Lit lit => checkLit lit
669              | PT.E_Id d => let              | PT.E_Id d => let
670                  val (tyArgs, Ty.T_Fun(_, rngTy)) =                  val (tyArgs, Ty.T_Fun(_, rngTy)) =

Legend:
Removed from v.4042  
changed lines
  Added in v.4043

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0