@@ -114,33 +114,33 @@ pub fn lex(initial_code: &str) -> Result<CirruLexItemList, String> {
114
114
// guessed an initial length
115
115
let mut acc: CirruLexItemList = Vec :: with_capacity ( initial_code. len ( ) >> 4 ) ;
116
116
let mut state = CirruLexState :: Indent ;
117
- let mut buffer = String :: with_capacity ( 8 ) ; // guessed
117
+ let mut buffer = String :: new ( ) ;
118
118
let code = initial_code;
119
119
120
120
for ( idx, c) in code. chars ( ) . enumerate ( ) {
121
121
match state {
122
122
CirruLexState :: Space => match c {
123
123
' ' => {
124
124
state = CirruLexState :: Space ;
125
- buffer = String :: from ( "" ) ;
125
+ buffer = String :: new ( ) ;
126
126
}
127
127
'\n' => {
128
128
state = CirruLexState :: Indent ;
129
- buffer = String :: from ( "" ) ;
129
+ buffer = String :: new ( ) ;
130
130
}
131
131
'(' => {
132
132
acc. push ( CirruLexItem :: Open ) ;
133
133
state = CirruLexState :: Space ;
134
- buffer = String :: from ( "" )
134
+ buffer = String :: new ( )
135
135
}
136
136
')' => {
137
137
acc. push ( CirruLexItem :: Close ) ;
138
138
state = CirruLexState :: Space ;
139
- buffer = String :: from ( "" )
139
+ buffer = String :: new ( )
140
140
}
141
141
'"' => {
142
142
state = CirruLexState :: Str ;
143
- buffer = String :: from ( "" ) ;
143
+ buffer = String :: new ( ) ;
144
144
}
145
145
_ => {
146
146
state = CirruLexState :: Token ;
@@ -151,29 +151,29 @@ pub fn lex(initial_code: &str) -> Result<CirruLexItemList, String> {
151
151
' ' => {
152
152
acc. push ( CirruLexItem :: Str ( buffer) ) ;
153
153
state = CirruLexState :: Space ;
154
- buffer = String :: from ( "" ) ;
154
+ buffer = String :: new ( ) ;
155
155
}
156
156
'"' => {
157
157
acc. push ( CirruLexItem :: Str ( buffer) ) ;
158
158
state = CirruLexState :: Str ;
159
- buffer = String :: from ( "" ) ;
159
+ buffer = String :: new ( ) ;
160
160
}
161
161
'\n' => {
162
162
acc. push ( CirruLexItem :: Str ( buffer) ) ;
163
163
state = CirruLexState :: Indent ;
164
- buffer = String :: from ( "" ) ;
164
+ buffer = String :: new ( ) ;
165
165
}
166
166
'(' => {
167
167
acc. push ( CirruLexItem :: Str ( buffer) ) ;
168
168
acc. push ( CirruLexItem :: Open ) ;
169
169
state = CirruLexState :: Space ;
170
- buffer = String :: from ( "" )
170
+ buffer = String :: new ( )
171
171
}
172
172
')' => {
173
173
acc. push ( CirruLexItem :: Str ( buffer) ) ;
174
174
acc. push ( CirruLexItem :: Close ) ;
175
175
state = CirruLexState :: Space ;
176
- buffer = String :: from ( "" )
176
+ buffer = String :: new ( )
177
177
}
178
178
_ => {
179
179
state = CirruLexState :: Token ;
@@ -184,7 +184,7 @@ pub fn lex(initial_code: &str) -> Result<CirruLexItemList, String> {
184
184
'"' => {
185
185
acc. push ( CirruLexItem :: Str ( buffer) ) ;
186
186
state = CirruLexState :: Space ;
187
- buffer = String :: from ( "" ) ;
187
+ buffer = String :: new ( ) ;
188
188
}
189
189
'\\' => {
190
190
state = CirruLexState :: Escape ;
@@ -239,20 +239,20 @@ pub fn lex(initial_code: &str) -> Result<CirruLexItemList, String> {
239
239
}
240
240
'\n' => {
241
241
state = CirruLexState :: Indent ;
242
- buffer = String :: from ( "" ) ;
242
+ buffer = String :: new ( ) ;
243
243
}
244
244
'"' => {
245
245
let level = parse_indentation ( buffer. len ( ) as u8 ) ?;
246
246
acc. push ( level) ;
247
247
state = CirruLexState :: Str ;
248
- buffer = String :: from ( "" ) ;
248
+ buffer = String :: new ( ) ;
249
249
}
250
250
'(' => {
251
251
let level = parse_indentation ( buffer. len ( ) as u8 ) ?;
252
252
acc. push ( level) ;
253
253
acc. push ( CirruLexItem :: Open ) ;
254
254
state = CirruLexState :: Space ;
255
- buffer = String :: from ( "" ) ;
255
+ buffer = String :: new ( ) ;
256
256
}
257
257
')' => return Err ( String :: from ( "unexpected ) at line start" ) ) ,
258
258
_ => {
@@ -279,11 +279,12 @@ pub fn lex(initial_code: &str) -> Result<CirruLexItemList, String> {
279
279
280
280
/// internal function for figuring out indentations after lexing
281
281
pub fn resolve_indentations ( tokens : & [ CirruLexItem ] ) -> CirruLexItemList {
282
- let mut acc: CirruLexItemList = Vec :: with_capacity ( tokens. len ( ) >> 1 ) ;
282
+ let size = tokens. len ( ) ;
283
+ let mut acc: CirruLexItemList = Vec :: new ( ) ;
283
284
let mut level = 0 ;
284
285
let mut pointer = 0 ;
285
286
loop {
286
- if pointer >= tokens . len ( ) {
287
+ if pointer >= size {
287
288
if acc. is_empty ( ) {
288
289
return vec ! [ ] ;
289
290
}
0 commit comments