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

SCM Repository

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

Diff of /branches/vis12/src/compiler/typechecker/typechecker.sml

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

revision 2673, Fri Jul 18 19:59:27 2014 UTC revision 2674, Sat Jul 19 20:52:58 2014 UTC
# Line 73  Line 73 
73              bindings = AtomMap.insert(bindings, name, Error.location cxt),              bindings = AtomMap.insert(bindings, name, Error.location cxt),
74              env=Env.insertStrand(env, s)              env=Env.insertStrand(env, s)
75            }            }
76      fun insertFunc ({scope, bindings, env}, cxt, f, f') = {      fun insertFunc ({scope, bindings, env}, cxt, f, f') =  let
77              val loc = Error.location cxt
78              in
79                setLoc(f', loc);
80                {
81              scope=scope,              scope=scope,
82              bindings = AtomMap.insert(bindings, f, Error.location cxt),                bindings = AtomMap.insert(bindings, f, loc),
83              env=Env.insertFunc(env, f, Env.UserFun f')              env=Env.insertFunc(env, f, Env.UserFun f')
84            }            }
85              end
86      fun insertLocal ({scope, bindings, env}, cxt, x, x') = let      fun insertLocal ({scope, bindings, env}, cxt, x, x') = let
87            val loc = Error.location cxt            val loc = Error.location cxt
88            in            in
89              setLoc(x', loc);              setLoc(x', loc);
90              {              {
91                scope=scope,                scope=scope,
92                bindings = AtomMap.insert(bindings, x, Error.location cxt),                bindings = AtomMap.insert(bindings, x, loc),
93                env=Env.insertLocal(env, x, x')                env=Env.insertLocal(env, x, x')
94              }              }
95            end            end
# Line 504  Line 509 
509                  in                  in
510                    case stripMark e                    case stripMark e
511                     of PT.E_Var f => (case Env.findVar (#env env, f)                     of PT.E_Var f => (case Env.findVar (#env env, f)
512                           of SOME f' => checkFieldApp (AST.E_Var f', Var.monoTypeOf f')                           of SOME f' => (
513                                  markUsed (f', true);
514                                  checkFieldApp (AST.E_Var f', Var.monoTypeOf f'))
515                            | NONE => (case Env.findFunc (#env env, f)                            | NONE => (case Env.findFunc (#env env, f)
516                                 of Env.PrimFun[] => err(cxt, [S "unknown function ", A f])                                 of Env.PrimFun[] => err(cxt, [S "unknown function ", A f])
517                                  | Env.PrimFun[f'] =>                                  | Env.PrimFun[f'] =>
# Line 516  Line 523 
523                                        else checkFunApp f'                                        else checkFunApp f'
524                                  | Env.PrimFun ovldList =>                                  | Env.PrimFun ovldList =>
525                                      resolveOverload (cxt, f, tys, args, ovldList)                                      resolveOverload (cxt, f, tys, args, ovldList)
526                                  | Env.UserFun f' => checkFunApp f'                                  | Env.UserFun f' => (
527                                        markUsed (f', true);
528                                        checkFunApp f')
529                                (* end case *))                                (* end case *))
530                            (* end case *))                            (* end case *))
531                      | _ => checkFieldApp (checkExpr (env, cxt, e))                      | _ => checkFieldApp (checkExpr (env, cxt, e))
# Line 798  Line 807 
807                              (* check that x' is mutable *)                              (* check that x' is mutable *)
808                                case Var.kindOf x'                                case Var.kindOf x'
809                                 of Var.StrandStateVar => ()                                 of Var.StrandStateVar => ()
810                                  | Var.StrandOutputVar => ()                                  | Var.StrandOutputVar => markUsed (x', true)
811                                  | Var.LocalVar => ()                                  | Var.LocalVar => ()
812                                  | _ => err(cxt, [                                  | _ => err(cxt, [
813                                        S "assignment to immutable variable ", A x,                                        S "assignment to immutable variable ", A x,
# Line 819  Line 828 
828                              (* check that x' is mutable *)                              (* check that x' is mutable *)
829                                case Var.kindOf x'                                case Var.kindOf x'
830                                 of Var.StrandStateVar => ()                                 of Var.StrandStateVar => ()
831                                  | Var.StrandOutputVar => ()                                  | Var.StrandOutputVar => markUsed (x', true)
832                                  | Var.LocalVar => ()                                  | Var.LocalVar => ()
833                                  | _ => err(cxt, [                                  | _ => err(cxt, [
834                                        S "assignment to immutable variable ", A x,                                        S "assignment to immutable variable ", A x,

Legend:
Removed from v.2673  
changed lines
  Added in v.2674

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