LEFT | RIGHT |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 package main | 5 package main |
6 | 6 |
7 // generate operator implementations | 7 // generate operator implementations |
8 | 8 |
9 import ( | 9 import ( |
10 "log" | 10 "log" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 Op{Name: "Neg", Expr: "-v", ConstExpr: "v.Neg()", Types: numbers}, | 96 Op{Name: "Neg", Expr: "-v", ConstExpr: "v.Neg()", Types: numbers}, |
97 Op{Name: "Not", Expr: "!v", Types: bools}, | 97 Op{Name: "Not", Expr: "!v", Types: bools}, |
98 Op{Name: "Xor", Expr: "^v", ConstExpr: "v.Neg().Sub(bignum.Int(1))", Typ
es: integers}, | 98 Op{Name: "Xor", Expr: "^v", ConstExpr: "v.Neg().Sub(bignum.Int(1))", Typ
es: integers}, |
99 } | 99 } |
100 | 100 |
101 var binOps = []Op{ | 101 var binOps = []Op{ |
102 Op{Name: "Add", Expr: "l + r", ConstExpr: "l.Add(r)", Types: addable}, | 102 Op{Name: "Add", Expr: "l + r", ConstExpr: "l.Add(r)", Types: addable}, |
103 Op{Name: "Sub", Expr: "l - r", ConstExpr: "l.Sub(r)", Types: numbers}, | 103 Op{Name: "Sub", Expr: "l - r", ConstExpr: "l.Sub(r)", Types: numbers}, |
104 Op{Name: "Mul", Expr: "l * r", ConstExpr: "l.Mul(r)", Types: numbers}, | 104 Op{Name: "Mul", Expr: "l * r", ConstExpr: "l.Mul(r)", Types: numbers}, |
105 Op{Name: "Quo", | 105 Op{Name: "Quo", |
106 » » » Body: "if r == 0 { t.Abort(DivByZeroError{}) } ret
= l / r", | 106 » » Body: "if r == 0 { t.Abort(DivByZeroError{}) } ret = l / r
", |
107 » » » ConstExpr: "l.Quo(r)", | 107 » » ConstExpr: "l.Quo(r)", |
108 » » » Types: numbers, | 108 » » Types: numbers, |
109 }, | 109 }, |
110 Op{Name: "Rem", | 110 Op{Name: "Rem", |
111 » » » Body: "if r == 0 { t.Abort(DivByZeroError{}) } ret
= l % r", | 111 » » Body: "if r == 0 { t.Abort(DivByZeroError{}) } ret = l % r"
, |
112 » » » ConstExpr: "l.Rem(r)", | 112 » » ConstExpr: "l.Rem(r)", |
113 » » » Types: integers, | 113 » » Types: integers, |
114 }, | 114 }, |
115 Op{Name: "And", Expr: "l & r", ConstExpr: "l.And(r)", Types: integers}, | 115 Op{Name: "And", Expr: "l & r", ConstExpr: "l.And(r)", Types: integers}, |
116 Op{Name: "Or", Expr: "l | r", ConstExpr: "l.Or(r)", Types: integers}, | 116 Op{Name: "Or", Expr: "l | r", ConstExpr: "l.Or(r)", Types: integers}, |
117 Op{Name: "Xor", Expr: "l ^ r", ConstExpr: "l.Xor(r)", Types: integers}, | 117 Op{Name: "Xor", Expr: "l ^ r", ConstExpr: "l.Xor(r)", Types: integers}, |
118 Op{Name: "AndNot", Expr: "l &^ r", ConstExpr: "l.AndNot(r)", Types: inte
gers}, | 118 Op{Name: "AndNot", Expr: "l &^ r", ConstExpr: "l.AndNot(r)", Types: inte
gers}, |
119 Op{Name: "Shl", Expr: "l << r", ConstExpr: "l.Shl(uint(r.Value()))", | 119 Op{Name: "Shl", Expr: "l << r", ConstExpr: "l.Shl(uint(r.Value()))", |
120 AsRightName: "asUint", Types: shiftable, | 120 AsRightName: "asUint", Types: shiftable, |
121 }, | 121 }, |
122 Op{Name: "Shr", Expr: "l >> r", ConstExpr: "l.Shr(uint(r.Value()))", | 122 Op{Name: "Shr", Expr: "l >> r", ConstExpr: "l.Shr(uint(r.Value()))", |
123 AsRightName: "asUint", Types: shiftable, | 123 AsRightName: "asUint", Types: shiftable, |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 t.SetDelims("«", "»") | 366 t.SetDelims("«", "»") |
367 err := t.Parse(templateStr) | 367 err := t.Parse(templateStr) |
368 if err != nil { | 368 if err != nil { |
369 log.Exit(err) | 369 log.Exit(err) |
370 } | 370 } |
371 err = t.Execute(data, os.Stdout) | 371 err = t.Execute(data, os.Stdout) |
372 if err != nil { | 372 if err != nil { |
373 log.Exit(err) | 373 log.Exit(err) |
374 } | 374 } |
375 } | 375 } |
LEFT | RIGHT |