# HG changeset patch # User kleing # Date 1035454051 -7200 # Node ID 5fad004bd9dfa943f65ed5325833f1849faec440 # Parent b1915d3e571d4ce81785a4c90f664b08f23aad88 cleanup, beautified diff -r b1915d3e571d -r 5fad004bd9df src/HOL/MicroJava/JVM/JVMDefensive.thy --- a/src/HOL/MicroJava/JVM/JVMDefensive.thy Thu Oct 24 12:06:43 2002 +0200 +++ b/src/HOL/MicroJava/JVM/JVMDefensive.thy Thu Oct 24 12:07:31 2002 +0200 @@ -36,21 +36,21 @@ consts check_instr :: "[instr, jvm_prog, aheap, opstack, locvars, - cname, sig, p_count, p_count, frame list] \ bool" + cname, sig, p_count, frame list] \ bool" primrec - "check_instr (Load idx) G hp stk vars C sig pc maxpc frs = + "check_instr (Load idx) G hp stk vars C sig pc frs = (idx < length vars)" - "check_instr (Store idx) G hp stk vars Cl sig pc maxpc frs = + "check_instr (Store idx) G hp stk vars Cl sig pc frs = (0 < length stk \ idx < length vars)" - "check_instr (LitPush v) G hp stk vars Cl sig pc maxpc frs = + "check_instr (LitPush v) G hp stk vars Cl sig pc frs = (\isAddr v)" - "check_instr (New C) G hp stk vars Cl sig pc maxpc frs = + "check_instr (New C) G hp stk vars Cl sig pc frs = is_class G C" - "check_instr (Getfield F C) G hp stk vars Cl sig pc maxpc frs = + "check_instr (Getfield F C) G hp stk vars Cl sig pc frs = (0 < length stk \ is_class G C \ field (G,C) F \ None \ (let (C', T) = the (field (G,C) F); ref = hd stk in C' = C \ isRef ref \ (ref \ Null \ @@ -58,7 +58,7 @@ (let (D,vs) = the (hp (the_Addr ref)) in G \ D \C C \ vs (F,C) \ None \ G,hp \ the (vs (F,C)) ::\ T))))" - "check_instr (Putfield F C) G hp stk vars Cl sig pc maxpc frs = + "check_instr (Putfield F C) G hp stk vars Cl sig pc frs = (1 < length stk \ is_class G C \ field (G,C) F \ None \ (let (C', T) = the (field (G,C) F); v = hd stk; ref = hd (tl stk) in C' = C \ isRef ref \ (ref \ Null \ @@ -66,11 +66,10 @@ (let (D,vs) = the (hp (the_Addr ref)) in G \ D \C C \ G,hp \ v ::\ T))))" - "check_instr (Checkcast C) G hp stk vars Cl sig pc maxpc frs = + "check_instr (Checkcast C) G hp stk vars Cl sig pc frs = (0 < length stk \ is_class G C \ isRef (hd stk))" - - "check_instr (Invoke C mn ps) G hp stk vars Cl sig pc maxpc frs = + "check_instr (Invoke C mn ps) G hp stk vars Cl sig pc frs = (length ps < length stk \ (let n = length ps; v = stk!n in isRef v \ (v \ Null \ @@ -78,37 +77,37 @@ method (G,cname_of hp v) (mn,ps) \ None \ list_all2 (\v T. G,hp \ v ::\ T) (rev (take n stk)) ps)))" - "check_instr Return G hp stk0 vars Cl sig0 pc maxpc frs = + "check_instr Return G hp stk0 vars Cl sig0 pc frs = (0 < length stk0 \ (0 < length frs \ method (G,Cl) sig0 \ None \ (let v = hd stk0; (C, rT, body) = the (method (G,Cl) sig0) in Cl = C \ G,hp \ v ::\ rT)))" - "check_instr Pop G hp stk vars Cl sig pc maxpc frs = + "check_instr Pop G hp stk vars Cl sig pc frs = (0 < length stk)" - "check_instr Dup G hp stk vars Cl sig pc maxpc frs = + "check_instr Dup G hp stk vars Cl sig pc frs = (0 < length stk)" - "check_instr Dup_x1 G hp stk vars Cl sig pc maxpc frs = + "check_instr Dup_x1 G hp stk vars Cl sig pc frs = (1 < length stk)" - "check_instr Dup_x2 G hp stk vars Cl sig pc maxpc frs = + "check_instr Dup_x2 G hp stk vars Cl sig pc frs = (2 < length stk)" - "check_instr Swap G hp stk vars Cl sig pc maxpc frs = + "check_instr Swap G hp stk vars Cl sig pc frs = (1 < length stk)" - "check_instr IAdd G hp stk vars Cl sig pc maxpc frs = + "check_instr IAdd G hp stk vars Cl sig pc frs = (1 < length stk \ isIntg (hd stk) \ isIntg (hd (tl stk)))" - "check_instr (Ifcmpeq b) G hp stk vars Cl sig pc maxpc frs = - (1 < length stk \ 0 \ int pc+b \ nat(int pc+b) < maxpc)" + "check_instr (Ifcmpeq b) G hp stk vars Cl sig pc frs = + (1 < length stk \ 0 \ int pc+b)" - "check_instr (Goto b) G hp stk vars Cl sig pc maxpc frs = - (0 \ int pc+b \ nat(int pc+b) < maxpc)" + "check_instr (Goto b) G hp stk vars Cl sig pc frs = + (0 \ int pc+b)" - "check_instr Throw G hp stk vars Cl sig pc maxpc frs = + "check_instr Throw G hp stk vars Cl sig pc frs = (0 < length stk \ isRef (hd stk))" constdefs @@ -116,7 +115,8 @@ "check G s \ let (xcpt, hp, frs) = s in (case frs of [] \ True | (stk,loc,C,sig,pc)#frs' \ (let ins = fifth (the (method (G,C) sig)); i = ins!pc in - check_instr i G hp stk loc C sig pc (length ins) frs'))" + pc < size ins \ + check_instr i G hp stk loc C sig pc frs'))" exec_d :: "jvm_prog \ jvm_state type_error \ jvm_state option type_error" diff -r b1915d3e571d -r 5fad004bd9df src/HOL/MicroJava/JVM/JVMExecInstr.thy --- a/src/HOL/MicroJava/JVM/JVMExecInstr.thy Thu Oct 24 12:06:43 2002 +0200 +++ b/src/HOL/MicroJava/JVM/JVMExecInstr.thy Thu Oct 24 12:07:31 2002 +0200 @@ -28,19 +28,17 @@ (let (oref,xp') = new_Addr hp; fs = init_vars (fields(G,C)); hp' = if xp'=None then hp(oref \ (C,fs)) else hp; - stk' = if xp'=None then (Addr oref)#stk else stk; pc' = if xp'=None then pc+1 else pc in - (xp', hp', (stk', vars, Cl, sig, pc')#frs))" + (xp', hp', (Addr oref#stk, vars, Cl, sig, pc')#frs))" "exec_instr (Getfield F C) G hp stk vars Cl sig pc frs = (let oref = hd stk; xp' = raise_system_xcpt (oref=Null) NullPointer; (oc,fs) = the(hp(the_Addr oref)); - stk' = if xp'=None then the(fs(F,C))#(tl stk) else tl stk; pc' = if xp'=None then pc+1 else pc in - (xp', hp, (stk', vars, Cl, sig, pc')#frs))" + (xp', hp, (the(fs(F,C))#(tl stk), vars, Cl, sig, pc')#frs))" "exec_instr (Putfield F C) G hp stk vars Cl sig pc frs = (let (fval,oref)= (hd stk, hd(tl stk));