github.com/jflude/taocp@v0.0.0-20240210234939-99f2a91af3c2/mixal/pseudo.go (about) 1 package mixal 2 3 import "github.com/jflude/taocp/mix" 4 5 func (a *asmb) parseEQU() { 6 if a.wVal = 0; !a.parseWValue() { 7 a.syntaxError() 8 } 9 sym := a.tokens[0].val.(string) 10 a.symbols[sym] = a.wVal 11 a.patchFixUps(sym) 12 } 13 14 func (a *asmb) parseORIG() { 15 if a.wVal = 0; !a.parseWValue() { 16 a.syntaxError() 17 } 18 a.self = a.wVal.Int() 19 a.newSegment(a.self) 20 } 21 22 func (a *asmb) parseCON() { 23 if a.wVal = 0; !a.parseWValue() { 24 a.syntaxError() 25 } 26 a.emit(a.wVal) 27 } 28 29 func (a *asmb) parseALF() { 30 w, err := mix.ConvertToMIX(a.input) 31 if err != nil { 32 parseError(err, a.input) 33 } 34 a.input = "" 35 a.emit(w[0]) 36 } 37 38 func (a *asmb) parseEND() { 39 if a.wVal = 0; !a.parseWValue() { 40 a.syntaxError() 41 } 42 a.obj.start = a.wVal.Int() 43 for _, lit := range a.literals { 44 a.symbols[lit.sym] = mix.NewWord(a.self) 45 a.patchFixUps(lit.sym) 46 a.emit(lit.val) 47 } 48 for k := range a.fixups { 49 a.symbols[k] = mix.NewWord(a.self) 50 a.patchFixUps(k) 51 a.emit(0) 52 } 53 }