about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <andersrb@gmail.com>2011-06-04 16:59:57 -0400
committerBrian Anderson <andersrb@gmail.com>2011-06-04 17:10:08 -0400
commitac83e34dc6c2bb3b5f181f923560d810dcdb558c (patch)
treef8140ecbf8629e305c52ead6d6886d0dd7a65790
parentdd588519bdd7950c6a4c398f8fffd00fbd2238d3 (diff)
rustc: Report unimplemented #fmt features with spans
-rw-r--r--src/comp/front/extfmt.rs48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/comp/front/extfmt.rs b/src/comp/front/extfmt.rs
index e15bd3becf5..ed9636bd163 100644
--- a/src/comp/front/extfmt.rs
+++ b/src/comp/front/extfmt.rs
@@ -149,7 +149,8 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
 
     // Produces an AST expression that represents a RT::conv record,
     // which tells the RT::conv* functions how to perform the conversion
-    fn make_rt_conv_expr(parser p, common::span sp, &conv cnv) -> @ast::expr {
+    fn make_rt_conv_expr(&ext_ctxt cx,
+                         parser p, common::span sp, &conv cnv) -> @ast::expr {
 
         fn make_flags(parser p, common::span sp, vec[flag] flags)
                 -> @ast::expr {
@@ -186,7 +187,8 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
             ret make_vec_expr(p, sp, flagexprs);
         }
 
-        fn make_count(parser p, common::span sp, &count cnt) -> @ast::expr {
+        fn make_count(&ext_ctxt cx,
+                      parser p, common::span sp, &count cnt) -> @ast::expr {
             alt (cnt) {
                 case (count_implied) {
                     ret make_rt_path_expr(p, sp, "count_implied");
@@ -198,8 +200,7 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
                     ret make_call(p, sp, count_is_path, count_is_args);
                 }
                 case (_) {
-                    log_err "not implemented";
-                    fail;
+                    cx.span_unimpl(sp, "unimplemented #fmt conversion");
                 }
             }
         }
@@ -244,8 +245,8 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
         }
 
         auto rt_conv_flags = make_flags(p, sp, cnv.flags);
-        auto rt_conv_width = make_count(p, sp, cnv.width);
-        auto rt_conv_precision = make_count(p, sp, cnv.precision);
+        auto rt_conv_width = make_count(cx, p, sp, cnv.width);
+        auto rt_conv_precision = make_count(cx, p, sp, cnv.precision);
         auto rt_conv_ty = make_ty(p, sp, cnv.ty);
         ret make_conv_rec(p,
                           sp,
@@ -255,11 +256,11 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
                           rt_conv_ty);
     }
 
-    fn make_conv_call(parser p, common::span sp, str conv_type,
+    fn make_conv_call(&ext_ctxt cx, parser p, common::span sp, str conv_type,
                       &conv cnv, @ast::expr arg) -> @ast::expr {
         auto fname = "conv_" + conv_type;
         auto path = make_path_vec(fname);
-        auto cnv_expr = make_rt_conv_expr(p, sp, cnv);
+        auto cnv_expr = make_rt_conv_expr(cx, p, sp, cnv);
         auto args = [cnv_expr, arg];
         ret make_call(p, arg.span, path, args);
     }
@@ -292,8 +293,7 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
             case (option::none) {
             }
             case (_) {
-                log_err unsupported;
-                fail;
+                cx.span_unimpl(sp, unsupported);
             }
         }
 
@@ -316,8 +316,7 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
                 case (flag_left_zero_pad) {
                 }
                 case (_) {
-                    log_err unsupported;
-                    fail;
+                    cx.span_unimpl(sp, unsupported);
                 }
             }
         }
@@ -328,8 +327,7 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
             case (count_is(_)) {
             }
             case (_) {
-                log_err unsupported;
-                fail;
+                cx.span_unimpl(sp, unsupported);
             }
         }
 
@@ -339,43 +337,41 @@ fn pieces_to_expr(&ext_ctxt cx, parser p, common::span sp,
             case (count_is(_)) {
             }
             case (_) {
-                log_err unsupported;
-                fail;
+                cx.span_unimpl(sp, unsupported);
             }
         }
 
         alt (cnv.ty) {
             case (ty_str) {
-                ret make_conv_call(p, arg.span, "str", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "str", cnv, arg);
             }
             case (ty_int(?sign)) {
                 alt (sign) {
                     case (signed) {
-                        ret make_conv_call(p, arg.span, "int", cnv, arg);
+                        ret make_conv_call(cx, p, arg.span, "int", cnv, arg);
                     }
                     case (unsigned) {
-                        ret make_conv_call(p, arg.span, "uint", cnv, arg);
+                        ret make_conv_call(cx, p, arg.span, "uint", cnv, arg);
                     }
                 }
             }
             case (ty_bool) {
-                ret make_conv_call(p, arg.span, "bool", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "bool", cnv, arg);
             }
             case (ty_char) {
-                ret make_conv_call(p, arg.span, "char", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "char", cnv, arg);
             }
             case (ty_hex(_)) {
-                ret make_conv_call(p, arg.span, "uint", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "uint", cnv, arg);
             }
             case (ty_bits) {
-                ret make_conv_call(p, arg.span, "uint", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "uint", cnv, arg);
             }
             case (ty_octal) {
-                ret make_conv_call(p, arg.span, "uint", cnv, arg);
+                ret make_conv_call(cx, p, arg.span, "uint", cnv, arg);
             }
             case (_) {
-                log_err unsupported;
-                fail;
+                cx.span_unimpl(sp, unsupported);
             }
         }
     }