@@ -78,7 +78,7 @@ pub fn parse_external_function_def(tokens: &mut Tokens) -> Result<Statement, Par
7878 if matches ! ( tok. token, Token :: MutableDecl | Token :: ConstantDecl ) {
7979 tokens. next ( ) ;
8080 }
81- let param_type = parse_type ( tokens) ?;
81+ let param_type = param_typ ( tokens, is_mutable ) ?;
8282 let param_name = match tokens. next ( ) {
8383 Some ( SpannedToken {
8484 token : Token :: Identifier ( s) ,
@@ -180,7 +180,8 @@ pub fn parse_function_def(tokens: &mut Tokens) -> Result<Statement, ParserError>
180180 if matches ! ( tok. token, Token :: MutableDecl | Token :: ConstantDecl ) {
181181 tokens. next ( ) ;
182182 }
183- let param_type = parse_type ( tokens) ?;
183+ let param_typ = param_typ ( tokens, is_mutable) ?;
184+
184185 let param_name = match tokens. next ( ) {
185186 Some ( SpannedToken {
186187 token : Token :: Identifier ( s) ,
@@ -192,7 +193,7 @@ pub fn parse_function_def(tokens: &mut Tokens) -> Result<Statement, ParserError>
192193 } ;
193194 params. push ( Parameter {
194195 name : param_name,
195- typ : param_type ,
196+ typ : param_typ ,
196197 is_pointer : is_mutable,
197198 } ) ;
198199 match tokens. peek ( ) {
@@ -254,3 +255,13 @@ pub fn parse_function_def(tokens: &mut Tokens) -> Result<Statement, ParserError>
254255 params,
255256 } )
256257}
258+ fn param_typ ( tokens : & mut Tokens , is_mutable : bool ) -> Result < Type , ParserError > {
259+ let mut param_type = parse_type ( tokens) ?;
260+ match ( & param_type, & is_mutable) {
261+ ( Type :: String ( S ) , false ) => {
262+ param_type = Type :: String ( crate :: shared_ast:: StringEnum :: LiteralConstString ) ;
263+ }
264+ _ => { }
265+ }
266+ Ok ( param_type)
267+ }
0 commit comments