@@ -120,15 +120,6 @@ let trans_crate
120
120
| Some (Node num ) -> num_llid num
121
121
in
122
122
123
- (*
124
- * Returns a bogus value for use in stub code that hasn't been implemented
125
- * yet.
126
- *
127
- * TODO: On some joyous day, remove me.
128
- *)
129
- let bogus = Llvm. const_null (Llvm. i32_type llctx) in
130
- let bogus_ptr = Llvm. const_null (Llvm. pointer_type (Llvm. i32_type llctx)) in
131
-
132
123
let llnilty = Llvm. array_type (Llvm. i1_type llctx) 0 in
133
124
let llnil = Llvm. const_array (Llvm. i1_type llctx) [| |] in
134
125
@@ -338,7 +329,9 @@ let trans_crate
338
329
word_ty
339
330
340
331
| Ast. TY_tag _ | Ast. TY_iso _ | Ast. TY_idx _
341
- | Ast. TY_obj _ | Ast. TY_type -> (opaque() ) (* TODO *)
332
+ | Ast. TY_obj _ | Ast. TY_type ->
333
+ raise (Not_implemented
334
+ (" trans_ty_full " ^ (Ast. sprintf_ty() ty)))
342
335
343
336
| Ast. TY_param _ | Ast. TY_named _ ->
344
337
bug () " unresolved type in lltrans"
@@ -543,8 +536,10 @@ let trans_crate
543
536
let (dbg_llscopes:(node_id, Llvm.llvalue) Hashtbl. t ) = Hashtbl. create 0 in
544
537
let declare_mod_item
545
538
(name :Ast.ident )
546
- { node = { Ast. decl_item = ( item :Ast. mod_item' ) } ; id = id }
539
+ mod_item
547
540
: unit =
541
+ let { node = { Ast. decl_item = (item:Ast.mod_item' ) }; id = id } =
542
+ mod_item in
548
543
let full_name = Semant. item_str sem_cx id in
549
544
let (filename, line_num) =
550
545
match Session. get_span sess id with
@@ -564,7 +559,16 @@ let trans_crate
564
559
Hashtbl. add llitems id llfn;
565
560
Hashtbl. add dbg_llscopes id meta
566
561
567
- | _ -> () (* TODO *)
562
+ | Ast. MOD_ITEM_type _ ->
563
+ () (* Types get translated with their terms. *)
564
+
565
+ | Ast. MOD_ITEM_mod _ ->
566
+ () (* Modules simply contain other items that are translated
567
+ on their own. *)
568
+
569
+ | _ -> raise (Not_implemented
570
+ (" declare_mod_item " ^
571
+ (Ast. sprintf_mod_item() (name,mod_item))))
568
572
in
569
573
570
574
let trans_fn
@@ -711,9 +715,12 @@ let trans_crate
711
715
match referent with
712
716
Semant. DEFN_slot _ -> Hashtbl. find slot_to_llvalue id
713
717
| Semant. DEFN_item _ -> Hashtbl. find llitems id
714
- | _ -> bogus_ptr (* TODO *)
718
+ | _ -> raise
719
+ (Not_implemented
720
+ (" referent of " ^ (Ast. sprintf_lval() lval)))
715
721
end
716
- | Ast. LVAL_ext _ -> bogus_ptr (* TODO *)
722
+ | Ast. LVAL_ext _ -> raise
723
+ (Not_implemented (" trans_lval " ^ (Ast. sprintf_lval() lval)))
717
724
in
718
725
719
726
let trans_atom (atom :Ast.atom ) : Llvm.llvalue =
@@ -754,10 +761,16 @@ let trans_crate
754
761
| Ast. BINOP_div -> Llvm. build_sdiv lllhs llrhs llid llbuilder
755
762
| Ast. BINOP_mod -> Llvm. build_srem lllhs llrhs llid llbuilder
756
763
757
- | _ -> bogus (* TODO *)
764
+ | _ -> raise
765
+ (Not_implemented
766
+ (" trans_binary_expr " ^
767
+ (Ast. sprintf_expr() (Ast. EXPR_binary (op,lhs,rhs)))))
758
768
in
759
769
760
- let trans_unary_expr _ = bogus in (* TODO *)
770
+ let trans_unary_expr e = raise
771
+ (Not_implemented (" trans_unary_expr " ^
772
+ (Ast. sprintf_expr() (Ast. EXPR_unary e))))
773
+ in
761
774
762
775
let trans_expr (expr :Ast.expr ) : Llvm.llvalue =
763
776
iflog (fun _ -> log sem_cx " trans_expr: %a" Ast. sprintf_expr expr);
@@ -915,7 +928,11 @@ let trans_crate
915
928
(Some d) [| s; len |];
916
929
trans_tail ()
917
930
918
- | _ -> trans_stmts block_id llbuilder tail terminate
931
+ | Ast. STMT_decl _ ->
932
+ trans_tail ()
933
+
934
+ | _ -> raise (Not_implemented
935
+ (" trans_stmts " ^ (Ast. sprintf_stmt() head)))
919
936
920
937
(*
921
938
* Translates an AST block to one or more LLVM basic blocks and returns
0 commit comments