- Add IdentifierBeforeDot token emitted when identifier immediately precedes '.'
- Move DotGet into @skip {} block using IdentifierBeforeDot
- Prevents 'basename . prop' from parsing as DotGet
- Allows 'basename.prop' to work as expected when identifier is in scope
- Fixes test: 'a word can be contained in parens'
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed tokenizer input.read() to use absolute positions
- Fixed FN_KEYWORD term ID (33 after DotGet added to expression)
- Added DotGet to expression for use as function argument
- All 8 DotGet tests passing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement Task 6 from docs/plans/2025-10-12-pipe-expressions.md
- Add pipe operator (|) termination to tokenizer
- Update grammar to include expressionWithoutIdentifier in pipeOperand
- Add PipeExpr case to compiler switch statement
- Implement pipe compilation: piped value becomes first argument
- Store piped values in temporary __pipe_value variable
- Handle both FunctionCallOrIdentifier and FunctionCall operands
- Add integration tests for pipe expressions
Tests:
- Simple pipe (5 | double) works correctly
- Additional tests exist but have pre-existing issues with function parameters
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>