As: obj.ATEXT,
Lineno: p.histLineNum,
From: nameAddr,
- From3: obj.Addr{
+ From3: &obj.Addr{
Type: obj.TYPE_CONST,
Offset: flag,
},
As: obj.ADATA,
Lineno: p.histLineNum,
From: nameAddr,
- From3: obj.Addr{
+ From3: &obj.Addr{
Offset: int64(scale),
},
To: valueAddr,
As: obj.AGLOBL,
Lineno: p.histLineNum,
From: nameAddr,
- From3: obj.Addr{
+ From3: &obj.Addr{
Offset: flag,
},
To: addr,
prog.To = a[2]
case '6', '8':
prog.From = a[0]
- prog.From3 = a[1]
+ prog.From3 = newAddr(a[1])
prog.To = a[2]
case '9':
if arch.IsPPC64CMP(op) {
prog.To = a[2]
case obj.TYPE_CONST:
prog.From = a[0]
- prog.From3 = a[1]
+ prog.From3 = newAddr(a[1])
prog.To = a[2]
default:
p.errorf("invalid addressing modes for %s instruction", obj.Aconv(op))
if p.arch.Thechar == '7' {
prog.From = a[0]
prog.Reg = p.getRegister(prog, op, &a[1])
- prog.From3 = a[2]
+ prog.From3 = newAddr(a[2])
prog.To = a[3]
break
}
// That is, are there 4-operand instructions without this property?
prog.From = a[0]
prog.Reg = p.getRegister(prog, op, &a[1])
- prog.From3 = a[2]
+ prog.From3 = newAddr(a[2])
prog.To = a[3]
break
}
} else {
mask = (^uint32(0) >> uint(mask2+1)) & (^uint32(0) << uint(31-(mask1-1)))
}
- prog.From3 = obj.Addr{
+ prog.From3 = &obj.Addr{
Type: obj.TYPE_CONST,
Offset: int64(mask),
}
p.append(prog, cond, true)
}
+// newAddr returns a new(Addr) initialized to x.
+func newAddr(x obj.Addr) *obj.Addr {
+ p := new(obj.Addr)
+ *p = x
+ return p
+}
+
var emptyProg obj.Prog
// getConstantPseudo checks that addr represents a plain constant and returns its value.
// can be rewritten independently)
// 0 otherwise (not touched)
func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
- if p.From3.Type != obj.TYPE_NONE {
+ if p.From3Type() != obj.TYPE_NONE {
// 7g never generates a from3
- fmt.Printf("copyu: from3 (%v) not implemented\n", gc.Ctxt.Dconv(&p.From3))
+ fmt.Printf("copyu: from3 (%v) not implemented\n", gc.Ctxt.Dconv(p.From3))
}
if p.RegTo2 != obj.REG_NONE {
// 7g never generates a to2
p.To.Sym = nil
p.To.Type = obj.TYPE_CONST
p.To.Offset = nam.Type.Width
+ p.From3 = new(obj.Addr)
if nam.Name.Readonly {
p.From3.Offset = obj.RODATA
}
}
p.To.Type = obj.TYPE_CONST
p.To.Offset = int64(width)
+ p.From3 = new(obj.Addr)
p.From3.Offset = int64(flags)
}
p.From.Name = obj.NAME_EXTERN
p.From.Sym = Linksym(s)
p.From.Offset = int64(off)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(Widthptr)
p.From.Name = obj.NAME_EXTERN
p.From.Sym = Linksym(s)
p.From.Offset = int64(off)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(Widthptr)
datagostring(*lit, &p.To)
p.From.Name = obj.NAME_EXTERN
p.From.Offset = int64(off)
p.From.Sym = Linksym(s)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(len(t))
p.From.Name = obj.NAME_EXTERN
p.From.Sym = Linksym(s)
p.From.Offset = int64(off)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(Widthptr)
p.To.Type = obj.TYPE_ADDR
}
p := Thearch.Gins(obj.ADATA, nam, nr)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(wid)
}
w = int(Types[w].Width)
p := Thearch.Gins(obj.ADATA, nam, nil)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(w)
p.To.Type = obj.TYPE_FCONST
p.To.Val = mpgetflt(&cval.Real)
p = Thearch.Gins(obj.ADATA, nam, nil)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(w)
p.From.Offset += int64(w)
p := Thearch.Gins(obj.ADATA, nam, nil)
Datastring(sval, &p.To)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = Types[Tptr].Width
p.To.Type = obj.TYPE_ADDR
Nodconst(&nod1, Types[TINT], int64(len(sval)))
p = Thearch.Gins(obj.ADATA, nam, &nod1)
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_CONST
p.From3.Offset = int64(Widthint)
p.From.Offset += int64(Widthptr)
nam = nil
}
ptxt = Thearch.Gins(obj.ATEXT, nam, &nod1)
+ ptxt.From3 = new(obj.Addr)
if fn.Func.Dupok {
ptxt.From3.Offset |= obj.DUPOK
}
// Currently we never generate three register forms.
// If we do, this will need to change.
- if p.From3.Type != obj.TYPE_NONE {
+ if p.From3Type() != obj.TYPE_NONE {
Fatal("regopt not implemented for from3")
}
// can be rewritten independently)
// 0 otherwise (not touched)
func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
- if p.From3.Type != obj.TYPE_NONE {
+ if p.From3Type() != obj.TYPE_NONE {
// 9g never generates a from3
- fmt.Printf("copyu: from3 (%v) not implemented\n", gc.Ctxt.Dconv(&p.From3))
+ fmt.Printf("copyu: from3 (%v) not implemented\n", gc.Ctxt.Dconv(p.From3))
}
switch p.As {
rt := int(p.To.Reg)
var r int
var ra int
- if p.From3.Type == obj.TYPE_REG {
+ if p.From3Type() == obj.TYPE_REG {
r = int(p.From3.Reg)
ra = int(p.Reg)
if ra == 0 {
r := int(p.Reg)
var rf int
if r != 0 {
- if p.From3.Type == obj.TYPE_NONE {
+ if p.From3Type() == obj.TYPE_NONE {
/* CINC/CINV/CNEG */
rf = r
ctxt.Diag("requires uimm16\n%v", p)
}
s := 0
- if p.From3.Type != obj.TYPE_NONE {
+ if p.From3Type() != obj.TYPE_NONE {
if p.From3.Type != obj.TYPE_CONST {
ctxt.Diag("missing bit position\n%v", p)
}
ctxt.Diag("implausible condition\n%v", p)
}
rf := int(p.Reg)
- if p.From3.Reg < REG_F0 || p.From3.Reg > REG_F31 {
+ if p.From3 == nil || p.From3.Reg < REG_F0 || p.From3.Reg > REG_F31 {
ctxt.Diag("illegal FCCMP\n%v", p)
+ break
}
rt := int(p.From3.Reg)
o1 |= uint32(rf&31)<<16 | uint32(cond)<<12 | uint32(rt&31)<<5 | uint32(nzcv)
p.As = ANOP
p.Scond = 0
p.From = Addr{}
- p.From3 = Addr{}
+ p.From3 = nil
p.Reg = 0
p.To = Addr{}
}
Ctxt *Link
Link *Prog
From Addr
- From3 Addr
+ From3 *Addr // optional
To Addr
Opt interface{}
Forwd *Prog
Info ProgInfo
}
+// From3Type returns From3.Type, or TYPE_NONE when From3 is nil.
+func (p *Prog) From3Type() int16 {
+ if p.From3 == nil {
+ return TYPE_NONE
+ }
+ return p.From3.Type
+}
+
// ProgInfo holds information about the instruction for use
// by clients such as the compiler. The exact meaning of this
// data is up to the client and is not interpreted by the cmd/internal/obj/... packages.
for p := sym.Text; p != nil; p = p.Link {
checkaddr(ctxt, p, &p.From)
- checkaddr(ctxt, p, &p.From3)
+ if p.From3 != nil {
+ checkaddr(ctxt, p, p.From3)
+ }
checkaddr(ctxt, p, &p.To)
if ctxt.Arch.Progedit != nil {
}
a1--
- a3 := int(p.From3.Class)
- if a3 == 0 {
- a3 = aclass(ctxt, &p.From3) + 1
- p.From3.Class = int8(a3)
+ a3 := C_NONE
+ if p.From3 != nil {
+ a3 = int(p.From3.Class)
+ if a3 == 0 {
+ a3 = aclass(ctxt, p.From3) + 1
+ p.From3.Class = int8(a3)
+ }
}
a3--
if r == 0 {
r = int(p.To.Reg)
}
- d := vregoff(ctxt, &p.From3)
+ d := vregoff(ctxt, p.From3)
var mask [2]uint8
maskgen64(ctxt, p, mask[:], uint64(d))
var a int
o2 = AOP_IRR(OP_ADDI, uint32(p.To.Reg), REGTMP, uint32(v))
case 27: /* subc ra,$simm,rd => subfic rd,ra,$simm */
- v := regoff(ctxt, &p.From3)
+ v := regoff(ctxt, p.From3)
r := int(p.From.Reg)
o1 = AOP_IRR(uint32(opirr(ctxt, int(p.As))), uint32(p.To.Reg), uint32(r), uint32(v))
if p.To.Reg == REGTMP || p.From.Reg == REGTMP {
ctxt.Diag("can't synthesize large constant\n%v", p)
}
- v := regoff(ctxt, &p.From3)
+ v := regoff(ctxt, p.From3)
o1 = AOP_IRR(OP_ADDIS, REGTMP, REGZERO, uint32(v)>>16)
o2 = LOP_IRR(OP_ORI, REGTMP, REGTMP, uint32(v))
o3 = AOP_RRR(uint32(oprrr(ctxt, int(p.As))), uint32(p.To.Reg), uint32(p.From.Reg), REGTMP)
case 29: /* rldic[lr]? $sh,s,$mask,a -- left, right, plain give different masks */
v := regoff(ctxt, &p.From)
- d := vregoff(ctxt, &p.From3)
+ d := vregoff(ctxt, p.From3)
var mask [2]uint8
maskgen64(ctxt, p, mask[:], uint64(d))
var a int
case 30: /* rldimi $sh,s,$mask,a */
v := regoff(ctxt, &p.From)
- d := vregoff(ctxt, &p.From3)
+ d := vregoff(ctxt, p.From3)
var mask [2]uint8
maskgen64(ctxt, p, mask[:], uint64(d))
if int32(mask[1]) != (63 - v) {
o1 = uint32(regoff(ctxt, &p.From))
case 41: /* stswi */
- o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.From.Reg), uint32(p.To.Reg), 0) | (uint32(regoff(ctxt, &p.From3))&0x7F)<<11
+ o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.From.Reg), uint32(p.To.Reg), 0) | (uint32(regoff(ctxt, p.From3))&0x7F)<<11
case 42: /* lswi */
- o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.To.Reg), uint32(p.From.Reg), 0) | (uint32(regoff(ctxt, &p.From3))&0x7F)<<11
+ o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.To.Reg), uint32(p.From.Reg), 0) | (uint32(regoff(ctxt, p.From3))&0x7F)<<11
case 43: /* unary indexed source: dcbf (b); dcbf (a+b) */
o1 = AOP_RRR(uint32(oprrr(ctxt, int(p.As))), 0, uint32(p.From.Index), uint32(p.From.Reg))
v := regoff(ctxt, &p.From)
var mask [2]uint8
- maskgen(ctxt, p, mask[:], uint32(regoff(ctxt, &p.From3)))
+ maskgen(ctxt, p, mask[:], uint32(regoff(ctxt, p.From3)))
o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.Reg), uint32(p.To.Reg), uint32(v))
o1 |= (uint32(mask[0])&31)<<6 | (uint32(mask[1])&31)<<1
case 63: /* rlwmi b,s,$mask,a */
var mask [2]uint8
- maskgen(ctxt, p, mask[:], uint32(regoff(ctxt, &p.From3)))
+ maskgen(ctxt, p, mask[:], uint32(regoff(ctxt, p.From3)))
o1 = AOP_RRR(uint32(opirr(ctxt, int(p.As))), uint32(p.Reg), uint32(p.To.Reg), uint32(p.From.Reg))
o1 |= (uint32(mask[0])&31)<<6 | (uint32(mask[1])&31)<<1
case 64: /* mtfsf fr[, $m] {,fpcsr} */
var v int32
- if p.From3.Type != obj.TYPE_NONE {
- v = regoff(ctxt, &p.From3) & 255
+ if p.From3Type() != obj.TYPE_NONE {
+ v = regoff(ctxt, p.From3) & 255
} else {
v = 255
}
case 69: /* mtcrf CRM,rS */
var v int32
- if p.From3.Type != obj.TYPE_NONE {
+ if p.From3Type() != obj.TYPE_NONE {
if p.To.Reg != 0 {
ctxt.Diag("can't use both mask and CR(n)\n%v", p)
}
- v = regoff(ctxt, &p.From3) & 0xff
+ v = regoff(ctxt, p.From3) & 0xff
} else {
if p.To.Reg == 0 {
v = 0xff /* CR */
func vregoff(ctxt *obj.Link, a *obj.Addr) int64 {
ctxt.Instoffset = 0
- aclass(ctxt, a)
+ if a != nil {
+ aclass(ctxt, a)
+ }
return ctxt.Instoffset
}
fmt.Fprintf(&buf, "%s%v", sep, Rconv(int(p.Reg)))
sep = ", "
}
- if p.From3.Type != TYPE_NONE {
+ if p.From3Type() != TYPE_NONE {
if p.From3.Type == TYPE_CONST && (p.As == ADATA || p.As == ATEXT || p.As == AGLOBL) {
// Special case - omit $.
fmt.Fprintf(&buf, "%s%d", sep, p.From3.Offset)
} else {
- fmt.Fprintf(&buf, "%s%v", sep, Dconv(p, &p.From3))
+ fmt.Fprintf(&buf, "%s%v", sep, Dconv(p, p.From3))
}
sep = ", "
}
// Similarly SHRQ CX, AX:DX is really SHRQ CX(DX*0), AX.
// Change encoding generated by assemblers and compilers and remove.
if (p.From.Type == obj.TYPE_CONST || p.From.Type == obj.TYPE_REG) && p.From.Index != REG_NONE && p.From.Scale == 0 {
+ p.From3 = new(obj.Addr)
p.From3.Type = obj.TYPE_REG
p.From3.Reg = p.From.Index
p.From.Index = 0
// Change encoding generated by assemblers and compilers (if any) and remove.
switch p.As {
case AIMUL3Q, APEXTRW, APINSRW, APINSRD, APINSRQ, APSHUFHW, APSHUFL, APSHUFW, ASHUFPD, ASHUFPS, AAESKEYGENASSIST, APSHUFD, APCLMULQDQ:
- if p.From3.Type == obj.TYPE_NONE {
- p.From3 = p.From
+ if p.From3Type() == obj.TYPE_NONE {
+ p.From3 = new(obj.Addr)
+ *p.From3 = p.From
p.From = obj.Addr{}
p.From.Type = obj.TYPE_CONST
p.From.Offset = p.To.Offset
p.To.Offset = 0
}
case ACMPSD, ACMPSS, ACMPPS, ACMPPD:
- if p.From3.Type == obj.TYPE_NONE {
- p.From3 = p.To
+ if p.From3Type() == obj.TYPE_NONE {
+ p.From3 = new(obj.Addr)
+ *p.From3 = p.To
p.To = obj.Addr{}
p.To.Type = obj.TYPE_CONST
p.To.Offset = p.From3.Offset
}
ft := int(p.Ft) * Ymax
- f3t := oclass(ctxt, p, &p.From3) * Ymax
+ f3t := Ynone * Ymax
+ if p.From3 != nil {
+ f3t = oclass(ctxt, p, p.From3) * Ymax
+ }
tt := int(p.Tt) * Ymax
xo := obj.Bool2int(o.op[0] == 0x0f)
case Zm_r_i_xm:
mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmand(ctxt, p, &p.From, &p.From3)
+ asmand(ctxt, p, &p.From, p.From3)
ctxt.Andptr[0] = byte(p.To.Offset)
ctxt.Andptr = ctxt.Andptr[1:]
ctxt.Andptr[0] = byte(op)
ctxt.Andptr = ctxt.Andptr[1:]
}
- asmand(ctxt, p, &p.From3, &p.To)
+ asmand(ctxt, p, p.From3, &p.To)
ctxt.Andptr[0] = byte(p.From.Offset)
ctxt.Andptr = ctxt.Andptr[1:]
}
if ctxt.Headtype == obj.Hnacl && p.Mode == 64 {
- nacladdr(ctxt, p, &p.From3)
+ if p.From3 != nil {
+ nacladdr(ctxt, p, p.From3)
+ }
nacladdr(ctxt, p, &p.From)
nacladdr(ctxt, p, &p.To)
}
p.From.Offset = 0
}
}
- if p.From3.Name == obj.NAME_EXTERN {
+ if p.From3 != nil && p.From3.Name == obj.NAME_EXTERN {
ctxt.Diag("don't know how to handle %v with -dynlink", p)
}
var source *obj.Addr
if a == obj.NAME_PARAM {
p.From.Offset += int64(deltasp) + int64(pcsize)
}
- a = int(p.From3.Name)
- if a == obj.NAME_AUTO {
- p.From3.Offset += int64(deltasp) - int64(bpsize)
- }
- if a == obj.NAME_PARAM {
- p.From3.Offset += int64(deltasp) + int64(pcsize)
+ if p.From3 != nil {
+ a = int(p.From3.Name)
+ if a == obj.NAME_AUTO {
+ p.From3.Offset += int64(deltasp) - int64(bpsize)
+ }
+ if a == obj.NAME_PARAM {
+ p.From3.Offset += int64(deltasp) + int64(pcsize)
+ }
}
a = int(p.To.Name)
if a == obj.NAME_AUTO {
{
asm.Settext($2.Sym);
outcode($1, Always, &$2, 0, &$5);
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTYPEB name ',' con ',' '$' textsize
{
asm.Settext($2.Sym);
outcode($1, Always, &$2, 0, &$7);
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST;
lastpc.From3.Offset = int64($4)
}
{
asm.Settext($2.Sym)
outcode($1, Always, &$2, 0, &$4)
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LGLOBL name ',' con ',' imm
{
asm.Settext($2.Sym)
outcode($1, Always, &$2, 0, &$6)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = int64($4)
}
{
outcode($1, Always, &$2, 0, &$6)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = int64($4)
}
const LLAB = 57393
const LVAR = 57394
-var yyToknames = []string{
+var yyToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
"'|'",
"'^'",
"'&'",
"LNAME",
"LLAB",
"LVAR",
+ "':'",
+ "'='",
+ "';'",
+ "','",
+ "'['",
+ "']'",
+ "'$'",
+ "'('",
+ "')'",
+ "'~'",
}
-var yyStatenames = []string{}
+var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyMaxDepth = 200
//line yacctab:1
-var yyExca = []int{
+var yyExca = [...]int{
-1, 1,
1, -1,
-2, 2,
const yyLast = 708
-var yyAct = []int{
+var yyAct = [...]int{
125, 328, 259, 73, 202, 79, 85, 106, 91, 195,
3, 129, 84, 115, 75, 72, 338, 324, 278, 136,
171, 172, 173, 176, 174, 175, 169, 170, 171, 172,
173, 174, 175, 169, 170, 171, 172, 173,
}
-var yyPact = []int{
+var yyPact = [...]int{
-1000, -1000, 368, -1000, 174, 140, -1000, 109, 73, -1000,
-1000, -1000, -1000, 84, 84, -1000, -1000, -1000, -1000, -1000,
-5, 295, -1000, 201, 400, -55, 57, 18, -1000, -1000,
400, -1000, 679,
}
-var yyPgo = []int{
+var yyPgo = [...]int{
0, 212, 19, 424, 4, 11, 8, 0, 1, 18,
640, 9, 21, 13, 20, 423, 6, 323, 120, 421,
2, 7, 5, 15, 12, 14, 420, 3, 369, 417,
414, 10, 375, 374, 80,
}
-var yyR1 = []int{
+var yyR1 = [...]int{
0, 29, 30, 29, 32, 31, 31, 31, 31, 31,
31, 33, 33, 33, 33, 33, 33, 33, 33, 33,
1, 3, 3, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2,
}
-var yyR2 = []int{
+var yyR2 = [...]int{
0, 0, 0, 3, 0, 4, 4, 4, 1, 2,
2, 7, 6, 5, 5, 5, 4, 4, 3, 3,
3, 0, 2, 1, 3, 3, 3, 3, 3, 4,
4, 3, 3, 3,
}
-var yyChk = []int{
+var yyChk = [...]int{
-1000, -29, -30, -31, 60, 62, 65, -33, 2, 14,
15, 16, 17, 36, 18, 19, 20, 21, 22, 23,
50, 66, -7, 66, 70, -7, -8, -2, 71, -3,
66, 71, -2,
}
-var yyDef = []int{
+var yyDef = [...]int{
1, -2, 0, 3, 0, 0, 8, 0, 0, 50,
50, 50, 50, 53, 53, 50, 50, 50, 50, 50,
0, 0, 41, 0, 0, 0, 121, 0, 88, 39,
0, 101, 122,
}
-var yyTok1 = []int{
+var yyTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 4, 3, 72,
}
-var yyTok2 = []int{
+var yyTok2 = [...]int{
2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62,
}
-var yyTok3 = []int{
+var yyTok3 = [...]int{
0,
}
+var yyErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
//line yaccpar:1
/* parser for yacc output */
-var yyDebug = 0
+var (
+ yyDebug = 0
+ yyErrorVerbose = false
+)
type yyLexer interface {
Lex(lval *yySymType) int
const yyFlag = -1000
func yyTokname(c int) string {
- // 4 is TOKSTART above
- if c >= 4 && c-4 < len(yyToknames) {
- if yyToknames[c-4] != "" {
- return yyToknames[c-4]
+ if c >= 1 && c-1 < len(yyToknames) {
+ if yyToknames[c-1] != "" {
+ return yyToknames[c-1]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
return __yyfmt__.Sprintf("state-%v", s)
}
+func yyErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !yyErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range yyErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + yyTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := yyPact[state]
+ for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
+ if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if yyDef[state] == -2 {
+ i := 0
+ for yyExca[i] != -1 || yyExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; yyExca[i] >= 0; i += 2 {
+ tok := yyExca[i]
+ if tok < TOKSTART || yyExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if yyExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += yyTokname(tok)
+ }
+ return res
+}
+
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
yyrcvr.lookahead = func() int { return yychar }
defer func() {
// Make sure we report no lookahead when not parsing.
+ yystate = -1
yychar = -1
yytoken = -1
}()
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
- yylex.Error("syntax error")
+ yylex.Error(yyErrorMessage(yystate, yytoken))
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
asm.Settext(yyDollar[2].addr.Sym)
outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[7].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = int64(yyDollar[4].lval)
}
}
case 30:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:238
+ //line a.y:239
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[4].addr)
}
case 31:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:243
+ //line a.y:244
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = int64(yyDollar[4].lval)
}
}
case 32:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:256
+ //line a.y:258
{
outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = int64(yyDollar[4].lval)
}
}
case 33:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:267
+ //line a.y:270
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &nullgen)
}
case 34:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:274
+ //line a.y:277
{
outcode(yyDollar[1].lval, Always, &nullgen, 0, &yyDollar[3].addr)
}
case 35:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:281
+ //line a.y:284
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
}
case 36:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:285
+ //line a.y:288
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, 0, &yyDollar[5].addr)
}
case 37:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:289
+ //line a.y:292
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, yyDollar[5].lval, &yyDollar[7].addr)
}
case 38:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:293
+ //line a.y:296
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, int32(yyDollar[5].addr.Reg), &nullgen)
}
case 39:
yyDollar = yyS[yypt-12 : yypt+1]
- //line a.y:300
+ //line a.y:303
{
var g obj.Addr
}
case 40:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:312
+ //line a.y:315
{
outcode(yyDollar[1].lval, yyDollar[2].lval, &yyDollar[3].addr, int32(yyDollar[5].addr.Reg), &yyDollar[7].addr)
}
case 41:
yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:320
+ //line a.y:323
{
yyDollar[7].addr.Type = obj.TYPE_REGREG2
yyDollar[7].addr.Offset = int64(yyDollar[9].lval)
}
case 42:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:329
+ //line a.y:332
{
outcode(yyDollar[1].lval, Always, &yyDollar[2].addr, 0, &nullgen)
}
case 43:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:336
+ //line a.y:339
{
if yyDollar[2].addr.Type != obj.TYPE_CONST || yyDollar[4].addr.Type != obj.TYPE_CONST {
yyerror("arguments to PCDATA must be integer constants")
}
case 44:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:346
+ //line a.y:349
{
if yyDollar[2].addr.Type != obj.TYPE_CONST {
yyerror("index for FUNCDATA must be integer constant")
}
case 45:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:359
+ //line a.y:362
{
outcode(yyDollar[1].lval, Always, &nullgen, 0, &nullgen)
}
case 46:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:365
+ //line a.y:368
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 47:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:372
+ //line a.y:375
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 48:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:379
+ //line a.y:382
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 49:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:386
+ //line a.y:389
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 50:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:394
+ //line a.y:397
{
yyVAL.lval = Always
}
case 51:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:398
+ //line a.y:401
{
yyVAL.lval = (yyDollar[1].lval & ^C_SCOND) | yyDollar[2].lval
}
case 52:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:402
+ //line a.y:405
{
yyVAL.lval = yyDollar[1].lval | yyDollar[2].lval
}
case 55:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:411
+ //line a.y:414
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_BRANCH
}
case 56:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:417
+ //line a.y:420
{
yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
yyVAL.addr = nullgen
}
case 57:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:428
+ //line a.y:431
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_CONST
}
case 58:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:434
+ //line a.y:437
{
yyVAL.addr = yyDollar[2].addr
yyVAL.addr.Type = obj.TYPE_ADDR
}
case 59:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:439
+ //line a.y:442
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SCONST
yyVAL.addr.Val = yyDollar[2].sval
}
- case 60:
- yyVAL.addr = yyS[yypt-0].addr
case 61:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:448
+ //line a.y:451
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 62:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:454
+ //line a.y:457
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 63:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:462
+ //line a.y:465
{
yyVAL.lval = 1 << uint(yyDollar[1].lval&15)
}
case 64:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:466
+ //line a.y:469
{
yyVAL.lval = 0
for i := yyDollar[1].lval; i <= yyDollar[3].lval; i++ {
}
case 65:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:476
+ //line a.y:479
{
yyVAL.lval = (1 << uint(yyDollar[1].lval&15)) | yyDollar[3].lval
}
- case 66:
- yyVAL.addr = yyS[yypt-0].addr
- case 67:
- yyVAL.addr = yyS[yypt-0].addr
- case 68:
- yyVAL.addr = yyS[yypt-0].addr
case 69:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:485
+ //line a.y:488
{
yyVAL.addr = yyDollar[1].addr
yyVAL.addr.Reg = int16(yyDollar[3].lval)
}
case 70:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:490
+ //line a.y:493
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 71:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:496
+ //line a.y:499
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 72:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:502
+ //line a.y:505
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
yyVAL.addr.Offset = int64(yyDollar[1].lval)
}
- case 73:
- yyVAL.addr = yyS[yypt-0].addr
- case 74:
- yyVAL.addr = yyS[yypt-0].addr
- case 75:
- yyVAL.addr = yyS[yypt-0].addr
case 76:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:513
+ //line a.y:516
{
yyVAL.addr = yyDollar[1].addr
if yyDollar[1].addr.Name != obj.NAME_EXTERN && yyDollar[1].addr.Name != obj.NAME_STATIC {
}
case 77:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:521
+ //line a.y:524
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
yyVAL.addr.Reg = int16(yyDollar[2].lval)
yyVAL.addr.Offset = 0
}
- case 78:
- yyVAL.addr = yyS[yypt-0].addr
case 79:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:531
+ //line a.y:534
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
yyVAL.addr.Reg = int16(yyDollar[3].lval)
yyVAL.addr.Offset = int64(yyDollar[1].lval)
}
- case 80:
- yyVAL.addr = yyS[yypt-0].addr
case 81:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:541
+ //line a.y:544
{
yyVAL.addr = yyDollar[1].addr
yyVAL.addr.Type = obj.TYPE_MEM
yyVAL.addr.Reg = int16(yyDollar[3].lval)
}
- case 82:
- yyVAL.addr = yyS[yypt-0].addr
- case 83:
- yyVAL.addr = yyS[yypt-0].addr
- case 84:
- yyVAL.addr = yyS[yypt-0].addr
- case 85:
- yyVAL.addr = yyS[yypt-0].addr
case 86:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:554
+ //line a.y:557
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_CONST
}
case 87:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:562
+ //line a.y:565
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 88:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:570
+ //line a.y:573
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REGREG
}
case 89:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:579
+ //line a.y:582
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SHIFT
}
case 90:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:585
+ //line a.y:588
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SHIFT
}
case 91:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:591
+ //line a.y:594
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SHIFT
}
case 92:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:597
+ //line a.y:600
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SHIFT
}
case 93:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:605
+ //line a.y:608
{
if yyVAL.lval < REG_R0 || yyVAL.lval > REG_R15 {
print("register value out of range\n")
}
case 94:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:612
+ //line a.y:615
{
if yyVAL.lval < 0 || yyVAL.lval >= 32 {
print("shift value out of range\n")
}
yyVAL.lval = (yyDollar[1].lval & 31) << 7
}
- case 95:
- yyVAL.lval = yyS[yypt-0].lval
case 96:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:622
+ //line a.y:625
{
yyVAL.lval = REGPC
}
case 97:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:626
+ //line a.y:629
{
if yyDollar[3].lval < 0 || yyDollar[3].lval >= NREG {
print("register value out of range\n")
}
yyVAL.lval = REG_R0 + yyDollar[3].lval
}
- case 98:
- yyVAL.lval = yyS[yypt-0].lval
case 99:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:636
+ //line a.y:639
{
yyVAL.lval = REGSP
}
- case 100:
- yyVAL.lval = yyS[yypt-0].lval
case 101:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:643
+ //line a.y:646
{
if yyDollar[3].lval < 0 || yyDollar[3].lval >= NREG {
print("register value out of range\n")
}
yyVAL.lval = yyDollar[3].lval // TODO(rsc): REG_C0+$3
}
- case 102:
- yyVAL.addr = yyS[yypt-0].addr
- case 103:
- yyVAL.addr = yyS[yypt-0].addr
case 104:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:656
+ //line a.y:659
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 105:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:662
+ //line a.y:665
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 106:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:670
+ //line a.y:673
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 107:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:678
+ //line a.y:681
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 108:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:686
+ //line a.y:689
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 109:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:695
+ //line a.y:698
{
yyVAL.lval = 0
}
case 110:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:699
+ //line a.y:702
{
yyVAL.lval = yyDollar[2].lval
}
case 111:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:703
+ //line a.y:706
{
yyVAL.lval = -yyDollar[2].lval
}
- case 112:
- yyVAL.lval = yyS[yypt-0].lval
- case 113:
- yyVAL.lval = yyS[yypt-0].lval
- case 114:
- yyVAL.lval = yyS[yypt-0].lval
- case 115:
- yyVAL.lval = yyS[yypt-0].lval
case 116:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:715
+ //line a.y:718
{
yyVAL.lval = int32(yyDollar[1].sym.Value)
}
case 117:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:719
+ //line a.y:722
{
yyVAL.lval = -yyDollar[2].lval
}
case 118:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:723
+ //line a.y:726
{
yyVAL.lval = yyDollar[2].lval
}
case 119:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:727
+ //line a.y:730
{
yyVAL.lval = ^yyDollar[2].lval
}
case 120:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:731
+ //line a.y:734
{
yyVAL.lval = yyDollar[2].lval
}
case 121:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:736
+ //line a.y:739
{
yyVAL.lval = 0
}
case 122:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:740
+ //line a.y:743
{
yyVAL.lval = yyDollar[2].lval
}
- case 123:
- yyVAL.lval = yyS[yypt-0].lval
case 124:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:747
+ //line a.y:750
{
yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
}
case 125:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:751
+ //line a.y:754
{
yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
}
case 126:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:755
+ //line a.y:758
{
yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
}
case 127:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:759
+ //line a.y:762
{
yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
}
case 128:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:763
+ //line a.y:766
{
yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
}
case 129:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:767
+ //line a.y:770
{
yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
}
case 130:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:771
+ //line a.y:774
{
yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
}
case 131:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:775
+ //line a.y:778
{
yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
}
case 132:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:779
+ //line a.y:782
{
yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
}
case 133:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:783
+ //line a.y:786
{
yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
}
a.to = $6
outcode(obj.ADATA, &a)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
asm.Settext($2.Sym);
outcode(obj.ATEXT, &Addr2{from: $2, to: $5})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTYPET mem ',' con ',' '$' textsize
{
asm.Settext($2.Sym);
outcode(obj.ATEXT, &Addr2{from: $2, to: $7})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
asm.Settext($2.Sym)
outcode(obj.AGLOBL, &Addr2{from: $2, to: $4})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTYPEG mem ',' con ',' imm
{
asm.Settext($2.Sym)
outcode(obj.AGLOBL, &Addr2{from: $2, to: $6})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
p.As = int16(a)
p.Lineno = stmtline
p.From = g2.from
- p.From3 = g2.from3
+ if g2.from3.Type != 0 {
+ p.From3 = new(obj.Addr)
+ *p.From3 = g2.from3
+ }
p.To = g2.to
p.Pc = int64(asm.PC)
const LLAB = 57379
const LVAR = 57380
-var yyToknames = []string{
+var yyToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
"'|'",
"'^'",
"'&'",
"LNAME",
"LLAB",
"LVAR",
+ "':'",
+ "';'",
+ "'='",
+ "','",
+ "'$'",
+ "'('",
+ "')'",
+ "'~'",
}
-var yyStatenames = []string{}
+var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyMaxDepth = 200
//line yacctab:1
-var yyExca = []int{
+var yyExca = [...]int{
-1, 1,
1, -1,
-2, 2,
const yyLast = 593
-var yyAct = []int{
+var yyAct = [...]int{
52, 227, 41, 3, 80, 208, 269, 64, 123, 50,
51, 79, 54, 170, 268, 74, 267, 118, 85, 72,
162, 156, 157, 158, 159, 160, 161, 162, 156, 157,
158, 159, 160,
}
-var yyPact = []int{
+var yyPact = [...]int{
-1000, -1000, 250, -1000, 72, -1000, 74, 67, 65, 61,
374, 294, 294, 394, 159, -1000, -1000, 274, 354, 294,
-1000, 215, 199, -1000, 502, -1000, -34, -1000, 155, -1000,
502, 502, -39, -1000, -1000, -41, -49, -1000, -1000, -1000,
}
-var yyPgo = []int{
+var yyPgo = [...]int{
0, 0, 17, 324, 8, 202, 7, 1, 2, 12,
4, 96, 43, 11, 9, 10, 208, 323, 198, 321,
318, 317, 310, 309, 308, 306, 305, 302, 301, 299,
297, 263, 254, 253, 3, 250, 249, 248, 247, 245,
}
-var yyR1 = []int{
+var yyR1 = [...]int{
0, 32, 33, 32, 35, 34, 34, 34, 34, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
7, 7, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2,
}
-var yyR2 = []int{
+var yyR2 = [...]int{
0, 0, 0, 3, 0, 4, 1, 2, 2, 3,
3, 2, 2, 2, 2, 2, 2, 1, 1, 2,
3, 4, 1, 3, 3, 3, 3, 3, 4, 4,
3, 3, 3,
}
-var yyChk = []int{
+var yyChk = [...]int{
-1000, -32, -33, -34, 46, 50, -36, 2, 48, 14,
15, 16, 17, 18, 22, -37, -38, 19, 21, 26,
-6, 38, 39, 55, 11, 55, 36, 33, 10, -7,
11, 11, -1, 55, 33, -1, -1, 55, 55, 55,
}
-var yyDef = []int{
+var yyDef = [...]int{
1, -2, 0, 3, 0, 6, 0, 0, 0, 30,
0, 0, 0, 0, 0, 17, 18, 0, 30, 0,
45, 0, 0, 95, 0, 103, 0, 120, 0, 43,
0, 0, 0, 105, 121, 0, 0, 101, 96, 97,
}
-var yyTok1 = []int{
+var yyTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 4, 3, 56,
}
-var yyTok2 = []int{
+var yyTok2 = [...]int{
2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48,
}
-var yyTok3 = []int{
+var yyTok3 = [...]int{
0,
}
+var yyErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
//line yaccpar:1
/* parser for yacc output */
-var yyDebug = 0
+var (
+ yyDebug = 0
+ yyErrorVerbose = false
+)
type yyLexer interface {
Lex(lval *yySymType) int
const yyFlag = -1000
func yyTokname(c int) string {
- // 4 is TOKSTART above
- if c >= 4 && c-4 < len(yyToknames) {
- if yyToknames[c-4] != "" {
- return yyToknames[c-4]
+ if c >= 1 && c-1 < len(yyToknames) {
+ if yyToknames[c-1] != "" {
+ return yyToknames[c-1]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
return __yyfmt__.Sprintf("state-%v", s)
}
+func yyErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !yyErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range yyErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + yyTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := yyPact[state]
+ for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
+ if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if yyDef[state] == -2 {
+ i := 0
+ for yyExca[i] != -1 || yyExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; yyExca[i] >= 0; i += 2 {
+ tok := yyExca[i]
+ if tok < TOKSTART || yyExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if yyExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += yyTokname(tok)
+ }
+ return res
+}
+
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
yyrcvr.lookahead = func() int { return yychar }
defer func() {
// Make sure we report no lookahead when not parsing.
+ yystate = -1
yychar = -1
yytoken = -1
}()
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
- yylex.Error("syntax error")
+ yylex.Error(yyErrorMessage(yystate, yytoken))
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
a.to = yyDollar[6].addr
outcode(obj.ADATA, &a)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 42:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:206
+ //line a.y:207
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.ATEXT, &Addr2{from: yyDollar[2].addr, to: yyDollar[5].addr})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
case 43:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:211
+ //line a.y:215
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.ATEXT, &Addr2{from: yyDollar[2].addr, to: yyDollar[7].addr})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 44:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:222
+ //line a.y:227
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.AGLOBL, &Addr2{from: yyDollar[2].addr, to: yyDollar[4].addr})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
case 45:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:227
+ //line a.y:235
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.AGLOBL, &Addr2{from: yyDollar[2].addr, to: yyDollar[6].addr})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 46:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:238
+ //line a.y:247
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = yyDollar[2].addr
}
case 47:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:243
+ //line a.y:252
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = yyDollar[1].addr
}
- case 48:
- yyVAL.addr2 = yyS[yypt-0].addr2
- case 49:
- yyVAL.addr2 = yyS[yypt-0].addr2
case 50:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:254
+ //line a.y:263
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 51:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:259
+ //line a.y:268
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 52:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:270
+ //line a.y:279
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 53:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:275
+ //line a.y:284
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 54:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:286
+ //line a.y:295
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = nullgen
}
case 55:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:291
+ //line a.y:300
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = nullgen
}
case 56:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:296
+ //line a.y:305
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 57:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:303
+ //line a.y:312
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.from3 = yyDollar[3].addr
}
case 58:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:312
+ //line a.y:321
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.from3 = yyDollar[3].addr
}
case 59:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:319
+ //line a.y:328
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = nullgen
}
case 60:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:324
+ //line a.y:333
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = nullgen
}
case 61:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:331
+ //line a.y:340
{
if yyDollar[1].addr.Type != obj.TYPE_CONST || yyDollar[3].addr.Type != obj.TYPE_CONST {
yyerror("arguments to asm.PCDATA must be integer constants")
}
case 62:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:341
+ //line a.y:350
{
if yyDollar[1].addr.Type != obj.TYPE_CONST {
yyerror("index for FUNCDATA must be integer constant")
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
- case 63:
- yyVAL.addr = yyS[yypt-0].addr
- case 64:
- yyVAL.addr = yyS[yypt-0].addr
- case 65:
- yyVAL.addr = yyS[yypt-0].addr
- case 66:
- yyVAL.addr = yyS[yypt-0].addr
case 67:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:360
+ //line a.y:369
{
yyVAL.addr = yyDollar[2].addr
}
case 68:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:364
+ //line a.y:373
{
yyVAL.addr = yyDollar[2].addr
}
- case 69:
- yyVAL.addr = yyS[yypt-0].addr
- case 70:
- yyVAL.addr = yyS[yypt-0].addr
- case 71:
- yyVAL.addr = yyS[yypt-0].addr
- case 72:
- yyVAL.addr = yyS[yypt-0].addr
case 73:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:376
+ //line a.y:385
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_BRANCH
}
case 74:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:382
+ //line a.y:391
{
yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
yyVAL.addr = nullgen
}
case 75:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:394
+ //line a.y:403
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 76:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:400
+ //line a.y:409
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 77:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:406
+ //line a.y:415
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 78:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:412
+ //line a.y:421
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 79:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:418
+ //line a.y:427
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 80:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:424
+ //line a.y:433
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 81:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:430
+ //line a.y:439
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 82:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:438
+ //line a.y:447
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_CONST
}
case 83:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:444
+ //line a.y:453
{
yyVAL.addr = yyDollar[2].addr
yyVAL.addr.Type = obj.TYPE_ADDR
}
case 84:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:453
+ //line a.y:462
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SCONST
}
case 85:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:459
+ //line a.y:468
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 86:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:465
+ //line a.y:474
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 87:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:471
+ //line a.y:480
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 88:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:477
+ //line a.y:486
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
yyVAL.addr.Val = -yyDollar[3].dval
}
- case 89:
- yyVAL.addr = yyS[yypt-0].addr
- case 90:
- yyVAL.addr = yyS[yypt-0].addr
case 91:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:489
+ //line a.y:498
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 92:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:495
+ //line a.y:504
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 93:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:502
+ //line a.y:511
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 94:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:509
+ //line a.y:518
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 95:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:516
+ //line a.y:525
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 96:
yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:525
+ //line a.y:534
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 97:
yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:535
+ //line a.y:544
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 98:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:545
+ //line a.y:554
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 99:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:551
+ //line a.y:560
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 100:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:557
+ //line a.y:566
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 101:
yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:565
+ //line a.y:574
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 102:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:576
+ //line a.y:585
{
yyVAL.addr = yyDollar[1].addr
}
case 103:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:580
+ //line a.y:589
{
yyVAL.addr = yyDollar[1].addr
yyVAL.addr.Index = int16(yyDollar[3].lval)
}
case 104:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:589
+ //line a.y:598
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 105:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:597
+ //line a.y:606
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 106:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:606
+ //line a.y:615
{
yyVAL.lval = 0
}
case 107:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:610
+ //line a.y:619
{
yyVAL.lval = yyDollar[2].lval
}
case 108:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:614
+ //line a.y:623
{
yyVAL.lval = -yyDollar[2].lval
}
- case 109:
- yyVAL.lval = yyS[yypt-0].lval
case 110:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:621
+ //line a.y:630
{
yyVAL.lval = obj.NAME_AUTO
}
- case 111:
- yyVAL.lval = yyS[yypt-0].lval
- case 112:
- yyVAL.lval = yyS[yypt-0].lval
case 113:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:629
+ //line a.y:638
{
yyVAL.lval = yyDollar[1].sym.Value
}
case 114:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:633
+ //line a.y:642
{
yyVAL.lval = -yyDollar[2].lval
}
case 115:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:637
+ //line a.y:646
{
yyVAL.lval = yyDollar[2].lval
}
case 116:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:641
+ //line a.y:650
{
yyVAL.lval = ^yyDollar[2].lval
}
case 117:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:645
+ //line a.y:654
{
yyVAL.lval = yyDollar[2].lval
}
case 118:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:651
+ //line a.y:660
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 119:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:658
+ //line a.y:667
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 120:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:665
+ //line a.y:674
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 121:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:672
+ //line a.y:681
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
yyVAL.addr.Offset = -yyDollar[2].lval
yyVAL.addr.Val = int32(yyDollar[4].lval)
}
- case 122:
- yyVAL.lval = yyS[yypt-0].lval
case 123:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:682
+ //line a.y:691
{
yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
}
case 124:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:686
+ //line a.y:695
{
yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
}
case 125:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:690
+ //line a.y:699
{
yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
}
case 126:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:694
+ //line a.y:703
{
yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
}
case 127:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:698
+ //line a.y:707
{
yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
}
case 128:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:702
+ //line a.y:711
{
yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
}
case 129:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:706
+ //line a.y:715
{
yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
}
case 130:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:710
+ //line a.y:719
{
yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
}
case 131:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:714
+ //line a.y:723
{
yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
}
case 132:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:718
+ //line a.y:727
{
yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
}
{
outcode(obj.ADATA, &Addr2{$2, $6})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
asm.Settext($2.Sym);
outcode(obj.ATEXT, &Addr2{$2, $5})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTYPET mem ',' con ',' '$' textsize
{
asm.Settext($2.Sym);
outcode(obj.ATEXT, &Addr2{$2, $7})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
asm.Settext($2.Sym);
outcode(obj.AGLOBL, &Addr2{$2, $4})
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTYPEG mem ',' con ',' imm
{
asm.Settext($2.Sym);
outcode(obj.AGLOBL, &Addr2{$2, $6})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
const LLAB = 57377
const LVAR = 57378
-var yyToknames = []string{
+var yyToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
"'|'",
"'^'",
"'&'",
"LNAME",
"LLAB",
"LVAR",
+ "':'",
+ "';'",
+ "'='",
+ "','",
+ "'$'",
+ "'('",
+ "')'",
+ "'~'",
}
-var yyStatenames = []string{}
+var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyMaxDepth = 200
//line yacctab:1
-var yyExca = []int{
+var yyExca = [...]int{
-1, 1,
1, -1,
-2, 2,
const yyLast = 594
-var yyAct = []int{
+var yyAct = [...]int{
50, 226, 40, 3, 79, 77, 120, 49, 62, 207,
268, 267, 48, 169, 266, 72, 60, 262, 84, 70,
160, 161, 155, 156, 157, 158, 159, 160, 161, 155,
156, 157, 158, 159,
}
-var yyPact = []int{
+var yyPact = [...]int{
-1000, -1000, 249, -1000, 67, -1000, 71, 69, 66, 63,
368, 320, 320, 392, 44, -1000, -1000, 272, 344, 320,
199, 195, -1000, 498, -1000, -36, -1000, 116, -1000, 498,
498, -39, -1000, -1000, -42, -43, -1000, -1000, -1000,
}
-var yyPgo = []int{
+var yyPgo = [...]int{
0, 0, 27, 325, 6, 182, 8, 2, 39, 4,
86, 16, 5, 12, 7, 1, 180, 321, 178, 320,
319, 317, 314, 313, 303, 302, 301, 300, 299, 298,
296, 294, 292, 3, 291, 290, 288, 287, 286,
}
-var yyR1 = []int{
+var yyR1 = [...]int{
0, 31, 32, 31, 34, 33, 33, 33, 33, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,
}
-var yyR2 = []int{
+var yyR2 = [...]int{
0, 0, 0, 3, 0, 4, 1, 2, 2, 3,
3, 2, 2, 2, 2, 2, 2, 1, 1, 2,
1, 3, 3, 3, 3, 3, 4, 4, 3, 3,
3,
}
-var yyChk = []int{
+var yyChk = [...]int{
-1000, -31, -32, -33, 44, 48, -35, 2, 46, 14,
15, 16, 17, 18, 22, -36, -37, 19, 21, 24,
37, 38, 53, 11, 53, 35, 32, 10, -15, 11,
11, -1, 53, 32, -1, -1, 53, 53, 53,
}
-var yyDef = []int{
+var yyDef = [...]int{
1, -2, 0, 3, 0, 6, 0, 0, 0, 29,
0, 0, 0, 0, 0, 17, 18, 0, 29, 0,
0, 0, 96, 0, 105, 0, 89, 0, 42, 0,
0, 0, 107, 90, 0, 0, 103, 97, 98,
}
-var yyTok1 = []int{
+var yyTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 4, 3, 54,
}
-var yyTok2 = []int{
+var yyTok2 = [...]int{
2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46,
}
-var yyTok3 = []int{
+var yyTok3 = [...]int{
0,
}
+var yyErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
//line yaccpar:1
/* parser for yacc output */
-var yyDebug = 0
+var (
+ yyDebug = 0
+ yyErrorVerbose = false
+)
type yyLexer interface {
Lex(lval *yySymType) int
const yyFlag = -1000
func yyTokname(c int) string {
- // 4 is TOKSTART above
- if c >= 4 && c-4 < len(yyToknames) {
- if yyToknames[c-4] != "" {
- return yyToknames[c-4]
+ if c >= 1 && c-1 < len(yyToknames) {
+ if yyToknames[c-1] != "" {
+ return yyToknames[c-1]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
return __yyfmt__.Sprintf("state-%v", s)
}
+func yyErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !yyErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range yyErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + yyTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := yyPact[state]
+ for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
+ if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if yyDef[state] == -2 {
+ i := 0
+ for yyExca[i] != -1 || yyExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; yyExca[i] >= 0; i += 2 {
+ tok := yyExca[i]
+ if tok < TOKSTART || yyExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if yyExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += yyTokname(tok)
+ }
+ return res
+}
+
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
yyrcvr.lookahead = func() int { return yychar }
defer func() {
// Make sure we report no lookahead when not parsing.
+ yystate = -1
yychar = -1
yytoken = -1
}()
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
- yylex.Error("syntax error")
+ yylex.Error(yyErrorMessage(yystate, yytoken))
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
{
outcode(obj.ADATA, &Addr2{yyDollar[2].addr, yyDollar[6].addr})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 41:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:204
+ //line a.y:205
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.ATEXT, &Addr2{yyDollar[2].addr, yyDollar[5].addr})
}
case 42:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:209
+ //line a.y:210
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.ATEXT, &Addr2{yyDollar[2].addr, yyDollar[7].addr})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 43:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:220
+ //line a.y:222
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.AGLOBL, &Addr2{yyDollar[2].addr, yyDollar[4].addr})
}
case 44:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:225
+ //line a.y:227
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(obj.AGLOBL, &Addr2{yyDollar[2].addr, yyDollar[6].addr})
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 45:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:237
+ //line a.y:240
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = yyDollar[2].addr
}
case 46:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:242
+ //line a.y:245
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = yyDollar[1].addr
}
case 47:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:247
+ //line a.y:250
{
yyVAL.addr2.from = nullgen
yyVAL.addr2.to = yyDollar[2].addr
yyVAL.addr2.to.Type = obj.TYPE_INDIR
}
- case 48:
- yyVAL.addr2 = yyS[yypt-0].addr2
- case 49:
- yyVAL.addr2 = yyS[yypt-0].addr2
case 50:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:259
+ //line a.y:262
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 51:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:264
+ //line a.y:267
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 52:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:275
+ //line a.y:278
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 53:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:280
+ //line a.y:283
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 54:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:291
+ //line a.y:294
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = nullgen
}
case 55:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:296
+ //line a.y:299
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = nullgen
}
case 56:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:301
+ //line a.y:304
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 57:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:308
+ //line a.y:311
{
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
case 58:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:316
+ //line a.y:319
{
yyVAL.addr2.from = yyDollar[3].addr
yyVAL.addr2.to = yyDollar[5].addr
}
case 59:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:327
+ //line a.y:330
{
if yyDollar[1].addr.Type != obj.TYPE_CONST || yyDollar[3].addr.Type != obj.TYPE_CONST {
yyerror("arguments to PCDATA must be integer constants")
}
case 60:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:337
+ //line a.y:340
{
if yyDollar[1].addr.Type != obj.TYPE_CONST {
yyerror("index for FUNCDATA must be integer constant")
yyVAL.addr2.from = yyDollar[1].addr
yyVAL.addr2.to = yyDollar[3].addr
}
- case 61:
- yyVAL.addr = yyS[yypt-0].addr
- case 62:
- yyVAL.addr = yyS[yypt-0].addr
- case 63:
- yyVAL.addr = yyS[yypt-0].addr
- case 64:
- yyVAL.addr = yyS[yypt-0].addr
case 65:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:356
+ //line a.y:359
{
yyVAL.addr = yyDollar[2].addr
}
case 66:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:360
+ //line a.y:363
{
yyVAL.addr = yyDollar[2].addr
}
- case 67:
- yyVAL.addr = yyS[yypt-0].addr
- case 68:
- yyVAL.addr = yyS[yypt-0].addr
- case 69:
- yyVAL.addr = yyS[yypt-0].addr
- case 70:
- yyVAL.addr = yyS[yypt-0].addr
- case 71:
- yyVAL.addr = yyS[yypt-0].addr
case 72:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:373
+ //line a.y:376
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_BRANCH
}
case 73:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:379
+ //line a.y:382
{
yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
yyVAL.addr = nullgen
}
case 74:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:391
+ //line a.y:394
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 75:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:397
+ //line a.y:400
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 76:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:403
+ //line a.y:406
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 77:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:409
+ //line a.y:412
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 78:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:415
+ //line a.y:418
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 79:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:421
+ //line a.y:424
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 80:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:429
+ //line a.y:432
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_CONST
}
case 81:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:435
+ //line a.y:438
{
yyVAL.addr = yyDollar[2].addr
yyVAL.addr.Type = obj.TYPE_ADDR
}
case 82:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:444
+ //line a.y:447
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SCONST
}
case 83:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:450
+ //line a.y:453
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 84:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:456
+ //line a.y:459
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 85:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:462
+ //line a.y:465
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 86:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:468
+ //line a.y:471
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 87:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:476
+ //line a.y:479
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 88:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:483
+ //line a.y:486
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 89:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:490
+ //line a.y:493
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 90:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:497
+ //line a.y:500
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
yyVAL.addr.Offset = -yyDollar[2].lval
yyVAL.addr.Val = int32(yyDollar[4].lval)
}
- case 91:
- yyVAL.addr = yyS[yypt-0].addr
- case 92:
- yyVAL.addr = yyS[yypt-0].addr
case 93:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:511
+ //line a.y:514
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 94:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:517
+ //line a.y:520
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 95:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:524
+ //line a.y:527
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 96:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:531
+ //line a.y:534
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 97:
yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:540
+ //line a.y:543
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 98:
yyDollar = yyS[yypt-9 : yypt+1]
- //line a.y:550
+ //line a.y:553
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 99:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:560
+ //line a.y:563
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 100:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:566
+ //line a.y:569
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 101:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:572
+ //line a.y:575
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 102:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:579
+ //line a.y:582
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 103:
yyDollar = yyS[yypt-8 : yypt+1]
- //line a.y:587
+ //line a.y:590
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 104:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:598
+ //line a.y:601
{
yyVAL.addr = yyDollar[1].addr
}
case 105:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:602
+ //line a.y:605
{
yyVAL.addr = yyDollar[1].addr
yyVAL.addr.Index = int16(yyDollar[3].lval)
}
case 106:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:611
+ //line a.y:614
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 107:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:619
+ //line a.y:622
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 108:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:628
+ //line a.y:631
{
yyVAL.lval = 0
}
case 109:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:632
+ //line a.y:635
{
yyVAL.lval = yyDollar[2].lval
}
case 110:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:636
+ //line a.y:639
{
yyVAL.lval = -yyDollar[2].lval
}
- case 111:
- yyVAL.lval = yyS[yypt-0].lval
case 112:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:643
+ //line a.y:646
{
yyVAL.lval = obj.NAME_AUTO
}
- case 113:
- yyVAL.lval = yyS[yypt-0].lval
- case 114:
- yyVAL.lval = yyS[yypt-0].lval
case 115:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:651
+ //line a.y:654
{
yyVAL.lval = yyDollar[1].sym.Value
}
case 116:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:655
+ //line a.y:658
{
yyVAL.lval = -yyDollar[2].lval
}
case 117:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:659
+ //line a.y:662
{
yyVAL.lval = yyDollar[2].lval
}
case 118:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:663
+ //line a.y:666
{
yyVAL.lval = ^yyDollar[2].lval
}
case 119:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:667
+ //line a.y:670
{
yyVAL.lval = yyDollar[2].lval
}
- case 120:
- yyVAL.lval = yyS[yypt-0].lval
case 121:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:674
+ //line a.y:677
{
yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
}
case 122:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:678
+ //line a.y:681
{
yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
}
case 123:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:682
+ //line a.y:685
{
yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
}
case 124:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:686
+ //line a.y:689
{
yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
}
case 125:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:690
+ //line a.y:693
{
yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
}
case 126:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:694
+ //line a.y:697
{
yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
}
case 127:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:698
+ //line a.y:701
{
yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
}
case 128:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:702
+ //line a.y:705
{
yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
}
case 129:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:706
+ //line a.y:709
{
yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
}
case 130:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:710
+ //line a.y:713
{
yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
}
{
asm.Settext($2.Sym);
outcode(int($1), &$2, 0, &$5);
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LTEXT name ',' con ',' '$' textsize
{
asm.Settext($2.Sym);
outcode(int($1), &$2, int($4), &$7);
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
asm.Settext($2.Sym)
outcode(int($1), &$2, 0, &$4)
+ if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
+ }
}
| LGLOBL name ',' con ',' imm
{
asm.Settext($2.Sym)
outcode(int($1), &$2, 0, &$6)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
outcode(int($1), &$2, 0, &$6);
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
outcode(int($1), &$2, 0, &$6);
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
{
outcode(int($1), &$2, 0, &$6);
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = $4
}
}
p.From = *g1
p.Reg = int16(reg)
- p.From3 = *g2
+ if g2.Type != 0 {
+ p.From3 = new(obj.Addr)
+ *p.From3 = *g2
+ }
p.To = *g3
p.Pc = int64(asm.PC)
const LLAB = 57405
const LVAR = 57406
-var yyToknames = []string{
+var yyToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
"'|'",
"'^'",
"'&'",
"LNAME",
"LLAB",
"LVAR",
+ "':'",
+ "'='",
+ "';'",
+ "','",
+ "'('",
+ "')'",
+ "'$'",
+ "'~'",
}
-var yyStatenames = []string{}
+var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyMaxDepth = 200
//line yacctab:1
-var yyExca = []int{
+var yyExca = [...]int{
-1, 1,
1, -1,
-2, 2,
const yyLast = 900
-var yyAct = []int{
+var yyAct = [...]int{
48, 394, 54, 90, 427, 273, 440, 58, 52, 102,
80, 79, 85, 172, 94, 95, 97, 98, 100, 101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 236,
}
-var yyPact = []int{
+var yyPact = [...]int{
-1000, -1000, 497, -1000, 309, 294, 290, -1000, 288, 68,
287, 600, 67, -67, -7, 396, -7, 396, 396, 308,
383, -1000, 686, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000,
}
-var yyPgo = []int{
+var yyPgo = [...]int{
0, 88, 42, 5, 13, 294, 200, 0, 90, 453,
119, 20, 7, 536, 526, 1, 35, 2, 3, 68,
26, 21, 9, 8, 510, 4, 505, 483, 23, 482,
451, 210,
}
-var yyR1 = []int{
+var yyR1 = [...]int{
0, 26, 27, 26, 29, 28, 28, 28, 28, 28,
28, 28, 30, 30, 30, 30, 30, 30, 30, 30,
1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
}
-var yyR2 = []int{
+var yyR2 = [...]int{
0, 0, 0, 3, 0, 4, 4, 4, 2, 1,
2, 2, 4, 4, 4, 4, 4, 4, 4, 4,
1, 1, 2, 2, 2, 3, 1, 3, 3, 3,
3, 3, 4, 4, 3, 3, 3,
}
-var yyChk = []int{
+var yyChk = [...]int{
-1000, -26, -27, -28, 72, 74, 59, 77, -30, 2,
14, 15, 23, 68, 19, 17, 18, 16, 69, 21,
10, -15, 10, 80, 80, -11, -7, -7, -1, -7,
-7, 38,
}
-var yyDef = []int{
+var yyDef = [...]int{
1, -2, 0, 3, 0, 0, 0, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 118, 0, 161, 78, 86, 93, 94, 143, 95,
96, 147,
}
-var yyTok1 = []int{
+var yyTok1 = [...]int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 4, 3, 82,
}
-var yyTok2 = []int{
+var yyTok2 = [...]int{
2, 3, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74,
}
-var yyTok3 = []int{
+var yyTok3 = [...]int{
0,
}
+var yyErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
//line yaccpar:1
/* parser for yacc output */
-var yyDebug = 0
+var (
+ yyDebug = 0
+ yyErrorVerbose = false
+)
type yyLexer interface {
Lex(lval *yySymType) int
const yyFlag = -1000
func yyTokname(c int) string {
- // 4 is TOKSTART above
- if c >= 4 && c-4 < len(yyToknames) {
- if yyToknames[c-4] != "" {
- return yyToknames[c-4]
+ if c >= 1 && c-1 < len(yyToknames) {
+ if yyToknames[c-1] != "" {
+ return yyToknames[c-1]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
return __yyfmt__.Sprintf("state-%v", s)
}
+func yyErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !yyErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range yyErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + yyTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := yyPact[state]
+ for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
+ if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if yyDef[state] == -2 {
+ i := 0
+ for yyExca[i] != -1 || yyExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; yyExca[i] >= 0; i += 2 {
+ tok := yyExca[i]
+ if tok < TOKSTART || yyExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if yyExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += yyTokname(tok)
+ }
+ return res
+}
+
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
yyrcvr.lookahead = func() int { return yychar }
defer func() {
// Make sure we report no lookahead when not parsing.
+ yystate = -1
yychar = -1
yytoken = -1
}()
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
- yylex.Error("syntax error")
+ yylex.Error(yyErrorMessage(yystate, yytoken))
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
asm.Settext(yyDollar[2].addr.Sym)
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, int(yyDollar[4].lval), &yyDollar[7].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 119:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:647
+ //line a.y:648
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[4].addr)
}
case 120:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:652
+ //line a.y:653
{
asm.Settext(yyDollar[2].addr.Sym)
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 121:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:665
+ //line a.y:667
{
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 122:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:673
+ //line a.y:676
{
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 123:
yyDollar = yyS[yypt-6 : yypt+1]
- //line a.y:681
+ //line a.y:685
{
outcode(int(yyDollar[1].lval), &yyDollar[2].addr, 0, &yyDollar[6].addr)
if asm.Pass > 1 {
+ lastpc.From3 = new(obj.Addr)
lastpc.From3.Type = obj.TYPE_CONST
lastpc.From3.Offset = yyDollar[4].lval
}
}
case 124:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:692
+ //line a.y:697
{
outcode(int(yyDollar[1].lval), &nullgen, 0, &nullgen)
}
case 125:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:698
+ //line a.y:703
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_BRANCH
}
case 126:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:704
+ //line a.y:709
{
yyDollar[1].sym = asm.LabelLookup(yyDollar[1].sym)
yyVAL.addr = nullgen
}
case 127:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:716
+ //line a.y:721
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
yyVAL.addr.Reg = int16(yyDollar[1].lval)
}
- case 128:
- yyVAL.addr = yyS[yypt-0].addr
- case 129:
- yyVAL.addr = yyS[yypt-0].addr
case 130:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:728
+ //line a.y:733
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 131:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:736
+ //line a.y:741
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 132:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:743
+ //line a.y:748
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 133:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:751
+ //line a.y:756
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 134:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:759
+ //line a.y:764
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 135:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:765
+ //line a.y:770
{
if yyDollar[3].lval < 0 || yyDollar[3].lval >= 1024 {
yyerror("SPR/DCR out of range")
yyVAL.addr.Type = obj.TYPE_REG
yyVAL.addr.Reg = int16(yyDollar[1].lval + yyDollar[3].lval)
}
- case 136:
- yyVAL.addr = yyS[yypt-0].addr
case 137:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:777
+ //line a.y:782
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 138:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:785
+ //line a.y:790
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 139:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:791
+ //line a.y:796
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 140:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:799
+ //line a.y:804
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 141:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:805
+ //line a.y:810
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 142:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:813
+ //line a.y:818
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_REG
}
case 143:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:821
+ //line a.y:826
{
var mb, me int
var v uint32
}
case 144:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:844
+ //line a.y:849
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 145:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:851
+ //line a.y:856
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 146:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:858
+ //line a.y:863
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 147:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:865
+ //line a.y:870
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_TEXTSIZE
}
case 148:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:874
+ //line a.y:879
{
yyVAL.addr = yyDollar[2].addr
yyVAL.addr.Type = obj.TYPE_ADDR
}
case 149:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:879
+ //line a.y:884
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_SCONST
}
case 150:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:887
+ //line a.y:892
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 151:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:893
+ //line a.y:898
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_FCONST
}
case 152:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:900
+ //line a.y:905
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_CONST
yyVAL.addr.Offset = yyDollar[2].lval
}
- case 153:
- yyVAL.lval = yyS[yypt-0].lval
case 154:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:909
+ //line a.y:914
{
if yyVAL.lval < 0 || yyVAL.lval >= NREG {
print("register value out of range\n")
}
case 155:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:918
+ //line a.y:923
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 156:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:925
+ //line a.y:930
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
yyVAL.addr.Scale = int16(yyDollar[4].lval)
yyVAL.addr.Offset = 0
}
- case 157:
- yyVAL.addr = yyS[yypt-0].addr
case 158:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:936
+ //line a.y:941
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 159:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:945
+ //line a.y:950
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 160:
yyDollar = yyS[yypt-5 : yypt+1]
- //line a.y:953
+ //line a.y:958
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 161:
yyDollar = yyS[yypt-7 : yypt+1]
- //line a.y:961
+ //line a.y:966
{
yyVAL.addr = nullgen
yyVAL.addr.Type = obj.TYPE_MEM
}
case 164:
yyDollar = yyS[yypt-0 : yypt+1]
- //line a.y:973
+ //line a.y:978
{
yyVAL.lval = 0
}
case 165:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:977
+ //line a.y:982
{
yyVAL.lval = yyDollar[2].lval
}
case 166:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:981
+ //line a.y:986
{
yyVAL.lval = -yyDollar[2].lval
}
- case 167:
- yyVAL.lval = yyS[yypt-0].lval
- case 168:
- yyVAL.lval = yyS[yypt-0].lval
- case 169:
- yyVAL.lval = yyS[yypt-0].lval
- case 170:
- yyVAL.lval = yyS[yypt-0].lval
case 171:
yyDollar = yyS[yypt-1 : yypt+1]
- //line a.y:993
+ //line a.y:998
{
yyVAL.lval = yyDollar[1].sym.Value
}
case 172:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:997
+ //line a.y:1002
{
yyVAL.lval = -yyDollar[2].lval
}
case 173:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:1001
+ //line a.y:1006
{
yyVAL.lval = yyDollar[2].lval
}
case 174:
yyDollar = yyS[yypt-2 : yypt+1]
- //line a.y:1005
+ //line a.y:1010
{
yyVAL.lval = ^yyDollar[2].lval
}
case 175:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1009
+ //line a.y:1014
{
yyVAL.lval = yyDollar[2].lval
}
- case 176:
- yyVAL.lval = yyS[yypt-0].lval
case 177:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1016
+ //line a.y:1021
{
yyVAL.lval = yyDollar[1].lval + yyDollar[3].lval
}
case 178:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1020
+ //line a.y:1025
{
yyVAL.lval = yyDollar[1].lval - yyDollar[3].lval
}
case 179:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1024
+ //line a.y:1029
{
yyVAL.lval = yyDollar[1].lval * yyDollar[3].lval
}
case 180:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1028
+ //line a.y:1033
{
yyVAL.lval = yyDollar[1].lval / yyDollar[3].lval
}
case 181:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1032
+ //line a.y:1037
{
yyVAL.lval = yyDollar[1].lval % yyDollar[3].lval
}
case 182:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:1036
+ //line a.y:1041
{
yyVAL.lval = yyDollar[1].lval << uint(yyDollar[4].lval)
}
case 183:
yyDollar = yyS[yypt-4 : yypt+1]
- //line a.y:1040
+ //line a.y:1045
{
yyVAL.lval = yyDollar[1].lval >> uint(yyDollar[4].lval)
}
case 184:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1044
+ //line a.y:1049
{
yyVAL.lval = yyDollar[1].lval & yyDollar[3].lval
}
case 185:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1048
+ //line a.y:1053
{
yyVAL.lval = yyDollar[1].lval ^ yyDollar[3].lval
}
case 186:
yyDollar = yyS[yypt-3 : yypt+1]
- //line a.y:1052
+ //line a.y:1057
{
yyVAL.lval = yyDollar[1].lval | yyDollar[3].lval
}