Allow pub-keyword for impl-block

This commit is contained in:
Sofia 2025-07-27 22:55:34 +03:00
parent a6a903a45d
commit 9d5a20e76a
3 changed files with 26 additions and 11 deletions

View File

@ -1,5 +1,4 @@
import std::print;
import std::from_str;
import std::add_char;
import std::set_char;
import std::free_string;
@ -8,7 +7,7 @@ import std::add_num_to_str;
import std::concat_strings;
fn main() {
let mut test = from_str("hello");
let mut test = String::new();
concat_strings(&mut test, from_str(" world"));

View File

@ -11,6 +11,17 @@ struct String {
must_be_freed: bool,
}
impl String {
pub fn new() -> String {
String {
inner: char::alloca(0),
length: 0,
max_length: 0,
must_be_freed: true,
}
}
}
impl binop (lhs: String) + (rhs: *char) -> String {
let mut new = lhs;
let added = from_str(rhs);

View File

@ -1052,15 +1052,20 @@ impl Parse for AssociatedFunctionBlock {
let ty = stream.parse::<Type>()?;
stream.expect(Token::BraceOpen)?;
let mut functions = Vec::new();
while let Some(Token::FnKeyword) = stream.peek() {
let mut fun: FunctionDefinition = stream.parse()?;
fun.0.self_kind = match fun.0.self_kind {
SelfKind::Owned(_) => SelfKind::Owned(ty.0.clone()),
SelfKind::Borrow(_) => SelfKind::Borrow(ty.0.clone()),
SelfKind::MutBorrow(_) => SelfKind::MutBorrow(ty.0.clone()),
SelfKind::None => SelfKind::None,
};
functions.push(fun);
loop {
match stream.peek() {
Some(Token::FnKeyword) | Some(Token::PubKeyword) => {
let mut fun: FunctionDefinition = stream.parse()?;
fun.0.self_kind = match fun.0.self_kind {
SelfKind::Owned(_) => SelfKind::Owned(ty.0.clone()),
SelfKind::Borrow(_) => SelfKind::Borrow(ty.0.clone()),
SelfKind::MutBorrow(_) => SelfKind::MutBorrow(ty.0.clone()),
SelfKind::None => SelfKind::None,
};
functions.push(fun);
}
_ => break,
}
}
stream.expect(Token::BraceClose)?;