Russ Cox
769919c4ee
better error message + line numbers
...
package main
func main() {
var x interface{};
switch x {
case 41:
case "b":
}
}
before:
x.go:5: fatal error: exprcmp
now:
x.go:5: illegal types for operand: EQ
interface { }
int
x.go:6: illegal types for operand: EQ
interface { }
string
R=ken
OCL=31217
CL=31219
2009-07-06 16:05:48 -07:00
Russ Cox
d6a9817051
bug157
...
R=ken
OCL=29651
CL=29653
2009-05-30 21:18:15 -07:00
Ken Thompson
be63b6dc44
bug 158
...
R=r
OCL=29646
CL=29646
2009-05-30 17:06:51 -07:00
Russ Cox
2da5022bcf
change representation of interface values.
...
this is not a user-visible change.
before, all interface values were
struct Itype {
Sigt *type;
Sigi *inter;
void *method[n];
}
struct Iface {
void *addr;
Itype *itype;
}
the itype is basically a vtable, but it's unnecessary
if the static type is interface{ }.
for interface values with static type empty, the
new representation is
struct Eface {
void *addr;
Sigt *type;
}
this complicates the code somewhat, but
it reduces the number of Itypes that
have to be computed and cached,
it opens up opportunities to avoid function
calls in a few common cases,
and it will make it possible to lay out
interface{} values at compile time,
which i think i'll need for the new reflection.
R=ken
OCL=28701
CL=29121
2009-05-20 14:57:55 -07:00
Ken Thompson
9efd6b8a3d
compiler falut for forgetting
...
the assignment on a type switch
R=r
OCL=27048
CL=27048
2009-04-02 18:06:43 -07:00
Ken Thompson
2450c590e9
typeswitch - expression evaluated
...
twice instead of once.
R=r
OCL=27015
CL=27015
2009-04-01 21:28:59 -07:00
Ken Thompson
79fa5b65cb
rewrote switch
...
fixed bug 141
R=r
OCL=26627
CL=26627
2009-03-22 20:54:21 -07:00
Ken Thompson
1cdcfda140
remove assignment cases from switch
...
R=r
OCL=26480
CL=26480
2009-03-18 12:13:42 -07:00
Ken Thompson
1e0c17e294
switch on false error
...
R=r
OCL=26434
CL=26434
2009-03-17 19:10:32 -07:00
Ken Thompson
0f469a99a3
binary search on type switches.
...
new feature 'case nil:' in type switch
will match iff the interface is nil.
R=r
OCL=26404
CL=26404
2009-03-17 13:58:38 -07:00
Russ Cox
8f194bf5ff
make 6g constants behave as ken proposes. (i hope.)
...
various bug fixes and tests involving constants.
test/const1.go is the major new test case.
R=ken
OCL=26216
CL=26224
2009-03-12 19:04:38 -07:00
Ken Thompson
0c4f4587d7
bug with interaction of variables
...
declared in cases and heap allocation
R=r
OCL=26064
CL=26064
2009-03-10 16:49:34 -07:00
Ken Thompson
820f42d977
binary search for constant case statements.
...
R=r
OCL=25890
CL=25890
2009-03-07 17:33:42 -08:00
Ken Thompson
a4a10ed856
1. type switches
...
2. fixed fault on bug128
3. got rid of typeof
4. fixed bug in t,ok = I2T
R=r
OCL=25873
CL=25873
2009-03-06 17:50:43 -08:00
Ken Thompson
bf983477a2
new switch implementation
...
in preparation of type switch.
no functional change (yet).
R=r
OCL=25784
CL=25788
2009-03-05 15:49:34 -08:00