feat: catch indirect function calls

This commit is contained in:
Barf-Vader 2025-02-07 17:22:54 +00:00 committed by Gleb Koval
parent b5e72660b7
commit 3d2725be8d

View File

@ -2,7 +2,7 @@ package wacc
import parsley.Result import parsley.Result
import parsley.Parsley import parsley.Parsley
import parsley.Parsley.{atomic, many, notFollowedBy, pure} import parsley.Parsley.{atomic, many, notFollowedBy, pure, unit}
import parsley.combinator.{countSome, sepBy} import parsley.combinator.{countSome, sepBy}
import parsley.expr.{precedence, SOps, InfixL, InfixN, InfixR, Prefix, Atoms} import parsley.expr.{precedence, SOps, InfixL, InfixN, InfixR, Prefix, Atoms}
import parsley.errors.combinator._ import parsley.errors.combinator._
@ -95,7 +95,9 @@ object parser {
private val `<ident>` = private val `<ident>` =
Ident(ident) | some("*" | "&").verifiedExplain("pointer operators are not allowed") Ident(ident) | some("*" | "&").verifiedExplain("pointer operators are not allowed")
private lazy val `<ident-or-array-elem>` = private lazy val `<ident-or-array-elem>` =
`<ident>` <**> (`<array-indices>` </> identity) (`<ident>` <~ ("(".verifiedExplain(
"functions can only be called using 'call' keyword"
) | unit)) <**> (`<array-indices>` </> identity)
private val `<array-indices>` = ArrayElem(some("[" ~> `<expr>` <~ "]")) private val `<array-indices>` = ArrayElem(some("[" ~> `<expr>` <~ "]"))
// Types // Types