src/HOL/MicroJava/JVM/JVMState.thy
author nipkow
Thu, 11 Nov 1999 12:23:45 +0100
changeset 8011 d14c4e9e9c8e
child 8034 6fc37b5c5e98
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/JVM/JVMState.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
State of the JVM
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
JVMState = Store +
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
(** frame stack **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    13
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
types
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
 opstack 	 = "val list"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
 locvars 	 = "val list" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
 p_count 	 = nat
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
 frame = "opstack \\<times>			
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
	  locvars \\<times>		
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
	  cname \\<times>			
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
	  sig \\<times>			
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
	  p_count"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
	(* operand stack *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
	(* local variables *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
	(* name of def. class defined *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
	(* meth name+param_desc *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
	(* program counter within frame *)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
(** exceptions **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
 raise_xcpt :: "bool \\<Rightarrow> xcpt \\<Rightarrow> xcpt option"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
"raise_xcpt c x \\<equiv> (if c then Some x else None)"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
 heap_update :: "[xcpt option,aheap,aheap] \\<Rightarrow> aheap"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
"heap_update xp hp' hp \\<equiv> if xp=None then hp' else hp"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
 stk_update :: "[xcpt option,opstack,opstack] \\<Rightarrow> opstack"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
"stk_update xp stk' stk \\<equiv> if xp=None then stk' else stk"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
 xcpt_update :: "[xcpt option,'a,'a] \\<Rightarrow> 'a"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
"xcpt_update xp y' y \\<equiv> if xp=None then y' else y"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
(** runtime state **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
types
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
 jvm_state = "xcpt option \\<times>		
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
	      aheap \\<times>				
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
	      frame list"	
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    55
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    56
(** dynamic method lookup **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    57
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    58
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    59
 dyn_class	:: "'code prog \\<times> sig \\<times> cname \\<Rightarrow> cname"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
"dyn_class \\<equiv> \\<lambda>(G,sig,C). fst(the(cmethd(G,C) sig))"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
end