From 89466ffd745547ee8b9c75a12a998dd16ef3bf2a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 13 Oct 2011 12:25:57 -0700 Subject: Rename rustc::middle::unsafeck to fn_usage I'm going to add further checks unrelated to unsafe. Issue #1038 --- src/comp/middle/fn_usage.rs | 72 +++++++++++++++++++++++++++++++++++++++++++++ src/comp/middle/unsafeck.rs | 72 --------------------------------------------- 2 files changed, 72 insertions(+), 72 deletions(-) create mode 100644 src/comp/middle/fn_usage.rs delete mode 100644 src/comp/middle/unsafeck.rs (limited to 'src/comp/middle') diff --git a/src/comp/middle/fn_usage.rs b/src/comp/middle/fn_usage.rs new file mode 100644 index 00000000000..3e170f19d16 --- /dev/null +++ b/src/comp/middle/fn_usage.rs @@ -0,0 +1,72 @@ +import syntax::ast; +import syntax::visit; +import std::option::some; +import syntax::print::pprust::{expr_to_str, path_to_str}; + +export check_crate_fn_usage; + +type fn_usage_ctx = { + tcx: ty::ctxt, + unsafe_fn_legal: bool +}; + +fn fn_usage_view_item(_vi: @ast::view_item, + _ctx: fn_usage_ctx, + _v: visit::vt) { + // Ignore paths that appear in use, import, etc +} + +fn fn_usage_expr(expr: @ast::expr, + ctx: fn_usage_ctx, + v: visit::vt) { + alt expr.node { + ast::expr_path(path) { + if !ctx.unsafe_fn_legal { + alt ctx.tcx.def_map.find(expr.id) { + some(ast::def_fn(_, ast::unsafe_fn.)) | + some(ast::def_native_fn(_, ast::unsafe_fn.)) { + log_err ("expr=", expr_to_str(expr)); + ctx.tcx.sess.span_fatal( + expr.span, + "unsafe functions can only be called"); + } + + _ {} + } + } + } + + ast::expr_call(f, args) { + let f_ctx = {unsafe_fn_legal: true with ctx}; + visit::visit_expr(f, f_ctx, v); + + let args_ctx = {unsafe_fn_legal: false with ctx}; + visit::visit_exprs(args, args_ctx, v); + } + + _ { + let subctx = {unsafe_fn_legal: false with ctx}; + visit::visit_expr(expr, subctx, v); + } + } +} + +fn check_crate_fn_usage(tcx: ty::ctxt, crate: @ast::crate) { + let visit = + visit::mk_vt( + @{visit_expr: fn_usage_expr, + visit_view_item: fn_usage_view_item + with *visit::default_visitor()}); + let ctx = {tcx: tcx, unsafe_fn_legal: false}; + visit::visit_crate(*crate, ctx, visit); +} + + +// Local Variables: +// mode: rust +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: diff --git a/src/comp/middle/unsafeck.rs b/src/comp/middle/unsafeck.rs deleted file mode 100644 index 251258f11a8..00000000000 --- a/src/comp/middle/unsafeck.rs +++ /dev/null @@ -1,72 +0,0 @@ -import syntax::ast; -import syntax::visit; -import std::option::some; -import syntax::print::pprust::{expr_to_str, path_to_str}; - -export unsafeck_crate; - -type unsafe_ctx = { - tcx: ty::ctxt, - unsafe_fn_legal: bool -}; - -fn unsafeck_view_item(_vi: @ast::view_item, - _ctx: unsafe_ctx, - _v: visit::vt) { - // Ignore paths that appear in use, import, etc -} - -fn unsafeck_expr(expr: @ast::expr, - ctx: unsafe_ctx, - v: visit::vt) { - alt expr.node { - ast::expr_path(path) { - if !ctx.unsafe_fn_legal { - alt ctx.tcx.def_map.find(expr.id) { - some(ast::def_fn(_, ast::unsafe_fn.)) | - some(ast::def_native_fn(_, ast::unsafe_fn.)) { - log_err ("expr=", expr_to_str(expr)); - ctx.tcx.sess.span_fatal( - expr.span, - "unsafe functions can only be called"); - } - - _ {} - } - } - } - - ast::expr_call(f, args) { - let f_ctx = {unsafe_fn_legal: true with ctx}; - visit::visit_expr(f, f_ctx, v); - - let args_ctx = {unsafe_fn_legal: false with ctx}; - visit::visit_exprs(args, args_ctx, v); - } - - _ { - let subctx = {unsafe_fn_legal: false with ctx}; - visit::visit_expr(expr, subctx, v); - } - } -} - -fn unsafeck_crate(tcx: ty::ctxt, crate: @ast::crate) { - let visit = - visit::mk_vt( - @{visit_expr: unsafeck_expr, - visit_view_item: unsafeck_view_item - with *visit::default_visitor()}); - let ctx = {tcx: tcx, unsafe_fn_legal: false}; - visit::visit_crate(*crate, ctx, visit); -} - - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; -// End: -- cgit 1.4.1-3-g733a5