diff -r 21423597a80d -r b8a53e3a0ee2 src/HOL/MicroJava/Comp/TranslCompTp.thy --- a/src/HOL/MicroJava/Comp/TranslCompTp.thy Tue Sep 28 12:47:55 2010 +0200 +++ b/src/HOL/MicroJava/Comp/TranslCompTp.thy Tue Sep 28 12:47:55 2010 +0200 @@ -45,16 +45,6 @@ sttp_of :: "method_type \ state_type \ state_type" where "sttp_of == snd" -consts - compTpExpr :: "java_mb \ java_mb prog \ expr - \ state_type \ method_type \ state_type" - - compTpExprs :: "java_mb \ java_mb prog \ expr list - \ state_type \ method_type \ state_type" - - compTpStmt :: "java_mb \ java_mb prog \ stmt - \ state_type \ method_type \ state_type" - definition nochangeST :: "state_type \ method_type \ state_type" where "nochangeST sttp == ([Some sttp], sttp)" @@ -80,60 +70,45 @@ (* Expressions *) -primrec - +primrec compTpExpr :: "java_mb \ java_mb prog \ expr \ + state_type \ method_type \ state_type" + and compTpExprs :: "java_mb \ java_mb prog \ expr list \ + state_type \ method_type \ state_type" +where "compTpExpr jmb G (NewC c) = pushST [Class c]" - - "compTpExpr jmb G (Cast c e) = - (compTpExpr jmb G e) \ (replST 1 (Class c))" - - "compTpExpr jmb G (Lit val) = pushST [the (typeof (\v. None) val)]" - - "compTpExpr jmb G (BinOp bo e1 e2) = +| "compTpExpr jmb G (Cast c e) = (compTpExpr jmb G e) \ (replST 1 (Class c))" +| "compTpExpr jmb G (Lit val) = pushST [the (typeof (\v. None) val)]" +| "compTpExpr jmb G (BinOp bo e1 e2) = (compTpExpr jmb G e1) \ (compTpExpr jmb G e2) \ (case bo of Eq => popST 2 \ pushST [PrimT Boolean] \ popST 1 \ pushST [PrimT Boolean] | Add => replST 2 (PrimT Integer))" - - "compTpExpr jmb G (LAcc vn) = (\ (ST, LT). +| "compTpExpr jmb G (LAcc vn) = (\ (ST, LT). pushST [ok_val (LT ! (index jmb vn))] (ST, LT))" - - "compTpExpr jmb G (vn::=e) = +| "compTpExpr jmb G (vn::=e) = (compTpExpr jmb G e) \ dupST \ (popST 1)" - - - "compTpExpr jmb G ( {cn}e..fn ) = +| "compTpExpr jmb G ( {cn}e..fn ) = (compTpExpr jmb G e) \ replST 1 (snd (the (field (G,cn) fn)))" - - "compTpExpr jmb G (FAss cn e1 fn e2 ) = +| "compTpExpr jmb G (FAss cn e1 fn e2 ) = (compTpExpr jmb G e1) \ (compTpExpr jmb G e2) \ dup_x1ST \ (popST 2)" - - - "compTpExpr jmb G ({C}a..mn({fpTs}ps)) = +| "compTpExpr jmb G ({C}a..mn({fpTs}ps)) = (compTpExpr jmb G a) \ (compTpExprs jmb G ps) \ (replST ((length ps) + 1) (method_rT (the (method (G,C) (mn,fpTs)))))" - - -(* Expression lists *) - - "compTpExprs jmb G [] = comb_nil" - - "compTpExprs jmb G (e#es) = (compTpExpr jmb G e) \ (compTpExprs jmb G es)" +| "compTpExprs jmb G [] = comb_nil" +| "compTpExprs jmb G (e#es) = (compTpExpr jmb G e) \ (compTpExprs jmb G es)" (* Statements *) -primrec - "compTpStmt jmb G Skip = comb_nil" - - "compTpStmt jmb G (Expr e) = (compTpExpr jmb G e) \ popST 1" - - "compTpStmt jmb G (c1;; c2) = (compTpStmt jmb G c1) \ (compTpStmt jmb G c2)" - - "compTpStmt jmb G (If(e) c1 Else c2) = +primrec compTpStmt :: "java_mb \ java_mb prog \ stmt \ + state_type \ method_type \ state_type" +where + "compTpStmt jmb G Skip = comb_nil" +| "compTpStmt jmb G (Expr e) = (compTpExpr jmb G e) \ popST 1" +| "compTpStmt jmb G (c1;; c2) = (compTpStmt jmb G c1) \ (compTpStmt jmb G c2)" +| "compTpStmt jmb G (If(e) c1 Else c2) = (pushST [PrimT Boolean]) \ (compTpExpr jmb G e) \ popST 2 \ (compTpStmt jmb G c1) \ nochangeST \ (compTpStmt jmb G c2)" - - "compTpStmt jmb G (While(e) c) = +| "compTpStmt jmb G (While(e) c) = (pushST [PrimT Boolean]) \ (compTpExpr jmb G e) \ popST 2 \ (compTpStmt jmb G c) \ nochangeST" @@ -141,13 +116,11 @@ \ state_type \ method_type \ state_type" where "compTpInit jmb == (\ (vn,ty). (pushST [ty]) \ (storeST (index jmb vn) ty))" -consts - compTpInitLvars :: "[java_mb, (vname \ ty) list] - \ state_type \ method_type \ state_type" - -primrec +primrec compTpInitLvars :: "[java_mb, (vname \ ty) list] \ + state_type \ method_type \ state_type" +where "compTpInitLvars jmb [] = comb_nil" - "compTpInitLvars jmb (lv#lvars) = (compTpInit jmb lv) \ (compTpInitLvars jmb lvars)" +| "compTpInitLvars jmb (lv#lvars) = (compTpInit jmb lv) \ (compTpInitLvars jmb lvars)" definition start_ST :: "opstack_type" where "start_ST == []"