RDC00310 — Redundant ByVal argument
Severity: Hint · Family: RDC (Rubberduck Core analyzers) ·
Raised by: RedundantByValArgumentAnalyzer
An argument is written ByVal for a parameter that is ByVal already.
The parameter takes its argument by value whether ByVal is written before it or not: Twice(ByVal 2) and Twice(2) pass the same value the same way.
An object is passed as itself, not as the value of its default member, which a pair of parentheses would make it. The keyword changes nothing.
MS-VBA compiles it. MS-VBAL §5.6.13.1 says ByVal is written only before an argument of an external procedure, and RD-VBA compiles it where MS-VBA
does (RD-VBAL §5.6.13.1 Argument Lists). Written anywhere else, ByVal is a
compile error, the one MS-VBA reports: Type mismatch before an argument of a ByRef parameter, and a Syntax error before one of a function MS-VBA
compiles inline, such as Len or InStr.
ByVal is not redundant before an argument of a Declare's ByRef or As Any parameter, or of VarPtr: there it passes a value where an address goes.
That the parameter is ByVal is a fact of the argument
(ValueExpressionSemanticFlags.RedundantByVal): the analyzer reads it off the facts
the environment host found, and is not given the syntax tree to look it up in.
How it is raised
| Situation | Example | Resolution |
|---|---|---|
An argument of a ByVal parameter of the workspace, of a library, of a class, or of a Declare. |
Twice(ByVal 2), Left("abc", ByVal 1), k.Add ByVal n |
Remove ByVal: Twice(2). |
| The same, given by name. | Twice(n:=ByVal 2) |
Remove ByVal: Twice(n:=2). |
See also
ACCUEIL • HOME | ℹ️ BIENVENUE • WELCOME | 🧩 BÂTISSONS • BUILD | RD-VBAL | SDK | 🌐 rubberduckvba.ca