src/HOL/MicroJava/JVM/Method.thy
changeset 8011 d14c4e9e9c8e
child 8032 1eaae1a2f8ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/MicroJava/JVM/Method.thy	Thu Nov 11 12:23:45 1999 +0100
@@ -0,0 +1,41 @@
+(*  Title:      HOL/MicroJava/JVM/Method.thy
+    ID:         $Id$
+    Author:     Cornelia Pusch
+    Copyright   1999 Technische Universitaet Muenchen
+
+Method invocation
+*)
+
+Method = JVMState +
+
+(** method invocation and return instructions **)
+
+datatype 
+ meth_inv = 
+   Invokevirtual   mname (ty list)      (** inv. instance meth of an object **)
+ 
+consts
+ exec_mi :: "[meth_inv,(nat \\<times> 'c)prog,aheap,opstack,p_count] 
+		\\<Rightarrow> (xcpt option \\<times> frame list \\<times> opstack \\<times> p_count)" 
+primrec
+ "exec_mi (Invokevirtual mn ps) G hp stk pc =
+	(let n		= length ps;
+	     argsoref	= take (n+1) stk;
+	     oref	= last argsoref;
+	     xp'	= raise_xcpt (oref=Null) NullPointer;
+	     dynT	= fst(hp \\<And> (the_Addr oref));
+	     (dc,mh,mxl,c)= the (cmethd (G,dynT) (mn,ps));
+	     frs'	= xcpt_update xp' [([],rev argsoref@replicate mxl arbitrary,dc,(mn,ps),0)] []
+	 in
+	 (xp' , frs' , drop (n+1) stk , pc+1))"
+
+
+constdefs
+ exec_mr :: "[opstack,frame list] \\<Rightarrow> frame list"
+"exec_mr stk0 frs \\<equiv>
+	 (let val			= hd stk0;
+	      (stk,loc,cn,met,pc) = hd frs
+	  in
+	  (val#stk,loc,cn,met,pc)#tl frs)"
+
+end