code: func (l *lexer) lexIdentifier() {
  	r := l.next()
  	if !isIdentifierFirst(r) {
  		panic("Unexpected character in lexIdentifier")
  	}
  	for ; r != lexEOF; r = l.next() {
  		if !isIdentifier(r) {
  			break
  		}
  	}
  	l.backup()
  
  	switch l.input[l.tokenStart:l.pos.byteNo] {
  	case "assert":
  		l.emitToken(tokenAssert)
  	case "else":
  		l.emitToken(tokenElse)
  	case "error":
  		l.emitToken(tokenError)
  	case "false":
  		l.emitToken(tokenFalse)
  	case "for":
  		l.emitToken(tokenFor)
  	case "function":
  		l.emitToken(tokenFunction)
  	case "if":
  		l.emitToken(tokenIf)
  	case "import":
  		l.emitToken(tokenImport)
  	case "importstr":
  		l.emitToken(tokenImportStr)
  	case "in":
  		l.emitToken(tokenIn)
  	case "local":
  		l.emitToken(tokenLocal)
  	case "null":
  		l.emitToken(tokenNullLit)
  	case "self":
  		l.emitToken(tokenSelf)
  	case "super":
  		l.emitToken(tokenSuper)
  	case "tailstrict":
  		l.emitToken(tokenTailStrict)
  	case "then":
  		l.emitToken(tokenThen)
  	case "true":
  		l.emitToken(tokenTrue)
  	default:
  		// Not a keyword, assume it is an identifier
  		l.emitToken(tokenIdentifier)
  	}
  }
docs: // lexIdentifier will consume a identifer and emit a token.  It is assumed
  // that the next rune to be served by the lexer will be a leading digit.  This
  // may emit a keyword or an identifier.