anchor.diff:  open IronJS.CSharp.Parser
   open Antlr.Runtime
   open Antlr.Runtime.Tree
  +
  +//Errors
  +let private EmptyScopeChain = "Empty scope-chain"
  +let private NoHandlerForType = new Printf.StringFormat<string -> int -> unit>("No handler for %s (%i)")
   
   //Types
   type Type = 
  
positive.code: 
      (ES3Parser.FUNCTION, fun t s p -> 
        if t.ChildCount = 2 then
          let paramNames = "~closure" :: "this" :: [for c in (child t 0).Children -> (ct c).Text ]
          let body, scopes = p (child t 1) (addLocals (emptyScope :: s) paramNames)
          Function(paramNames, scopes.Head, Null, body), scopes.Tail
        else
          failwith "Not supporting named functions"
      );
  |]
  
  
negative.code:   | Null
    
  //Type Aliases
  type internal Scopes = Scope list
  type internal ParserFunc = CommonTree -> Scopes -> Node * Scopes
  type internal HandlerMap = Map<int, CommonTree -> Scopes -> ParserFunc -> Node * Scopes>
  
  //Constants
  let internal emptyScope = { 
    Locals = Map.empty;
    Closure = [];
  }
  
  let internal emptyLocal = {
    UsedWith = Set.empty;
    UsedAs = Type.None;
    ForcedType = None;
  }
  
  let internal globalScope = 
    [emptyScope]
  
  //Functions
  let internal ct (o:obj) =
    o :?> CommonTree
  
  let internal child o n =
    (ct (ct o).Children.[n])
  
  let internal typeToClr x =
    match x with
    | Type.Integer -> typeof<int64>
    | Type.Double -> typeof<double>
    | Type.String -> typeof<string>
    | _ -> typeof<obj>
  
  let internal addLocal (s:Scopes) (n:string) =
    match s with
    | [] -> failwith EmptyScopeChain
    | x::[] -> s
    | x::xs -> {x with Locals = (Map.add n emptyLocal x.Locals)} :: xs
  
  let internal addLocals (s:Scopes) (ns:string list) =
    match s with 
    | [] -> failwith EmptyScopeChain
    | x::[] -> s
    | x::xs ->
      let mutable locals = x.Locals
  