diff --git a/priv/stdlib/String.aes b/priv/stdlib/String.aes index 9e9efb2..a5a5147 100644 --- a/priv/stdlib/String.aes +++ b/priv/stdlib/String.aes @@ -10,6 +10,9 @@ namespace String = function from_list(cs : list(char)) : string = StringInternal.from_list(cs) function to_list(s : string) : list(char) = StringInternal.to_list(s) + function to_upper(s : string) = StringInternal.to_upper(s) + function to_lower(s : string) = StringInternal.to_lower(s) + function split(i : int, s : string) : string * string = let cs = StringInternal.to_list(s) (StringInternal.from_list(List.take(i, cs)), StringInternal.from_list(List.drop(i, cs))) @@ -19,12 +22,6 @@ namespace String = [] => None x :: _ => Some(x) - function to_upper(s : string) = - StringInternal.from_list(List.map(Char.to_upper, StringInternal.to_list(s))) - - function to_lower(s : string) = - StringInternal.from_list(List.map(Char.to_lower, StringInternal.to_list(s))) - function contains(str : string, substr : string) : option(int) = if(substr == "") Some(0) else diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index 16962d5..0b21dfe 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -591,17 +591,18 @@ global_env() -> {"concat", Fun([String, String], String)}, {"to_list", Fun1(String, List(Char))}, {"from_list", Fun1(List(Char), String)}, + {"to_upper", Fun1(String, String)}, + {"to_lower", Fun1(String, String)}, {"sha3", Fun1(String, Hash)}, {"sha256", Fun1(String, Hash)}, - {"blake2b", Fun1(String, Hash)}]) }, + {"blake2b", Fun1(String, Hash)} + ]) }, %% Chars CharScope = #scope { funs = MkDefs( [{"to_int", Fun1(Char, Int)}, - {"from_int", Fun1(Int, Option(Char))}, - {"to_upper", Fun1(Char, Char)}, - {"to_lower", Fun1(Char, Char)}]) }, + {"from_int", Fun1(Int, Option(Char))}]) }, %% Bits BitsScope = #scope diff --git a/src/aeso_ast_to_fcode.erl b/src/aeso_ast_to_fcode.erl index df6b957..becbb91 100644 --- a/src/aeso_ast_to_fcode.erl +++ b/src/aeso_ast_to_fcode.erl @@ -247,8 +247,8 @@ builtins() -> {"pairing", 2}, {"miller_loop", 2}, {"final_exp", 1}, {"int_to_fr", 1}, {"int_to_fp", 1}, {"fr_to_int", 1}, {"fp_to_int", 1}]}, {["StringInternal"], [{"length", 1}, {"concat", 2}, {"to_list", 1}, {"from_list", 1}, - {"sha3", 1}, {"sha256", 1}, {"blake2b", 1}]}, - {["Char"], [{"to_int", 1}, {"from_int", 1}, {"to_lower", 1}, {"to_upper", 1}]}, + {"sha3", 1}, {"sha256", 1}, {"blake2b", 1}, {"to_lower", 1}, {"to_upper", 1}]}, + {["Char"], [{"to_int", 1}, {"from_int", 1}]}, {["Auth"], [{"tx_hash", none}, {"tx", none}]}, {["Bits"], [{"set", 2}, {"clear", 2}, {"test", 2}, {"sum", 1}, {"intersection", 2}, {"union", 2}, {"difference", 2}, {"none", none}, {"all", none}]}, @@ -1044,7 +1044,7 @@ op_builtins() -> [map_from_list, map_to_list, map_delete, map_member, map_size, stringinternal_length, stringinternal_concat, stringinternal_to_list, stringinternal_from_list, stringinternal_sha3, stringinternal_sha256, stringinternal_blake2b, - char_to_int, char_from_int, char_to_lower, char_to_upper, + char_to_int, char_from_int, stringinternal_to_lower, stringinternal_to_upper, bits_set, bits_clear, bits_test, bits_sum, bits_intersection, bits_union, bits_difference, int_to_str, address_to_str, crypto_verify_sig, address_to_contract, diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 8206c3f..99bd026 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -577,10 +577,10 @@ op_to_scode(stringinternal_length) -> aeb_fate_ops:str_length(?a, ?a); op_to_scode(stringinternal_concat) -> aeb_fate_ops:str_join(?a, ?a, ?a); op_to_scode(stringinternal_to_list) -> aeb_fate_ops:str_to_list(?a, ?a); op_to_scode(stringinternal_from_list) -> aeb_fate_ops:str_from_list(?a, ?a); +op_to_scode(stringinternal_to_lower) -> aeb_fate_ops:str_to_lower(?a, ?a); +op_to_scode(stringinternal_to_upper) -> aeb_fate_ops:str_to_upper(?a, ?a); op_to_scode(char_to_int) -> aeb_fate_ops:char_to_int(?a, ?a); op_to_scode(char_from_int) -> aeb_fate_ops:char_from_int(?a, ?a); -op_to_scode(char_to_lower) -> aeb_fate_ops:char_to_lower(?a, ?a); -op_to_scode(char_to_upper) -> aeb_fate_ops:char_to_upper(?a, ?a); op_to_scode(bits_set) -> aeb_fate_ops:bits_set(?a, ?a, ?a); op_to_scode(bits_clear) -> aeb_fate_ops:bits_clear(?a, ?a, ?a); op_to_scode(bits_test) -> aeb_fate_ops:bits_test(?a, ?a, ?a); @@ -925,12 +925,12 @@ attributes(I) -> {'BLS12_381_INT_TO_FP', A, B} -> Pure(A, [B]); {'BLS12_381_FR_TO_INT', A, B} -> Pure(A, [B]); {'BLS12_381_FP_TO_INT', A, B} -> Pure(A, [B]); - {'STRING_TO_LIST', A, B} -> Pure(A, [B]); - {'STRING_FROM_LIST', A, B} -> Pure(A, [B]); + {'STR_TO_LIST', A, B} -> Pure(A, [B]); + {'STR_FROM_LIST', A, B} -> Pure(A, [B]); + {'STR_TO_UPPER', A, B} -> Pure(A, [B]); + {'STR_TO_LOWER', A, B} -> Pure(A, [B]); {'CHAR_TO_INT', A, B} -> Pure(A, [B]); {'CHAR_FROM_INT', A, B} -> Pure(A, [B]); - {'CHAR_TO_UPPER', A, B} -> Pure(A, [B]); - {'CHAR_TO_LOWER', A, B} -> Pure(A, [B]); {'ABORT', A} -> Impure(pc, A); {'EXIT', A} -> Impure(pc, A); 'NOP' -> Pure(none, [])