diff options
| author | Michael Sullivan <sully@msully.net> | 2012-05-22 14:59:15 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2012-05-22 14:59:15 -0700 |
| commit | 15cef374b9a16a0f8b40665dbafdf725e9456ffd (patch) | |
| tree | 8d817652bb982c05294fb01ff8a80a1ab0689316 /src/rustc | |
| parent | 8d7f3bd1ca622e6ddc03f4592eb8a451fbf850ab (diff) | |
| download | rust-15cef374b9a16a0f8b40665dbafdf725e9456ffd.tar.gz rust-15cef374b9a16a0f8b40665dbafdf725e9456ffd.zip | |
Get rid of the >>> operator and make >> logical or arithmetic depending on the signedness. Closes #2417.
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/const_eval.rs | 7 | ||||
| -rw-r--r-- | src/rustc/middle/trans/base.rs | 17 | ||||
| -rw-r--r-- | src/rustc/middle/ty.rs | 5 | ||||
| -rw-r--r-- | src/rustc/middle/typeck/check.rs | 4 |
4 files changed, 17 insertions, 16 deletions
diff --git a/src/rustc/middle/const_eval.rs b/src/rustc/middle/const_eval.rs index ca066b127bc..99f058788b2 100644 --- a/src/rustc/middle/const_eval.rs +++ b/src/rustc/middle/const_eval.rs @@ -44,8 +44,7 @@ fn eval_const_expr(tcx: middle::ty::ctxt, e: @expr) -> const_val { mul { const_int(a * b) } div { const_int(a / b) } rem { const_int(a % b) } and | bitand { const_int(a & b) } or | bitor { const_int(a | b) } bitxor { const_int(a ^ b) } - lsl { const_int(a << b) } lsr { const_int(a >> b) } - asr { const_int(a >>> b) } + shl { const_int(a << b) } shr { const_int(a >> b) } eq { fromb(a == b) } lt { fromb(a < b) } le { fromb(a <= b) } ne { fromb(a != b) } ge { fromb(a >= b) } gt { fromb(a > b) } @@ -58,9 +57,7 @@ fn eval_const_expr(tcx: middle::ty::ctxt, e: @expr) -> const_val { mul { const_uint(a * b) } div { const_uint(a / b) } rem { const_uint(a % b) } and | bitand { const_uint(a & b) } or | bitor { const_uint(a | b) } bitxor { const_uint(a ^ b) } - lsl { const_int((a << b) as i64) } - lsr { const_int((a >> b) as i64) } - asr { const_int((a >>> b) as i64) } + shl { const_uint(a << b) } shr { const_uint(a >> b) } eq { fromb(a == b) } lt { fromb(a < b) } le { fromb(a <= b) } ne { fromb(a != b) } ge { fromb(a >= b) } gt { fromb(a > b) } diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index f6da35f902c..038354da683 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -1617,9 +1617,12 @@ fn trans_eager_binop(cx: block, op: ast::binop, lhs: ValueRef, ast::bitor { Or(cx, lhs, rhs) } ast::bitand { And(cx, lhs, rhs) } ast::bitxor { Xor(cx, lhs, rhs) } - ast::lsl { Shl(cx, lhs, rhs) } - ast::lsr { LShr(cx, lhs, rhs) } - ast::asr { AShr(cx, lhs, rhs) } + ast::shl { Shl(cx, lhs, rhs) } + ast::shr { + if ty::type_is_signed(intype) { + AShr(cx, lhs, rhs) + } else { LShr(cx, lhs, rhs) } + } _ { let cmpr = trans_compare(cx, op, lhs, lhs_t, rhs, rhs_t); cx = cmpr.bcx; @@ -4565,9 +4568,11 @@ fn trans_const_expr(cx: @crate_ctxt, e: @ast::expr) -> ValueRef { ast::bitxor { llvm::LLVMConstXor(te1, te2) } ast::bitand { llvm::LLVMConstAnd(te1, te2) } ast::bitor { llvm::LLVMConstOr(te1, te2) } - ast::lsl { llvm::LLVMConstShl(te1, te2) } - ast::lsr { llvm::LLVMConstLShr(te1, te2) } - ast::asr { llvm::LLVMConstAShr(te1, te2) } + ast::shl { llvm::LLVMConstShl(te1, te2) } + ast::shr { + if signed { llvm::LLVMConstAShr(te1, te2) } + else { llvm::LLVMConstLShr(te1, te2) } + } ast::eq | ast::lt | ast::le | diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs index 6d0362882fe..ea2154e4f78 100644 --- a/src/rustc/middle/ty.rs +++ b/src/rustc/middle/ty.rs @@ -2704,9 +2704,8 @@ fn is_binopable(_cx: ctxt, ty: t, op: ast::binop) -> bool { ast::bitxor { opcat_bit } ast::bitand { opcat_bit } ast::bitor { opcat_bit } - ast::lsl { opcat_shift } - ast::lsr { opcat_shift } - ast::asr { opcat_shift } + ast::shl { opcat_shift } + ast::shr { opcat_shift } ast::eq { opcat_eq } ast::ne { opcat_eq } ast::lt { opcat_rel } diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index deb2ecd5c15..f3c10547708 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -867,8 +867,8 @@ fn check_expr_with_unifier(fcx: @fn_ctxt, fn binop_method(op: ast::binop) -> option<str> { alt op { ast::add | ast::subtract | ast::mul | ast::div | ast::rem | - ast::bitxor | ast::bitand | ast::bitor | ast::lsl | ast::lsr | - ast::asr { some(ast_util::binop_to_str(op)) } + ast::bitxor | ast::bitand | ast::bitor | ast::shl | ast::shr + { some(ast_util::binop_to_str(op)) } _ { none } } } |
