about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-06-14 22:37:13 -0700
committerbors <bors@rust-lang.org>2013-06-14 22:37:13 -0700
commitc83bceddbb497464f8e4e1990f7518b009cd61ca (patch)
tree2a42d3da27ac3e20f6d9507aa184ac199a3f055b /src
parent1ba6fa477743bf6b8340b6d83987f1e243a509ae (diff)
parent8431e609ea47ff7a396888233baf23159c620dca (diff)
downloadrust-c83bceddbb497464f8e4e1990f7518b009cd61ca.tar.gz
rust-c83bceddbb497464f8e4e1990f7518b009cd61ca.zip
auto merge of #7121 : huonw/rust/rand-call, r=pnkfelix
r? @pnkfelix
Diffstat (limited to 'src')
-rw-r--r--src/libsyntax/ext/deriving/rand.rs7
-rw-r--r--src/test/run-pass/deriving-global.rs41
2 files changed, 45 insertions, 3 deletions
diff --git a/src/libsyntax/ext/deriving/rand.rs b/src/libsyntax/ext/deriving/rand.rs
index ab5ac6d7847..b890623b963 100644
--- a/src/libsyntax/ext/deriving/rand.rs
+++ b/src/libsyntax/ext/deriving/rand.rs
@@ -79,18 +79,19 @@ fn rand_substructure(cx: @ExtCtxt, span: span, substr: &Substructure) -> @expr {
             let variant_count = cx.expr_uint(span, variants.len());
 
             // need to specify the uint-ness of the random number
-            let u32_ty = cx.ty_ident(span, cx.ident_of("uint"));
+            let uint_ty = cx.ty_ident(span, cx.ident_of("uint"));
             let r_ty = cx.ty_ident(span, cx.ident_of("R"));
-            let rand_name = cx.path_all(span, false, copy rand_ident, None, ~[ u32_ty, r_ty ]);
+            let rand_name = cx.path_all(span, true, copy rand_ident, None, ~[ uint_ty, r_ty ]);
             let rand_name = cx.expr_path(rand_name);
 
+            // ::std::rand::Rand::rand::<uint>(rng)
             let rv_call = cx.expr_call(span,
                                        rand_name,
                                        ~[ rng[0].duplicate(cx) ]);
 
             // rand() % variants.len()
             let rand_variant = cx.expr_binary(span, ast::rem,
-                                                rv_call, variant_count);
+                                              rv_call, variant_count);
 
             let mut arms = do variants.mapi |i, id_sum| {
                 let i_expr = cx.expr_uint(span, i);
diff --git a/src/test/run-pass/deriving-global.rs b/src/test/run-pass/deriving-global.rs
new file mode 100644
index 00000000000..3d5bacee71c
--- /dev/null
+++ b/src/test/run-pass/deriving-global.rs
@@ -0,0 +1,41 @@
+// xfail-test #7103 `extern mod` does not work on windows
+
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+extern mod extra; // {En,De}codable
+mod submod {
+    // if any of these are implemented without global calls for any
+    // function calls, then being in a submodule will (correctly)
+    // cause errors about unrecognised module `std` (or `extra`)
+    #[deriving(Eq, Ord, TotalEq, TotalOrd,
+               IterBytes,
+               Clone, DeepClone,
+               ToStr, Rand,
+               Encodable, Decodable)]
+    enum A { A1(uint), A2(int) }
+
+    #[deriving(Eq, Ord, TotalEq, TotalOrd,
+               IterBytes,
+               Clone, DeepClone,
+               ToStr, Rand,
+               Encodable, Decodable)]
+    struct B { x: uint, y: int }
+
+    #[deriving(Eq, Ord, TotalEq, TotalOrd,
+               IterBytes,
+               Clone, DeepClone,
+               ToStr, Rand,
+               Encodable, Decodable)]
+    struct C(uint, int);
+
+}
+
+fn main() {}