Well... it parses, and after parsing each group of tokens runs a function. And yes, it replaces some bytecodes, but its lack of an AST means it can only post-process the bytecode.
And everyone I've spoken to refers to it as single-pass.
Post processing the bytecode is what makes it multi-pass. "One-pass" means that it literally makes one pass over the code. Whether it uses an AST or not isn't really relevant.
It parses, then does "bytecode" generation, then fiddles with the bytecodes a bit. So it does multiple passes.