Skip to content

Commit 93d3b8a

Browse files
committed
Convert class methods to impl methods. Stop parsing class methods
1 parent bea6fe0 commit 93d3b8a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+398
-195
lines changed

src/compiletest/procsrv.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import run::spawn_process;
22
import io::{ReaderUtil, WriterUtil};
33
import libc::{c_int, pid_t};
4-
import pipes::chan;
54

65
export run;
76

src/libcore/pipes.rs

+48-37
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,17 @@ struct PacketHeader {
164164
// This is a reinterpret_cast of a ~buffer, that can also be cast
165165
// to a buffer_header if need be.
166166
mut buffer: *libc::c_void,
167+
}
168+
169+
fn PacketHeader() -> PacketHeader {
170+
PacketHeader {
171+
state: Empty,
172+
blocked_task: ptr::null(),
173+
buffer: ptr::null()
174+
}
175+
}
167176

177+
impl PacketHeader {
168178
// Returns the old state.
169179
unsafe fn mark_blocked(this: *rust_task) -> State {
170180
rustrt::rust_task_ref(this);
@@ -196,14 +206,6 @@ struct PacketHeader {
196206
}
197207
}
198208

199-
fn PacketHeader() -> PacketHeader {
200-
PacketHeader {
201-
state: Empty,
202-
blocked_task: ptr::null(),
203-
buffer: ptr::null()
204-
}
205-
}
206-
207209
#[doc(hidden)]
208210
type Packet<T: Send> = {
209211
header: PacketHeader,
@@ -794,6 +796,21 @@ struct SendPacketBuffered<T: Send, Tbuffer: Send> {
794796
// "none"
795797
// } else { "some" }); }
796798
}
799+
}
800+
801+
fn SendPacketBuffered<T: Send, Tbuffer: Send>(p: *Packet<T>)
802+
-> SendPacketBuffered<T, Tbuffer> {
803+
//debug!("take send %?", p);
804+
SendPacketBuffered {
805+
p: Some(p),
806+
buffer: unsafe {
807+
Some(BufferResource(
808+
get_buffer(ptr::addr_of((*p).header))))
809+
}
810+
}
811+
}
812+
813+
impl<T: Send, Tbuffer: Send> SendPacketBuffered<T, Tbuffer> {
797814
fn unwrap() -> *Packet<T> {
798815
let mut p = None;
799816
p <-> self.p;
@@ -820,18 +837,6 @@ struct SendPacketBuffered<T: Send, Tbuffer: Send> {
820837
}
821838
}
822839

823-
fn SendPacketBuffered<T: Send, Tbuffer: Send>(p: *Packet<T>)
824-
-> SendPacketBuffered<T, Tbuffer> {
825-
//debug!("take send %?", p);
826-
SendPacketBuffered {
827-
p: Some(p),
828-
buffer: unsafe {
829-
Some(BufferResource(
830-
get_buffer(ptr::addr_of((*p).header))))
831-
}
832-
}
833-
}
834-
835840
// XXX remove me
836841
#[cfg(stage0)]
837842
#[allow(non_camel_case_types)]
@@ -858,7 +863,7 @@ fn recv_packet<T: Send>(p: *packet<T>) -> RecvPacket<T> {
858863
RecvPacket(p)
859864
}
860865

861-
struct RecvPacketBuffered<T: Send, Tbuffer: Send> : Selectable {
866+
struct RecvPacketBuffered<T: Send, Tbuffer: Send> {
862867
mut p: Option<*Packet<T>>,
863868
mut buffer: Option<BufferResource<Tbuffer>>,
864869
drop {
@@ -875,6 +880,9 @@ struct RecvPacketBuffered<T: Send, Tbuffer: Send> : Selectable {
875880
// "none"
876881
// } else { "some" }); }
877882
}
883+
}
884+
885+
impl<T: Send, Tbuffer: Send> RecvPacketBuffered<T, Tbuffer> : Selectable {
878886
fn unwrap() -> *Packet<T> {
879887
let mut p = None;
880888
p <-> self.p;
@@ -1095,9 +1103,27 @@ impl<T: Send> Port<T>: Recv<T> {
10951103
}
10961104
}
10971105

1106+
impl<T: Send> Port<T>: Selectable {
1107+
pure fn header() -> *PacketHeader unchecked {
1108+
match self.endp {
1109+
Some(endp) => endp.header(),
1110+
None => fail ~"peeking empty stream"
1111+
}
1112+
}
1113+
}
1114+
10981115
/// Treat many ports as one.
1099-
struct PortSet<T: Send> : Recv<T> {
1116+
struct PortSet<T: Send> {
11001117
mut ports: ~[pipes::Port<T>],
1118+
}
1119+
1120+
fn PortSet<T: Send>() -> PortSet<T>{
1121+
PortSet {
1122+
ports: ~[]
1123+
}
1124+
}
1125+
1126+
impl<T: Send> PortSet<T> : Recv<T> {
11011127

11021128
fn add(+port: pipes::Port<T>) {
11031129
vec::push(self.ports, move port)
@@ -1145,21 +1171,6 @@ struct PortSet<T: Send> : Recv<T> {
11451171
}
11461172
}
11471173

1148-
fn PortSet<T: Send>() -> PortSet<T>{
1149-
PortSet {
1150-
ports: ~[]
1151-
}
1152-
}
1153-
1154-
impl<T: Send> Port<T>: Selectable {
1155-
pure fn header() -> *PacketHeader unchecked {
1156-
match self.endp {
1157-
Some(endp) => endp.header(),
1158-
None => fail ~"peeking empty stream"
1159-
}
1160-
}
1161-
}
1162-
11631174
/// A channel that can be shared between many senders.
11641175
type SharedChan<T: Send> = unsafe::Exclusive<Chan<T>>;
11651176

src/libstd/comm.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,22 @@ use pipes::{Channel, Recv, Chan, Port, Selectable};
1313
export DuplexStream;
1414

1515
/// An extension of `pipes::stream` that allows both sending and receiving.
16-
struct DuplexStream<T: Send, U: Send> : Channel<T>, Recv<U>, Selectable {
16+
struct DuplexStream<T: Send, U: Send> {
1717
priv chan: Chan<T>,
1818
priv port: Port <U>,
19+
}
1920

21+
impl<T: Send, U: Send> DuplexStream<T, U> : Channel<T> {
2022
fn send(+x: T) {
2123
self.chan.send(x)
2224
}
2325

2426
fn try_send(+x: T) -> bool {
2527
self.chan.try_send(x)
2628
}
29+
}
2730

31+
impl<T: Send, U: Send> DuplexStream<T, U> : Recv<U> {
2832
fn recv() -> U {
2933
self.port.recv()
3034
}
@@ -36,7 +40,9 @@ struct DuplexStream<T: Send, U: Send> : Channel<T>, Recv<U>, Selectable {
3640
pure fn peek() -> bool {
3741
self.port.peek()
3842
}
43+
}
3944

45+
impl<T: Send, U: Send> DuplexStream<T, U> : Selectable {
4046
pure fn header() -> *pipes::PacketHeader {
4147
self.port.header()
4248
}

src/libsyntax/ext/pipes/proto.rs

+3
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ struct protocol_ {
134134
states: DVec<state>,
135135

136136
mut bounded: Option<bool>,
137+
}
138+
139+
impl protocol_ {
137140

138141
/// Get a state.
139142
fn get_state(name: ~str) -> state {

src/libsyntax/parse/parser.rs

+20-25
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ struct parser {
242242
obsolete_set: hashmap<ObsoleteSyntax, ()>,
243243

244244
drop {} /* do not copy the parser; its state is tied to outside state */
245+
}
245246

247+
impl parser {
246248
fn bump() {
247249
self.last_span = self.span;
248250
let next = if self.buffer_start == self.buffer_end {
@@ -2776,32 +2778,25 @@ struct parser {
27762778
let obsolete_let = self.eat_obsolete_ident("let");
27772779
if obsolete_let { self.obsolete(copy self.last_span, ObsoleteLet) }
27782780

2779-
if (obsolete_let || self.token_is_keyword(~"mut", copy self.token) ||
2780-
!self.is_any_keyword(copy self.token)) &&
2781-
!self.token_is_pound_or_doc_comment(self.token) {
2782-
let a_var = self.parse_instance_var(vis);
2783-
match self.token {
2784-
token::SEMI => {
2785-
self.obsolete(copy self.span, ObsoleteFieldTerminator);
2786-
self.bump();
2787-
}
2788-
token::COMMA => {
2789-
self.bump();
2790-
}
2791-
token::RBRACE => {}
2792-
_ => {
2793-
self.span_fatal(copy self.span,
2794-
fmt!("expected `;`, `,`, or '}' but \
2795-
found `%s`",
2796-
token_to_str(self.reader,
2797-
self.token)));
2798-
}
2799-
}
2800-
return a_var;
2801-
} else {
2802-
let m = self.parse_method(vis);
2803-
return @method_member(m);
2781+
let a_var = self.parse_instance_var(vis);
2782+
match self.token {
2783+
token::SEMI => {
2784+
self.obsolete(copy self.span, ObsoleteFieldTerminator);
2785+
self.bump();
2786+
}
2787+
token::COMMA => {
2788+
self.bump();
2789+
}
2790+
token::RBRACE => {}
2791+
_ => {
2792+
self.span_fatal(copy self.span,
2793+
fmt!("expected `;`, `,`, or '}' but \
2794+
found `%s`",
2795+
token_to_str(self.reader,
2796+
self.token)));
2797+
}
28042798
}
2799+
return a_var;
28052800
}
28062801

28072802
fn parse_dtor(attrs: ~[attribute]) -> class_contents {

src/rustc/middle/lang_items.rs

+3
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ struct LanguageItemCollector {
120120
session: session,
121121

122122
item_refs: hashmap<~str,&mut Option<def_id>>,
123+
}
124+
125+
impl LanguageItemCollector {
123126

124127
fn match_and_collect_meta_item(item_def_id: def_id,
125128
meta_item: meta_item) {

src/rustc/middle/resolve.rs

+24-12
Original file line numberDiff line numberDiff line change
@@ -379,14 +379,6 @@ struct ImportResolution {
379379
mut type_target: Option<Target>,
380380

381381
mut used: bool,
382-
383-
fn target_for_namespace(namespace: Namespace) -> Option<Target> {
384-
match namespace {
385-
ModuleNS => return copy self.module_target,
386-
TypeNS => return copy self.type_target,
387-
ValueNS => return copy self.value_target
388-
}
389-
}
390382
}
391383

392384
fn ImportResolution(span: span) -> ImportResolution {
@@ -400,6 +392,16 @@ fn ImportResolution(span: span) -> ImportResolution {
400392
}
401393
}
402394

395+
impl ImportResolution {
396+
fn target_for_namespace(namespace: Namespace) -> Option<Target> {
397+
match namespace {
398+
ModuleNS => return copy self.module_target,
399+
TypeNS => return copy self.type_target,
400+
ValueNS => return copy self.value_target
401+
}
402+
}
403+
}
404+
403405
/// The link from a module up to its nearest parent node.
404406
enum ParentLink {
405407
NoParentLink,
@@ -448,10 +450,6 @@ struct Module {
448450

449451
// The index of the import we're resolving.
450452
mut resolved_import_count: uint,
451-
452-
fn all_imports_resolved() -> bool {
453-
return self.imports.len() == self.resolved_import_count;
454-
}
455453
}
456454

457455
fn Module(parent_link: ParentLink, def_id: Option<def_id>) -> Module {
@@ -468,6 +466,12 @@ fn Module(parent_link: ParentLink, def_id: Option<def_id>) -> Module {
468466
}
469467
}
470468

469+
impl Module {
470+
fn all_imports_resolved() -> bool {
471+
return self.imports.len() == self.resolved_import_count;
472+
}
473+
}
474+
471475
// XXX: This is a workaround due to is_none in the standard library mistakenly
472476
// requiring a T:copy.
473477

@@ -518,6 +522,9 @@ struct NameBindings {
518522
mut module_span: Option<span>,
519523
mut type_span: Option<span>,
520524
mut value_span: Option<span>,
525+
}
526+
527+
impl NameBindings {
521528

522529
/// Creates a new module in this set of name bindings.
523530
fn define_module(parent_link: ParentLink, def_id: Option<def_id>,
@@ -627,7 +634,9 @@ fn NameBindings() -> NameBindings {
627634
/// Interns the names of the primitive types.
628635
struct PrimitiveTypeTable {
629636
primitive_types: hashmap<Atom,prim_ty>,
637+
}
630638
639+
impl PrimitiveTypeTable {
631640
fn intern(intr: ident_interner, string: @~str,
632641
primitive_type: prim_ty) {
633642
let atom = intr.intern(string);
@@ -773,6 +782,9 @@ struct Resolver {
773782
export_map: ExportMap,
774783
export_map2: ExportMap2,
775784
trait_map: TraitMap,
785+
}
786+
787+
impl Resolver {
776788

777789
/// The main name resolution procedure.
778790
fn resolve(@self, this: @Resolver) {

src/rustc/middle/typeck/check/method.rs

+3
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ struct lookup {
105105
candidate_impls: hashmap<def_id, ()>,
106106
supplied_tps: ~[ty::t],
107107
include_private: bool,
108+
}
109+
110+
impl lookup {
108111

109112
// Entrypoint:
110113
fn method() -> Option<method_map_entry> {

src/rustc/middle/typeck/coherence.rs

+3
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ struct CoherenceChecker {
158158
// implementations that are defined in the same scope as their base types.
159159

160160
privileged_implementations: hashmap<node_id,()>,
161+
}
162+
163+
impl CoherenceChecker {
161164

162165
// Create a mapping containing a MethodInfo for every provided
163166
// method in every trait.

src/test/auxiliary/cci_class_2.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ struct cat {
77

88
how_hungry : int,
99

10-
fn speak() {}
1110
}
1211

12+
impl cat {
13+
fn speak() {}
14+
}
1315
fn cat(in_x : uint, in_y : int) -> cat {
1416
cat {
1517
meows: in_x,

0 commit comments

Comments
 (0)