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 3990, Fri Jun 17 21:27:47 2016 UTC revision 3991, Fri Jun 17 21:28:31 2016 UTC
# Line 540  Line 540 
540                          end                          end
541                      | ((e', ty as Ty.T_Sequence _), [NONE]) => expectedTensor ty                      | ((e', ty as Ty.T_Sequence _), [NONE]) => expectedTensor ty
542                      | ((e', ty as Ty.T_Sequence _), _) => expectedTensor ty                      | ((e', ty as Ty.T_Sequence _), _) => expectedTensor ty
543                      | ((e', ty as Ty.T_Tensor shape), _) => let                      | ((e', ty as _), _) => let
544                        (* for tensor slicing/indexing, the indices must be constant expressions *)                        (* for tensor slicing/indexing, the indices must be constant expressions *)
545                          fun chkConstIndex NONE = NONE                          fun chkConstIndex NONE = NONE
546                            | chkConstIndex (SOME e) = (case chkIndex e                            | chkConstIndex (SOME e) = (case chkIndex e
# Line 553  Line 553 
553                                (* end case *))                                (* end case *))
554                          val indices' = List.map chkConstIndex indices                          val indices' = List.map chkConstIndex indices
555                          val order = List.length indices'                          val order = List.length indices'
556                          val expectedTy = TU.mkTensorTy order                          (* val expectedTy = TU.mkTensorTy order*)
557                            val expectedTy =( case ty
558                                of Ty.T_Field{diff, dim, shape=s as Ty.Shape(d2::dd2)}
559                                    => Ty.T_Field{diff=diff, dim=dim, shape=s}
560                                | Ty.T_Tensor shape => TU.mkTensorTy order
561                                | Ty.T_Field _ => raise Fail "unknow field type"
562                                |  _ => raise Fail "unknow type"
563                                (*end case*))
564                          val resultTy = TU.slice(expectedTy, List.map Option.isSome indices')                          val resultTy = TU.slice(expectedTy, List.map Option.isSome indices')
565                          in                          in
566                            if Unify.equalType(ty, expectedTy)                            if Unify.equalType(ty, expectedTy)
# Line 564  Line 571 
571                                  S "  but found: ", TY ty                                  S "  but found: ", TY ty
572                                ])                                ])
573                          end                          end
 (* TODO: support field slicing *)  
                     | ((_, ty), _) => expectedTensor ty  
574                    (* end case *)                    (* end case *)
575                  end                  end
576              | PT.E_Select(e, field) => (case stripMark(#2 cxt, e)              | PT.E_Select(e, field) => (case stripMark(#2 cxt, e)

Legend:
Removed from v.3990  
changed lines
  Added in v.3991

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