@@ -131,25 +131,33 @@ mod unsafe {
131
131
( * * repr) . fill = new_len * sys:: size_of :: < T > ( ) ;
132
132
}
133
133
134
- /// Append an element to a vector
135
134
#[ inline( always) ]
136
135
unsafe fn push < T > ( & v: @[ const T ] , +initval : T ) {
137
136
let repr: * * vec_repr = :: unsafe:: reinterpret_cast ( addr_of ( v) ) ;
138
137
let fill = ( * * repr) . fill ;
139
138
if ( * * repr) . alloc > fill {
140
- ( * * repr) . fill += sys:: size_of :: < T > ( ) ;
141
- let p = addr_of ( ( * * repr) . data ) ;
142
- let p = ptr:: offset ( p, fill) as * mut T ;
143
- rusti:: move_val_init ( * p, initval) ;
139
+ push_fast ( v, initval) ;
144
140
}
145
141
else {
146
142
push_slow ( v, initval) ;
147
143
}
148
144
}
145
+ // This doesn't bother to make sure we have space.
146
+ #[ inline( always) ] // really pretty please
147
+ unsafe fn push_fast < T > ( & v: @[ const T ] , +initval : T ) {
148
+ let repr: * * vec_repr = :: unsafe:: reinterpret_cast ( addr_of ( v) ) ;
149
+ let fill = ( * * repr) . fill ;
150
+ ( * * repr) . fill += sys:: size_of :: < T > ( ) ;
151
+ let p = ptr:: addr_of ( ( * * repr) . data ) ;
152
+ let p = ptr:: offset ( p, fill) as * mut T ;
153
+ rusti:: move_val_init ( * p, initval) ;
154
+ }
155
+
149
156
unsafe fn push_slow < T > ( & v: @[ const T ] , +initval : T ) {
150
157
reserve_at_least ( v, v. len ( ) + 1 u) ;
151
- push ( v, initval) ;
158
+ push_fast ( v, initval) ;
152
159
}
160
+
153
161
/**
154
162
* Reserves capacity for exactly `n` elements in the given vector.
155
163
*
0 commit comments