+ "notes": "COMPLETED (2026-02-24): Migrated Express4Runner.java to use new parser.\n\nExpress4Runner.java Migration Complete:\n- Changed operatorManager from ParserOperatorManager interface to OperatorManager concrete class\n- Updated all imports: removed aparser imports, added parser and common package imports\n- Updated parseToSyntaxTree() to return ProgramNode and throw ParseException\n- Updated getOutVarNames() to use VariableDetector with new parser\n- Updated getOutFunctions() to use FunctionExtractor with new parser\n- Updated getExpressionTracePoints() to use ASTCompiler.generateTracePoints()\n- Updated parseMacroDefine() to use ASTCompiler.compile() with new parser\n- Updated check() to use ScriptChecker with new parser\n- Updated parseDefinition() to use ASTCompiler with new parser\n- Removed clearDFACache() method (ANTLR-specific)\n\nTest status: 644 tests run, 590 tests pass (~92% pass rate) - same as baseline\n\nREMAINING ISSUES (54 tests still failing - 28 failures + 26 errors):\n1. Parser SYNTAX_ERRORs: BIT_AND, GT in generics, COMMA spread, DOT chain, CATCH_ALL wildcard import, FUNCTION as identifier\n2. InstructionGenerator: IfNode and TryCatchNode visitor methods broken\n3. ScriptChecker/OperatorLimit: operator count logic off\n4. Error position reporting: line/column numbers incorrect\n5. Macro support: macro definition/invocation returning null\n6. Function registry: getOutFunctions returning built-ins\n7. Spread operator: list spread not expanding\n8. Number/string literals: edge case parsing\n9. Variable detection: qualified paths (a.b.c) not tracked, scope-aware tracking needed\n10. Import aliases and static imports\n11. Operator alias/extension functions\n12. Short-circuit evaluation options\n13. Reflection: class fields, default interface methods\n14. Timeout detection\n15. Suite test failures\n16. clearDFACacheTest fails because clearDFACache was removed\n\nKNOWN LIMITATIONS:\n- getOutVarNames() does not handle scope-aware tracking (would require stack-based approach like OutVarNamesVisitor)\n- Variables read in else branches may not be correctly identified as external\n- getOutVarAttrs returns empty set (attribute path tracking not implemented)\n\n## Progress (Feb 24, 2026)\n- Fixed NPE in QvmGlobalScope.getSymbol() for null ExpressContext\n- Fixed ForLoopTest to use QLSecurityStrategy.open() for Java method calls\n- Fixed Express4RunnerTest imports (aparser -> common)\n- Fixed ClearDfaCacheTest to handle ParseException\n\n**REMAINING WORK:**\n- Many tests still fail due to StrategyIsolation blocking Java method calls\n- Tests that call Java methods need explicit use of QLSecurityStrategy.open()\n- Some parser edge cases still need fixing (CATCH_ALL, DOT in map keys, etc.)"
0 commit comments