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

SCM Repository

[diderot] Diff of /trunk/src/compiler/typechecker/typechecker.sml
ViewVC logotype

Diff of /trunk/src/compiler/typechecker/typechecker.sml

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

revision 370, Sat Oct 2 17:19:14 2010 UTC revision 381, Tue Oct 5 21:42:17 2010 UTC
# Line 204  Line 204 
204                  in                  in
205                    case Basis.findOp rator                    case Basis.findOp rator
206                     of [rator] => let                     of [rator] => let
207                          val (tyArgs, Ty.T_Fun([domTy], rngTy)) = Util.instantiate(Var.typeOf rator)                          val (tyArgs, Ty.T_Fun([domTy], rngTy)) = U.instantiate(Var.typeOf rator)
208                          in                          in
209                            if U.matchType(domTy, ty)                            if U.matchType(domTy, ty)
210                              then (AST.E_Apply(rator, tyArgs, [e'], rngTy), rngTy)                              then (AST.E_Apply(rator, tyArgs, [e'], rngTy), rngTy)
# Line 217  Line 217 
217                      | ovldList => resolveOverload (cxt, rator, [ty], [e'], ovldList)                      | ovldList => resolveOverload (cxt, rator, [ty], [e'], ovldList)
218                    (* end case *)                    (* end case *)
219                  end                  end
220                | PT.E_Slice(e, indices) => let
221                    val (e', ty) = checkExpr (env, cxt, e)
222                    fun checkIndex NONE = NONE
223                      | checkIndex (SOME e) = let
224                          val (e', ty) = checkExpr (env, cxt, e)
225                          in
226                            if U.matchType(ty, Ty.T_Int)
227                              then (SOME e')
228                              else err (cxt, [
229                                  S "type error in index expression\n",
230                                  S "  expected int, but found: ", TY ty, S "\n"
231                                ])
232                          end
233                    val indices' = List.map checkIndex indices
234                    val order = List.length indices'
235                    in
236                      if U.matchType(ty, TU.mkTensorTy order)
237                        then ()
238                        else err (cxt, [
239                            S "type error in slice operation\n",
240                            S "  expected:  ", S(Int.toString order), S "-order tensor\n",
241                            S "  but found: ", TY ty, S "\n"
242                          ]);
243    (* need to determine the new tensor type by copying dimensions that have ":"
244     * indices and removing dimensions that have integer indices.
245     *)
246    (* FIXME *)raise Fail "unimplemented"
247                    end
248              | PT.E_Tuple args => let              | PT.E_Tuple args => let
249                  val (args, tys) = checkExprList (env, cxt, args)                  val (args, tys) = checkExprList (env, cxt, args)
250                  in                  in

Legend:
Removed from v.370  
changed lines
  Added in v.381

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