1
- use crate :: lisp_adapters:: { SlAsMut , SlAsRef , SlFrom , SlFromRef } ;
1
+ use crate :: lisp_adapters:: { SlAsMut , SlAsRef , SlFrom , SlFromRef , SlFromRefMut } ;
2
2
use bridge_types:: { ErrorStrings , LooseString , SloshChar } ;
3
3
use compile_state:: state:: SloshVm ;
4
4
use slvm:: value:: ValueType ;
@@ -17,22 +17,22 @@ impl<'a> SlFrom<SloshChar<'a>> for Value {
17
17
}
18
18
}
19
19
20
- impl < ' a > SlFromRef < ' a , & Value > for LooseString < ' a > {
21
- fn sl_from_ref ( value : & Value , vm : & ' a SloshVm ) -> VMResult < Self > {
20
+ impl < ' a > SlFromRef < ' a , Value > for LooseString < ' a > {
21
+ fn sl_from_ref ( value : Value , vm : & ' a SloshVm ) -> VMResult < Self > {
22
22
match value {
23
- Value :: String ( h) => Ok ( LooseString :: Borrowed ( vm. get_string ( * h) ) ) ,
23
+ Value :: String ( h) => Ok ( LooseString :: Borrowed ( vm. get_string ( h) ) ) ,
24
24
Value :: CodePoint ( char) => Ok ( LooseString :: Owned ( char. to_string ( ) ) ) ,
25
25
Value :: CharCluster ( l, c) => Ok ( LooseString :: Owned ( format ! (
26
26
"{}" ,
27
- String :: from_utf8_lossy( & c[ 0 ..* l as usize ] )
27
+ String :: from_utf8_lossy( & c[ 0 ..l as usize ] )
28
28
) ) ) ,
29
29
Value :: CharClusterLong ( h) => {
30
- let ch = vm. get_string ( * h) ;
30
+ let ch = vm. get_string ( h) ;
31
31
Ok ( LooseString :: Borrowed ( ch) )
32
32
}
33
- Value :: Symbol ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( * i) ) ) ,
34
- Value :: Keyword ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( * i) ) ) ,
35
- Value :: StringConst ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( * i) ) ) ,
33
+ Value :: Symbol ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( i) ) ) ,
34
+ Value :: Keyword ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( i) ) ) ,
35
+ Value :: StringConst ( i) => Ok ( LooseString :: Borrowed ( vm. get_interned ( i) ) ) ,
36
36
_ => Err ( VMError :: new_conversion (
37
37
ErrorStrings :: fix_me_mismatched_type (
38
38
String :: from ( ValueTypes :: from ( [
@@ -51,10 +51,10 @@ impl<'a> SlFromRef<'a, &Value> for LooseString<'a> {
51
51
}
52
52
}
53
53
54
- impl < ' a > SlFromRef < ' a , & ' a Value > for char {
55
- fn sl_from_ref ( value : & Value , vm : & ' a SloshVm ) -> VMResult < Self > {
54
+ impl < ' a > SlFromRef < ' a , Value > for char {
55
+ fn sl_from_ref ( value : Value , vm : & ' a SloshVm ) -> VMResult < Self > {
56
56
match value {
57
- Value :: CodePoint ( char) => Ok ( * char) ,
57
+ Value :: CodePoint ( char) => Ok ( char) ,
58
58
_ => Err ( VMError :: new_conversion (
59
59
ErrorStrings :: fix_me_mismatched_type_with_context (
60
60
String :: from ( ValueTypes :: from ( [ ValueType :: CodePoint ] ) ) ,
@@ -72,12 +72,11 @@ impl SlFrom<char> for Value {
72
72
}
73
73
}
74
74
75
- impl < ' a > SlFromRef < ' a , & Value > for & ' a str {
76
- fn sl_from_ref ( value : & Value , vm : & ' a SloshVm ) -> VMResult < Self > {
77
- value. sl_as_ref ( vm)
75
+ impl < ' a > SlFromRef < ' a , Value > for & ' a str {
76
+ fn sl_from_ref ( value : Value , vm : & ' a SloshVm ) -> VMResult < Self > {
77
+ ( & value) . sl_as_ref ( vm)
78
78
}
79
79
}
80
-
81
80
impl < ' a > SlAsRef < ' a , str > for & Value {
82
81
fn sl_as_ref ( & self , vm : & ' a SloshVm ) -> VMResult < & ' a str > {
83
82
match self {
@@ -96,15 +95,15 @@ impl<'a> SlAsRef<'a, str> for &Value {
96
95
}
97
96
}
98
97
99
- impl < ' a > SlFromRef < ' a , & Value > for SloshChar < ' a > {
100
- fn sl_from_ref ( value : & Value , vm : & ' a SloshVm ) -> VMResult < Self > {
98
+ impl < ' a > SlFromRef < ' a , Value > for SloshChar < ' a > {
99
+ fn sl_from_ref ( value : Value , vm : & ' a SloshVm ) -> VMResult < Self > {
101
100
match value {
102
- Value :: CodePoint ( ch) => Ok ( SloshChar :: Char ( * ch) ) ,
101
+ Value :: CodePoint ( ch) => Ok ( SloshChar :: Char ( ch) ) ,
103
102
Value :: CharCluster ( l, c) => Ok ( SloshChar :: String ( Cow :: Owned ( format ! (
104
103
"{}" ,
105
- String :: from_utf8_lossy( & c[ 0 ..* l as usize ] )
104
+ String :: from_utf8_lossy( & c[ 0 ..l as usize ] )
106
105
) ) ) ) ,
107
- Value :: CharClusterLong ( h) => Ok ( SloshChar :: String ( Cow :: Borrowed ( vm. get_string ( * h) ) ) ) ,
106
+ Value :: CharClusterLong ( h) => Ok ( SloshChar :: String ( Cow :: Borrowed ( vm. get_string ( h) ) ) ) ,
108
107
_ => Err ( VMError :: new_conversion (
109
108
ErrorStrings :: fix_me_mismatched_type (
110
109
String :: from ( ValueTypes :: from ( [
@@ -119,6 +118,12 @@ impl<'a> SlFromRef<'a, &Value> for SloshChar<'a> {
119
118
}
120
119
}
121
120
121
+ impl < ' a > SlFromRefMut < ' a , Value > for & ' a mut String {
122
+ fn sl_from_ref_mut ( value : Value , vm : & ' a mut SloshVm ) -> VMResult < Self > {
123
+ ( & value) . sl_as_mut ( vm)
124
+ }
125
+ }
126
+
122
127
impl < ' a > SlAsMut < ' a , String > for & Value {
123
128
fn sl_as_mut ( & mut self , vm : & ' a mut SloshVm ) -> VMResult < & ' a mut String > {
124
129
match self {
@@ -157,10 +162,10 @@ where
157
162
}
158
163
}
159
164
160
- impl < ' a > SlFromRef < ' a , & ' a Value > for String {
161
- fn sl_from_ref ( value : & Value , vm : & ' a SloshVm ) -> VMResult < Self > {
165
+ impl < ' a > SlFromRef < ' a , Value > for String {
166
+ fn sl_from_ref ( value : Value , vm : & ' a SloshVm ) -> VMResult < Self > {
162
167
match value {
163
- Value :: String ( h) => Ok ( vm. get_string ( * h) . to_string ( ) ) ,
168
+ Value :: String ( h) => Ok ( vm. get_string ( h) . to_string ( ) ) ,
164
169
_ => Err ( VMError :: new_conversion (
165
170
ErrorStrings :: fix_me_mismatched_type (
166
171
<& ' static str >:: from ( ValueType :: String ) ,
@@ -252,7 +257,7 @@ mod tests {
252
257
fn try_conversion_error ( ) {
253
258
let mut vm = new_slosh_vm ( ) ;
254
259
let value = create_string ( & mut vm) ;
255
- let c: VMResult < char > = ( & value) . sl_into_ref ( & mut vm) ;
260
+ let c: VMResult < char > = value. sl_into_ref ( & vm) ;
256
261
assert ! ( c. is_err( ) ) ;
257
262
let err = VMError :: new_conversion ( ErrorStrings :: fix_me_mismatched_type_with_context (
258
263
String :: from ( ValueTypes :: from ( [ ValueType :: CodePoint ] ) ) ,
@@ -362,7 +367,7 @@ mod tests {
362
367
}
363
368
_ => {
364
369
return {
365
- let arg: String = arg_0. sl_into_ref ( vm) ?;
370
+ let arg: String = ( * arg_0) . sl_into_ref ( vm) ?;
366
371
arg. trim ( ) . to_string ( ) . sl_into ( vm)
367
372
}
368
373
}
@@ -387,12 +392,12 @@ mod tests {
387
392
. expect ( "&mut String can be converted to Value" ) ;
388
393
assert ! ( matches!( val, Value :: String ( _) ) ) ;
389
394
390
- let _s: String = ( & val)
395
+ let _s: String = val
391
396
. sl_into_ref ( vm)
392
397
. expect ( "&Value::String can be converted to String" ) ;
393
398
let kwd_val = create_keyword ( vm) ;
394
399
395
- let e: VMResult < String > = ( & kwd_val) . sl_into_ref ( vm) ;
400
+ let e: VMResult < String > = kwd_val. sl_into_ref ( vm) ;
396
401
e. expect_err ( "Can not convert keyword to String" ) ;
397
402
398
403
let _s: & str = ( & val)
@@ -446,7 +451,7 @@ mod tests {
446
451
let vm = & mut vm;
447
452
448
453
let val = create_code_point ( ) ;
449
- let _c: char = ( & val)
454
+ let _c: char = val
450
455
. sl_into_ref ( vm)
451
456
. expect ( "&Value::CodePoint can be converted to char" ) ;
452
457
}
@@ -468,12 +473,12 @@ mod tests {
468
473
let vm = & mut vm;
469
474
470
475
let val = create_char_cluster ( vm) ;
471
- let _c: SloshChar = ( & val)
476
+ let _c: SloshChar = val
472
477
. sl_into_ref ( vm)
473
478
. expect ( "&Value::CharCluster can be converted to SloshChar" ) ;
474
479
475
480
let val = create_char_cluster_long ( vm) ;
476
- let _c: SloshChar = ( & val)
481
+ let _c: SloshChar = val
477
482
. sl_into_ref ( vm)
478
483
. expect ( "&Value::CharClusterLong can be converted to SloshChar" ) ;
479
484
}
@@ -514,7 +519,7 @@ mod tests {
514
519
let loose_strings_as_vals = get_values_that_can_be_cast_to_loose_strings ( vm) ;
515
520
516
521
for val in loose_strings_as_vals {
517
- let _loose_string: LooseString = ( & val)
522
+ let _loose_string: LooseString = val
518
523
. sl_into_ref ( vm)
519
524
. expect ( "This value should be convertable to a LooseString" ) ;
520
525
}
0 commit comments