author | nipkow |
Fri, 26 Nov 1999 08:46:59 +0100 | |
changeset 8034 | 6fc37b5c5e98 |
parent 8011 | d14c4e9e9c8e |
child 10042 | 7164dc0d24d8 |
permissions | -rw-r--r-- |
nipkow@8011 | 1 |
(* Title: HOL/MicroJava/JVM/JVMState.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 |
State of the JVM |
nipkow@8011 | 7 |
*) |
nipkow@8011 | 8 |
|
nipkow@8011 | 9 |
JVMState = Store + |
nipkow@8011 | 10 |
|
nipkow@8011 | 11 |
|
nipkow@8011 | 12 |
(** frame stack **) |
nipkow@8011 | 13 |
|
nipkow@8011 | 14 |
types |
nipkow@8011 | 15 |
opstack = "val list" |
nipkow@8011 | 16 |
locvars = "val list" |
nipkow@8011 | 17 |
p_count = nat |
nipkow@8011 | 18 |
|
nipkow@8011 | 19 |
frame = "opstack \\<times> |
nipkow@8011 | 20 |
locvars \\<times> |
nipkow@8011 | 21 |
cname \\<times> |
nipkow@8011 | 22 |
sig \\<times> |
nipkow@8011 | 23 |
p_count" |
nipkow@8011 | 24 |
|
nipkow@8011 | 25 |
(* operand stack *) |
nipkow@8011 | 26 |
(* local variables *) |
nipkow@8011 | 27 |
(* name of def. class defined *) |
nipkow@8011 | 28 |
(* meth name+param_desc *) |
nipkow@8011 | 29 |
(* program counter within frame *) |
nipkow@8011 | 30 |
|
nipkow@8011 | 31 |
|
nipkow@8011 | 32 |
(** exceptions **) |
nipkow@8011 | 33 |
|
nipkow@8011 | 34 |
constdefs |
nipkow@8011 | 35 |
raise_xcpt :: "bool \\<Rightarrow> xcpt \\<Rightarrow> xcpt option" |
nipkow@8011 | 36 |
"raise_xcpt c x \\<equiv> (if c then Some x else None)" |
nipkow@8011 | 37 |
|
nipkow@8011 | 38 |
(** runtime state **) |
nipkow@8011 | 39 |
|
nipkow@8011 | 40 |
types |
nipkow@8034 | 41 |
jvm_state = "xcpt option \\<times> aheap \\<times> frame list" |
nipkow@8011 | 42 |
|
nipkow@8011 | 43 |
|
nipkow@8011 | 44 |
|
nipkow@8011 | 45 |
(** dynamic method lookup **) |
nipkow@8011 | 46 |
|
nipkow@8011 | 47 |
constdefs |
nipkow@8011 | 48 |
dyn_class :: "'code prog \\<times> sig \\<times> cname \\<Rightarrow> cname" |
nipkow@8034 | 49 |
"dyn_class \\<equiv> \\<lambda>(G,sig,C). fst(the(method(G,C) sig))" |
nipkow@8011 | 50 |
end |