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