| 938 | } |
| 939 | |
| 940 | func (p *codeParser) parseCodeBlock() *nodeGoCode { |
| 941 | result := &nodeGoCode{context: inlineGoCode} |
| 942 | if p.peek().tok != token.LBRACE { |
| 943 | p.errorf("expected '{', got '%s'", p.peek().tok) |
| 944 | } |
| 945 | depth := 1 |
| 946 | p.advance() |
| 947 | result.pos.start = p.parser.offset |
| 948 | start := p.peek().pos |
| 949 | maxread := start |
| 950 | lastlit := p.peek().String() |
| 951 | loop: |
| 952 | for { |
| 953 | switch p.peek().tok { |
| 954 | case token.LBRACE: |
| 955 | depth++ |
| 956 | case token.RBRACE: |
| 957 | depth-- |
| 958 | if depth == 0 { |
| 959 | break loop |
| 960 | } |
| 961 | case token.EOF: |
| 962 | p.errorf("unexpected EOF parsing code block") |
| 963 | } |
| 964 | maxread = p.peek().pos |
| 965 | lastlit = p.peek().String() |
| 966 | p.advance() |
| 967 | } |
| 968 | n := (p.file.Offset(maxread) - p.file.Offset(start)) + len(lastlit) |
| 969 | if p.peek().tok != token.RBRACE { |
| 970 | panic("") |
| 971 | } |
| 972 | p.advance() |
| 973 | result.code = p.sourceFrom(start)[:n] |
| 974 | result.pos.end = result.pos.start + n |
| 975 | return result |
| 976 | } |
| 977 | |
| 978 | func (p *codeParser) parseImportKeyword() *nodeImport { |
| 979 | /* |