@@ -94,7 +94,7 @@ enum_string!(pub AddressMode {
94
94
95
95
impl Default for AddressMode {
96
96
fn default ( ) -> Self {
97
- Self :: Immediate
97
+ Self :: Direct
98
98
}
99
99
}
100
100
@@ -119,12 +119,21 @@ impl ToString for Value {
119
119
}
120
120
}
121
121
122
- #[ derive( Clone , Default , Debug , PartialEq ) ]
122
+ #[ derive( Clone , Debug , PartialEq ) ]
123
123
pub struct Field {
124
124
pub address_mode : AddressMode ,
125
125
pub value : Value ,
126
126
}
127
127
128
+ impl Default for Field {
129
+ fn default ( ) -> Self {
130
+ Self {
131
+ address_mode : AddressMode :: Immediate ,
132
+ value : Value :: default ( ) ,
133
+ }
134
+ }
135
+ }
136
+
128
137
impl Field {
129
138
pub fn direct ( value : i32 ) -> Self {
130
139
Self {
@@ -151,25 +160,14 @@ impl ToString for Field {
151
160
}
152
161
}
153
162
154
- #[ derive( Clone , Debug , PartialEq ) ]
163
+ #[ derive( Clone , Debug , Default , PartialEq ) ]
155
164
pub struct Instruction {
156
165
pub opcode : Opcode ,
157
166
pub modifier : Modifier ,
158
167
pub field_a : Field ,
159
168
pub field_b : Field ,
160
169
}
161
170
162
- impl Default for Instruction {
163
- fn default ( ) -> Self {
164
- Instruction {
165
- opcode : Opcode :: default ( ) ,
166
- modifier : Modifier :: default ( ) ,
167
- field_a : Field :: direct ( 0 ) ,
168
- field_b : Field :: direct ( 0 ) ,
169
- }
170
- }
171
- }
172
-
173
171
impl Instruction {
174
172
pub fn new ( opcode : Opcode , field_a : Field , field_b : Field ) -> Self {
175
173
let modifier =
@@ -218,10 +216,9 @@ impl Core {
218
216
self . instructions [ index] = value;
219
217
}
220
218
221
- pub fn add_labels < L > ( & mut self , index : usize , labels : L ) -> Result < ( ) , String >
219
+ pub fn add_labels < T > ( & mut self , index : usize , labels : Vec < T > ) -> Result < ( ) , String >
222
220
where
223
- L : IntoIterator ,
224
- L :: Item : Into < String > ,
221
+ T : Into < String > ,
225
222
{
226
223
if index > self . instructions . len ( ) {
227
224
return Err ( format ! (
@@ -277,7 +274,7 @@ impl fmt::Debug for Core {
277
274
fn fmt ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
278
275
write ! (
279
276
formatter,
280
- "Labels:{:?}\n Core:\n {}" ,
277
+ "Labels: {:?}\n Core:\n {}" ,
281
278
self . labels,
282
279
self . dump( )
283
280
)
@@ -297,11 +294,11 @@ mod tests {
297
294
opcode : Opcode :: Dat ,
298
295
modifier : Modifier :: F ,
299
296
field_a : Field {
300
- address_mode : AddressMode :: Direct ,
297
+ address_mode : AddressMode :: Immediate ,
301
298
value : Value :: Literal ( 0 ) ,
302
299
} ,
303
300
field_b : Field {
304
- address_mode : AddressMode :: Direct ,
301
+ address_mode : AddressMode :: Immediate ,
305
302
value : Value :: Literal ( 0 ) ,
306
303
} ,
307
304
} ;
@@ -430,20 +427,18 @@ mod tests {
430
427
fn labels ( ) {
431
428
let mut core = Core :: new ( 200 ) ;
432
429
433
- core. add_labels ( 0 , vec ! [ "foo" , "bar" ] ) . unwrap ( ) ;
434
-
435
- core . add_labels ( 123 , vec ! [ "baz" , "boo" ] ) . unwrap ( ) ;
430
+ core. add_labels ( 123 , vec ! [ "baz" ] ) . expect ( "Should add label" ) ;
431
+ core . add_labels ( 0 , vec ! [ "foo" , "bar" ] )
432
+ . expect ( "Should add two labels" ) ;
436
433
437
434
core. add_labels ( 256 , vec ! [ "goblin" ] )
438
- . expect_err ( "Should have failed to add labels for 256, but didn't" ) ;
439
-
435
+ . expect_err ( "Should fail to add labels > 200" ) ;
440
436
core. add_labels ( 5 , vec ! [ "baz" ] )
441
- . expect_err ( "Should have failed to add duplicate label" ) ;
437
+ . expect_err ( "Should fail to add duplicate label" ) ;
442
438
443
439
assert_eq ! ( core. label_address( "foo" ) . unwrap( ) , 0 ) ;
444
440
assert_eq ! ( core. label_address( "bar" ) . unwrap( ) , 0 ) ;
445
441
assert_eq ! ( core. label_address( "baz" ) . unwrap( ) , 123 ) ;
446
- assert_eq ! ( core. label_address( "boo" ) . unwrap( ) , 123 ) ;
447
442
448
443
assert ! ( core. label_address( "goblin" ) . is_none( ) ) ;
449
444
assert ! ( core. label_address( "never_mentioned" ) . is_none( ) ) ;
0 commit comments