code: func readName(source *source.Source, position, runePosition int) Token {
  	body := source.Body
  	bodyLength := len(body)
  	endByte := position + 1
  	endRune := runePosition + 1
  	for {
  		code, _ := runeAt(body, endByte)
  		if (endByte != bodyLength) &&
  			(code == '_' || // _
  				code >= '0' && code <= '9' || // 0-9
  				code >= 'A' && code <= 'Z' || // A-Z
  				code >= 'a' && code <= 'z') { // a-z
  			endByte++
  			endRune++
  			continue
  		} else {
  			break
  		}
  	}
  	return makeToken(NAME, runePosition, endRune, string(body[position:endByte]))
  }
docs: // Reads an alphanumeric + underscore name from the source.
  // [_A-Za-z][_0-9A-Za-z]*
  // position: Points to the byte position in the byte array
  // runePosition: Points to the rune position in the byte array