Up to index of Isabelle/HOL/jsr
theory Type = JBasis:(* Title: HOL/MicroJava/J/Type.thy ID: $Id: Type.html,v 1.1 2002/11/28 14:17:20 kleing Exp $ Author: David von Oheimb Copyright 1999 Technische Universitaet Muenchen *) header {* \isaheader{Java types} *} theory Type = JBasis: typedecl cnam -- "exceptions" datatype xcpt = NullPointer | ClassCast | OutOfMemory -- "class names" datatype cname = Object | Xcpt xcpt | Cname cnam typedecl vnam -- "variable or field name" typedecl mname -- "method name" -- "names for @{text This} pointer and local/field variables" datatype vname = This | VName vnam -- "primitive type, cf. 4.2" datatype prim_ty = Void -- "'result type' of void methods" | Boolean | Integer | RetA nat -- "bytecode return addresses" -- "reference type, cf. 4.3" datatype ref_ty = NullT -- "null type, cf. 4.1" | ClassT cname -- "class type" -- "any type, cf. 4.1" datatype ty = PrimT prim_ty -- "primitive type" | RefT ref_ty -- "reference type" syntax NT :: "ty" Class :: "cname => ty" RA :: "nat => ty" translations "NT" == "RefT NullT" "Class C" == "RefT (ClassT C)" "RA pc" == "PrimT (RetA pc)" text {* For object initialization in the JVM, we tag each location with the current init status. The tags use an extended type system for object initialization. We have either \begin{itemize} \item usual initialized types, or \item a class that is not yet initialized and has been created by a @{text New} instruction at a certain line number, or \item a partly initialized class (on which the next super class constructor has to be called). We store the name of the class the superclass constructor has to be called of. \end{itemize} *} datatype init_ty = Init ty | UnInit cname nat | PartInit cname end