Put
(p *parser)
| 105 | |
| 106 | // Put |
| 107 | func parseSimpleAddr(p *parser) (a Address) { |
| 108 | //fmt.Printf("parseSimpleAddr:1 %s\n", p.tok) |
| 109 | back := false |
| 110 | rel := tryRelative(p) |
| 111 | v := p.tok.value |
| 112 | k := p.tok |
| 113 | //fmt.Printf("%s\n", k) |
| 114 | switch k.kind { |
| 115 | case kindRegexpBack: |
| 116 | back = true |
| 117 | fallthrough |
| 118 | case kindRegexp: |
| 119 | re, err := regexp.Compile(v) |
| 120 | if err != nil { |
| 121 | p.fatal(err) |
| 122 | return |
| 123 | } |
| 124 | if rel != -1 { |
| 125 | rel = 1 |
| 126 | } |
| 127 | return &Regexp{re, back, 1} |
| 128 | case kindLineOffset, kindByteOffset: |
| 129 | i := p.mustatoi(v) |
| 130 | if rel < 0 { |
| 131 | i = -i |
| 132 | } |
| 133 | if k.kind == kindLineOffset { |
| 134 | return &Line{i, rel} |
| 135 | } |
| 136 | return &Byte{i, rel} |
| 137 | case kindDot: |
| 138 | return &Dot{} |
| 139 | } |
| 140 | p.err = fmt.Errorf("bad address: %q", v) |
| 141 | return |
| 142 | } |
| 143 | |
| 144 | func parseArg(p *parser) (arg string) { |
| 145 | p.Next() |