OSDN Git Service

[ADD] I've added the signature for bindCheck.ml
authormzp <mzpppp@gmail.com>
Wed, 26 Nov 2008 14:58:21 +0000 (23:58 +0900)
committermzp <mzpppp@gmail.com>
Wed, 26 Nov 2008 14:58:21 +0000 (23:58 +0900)
src/base.ml
src/bindCheck.ml
src/bindCheck.mli [new file with mode: 0644]

index 76890cb..dea2c1f 100644 (file)
@@ -20,7 +20,7 @@ let sure f =
 let maybe f x = try Some (f x) with _ -> None
 let tee f x = try ignore @@ f x; x with _ -> x
 
-type ('a,'b) either = Val of 'a | Error of 'b
+type ('a,'b) either = Val of 'a | Err of 'b
 
 let string_of_list xs =
   Printf.sprintf "[%s]"
index 5812afa..257951a 100644 (file)
@@ -125,8 +125,29 @@ let unbound_stmt (stmt : stmt) env =
             meth  = List.fold_left (flip MSet.remove) env.meth ms;
             klass = CSet.remove {name with value=("",name.value)} env.klass}
 
-let unbound program =
-  if List.fold_right unbound_stmt program empty = empty then
-    Val true
-  else
-    Error false
+
+let trans (stmt : stmt) : Ast.stmt option =
+  match stmt with
+     `External _ | `ExternalClass _ ->
+       None
+    | #Ast.stmt as s ->
+       Some s
+
+
+let trans (program : stmt list)=
+  let program',env = 
+    List.fold_right (fun s (stmt,env) ->
+                      let env' =
+                        unbound_stmt s env in
+                      match trans s with
+                          Some s' ->
+                            ((s'::stmt),env')
+                        | None ->
+                            stmt,env')
+      program 
+      ([],empty) in
+    if env = empty then
+      Val program'
+    else
+      Err (Node.empty "")
+
diff --git a/src/bindCheck.mli b/src/bindCheck.mli
new file mode 100644 (file)
index 0000000..57da0a6
--- /dev/null
@@ -0,0 +1,7 @@
+type method_ = Ast.ident * Ast.ident list
+type stmt =
+    [ `ExternalClass of Ast.ident * Ast.name * Ast.attr list * method_ list
+    | `External of Ast.ident
+    | Ast.stmt]
+
+val trans : stmt list -> (Ast.stmt list, string Node.t) Base.either