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-stmt.sml
ViewVC logotype

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

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

revision 3428, Fri Nov 13 17:47:12 2015 UTC revision 3431, Sat Nov 14 14:03:58 2015 UTC
# Line 255  Line 255 
255                (* note that scope has already been checked in chkCtlFlow *)                (* note that scope has already been checked in chkCtlFlow *)
256                  val stm = checkStrandCreate (env, cxt, strand, args)                  val stm = checkStrandCreate (env, cxt, strand, args)
257                  in                  in
258                    Env.recordProp (env, StrandUtil.NewStrands);                    Env.recordProp (env, Properties.NewStrands);
259                    (stm, env)                    (stm, env)
260                  end                  end
261              | PT.S_Stabilize => (* note that scope has already been checked in chkCtlFlow *)              | PT.S_Stabilize => (* note that scope has already been checked in chkCtlFlow *)
262                  (AST.S_Stabilize, env)                  (AST.S_Stabilize, env)
263              | PT.S_Die => (              | PT.S_Die => (
264                (* note that scope has already been checked in chkCtlFlow *)                (* note that scope has already been checked in chkCtlFlow *)
265                  Env.recordProp (env, StrandUtil.StrandsMayDie);                  Env.recordProp (env, Properties.StrandsMayDie);
266                  (AST.S_Die, env))                  (AST.S_Die, env))
267              | PT.S_Continue => (* note that scope has already been checked in chkCtlFlow *)              | PT.S_Continue => (* note that scope has already been checked in chkCtlFlow *)
268                  (AST.S_Continue, env)                  (AST.S_Continue, env)
# Line 308  Line 308 
308                               of (Ty.T_Field _) => illegalAssign "field-valued variable"                               of (Ty.T_Field _) => illegalAssign "field-valued variable"
309                                | (Ty.T_Image _) => illegalAssign "image-valued variable"                                | (Ty.T_Image _) => illegalAssign "image-valued variable"
310                                | (Ty.T_Kernel _) => illegalAssign "kernel-valued variable"                                | (Ty.T_Kernel _) => illegalAssign "kernel-valued variable"
311                                | ty => let                                | ty => (case rator
312                                    val x' = useVar((#1 cxt, span), x')                                     of NONE => let
313                                  (* check for promotion *)                                  (* check for promotion *)
314                                    val (e', ty') = (case Util.coerceType(ty, eTy)                                    val (e', ty') = (case Util.coerceType(ty, eTy)
315                                           of SOME e' => (e', ty)                                           of SOME e' => (e', ty)
# Line 323  Line 323 
323                                                eTy)                                                eTy)
324                                          (* end case *))                                          (* end case *))
325                                    in                                    in
326                                      case rator                                            (AST.S_Assign(useVar((#1 cxt, span), x'), e'), env)
327                                       of NONE => (AST.S_Assign(x', e'), env)                                          end
328                                        | SOME rator => let                                        | SOME rator => let
329                                            val x' = useVar((#1 cxt, span), x')
330                                            val e1' = AST.E_Var x'                                            val e1' = AST.E_Var x'
331                                            val (e2', ty2) = eTy
332                                            val Env.PrimFun ovldList = Env.findFunc (env, rator)                                            val Env.PrimFun ovldList = Env.findFunc (env, rator)
333    (* NOTE: is there a potential problem with something like: i += r (where i is int and r is real)?
334     * It is okay to promote the rhs type, but not the lhs!
335     *)
336                                            val (rhs, _) = CheckExpr.resolveOverload (                                            val (rhs, _) = CheckExpr.resolveOverload (
337                                                  cxt, rator, [ty, ty'], [e1', e'], ovldList)                                                cxt, rator, [ty, ty2], [e1', e2'], ovldList)
338                                            in                                            in
339                                              (AST.S_Assign(x', rhs), env)                                              (AST.S_Assign(x', rhs), env)
340                                            end                                            end
341                                      (* end case *)                                    (* end case *))
                                   end  
342                              (* end case *))                              (* end case *))
343                      (* check that assignment to global variables is allowed in the current scope *)                      (* check that assignment to global variables is allowed in the current scope *)
344                        fun chkGlobalAssign () = (case E.currentScope env                        fun chkGlobalAssign () = (case E.currentScope env

Legend:
Removed from v.3428  
changed lines
  Added in v.3431

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