Openjdk 入門してみた話
- 6. 中身
? だいたい C++ or Java で書かれている
? わかりやすい
? 歴史を感じるコードはめっちゃある
? Network まわりの挙動とか hsperfdata とか触ると
きにはソース手元にあったほうが便利
- 7. go-hsperfdata
? hsperfdata を golang で解析する。
? jcmd とかでできることがだいたいできる
? ソース読んだらなんとなく動いた
? java 起動しなくていいので起動はやくて便利
? https://github.com/tokuhirom/go-hsperfdata
- 11. いじった
1 diff -r 6e14043ceae4 src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java
2 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Thu Aug 11 15:47:10 2016 +0000
3 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Tue Aug 30 06:13:27 2016 +0900
4 @@ -629,6 +629,39 @@
5 break loop;
6 case '"':
7 reader.scanChar();
8 +
9 + if (reader.ch == '"' && reader.bp < reader.buflen) {
10 + reader.scanChar();
11 + if (reader.ch == '"' && reader.bp < reader.buflen) { // """
12 + reader.scanChar();
13 + while (reader.bp < reader.buflen) { // allow CR, LF in """ literal
14 + if (reader.ch == '"' && reader.bp < reader.buflen) {
15 + reader.scanChar();
16 + if (reader.ch == '"' && reader.bp < reader.buflen) {
17 + reader.scanChar();
18 + if (reader.ch == '"' && reader.bp < reader.buflen) {
19 + tk = TokenKind.STRINGLITERAL;
20 + reader.scanChar();
21 + break loop;
22 + } else {
23 + reader.putChar('"');
24 + reader.putChar('"');
25 + }
26 + } else {
27 + reader.putChar('"');
28 + }
29 + } else {
30 + scanLitChar(pos);
31 + }
32 + }
33 + lexError(pos, "unclosed.str.lit");
34 + break loop;
35 + } else { // Empty "" literal
36 + tk = TokenKind.STRINGLITERAL;
37 + break loop;
38 + }
39 + }
40 +
41 while (reader.ch != '"' && reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen)
42 scanLitChar(pos);
43 if (reader.ch == '"') {