diff --git a/stdlib/ast_transformation.krak b/stdlib/ast_transformation.krak index cda70d4..c5330f6 100644 --- a/stdlib/ast_transformation.krak +++ b/stdlib/ast_transformation.krak @@ -549,9 +549,10 @@ obj ast_transformation (Object) { } value_str = new_str } - } else if (value_str[0] == '\'') //'// lol, comment hack for vim syntax highlighting (my fault, of course) + } else if (value_str[0] == '\'') { //'// lol, comment hack for vim syntax highlighting (my fault, of course) value_type = type_ptr(base_type::character()) - else if (value_str == "true" || value_str == "false") + value_str = value_str.slice(1,-2) + } else if (value_str == "true" || value_str == "false") value_type = type_ptr(base_type::boolean()) else { // should differentiate between float and double... diff --git a/stdlib/bytecode_generator.krak b/stdlib/bytecode_generator.krak index 8a28ba9..ee2758b 100644 --- a/stdlib/bytecode_generator.krak +++ b/stdlib/bytecode_generator.krak @@ -617,6 +617,8 @@ obj bytecode_generator (Object) { return emit_imm((node->value.string_value == "true") cast long) else if (node->value.value_type->base == base_type::character() && node->value.value_type->indirection == 1) return emit_imm((node->value.string_value.toCharArray()) cast long) + else if (node->value.value_type->base == base_type::character() && node->value.value_type->indirection == 0) + return emit_imm((node->value.string_value[0]) cast long) else return emit_imm(string_to_num(node->value.string_value)) } diff --git a/stdlib/c_generator.krak b/stdlib/c_generator.krak index 1388cdc..6245eac 100644 --- a/stdlib/c_generator.krak +++ b/stdlib/c_generator.krak @@ -291,6 +291,8 @@ obj c_generator (Object) { } fun generate_value(node: *ast_node): string { var value = node->value.string_value + if (node->value.value_type->base == base_type::character() && node->value.value_type->indirection == 0) + return "'" + value + "'" if (node->value.value_type->base != base_type::character() || node->value.value_type->indirection != 1) return value diff --git a/stdlib/string.krak b/stdlib/string.krak index d357f45..6003f12 100644 --- a/stdlib/string.krak +++ b/stdlib/string.krak @@ -191,6 +191,11 @@ obj string (Object, Serializable, Hashable) { return *this == str } + fun operator+(c: char): string { + var to_ret = *this + to_ret += c + return to_ret + } fun operator+(integer: int): string return *this + to_string(integer); fun operator+(integer: long): string return *this + to_string(integer); fun operator+(integer: ulong): string return *this + to_string(integer);