src/HOL/MicroJava/JVM/Method.thy
author nipkow
Thu, 25 Nov 1999 12:01:28 +0100
changeset 8032 1eaae1a2f8ff
parent 8011 d14c4e9e9c8e
child 8034 6fc37b5c5e98
permissions -rw-r--r--
Minor mods.
nipkow@8011
     1
(*  Title:      HOL/MicroJava/JVM/Method.thy
nipkow@8011
     2
    ID:         $Id$
nipkow@8011
     3
    Author:     Cornelia Pusch
nipkow@8011
     4
    Copyright   1999 Technische Universitaet Muenchen
nipkow@8011
     5
nipkow@8011
     6
Method invocation
nipkow@8011
     7
*)
nipkow@8011
     8
nipkow@8011
     9
Method = JVMState +
nipkow@8011
    10
nipkow@8011
    11
(** method invocation and return instructions **)
nipkow@8011
    12
nipkow@8011
    13
datatype 
nipkow@8011
    14
 meth_inv = 
nipkow@8032
    15
   Invoke mname (ty list)      (** inv. instance meth of an object **)
nipkow@8011
    16
 
nipkow@8011
    17
consts
nipkow@8011
    18
 exec_mi :: "[meth_inv,(nat \\<times> 'c)prog,aheap,opstack,p_count] 
nipkow@8011
    19
		\\<Rightarrow> (xcpt option \\<times> frame list \\<times> opstack \\<times> p_count)" 
nipkow@8011
    20
primrec
nipkow@8032
    21
 "exec_mi (Invoke mn ps) G hp stk pc =
nipkow@8011
    22
	(let n		= length ps;
nipkow@8011
    23
	     argsoref	= take (n+1) stk;
nipkow@8011
    24
	     oref	= last argsoref;
nipkow@8011
    25
	     xp'	= raise_xcpt (oref=Null) NullPointer;
nipkow@8011
    26
	     dynT	= fst(hp \\<And> (the_Addr oref));
nipkow@8011
    27
	     (dc,mh,mxl,c)= the (cmethd (G,dynT) (mn,ps));
nipkow@8011
    28
	     frs'	= xcpt_update xp' [([],rev argsoref@replicate mxl arbitrary,dc,(mn,ps),0)] []
nipkow@8011
    29
	 in
nipkow@8011
    30
	 (xp' , frs' , drop (n+1) stk , pc+1))"
nipkow@8011
    31
nipkow@8011
    32
nipkow@8032
    33
datatype 
nipkow@8032
    34
 meth_ret = Return
nipkow@8032
    35
 
nipkow@8032
    36
consts
nipkow@8032
    37
 exec_mr :: "[meth_ret,opstack,frame list] \\<Rightarrow> frame list"
nipkow@8032
    38
primrec
nipkow@8032
    39
  "exec_mr Return stk0 frs =
nipkow@8032
    40
	 (let val = hd stk0; (stk,loc,cn,met,pc) = hd frs
nipkow@8011
    41
	  in
nipkow@8011
    42
	  (val#stk,loc,cn,met,pc)#tl frs)"
nipkow@8011
    43
nipkow@8011
    44
end