Skip to content

Commit e7ca76f

Browse files
committed
---
yaml --- r: 39600 b: refs/heads/incoming c: 2b6c456 h: refs/heads/master v: v3
1 parent 6a87a7f commit e7ca76f

File tree

17 files changed

+289
-76
lines changed

17 files changed

+289
-76
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
9-
refs/heads/incoming: 56227c42b387d0463f8c72f1a37d5a3b61197912
9+
refs/heads/incoming: 2b6c456bf648e5a7b408b550649d409378e39539
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/incoming/doc/rust.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,19 +1107,6 @@ let mut a: Animal = Dog;
11071107
a = Cat;
11081108
~~~~
11091109

1110-
Enumeration constructors can have either named or unnamed fields:
1111-
~~~~
1112-
enum Animal {
1113-
Dog (~str, float),
1114-
Cat { name: ~str, weight: float }
1115-
}
1116-
1117-
let mut a: Animal = Dog(~"Cocoa", 37.2);
1118-
a = Cat{ name: ~"Spotty", weight: 2.7 };
1119-
~~~~
1120-
1121-
In this example, `Cat` is a _struct-like enum variant_,
1122-
whereas `Dog` is simply called an enum variant.
11231110
### Constants
11241111

11251112
~~~~~~~~ {.ebnf .gram}

branches/incoming/doc/tutorial.md

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -733,24 +733,6 @@ fn point_from_direction(dir: Direction) -> Point {
733733
}
734734
~~~~
735735

736-
A special kind of enum variant, called _struct-like enums_,
737-
can have its fields extracted with dot notation and not just destructuring.
738-
For example:
739-
740-
~~~~
741-
# struct Point {x: float, y: float}
742-
# fn square(x: float) -> float { x * x }
743-
enum Shape {
744-
Circle { center: Point, radius: float },
745-
Rectangle { left: Point, right: Point }
746-
}
747-
fn area(sh: Shape) -> float {
748-
match sh {
749-
Circle(c) => float::consts::pi * square(c.radius),
750-
Rectangle(r) => r.right.x - r.left.x * r.right.y - r.right.y
751-
}
752-
}
753-
~~~~
754736
## Tuples
755737

756738
Tuples in Rust behave exactly like structs, except that their fields

branches/incoming/src/etc/vim/syntax/rust.vim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
" Language: Rust
33
" Maintainer: Patrick Walton <[email protected]>
44
" Maintainer: Ben Blum <[email protected]>
5-
" Last Change: 2012 Dec 25
5+
" Last Change: 2012 Dec 14
66

77
if version < 600
88
syntax clear
@@ -44,8 +44,8 @@ syn keyword rustType off_t dev_t ino_t pid_t mode_t ssize_t
4444

4545
syn keyword rustTrait Const Copy Send Owned " inherent traits
4646
syn keyword rustTrait Eq Ord Num Ptr
47-
syn keyword rustTrait Drop Add Sub Mul Div Modulo Neg BitAnd BitOr
48-
syn keyword rustTrait BitXor Shl Shr Index
47+
syn keyword rustTrait Add Sub Mul Div Modulo Neg BitAnd BitOr BitXor
48+
syn keyword rustTrait Shl Shr Index
4949

5050
syn keyword rustSelf self
5151
syn keyword rustBoolean true false

branches/incoming/src/libcargo/pgp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ fn verify(root: &Path, data: &Path, sig: &Path) -> bool {
102102
let path = root.push("gpg");
103103
let res = gpgv(~[~"--homedir", path.to_str(),
104104
~"--keyring", ~"pubring.gpg",
105-
~"--verbose",
105+
~"--verify",
106106
sig.to_str(), data.to_str()]);
107107
if res.status != 0 {
108108
return false;

branches/incoming/src/librustc/middle/trans/base.rs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -545,10 +545,7 @@ fn iter_structural_ty(cx: block, av: ValueRef, t: ty::t,
545545
j += 1u;
546546
}
547547
}
548-
_ => cx.tcx().sess.bug(fmt!("iter_variant: not a function type: \
549-
%s (variant name = %s)",
550-
cx.ty_to_str(fn_ty),
551-
cx.sess().str_of(variant.name)))
548+
_ => cx.tcx().sess.bug(~"iter_variant: not a function type")
552549
}
553550
return cx;
554551
}
@@ -2399,6 +2396,30 @@ fn declare_intrinsics(llmod: ModuleRef) -> HashMap<~str, ValueRef> {
23992396
T_fn(~[T_f32()], T_f32()));
24002397
let truncf64 = decl_cdecl_fn(llmod, ~"llvm.trunc.f64",
24012398
T_fn(~[T_f64()], T_f64()));
2399+
let ctpop8 = decl_cdecl_fn(llmod, ~"llvm.ctpop.i8",
2400+
T_fn(~[T_i8()], T_i8()));
2401+
let ctpop16 = decl_cdecl_fn(llmod, ~"llvm.ctpop.i16",
2402+
T_fn(~[T_i16()], T_i16()));
2403+
let ctpop32 = decl_cdecl_fn(llmod, ~"llvm.ctpop.i32",
2404+
T_fn(~[T_i32()], T_i32()));
2405+
let ctpop64 = decl_cdecl_fn(llmod, ~"llvm.ctpop.i64",
2406+
T_fn(~[T_i64()], T_i64()));
2407+
let ctlz8 = decl_cdecl_fn(llmod, ~"llvm.ctlz.i8",
2408+
T_fn(~[T_i8(), T_i1()], T_i8()));
2409+
let ctlz16 = decl_cdecl_fn(llmod, ~"llvm.ctlz.i16",
2410+
T_fn(~[T_i16(), T_i1()], T_i16()));
2411+
let ctlz32 = decl_cdecl_fn(llmod, ~"llvm.ctlz.i32",
2412+
T_fn(~[T_i32(), T_i1()], T_i32()));
2413+
let ctlz64 = decl_cdecl_fn(llmod, ~"llvm.ctlz.i64",
2414+
T_fn(~[T_i64(), T_i1()], T_i64()));
2415+
let cttz8 = decl_cdecl_fn(llmod, ~"llvm.cttz.i8",
2416+
T_fn(~[T_i8(), T_i1()], T_i8()));
2417+
let cttz16 = decl_cdecl_fn(llmod, ~"llvm.cttz.i16",
2418+
T_fn(~[T_i16(), T_i1()], T_i16()));
2419+
let cttz32 = decl_cdecl_fn(llmod, ~"llvm.cttz.i32",
2420+
T_fn(~[T_i32(), T_i1()], T_i32()));
2421+
let cttz64 = decl_cdecl_fn(llmod, ~"llvm.cttz.i64",
2422+
T_fn(~[T_i64(), T_i1()], T_i64()));
24022423

24032424
let intrinsics = HashMap();
24042425
intrinsics.insert(~"llvm.gcroot", gcroot);
@@ -2439,6 +2460,18 @@ fn declare_intrinsics(llmod: ModuleRef) -> HashMap<~str, ValueRef> {
24392460
intrinsics.insert(~"llvm.ceil.f64", ceilf64);
24402461
intrinsics.insert(~"llvm.trunc.f32", truncf32);
24412462
intrinsics.insert(~"llvm.trunc.f64", truncf64);
2463+
intrinsics.insert(~"llvm.ctpop.i8", ctpop8);
2464+
intrinsics.insert(~"llvm.ctpop.i16", ctpop16);
2465+
intrinsics.insert(~"llvm.ctpop.i32", ctpop32);
2466+
intrinsics.insert(~"llvm.ctpop.i64", ctpop64);
2467+
intrinsics.insert(~"llvm.ctlz.i8", ctlz8);
2468+
intrinsics.insert(~"llvm.ctlz.i16", ctlz16);
2469+
intrinsics.insert(~"llvm.ctlz.i32", ctlz32);
2470+
intrinsics.insert(~"llvm.ctlz.i64", ctlz64);
2471+
intrinsics.insert(~"llvm.cttz.i8", cttz8);
2472+
intrinsics.insert(~"llvm.cttz.i16", cttz16);
2473+
intrinsics.insert(~"llvm.cttz.i32", cttz32);
2474+
intrinsics.insert(~"llvm.cttz.i64", cttz64);
24422475

24432476
return intrinsics;
24442477
}

branches/incoming/src/librustc/middle/trans/foreign.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,6 +1194,74 @@ fn trans_intrinsic(ccx: @crate_ctxt, decl: ValueRef, item: @ast::foreign_item,
11941194
let truncf = ccx.intrinsics.get(~"llvm.trunc.f64");
11951195
Store(bcx, Call(bcx, truncf, ~[x]), fcx.llretptr);
11961196
}
1197+
~"ctpop8" => {
1198+
let x = get_param(decl, first_real_arg);
1199+
let ctpop = ccx.intrinsics.get(~"llvm.ctpop.i8");
1200+
Store(bcx, Call(bcx, ctpop, ~[x]), fcx.llretptr)
1201+
}
1202+
~"ctpop16" => {
1203+
let x = get_param(decl, first_real_arg);
1204+
let ctpop = ccx.intrinsics.get(~"llvm.ctpop.i16");
1205+
Store(bcx, Call(bcx, ctpop, ~[x]), fcx.llretptr)
1206+
}
1207+
~"ctpop32" => {
1208+
let x = get_param(decl, first_real_arg);
1209+
let ctpop = ccx.intrinsics.get(~"llvm.ctpop.i32");
1210+
Store(bcx, Call(bcx, ctpop, ~[x]), fcx.llretptr)
1211+
}
1212+
~"ctpop64" => {
1213+
let x = get_param(decl, first_real_arg);
1214+
let ctpop = ccx.intrinsics.get(~"llvm.ctpop.i64");
1215+
Store(bcx, Call(bcx, ctpop, ~[x]), fcx.llretptr)
1216+
}
1217+
~"ctlz8" => {
1218+
let x = get_param(decl, first_real_arg);
1219+
let y = C_bool(false);
1220+
let ctlz = ccx.intrinsics.get(~"llvm.ctlz.i8");
1221+
Store(bcx, Call(bcx, ctlz, ~[x, y]), fcx.llretptr)
1222+
}
1223+
~"ctlz16" => {
1224+
let x = get_param(decl, first_real_arg);
1225+
let y = C_bool(false);
1226+
let ctlz = ccx.intrinsics.get(~"llvm.ctlz.i16");
1227+
Store(bcx, Call(bcx, ctlz, ~[x, y]), fcx.llretptr)
1228+
}
1229+
~"ctlz32" => {
1230+
let x = get_param(decl, first_real_arg);
1231+
let y = C_bool(false);
1232+
let ctlz = ccx.intrinsics.get(~"llvm.ctlz.i32");
1233+
Store(bcx, Call(bcx, ctlz, ~[x, y]), fcx.llretptr)
1234+
}
1235+
~"ctlz64" => {
1236+
let x = get_param(decl, first_real_arg);
1237+
let y = C_bool(false);
1238+
let ctlz = ccx.intrinsics.get(~"llvm.ctlz.i64");
1239+
Store(bcx, Call(bcx, ctlz, ~[x, y]), fcx.llretptr)
1240+
}
1241+
~"cttz8" => {
1242+
let x = get_param(decl, first_real_arg);
1243+
let y = C_bool(false);
1244+
let cttz = ccx.intrinsics.get(~"llvm.cttz.i8");
1245+
Store(bcx, Call(bcx, cttz, ~[x, y]), fcx.llretptr)
1246+
}
1247+
~"cttz16" => {
1248+
let x = get_param(decl, first_real_arg);
1249+
let y = C_bool(false);
1250+
let cttz = ccx.intrinsics.get(~"llvm.cttz.i16");
1251+
Store(bcx, Call(bcx, cttz, ~[x, y]), fcx.llretptr)
1252+
}
1253+
~"cttz32" => {
1254+
let x = get_param(decl, first_real_arg);
1255+
let y = C_bool(false);
1256+
let cttz = ccx.intrinsics.get(~"llvm.cttz.i32");
1257+
Store(bcx, Call(bcx, cttz, ~[x, y]), fcx.llretptr)
1258+
}
1259+
~"cttz64" => {
1260+
let x = get_param(decl, first_real_arg);
1261+
let y = C_bool(false);
1262+
let cttz = ccx.intrinsics.get(~"llvm.cttz.i64");
1263+
Store(bcx, Call(bcx, cttz, ~[x, y]), fcx.llretptr)
1264+
}
11971265
_ => {
11981266
// Could we make this an enum rather than a string? does it get
11991267
// checked earlier?

branches/incoming/src/librustc/middle/trans/type_use.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
130130
~"floorf32"| ~"floorf64"| ~"ceilf32" | ~"ceilf64" |
131131
~"truncf32"| ~"truncf64" => 0,
132132

133+
~"ctpop8" | ~"ctpop16" | ~"ctpop32" | ~"ctpop64" => 0,
134+
135+
~"ctlz8" | ~"ctlz16" | ~"ctlz32" | ~"ctlz64" => 0,
136+
~"cttz8" | ~"cttz16" | ~"cttz32" | ~"cttz64" => 0,
137+
133138
// would be cool to make these an enum instead of strings!
134139
_ => fail ~"unknown intrinsic in type_use"
135140
};

branches/incoming/src/librustc/middle/typeck/check/mod.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3156,7 +3156,55 @@ fn check_intrinsic_type(ccx: @crate_ctxt, it: @ast::foreign_item) {
31563156
(0u, ~[arg(ast::by_copy, ty::mk_f64(tcx))],
31573157
ty::mk_f64(tcx))
31583158
}
3159-
ref other => {
3159+
~"ctpop8" => {
3160+
(0u, ~[arg(ast::by_copy, ty::mk_i8(tcx))],
3161+
ty::mk_i8(tcx))
3162+
}
3163+
~"ctpop16" => {
3164+
(0u, ~[arg(ast::by_copy, ty::mk_i16(tcx))],
3165+
ty::mk_i16(tcx))
3166+
}
3167+
~"ctpop32" => {
3168+
(0u, ~[arg(ast::by_copy, ty::mk_i32(tcx))],
3169+
ty::mk_i32(tcx))
3170+
}
3171+
~"ctpop64" => {
3172+
(0u, ~[arg(ast::by_copy, ty::mk_i64(tcx))],
3173+
ty::mk_i64(tcx))
3174+
}
3175+
~"ctlz8" => {
3176+
(0u, ~[arg(ast::by_copy, ty::mk_i8(tcx))],
3177+
ty::mk_i8(tcx))
3178+
}
3179+
~"ctlz16" => {
3180+
(0u, ~[arg(ast::by_copy, ty::mk_i16(tcx))],
3181+
ty::mk_i16(tcx))
3182+
}
3183+
~"ctlz32" => {
3184+
(0u, ~[arg(ast::by_copy, ty::mk_i32(tcx))],
3185+
ty::mk_i32(tcx))
3186+
}
3187+
~"ctlz64" => {
3188+
(0u, ~[arg(ast::by_copy, ty::mk_i64(tcx))],
3189+
ty::mk_i64(tcx))
3190+
}
3191+
~"cttz8" => {
3192+
(0u, ~[arg(ast::by_copy, ty::mk_i8(tcx))],
3193+
ty::mk_i8(tcx))
3194+
}
3195+
~"cttz16" => {
3196+
(0u, ~[arg(ast::by_copy, ty::mk_i16(tcx))],
3197+
ty::mk_i16(tcx))
3198+
}
3199+
~"cttz32" => {
3200+
(0u, ~[arg(ast::by_copy, ty::mk_i32(tcx))],
3201+
ty::mk_i32(tcx))
3202+
}
3203+
~"cttz64" => {
3204+
(0u, ~[arg(ast::by_copy, ty::mk_i64(tcx))],
3205+
ty::mk_i64(tcx))
3206+
}
3207+
ref other => {
31603208
tcx.sess.span_err(it.span, ~"unrecognized intrinsic function: `" +
31613209
(*other) + ~"`");
31623210
return;

branches/incoming/src/librustc/middle/typeck/collect.rs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -158,26 +158,13 @@ fn get_enum_variant_types(ccx: @crate_ctxt,
158158
result_ty = Some(enum_ty);
159159
}
160160
ast::struct_variant_kind(struct_def) => {
161+
result_ty = Some(enum_ty);
161162
// XXX: Merge with computation of the the same value below?
162163
let tpt = {bounds: ty_param_bounds(ccx, ty_params),
163164
region_param: rp,
164165
ty: enum_ty};
165166
convert_struct(
166167
ccx, rp, struct_def, ty_params, tpt, variant.node.id);
167-
// Compute the ctor arg types from the struct fields
168-
let struct_fields = do struct_def.fields.map |struct_field| {
169-
{mode: ast::expl(ast::by_val),
170-
ty: ty::node_id_to_type(ccx.tcx, (*struct_field).node.id)
171-
}
172-
};
173-
result_ty = Some(ty::mk_fn(tcx, FnTyBase {
174-
meta: FnMeta {purity: ast::pure_fn,
175-
proto: ast::ProtoBare,
176-
onceness: ast::Many,
177-
bounds: @~[],
178-
region: ty::re_static,
179-
ret_style: ast::return_val},
180-
sig: FnSig {inputs: struct_fields, output: enum_ty }}));
181168
}
182169
ast::enum_variant_kind(ref enum_definition) => {
183170
get_enum_variant_types(ccx,

branches/incoming/src/libstd/ebml.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ pub mod reader {
360360
f()
361361
}
362362

363-
fn read_struct<T>(&self, name: &str, f: fn() -> T) -> T {
363+
fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T {
364364
debug!("read_struct(name=%s)", name);
365365
f()
366366
}
@@ -631,7 +631,7 @@ pub mod writer {
631631
}
632632

633633
fn emit_rec(&self, f: fn()) { f() }
634-
fn emit_struct(&self, _name: &str, f: fn()) { f() }
634+
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) { f() }
635635
fn emit_field(&self, name: &str, _idx: uint, f: fn()) {
636636
self._emit_label(name);
637637
f()

branches/incoming/src/libstd/json.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ pub impl Encoder: serialize::Encoder {
148148
f();
149149
self.wr.write_char('}');
150150
}
151-
fn emit_struct(&self, _name: &str, f: fn()) {
151+
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) {
152152
self.wr.write_char('{');
153153
f();
154154
self.wr.write_char('}');
@@ -261,7 +261,7 @@ pub impl PrettyEncoder: serialize::Encoder {
261261
self.indent -= 2;
262262
self.wr.write_char('}');
263263
}
264-
fn emit_struct(&self, _name: &str, f: fn()) {
264+
fn emit_struct(&self, _name: &str, _len: uint, f: fn()) {
265265
self.emit_rec(f)
266266
}
267267
fn emit_field(&self, name: &str, idx: uint, f: fn()) {
@@ -861,7 +861,7 @@ pub impl Decoder: serialize::Decoder {
861861
move value
862862
}
863863

864-
fn read_struct<T>(&self, _name: &str, f: fn() -> T) -> T {
864+
fn read_struct<T>(&self, _name: &str, _len: uint, f: fn() -> T) -> T {
865865
debug!("read_struct()");
866866
let value = f();
867867
self.pop();

branches/incoming/src/libstd/prettyprint.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ pub impl Encoder: serialize::Encoder {
160160
self.wr.write_str(~"}");
161161
}
162162

163-
fn emit_struct(&self, name: &str, f: fn()) {
163+
fn emit_struct(&self, name: &str, _len: uint, f: fn()) {
164164
self.wr.write_str(fmt!("%s {", name));
165165
f();
166166
self.wr.write_str(~"}");

branches/incoming/src/libstd/serialize.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub trait Encoder {
5454
fn emit_vec_elt(&self, idx: uint, f: fn());
5555

5656
fn emit_rec(&self, f: fn());
57-
fn emit_struct(&self, name: &str, f: fn());
57+
fn emit_struct(&self, name: &str, _len: uint, f: fn());
5858
fn emit_field(&self, f_name: &str, f_idx: uint, f: fn());
5959

6060
fn emit_tup(&self, len: uint, f: fn());
@@ -95,7 +95,7 @@ pub trait Decoder {
9595
fn read_vec_elt<T>(&self, idx: uint, f: fn() -> T) -> T;
9696

9797
fn read_rec<T>(&self, f: fn() -> T) -> T;
98-
fn read_struct<T>(&self, name: &str, f: fn() -> T) -> T;
98+
fn read_struct<T>(&self, name: &str, _len: uint, f: fn() -> T) -> T;
9999
fn read_field<T>(&self, name: &str, idx: uint, f: fn() -> T) -> T;
100100

101101
fn read_tup<T>(&self, sz: uint, f: fn() -> T) -> T;

0 commit comments

Comments
 (0)