src/HOL/MicroJava/JVM/JVMListExample.thy
author haftmann
Fri, 17 Jun 2005 16:12:49 +0200
changeset 16417 9bc16273c2d4
parent 13101 90b31354fe15
child 16644 701218c1301c
permissions -rw-r--r--
migrated theory headers to new format
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/JVM/JVMListExample.thy
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     2
    ID:         $Id$
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     3
    Author:     Stefan Berghofer
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     4
*)
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     5
12973
8040cce614e5 fixed missing label
kleing
parents: 12951
diff changeset
     6
header {* \isaheader{Example for generating executable code from JVM semantics}\label{sec:JVMListExample} *}
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     7
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13101
diff changeset
     8
theory JVMListExample imports SystemClasses JVMExec begin
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
     9
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    10
consts
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    11
  list_nam :: cnam
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    12
  test_nam :: cnam
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    13
  append_name :: mname
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    14
  makelist_name :: mname
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    15
  val_nam :: vnam
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    16
  next_nam :: vnam
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    17
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    18
constdefs
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    19
  list_name :: cname
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    20
  "list_name == Cname list_nam"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    21
  
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    22
  test_name :: cname
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    23
  "test_name == Cname test_nam"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    24
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    25
  val_name :: vname
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    26
  "val_name == VName val_nam"
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    27
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    28
  next_name :: vname
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    29
  "next_name == VName next_nam"
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    30
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    31
  append_ins :: bytecode
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    32
  "append_ins == 
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    33
       [Load 0,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    34
        Getfield next_name list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    35
        Dup,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    36
        LitPush Null,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    37
        Ifcmpeq 4,
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    38
        Load 1,       
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    39
        Invoke list_name append_name [Class list_name],
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    40
        Return,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    41
        Pop,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    42
        Load 0,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    43
        Load 1,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    44
        Putfield next_name list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    45
        LitPush Unit,
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    46
        Return]"
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    47
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    48
  list_class :: "jvm_method class"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    49
  "list_class ==
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    50
    (Object,
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    51
     [(val_name, PrimT Integer), (next_name, Class list_name)],
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    52
     [((append_name, [Class list_name]), PrimT Void,
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    53
        (3, 0, append_ins,[(1,2,8,Xcpt NullPointer)]))])"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    54
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    55
  make_list_ins :: bytecode
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    56
  "make_list_ins ==
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    57
       [New list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    58
        Dup,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    59
        Store 0,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    60
        LitPush (Intg 1),
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    61
        Putfield val_name list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    62
        New list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    63
        Dup,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    64
        Store 1,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    65
        LitPush (Intg 2),
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    66
        Putfield val_name list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    67
        New list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    68
        Dup,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    69
        Store 2,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    70
        LitPush (Intg 3),
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    71
        Putfield val_name list_name,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    72
        Load 0,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    73
        Load 1,
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    74
        Invoke list_name append_name [Class list_name],
13101
kleing
parents: 13091
diff changeset
    75
        Pop,
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    76
        Load 0,
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    77
        Load 2,
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    78
        Invoke list_name append_name [Class list_name],
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    79
        Return]"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    80
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    81
  test_class :: "jvm_method class"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    82
  "test_class ==
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    83
    (Object, [],
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    84
     [((makelist_name, []), PrimT Void, (3, 2, make_list_ins,[]))])"
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    85
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    86
  E :: jvm_prog
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    87
  "E == SystemClasses @ [(list_name, list_class), (test_name, test_class)]"
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    88
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    89
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    90
types_code
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    91
  cnam ("string")
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    92
  vnam ("string")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    93
  mname ("string")
12522
69971d68fe03 fixed JVMListExample
kleing
parents: 12518
diff changeset
    94
  loc_ ("int")
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    95
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    96
consts_code
12522
69971d68fe03 fixed JVMListExample
kleing
parents: 12518
diff changeset
    97
  "new_Addr" ("new'_addr {* %x. case x of None => True | Some y => False *}/ {* None *}/ {* Loc *}")
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    98
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
    99
  "arbitrary" ("(raise ERROR)")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   100
  "arbitrary" :: "val" ("{* Unit *}")
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   101
  "arbitrary" :: "cname" ("Object")
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   102
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   103
  "list_nam" ("\"list\"")
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   104
  "test_nam" ("\"test\"")
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   105
  "append_name" ("\"append\"")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   106
  "makelist_name" ("\"makelist\"")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   107
  "val_nam" ("\"val\"")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   108
  "next_nam" ("\"next\"")
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   109
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   110
ML {*
12522
69971d68fe03 fixed JVMListExample
kleing
parents: 12518
diff changeset
   111
fun new_addr p none loc hp =
69971d68fe03 fixed JVMListExample
kleing
parents: 12518
diff changeset
   112
  let fun nr i = if p (hp (loc i)) then (loc i, none) else nr (i+1);
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   113
  in nr 0 end;
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   114
*}
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   115
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   116
subsection {* Single step execution *}
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   117
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   118
generate_code 
13052
3bf41c474a88 canonical start state
kleing
parents: 12973
diff changeset
   119
  test = "exec (E, start_state E test_name makelist_name)"
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   120
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   121
ML {* test *}
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   122
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   123
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   124
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   125
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   126
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   127
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   128
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   129
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   130
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   131
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   132
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   133
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   134
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   135
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   136
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   137
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   138
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   139
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   140
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   141
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   142
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   143
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   144
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   145
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   146
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   147
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   148
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   149
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   150
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   151
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   152
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   153
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   154
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   155
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   156
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   157
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   158
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   159
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   160
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   161
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   162
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   163
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   164
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   165
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   166
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   167
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   168
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   169
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   170
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   171
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   172
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   173
ML {* exec (E, the it) *}
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
   174
ML {* exec (E, the it) *}
12442
0ecba8660de7 Example for code generator.
berghofe
parents:
diff changeset
   175
12973
8040cce614e5 fixed missing label
kleing
parents: 12951
diff changeset
   176
end