Changeset 765
- Timestamp:
- Apr 20, 2011, 5:39:00 PM (9 years ago)
- Location:
- src/RTLabs
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/RTLabs/RTLabsMatitaPrinter.ml
r750 r765 1 2 let next_id = ref 0 3 let fresh () = let i = !next_id in next_id := i+1; i 1 4 2 5 let n_spaces n = String.make n ' ' … … 4 7 5 8 let print_global (x, size) = 6 Printf.sprintf "pair ?? (pair ?? (pair ?? %s [ ]) Any) %d" x size9 Printf.sprintf "pair ?? (pair ?? (pair ?? id_%s [Init_space %d ]) Any) it" x size 7 10 8 11 let print_globals n globs = … … 105 108 | RTLabs.Aindexed off -> Printf.sprintf "Aindexed (repr %d)" off 106 109 | RTLabs.Aindexed2 -> "Aindexed2" 107 | RTLabs.Aglobal (id, off) -> Printf.sprintf "Aglobal %s (repr %d)" id off108 | RTLabs.Abased (id, off) -> Printf.sprintf "Abased %s (repr %d)" id off110 | RTLabs.Aglobal (id, off) -> Printf.sprintf "Aglobal id_%s (repr %d)" id off 111 | RTLabs.Abased (id, off) -> Printf.sprintf "Abased id_%s (repr %d)" id off 109 112 | RTLabs.Ainstack off -> Printf.sprintf "Ainstack (repr %d)" off 110 113 … … 209 212 (Register.print rs) 210 213 (print_table tbl) 211 | RTLabs.St_return rs -> Printf.sprintf "make_St_return %s" (Register.print rs)214 | RTLabs.St_return rs -> "make_St_return" (* rs should always be the function's result register, anyway *) 212 215 213 216 let print_cost_labels n c = … … 246 249 "[\n" ^ Label.Map.fold f c "" 247 250 248 let print_internal_decl n f def m=251 let print_internal_decl n f def = 249 252 Printf.sprintf 250 253 "%sdefinition id_%s := ident_of_nat %d.\n%s%s\n\n%sdefinition pre_%s := mk_pre_internal_function\n%s(%s)\n%s(Some ? %s)\n%s%s\n%s%s\n%s%s\n%s%d\n%s%s\n%s%s\n%s%s." 251 254 (n_spaces n) 252 255 f 253 m256 (fresh ()) 254 257 (print_labels n def.RTLabs.f_graph) 255 258 (print_cost_labels n def.RTLabs.f_graph) … … 277 280 278 281 279 let print_external_decl n f def m=282 let print_external_decl n f def = 280 283 Printf.sprintf "%sdefinition id_%s := ident_of_nat %d.\n%sdefinition f_%s := External (mk_external_function id_%s (%s)).\n" 281 284 (n_spaces n) 282 285 f 283 m286 (fresh ()) 284 287 (n_spaces n) 285 288 f … … 288 291 289 292 290 let print_fun_decl n (f, def) m = match def with 291 | RTLabs.F_int def -> print_internal_decl n f def m 292 | RTLabs.F_ext def -> print_external_decl n f def m 293 294 let print_fun_decls n functs = 295 snd (List.fold_left (fun (i,s) f -> i+1, s ^ (print_fun_decl n f i) ^ "\n\n") (0,"") 296 functs) 293 let print_fun_decl n (f, def) = match def with 294 | RTLabs.F_int def -> print_internal_decl n f def 295 | RTLabs.F_ext def -> print_external_decl n f def 296 297 let print_fun_decls n = 298 List.fold_left (fun s f -> s ^ (print_fun_decl n f) ^ "\n\n") "" 297 299 298 300 let print_fun n functs = … … 317 319 (match main with Some f -> "id_" ^ f | None -> "ident_of_nat 0 (* None! *)") 318 320 321 let define_var_id (id,_) = 322 Printf.sprintf "definition id_%s := ident_of_nat %d.\n" id (fresh ()) 323 324 let define_var_ids = 325 List.fold_left (fun s v -> s ^ (define_var_id v)) "" 326 319 327 let print_program p = 320 Printf.sprintf "include \"RTLabs/import.ma\".\ninclude \"common/Animation.ma\".\n\n(*program:*)\n\n\n%s\n\ndefinition prog : res RTLabs_program :=\n%s\nOK ? (mk_program ??\n(%s)\n%s\n%s\n).\n" 328 Printf.sprintf "include \"RTLabs/import.ma\".\ninclude \"common/Animation.ma\".\n\n%s\n\n\n%s\n\ndefinition prog : res RTLabs_program :=\n%s\nOK ? (mk_program ??\n(%s)\n%s\n%s\n).\n" 329 (define_var_ids p.RTLabs.vars) 321 330 (print_fun_decls 2 p.RTLabs.functs) 322 331 (print_fun 2 p.RTLabs.functs) -
src/RTLabs/import.ma
r762 r765 121 121 let rec make_St_cond2 op src1 src2 ltrue lfalse ≝ λr:nat → res register.λf:nat → res label. do src1' ← r src1; do src2' ← r src2; do ltrue' ← f ltrue; do lfalse' ← f lfalse; OK ? (St_cond2 op src1' src2' ltrue' lfalse'). 122 122 let rec make_St_jumptable rs ls ≝ λr:nat → res register.λf:nat → res label. do rs' ← r rs; do ls' ← foldr ?? (λl,ls0. do ls ← ls0; do l' ← f l; OK ? (l'::ls)) (OK ? [ ]) ls; OK ? (St_jumptable rs' ls'). 123 let rec make_St_return src ≝ λr:nat → res register.λf:nat → res label. do src' ← r src; OK statement (St_return src').123 definition make_St_return ≝ λr:nat → res register.λf:nat → res label. OK statement St_return. 124 124 -
src/RTLabs/semantics.ma
r762 r765 37 37 state 38 38 | Returnstate : 39 ∀ rtv : val.39 ∀ rtv : option val. 40 40 ∀ dst : option register. 41 41 ∀ stk : list frame. … … 177 177 ] 178 178 179 | St_return src ⇒ 180 ! v ← reg_retrieve (locals f) src; 179 | St_return ⇒ 180 ! v ← match f_result (func f) with 181 [ None ⇒ ret ? (None ?) 182 | Some r ⇒ ! v ← reg_retrieve (locals f) r; ret ? (Some ? v) 183 ]; 181 184 ret ? 〈E0, Returnstate v (retdst f) fs (free m (sp f))〉 182 185 ] … … 190 193 ! evargs ← check_eventval_list params (sig_args (ef_sig fn)); 191 194 ! evres ← do_io (ef_id fn) evargs (match (sig_res (ef_sig fn)) with [ None ⇒ ASTint | Some t ⇒ t ]); (* XXX hack, should allow none *) 192 ret ? 〈Eextcall (ef_id fn) evargs (mk_eventval ? evres), Returnstate (mk_val ? evres) dst fs m〉 193 195 ret ? 〈Eextcall (ef_id fn) evargs (mk_eventval ? evres), Returnstate (Some ? (mk_val ? evres) (*FIXME should allow None *)) dst fs m〉 194 196 ] 195 197 | Returnstate v dst fs m ⇒ … … 197 199 [ nil ⇒ Error ? (* Already in final state *) 198 200 | cons f fs' ⇒ 199 ! locals ← match dst with [ None ⇒ OK ? (locals f) 200 | Some d ⇒ reg_store d v (locals f) ]; 201 ! locals ← match dst with 202 [ None ⇒ match v with [ None ⇒ OK ? (locals f) 203 | _ ⇒ Error ? ] 204 | Some d ⇒ match v with [ None ⇒ Error ? 205 | Some v' ⇒ reg_store d v' (locals f) ] ]; 201 206 ret ? 〈E0, State (mk_frame (func f) locals (next f) (sp f) (retdst f)) fs' m〉 202 207 ] … … 208 213 | Callstate _ _ _ _ _ ⇒ None ? 209 214 | Returnstate v _ fs _ ⇒ 210 match fs with [ nil ⇒ match v with [ Vint i ⇒ Some ? i | _⇒ None ? ] | cons _ _ ⇒ None ? ]215 match fs with [ nil ⇒ match v with [ Some v' ⇒ match v' with [ Vint i ⇒ Some ? i | _ ⇒ None ? ] | None ⇒ None ? ] | cons _ _ ⇒ None ? ] 211 216 ]. 212 217 -
src/RTLabs/syntax.ma
r764 r765 54 54 | St_cond2 : binary_operation → register → register → label → label → statement 55 55 | St_jumptable : register → list label → statement 56 | St_return : register →statement56 | St_return : statement 57 57 . 58 58 -
src/RTLabs/test/search.ma
r750 r765 132 132 (pair ?? search10 (make_St_cond2 (Ocmp Clt) 12 13 search9 search5)); 133 133 (pair ?? search1 (make_St_op1 Onegint 8 9 search0)); 134 (pair ?? search0 (make_St_return 8))134 (pair ?? search0 (make_St_return)) 135 135 ] 136 136 … … 233 233 (pair ?? main10 (make_St_const 11 (Ointconst (repr 1)) main9)); 234 234 (pair ?? main1 (make_St_op1 Ocast8unsigned 2 1 main0)); 235 (pair ?? main0 (make_St_return 2))235 (pair ?? main0 make_St_return) 236 236 ] 237 237
Note: See TracChangeset
for help on using the changeset viewer.