MiaoWoo
6816e51239
1. upgrade bukkit chat 2. fix config update error Signed-off-by: MiaoWoo <admin@yumc.pw>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { IPrefixParselet } from './prefix'
|
|
import { Token } from '../../tokenizer/token'
|
|
import { Parser } from '../parse'
|
|
import { NameExpression } from '../expressions/name'
|
|
import { ContextSwitchExpression } from '../expressions/contextSwitch'
|
|
|
|
export class NameParselet implements IPrefixParselet {
|
|
constructor(public precedence = 0) {}
|
|
|
|
parse(parser: Parser, token: Token) {
|
|
const nameExpr = new NameExpression(
|
|
parser.executionEnv,
|
|
token.getText()
|
|
)
|
|
const nextTokens = <const>[parser.lookAhead(0), parser.lookAhead(1)]
|
|
|
|
// Context switching operator "->"
|
|
if (
|
|
nextTokens[0].getType() === 'MINUS' &&
|
|
nextTokens[1].getType() === 'GREATER'
|
|
) {
|
|
parser.consume('MINUS')
|
|
parser.consume('GREATER')
|
|
|
|
const nameToken = parser.lookAhead(0)
|
|
if (nameToken.getType() !== 'NAME')
|
|
throw new Error(
|
|
`Cannot use context switch operator "->" on ${parser.lookAhead(
|
|
0
|
|
)}`
|
|
)
|
|
|
|
parser.consume('NAME')
|
|
|
|
return new ContextSwitchExpression(
|
|
nameExpr,
|
|
new NameExpression(parser.executionEnv, nameToken.getText())
|
|
)
|
|
}
|
|
|
|
return nameExpr
|
|
}
|
|
}
|