Variable reference from $VAR to @VAR to avoid object conflict

This commit is contained in:
Martino Ferrari
2026-01-30 01:01:47 +01:00
parent 0cbbf5939a
commit c3f4d8f465
17 changed files with 52 additions and 39 deletions

View File

@@ -36,6 +36,7 @@ const (
TokenCaret
TokenAmpersand
TokenConcat
TokenVariableReference
)
type Token struct {
@@ -184,6 +185,8 @@ func (l *Lexer) NextToken() Token {
return l.lexString()
case '#':
return l.lexHashIdentifier()
case '@':
return l.lexVariableReference()
case '$':
return l.lexObjectIdentifier()
}
@@ -311,3 +314,14 @@ func (l *Lexer) lexHashIdentifier() Token {
}
return l.emit(TokenIdentifier)
}
func (l *Lexer) lexVariableReference() Token {
for {
r := l.next()
if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' || r == '-' {
continue
}
l.backup()
return l.emit(TokenVariableReference)
}
}

View File

@@ -297,7 +297,7 @@ func (p *Parser) parseAtom() (Value, bool) {
true
case TokenIdentifier:
return &ReferenceValue{Position: tok.Position, Value: tok.Value}, true
case TokenObjectIdentifier:
case TokenVariableReference:
return &VariableReferenceValue{Position: tok.Position, Name: tok.Value}, true
case TokenLBrace:
arr := &ArrayValue{Position: tok.Position}