Russ Cox
6be0f50b97
bug159
...
R=ken
OCL=32902
CL=32914
2009-08-07 16:47:54 -07:00
Russ Cox
39b12e2dcb
bug185 - return b,a from func() (a,b int)
...
R=ken
OCL=32900
CL=32900
2009-08-07 14:38:31 -07:00
Russ Cox
d1ee5d6e8f
bug184 - assignment compatibility in unpacked multireturn
...
R=ken
OCL=32890
CL=32894
2009-08-07 14:00:18 -07:00
Russ Cox
aa7bd48389
bug183 - embedded vs non-embedded struct field in eqtype
...
R=ken
OCL=32888
CL=32888
2009-08-07 13:23:09 -07:00
Russ Cox
468f244416
bug182 - compiler crash
...
R=ken
OCL=32887
CL=32887
2009-08-07 13:17:28 -07:00
Russ Cox
6c2738eb43
bug181 - type T *struct { T } is an invalid embedded type
...
R=ken
OCL=32886
CL=32886
2009-08-07 13:14:01 -07:00
Russ Cox
99eca57d43
clean up a few error messages;
...
disable func redeclaration mismatch test;
fix golden.out
R=ken
OCL=32883
CL=32883
2009-08-07 13:00:20 -07:00
Russ Cox
b648716ee9
forward declarations not necessary.
...
still to do:
* initializer cycle detection
* nicer error for type checking cycles
R=ken
OCL=32855
CL=32880
2009-08-07 12:50:26 -07:00
Russ Cox
2609731736
delay range processing. old2new is gone
...
R=ken
OCL=32780
CL=32780
2009-08-05 02:33:30 -07:00
Russ Cox
54b403723b
delay := processing
...
R=ken
OCL=32772
CL=32772
2009-08-05 00:42:44 -07:00
Russ Cox
a121410541
make Syms smaller.
...
collapse a lot of duplication in dcl.c
switch to NodeList* from Dcl*
R=ken
OCL=32770
CL=32770
2009-08-04 22:59:23 -07:00
Russ Cox
aa347c4a0d
move various bits of code around
...
and delete some dead code.
no actual changes here.
R=ken
OCL=32764
CL=32764
2009-08-04 18:43:32 -07:00
Russ Cox
dbe004efe4
delayed evaluation of var blocks
...
R=ken
OCL=32750
CL=32753
2009-08-04 16:53:06 -07:00
Russ Cox
f7a867e1a6
move select into its own file.
...
split into typecheck + walk
R=ken
OCL=32726
CL=32726
2009-08-04 12:57:48 -07:00
Russ Cox
d8c19c80dc
type checking of assignments, switch, if, for
...
R=ken
OCL=32716
CL=32720
2009-08-04 10:26:29 -07:00
Russ Cox
9dc22b6d6f
more 6g reorg; checkpoint.
...
typecheck.c is now responsible for all type checking
except for assignment and function argument "..."
R=ken
OCL=32661
CL=32667
2009-08-03 11:58:52 -07:00
Russ Cox
9953c48dc4
missed in last checkin
...
R=ken
OCL=32581
CL=32581
2009-07-31 09:45:39 -07:00
Russ Cox
a2b8e38766
checkpoint; still plenty to clean up
...
R=ken
OCL=32576
CL=32580
2009-07-31 09:29:28 -07:00
Russ Cox
b754b4348f
delete some code from walkexpr that is now
...
handled by typecheck.
second switch is gone
move floating point minus into back end
R=ken
OCL=32558
CL=32558
2009-07-30 18:56:44 -07:00
Russ Cox
ff3a73b407
typechecking checkpoint.
...
started to move typechecking to another file.
can build entire tree still, but lots of work
is duplicated. much to clean up.
R=ken
OCL=32536
CL=32543
2009-07-30 16:53:08 -07:00
Russ Cox
2946069e3f
break and continue fixes
...
labeled break/continue was using
first loop with any label,
not first loop with the right label.
R=ken
OCL=32453
CL=32458
2009-07-29 14:49:01 -07:00
Russ Cox
9271c6402e
introduce typecheck pass before walkexpr.
...
not complete but compiler still works.
R=ken
OCL=32424
CL=32426
2009-07-29 12:47:51 -07:00
Russ Cox
056940d84b
convert walkexpr to take Node**; drop indir
...
R=ken
OCL=32421
CL=32421
2009-07-29 12:00:34 -07:00
Russ Cox
4152b925f9
expression printer; %#N
...
R=ken
OCL=32419
CL=32419
2009-07-29 11:51:34 -07:00
Russ Cox
9346c6d901
make every func literal expression allocate,
...
so that == on func means that the
functions originated in the same
execution of a func literal or definition.
before, there was an inconsistency:
func() {x++} != func() {x++}
but
func() {} == func() {}
this CL makes the second case != too,
just like
make(map[int]int) != make(map[int]int)
R=r
DELTA=202 (71 added, 62 deleted, 69 changed)
OCL=32393
CL=32398
2009-07-28 20:01:00 -07:00
Russ Cox
123ff2ebb8
bug177: anonymous struct fields in reflect
...
(reported by iant)
R=r
DELTA=50 (32 added, 12 deleted, 6 changed)
OCL=32263
CL=32385
2009-07-28 17:01:46 -07:00
Russ Cox
18840f5429
constant keys for array initializers
...
R=ken
OCL=32261
CL=32261
2009-07-27 17:58:25 -07:00
Russ Cox
b7dd312c93
bug170; fix test for bug175
...
R=ken
OCL=32255
CL=32255
2009-07-27 17:24:07 -07:00
Russ Cox
a587d9a73f
multiple return in := bug
...
R=ken
OCL=32253
CL=32253
2009-07-27 16:59:10 -07:00
Russ Cox
059bbdd340
print(1<<x)
...
R=ken
OCL=32252
CL=32252
2009-07-27 16:17:09 -07:00
Russ Cox
811e59f2fa
named string type bugs
...
R=ken
OCL=32244
CL=32244
2009-07-27 15:16:28 -07:00
Russ Cox
03b25a92a3
catch
...
a := true;
a |= a;
in the front end.
R=ken
OCL=32240
CL=32243
2009-07-27 14:55:14 -07:00
Russ Cox
0b2683d1ee
do not insert implicit "return;" in empty function body
...
R=ken
OCL=32239
CL=32239
2009-07-27 14:36:32 -07:00
Russ Cox
5a74c0b6ba
do not use ONONAMEs for line number information,
...
just like ONAME etc.
R=ken
OCL=31964
CL=31964
2009-07-21 16:38:56 -07:00
Russ Cox
1d51978fed
fix cut-and-paste bugs in error messages
...
R=ken
OCL=31890
CL=31890
2009-07-20 17:41:18 -07:00
Russ Cox
6e1ad041f7
avoid strncat in formatters.
...
the n argument to strncat is the maximum
number of bytes to read from the src,
not the total size of the destination.
R=ken
OCL=31871
CL=31875
2009-07-20 14:16:25 -07:00
Russ Cox
f664d0e904
explain selectsend problem
...
R=ken
OCL=31865
CL=31867
2009-07-20 13:29:56 -07:00
Russ Cox
35e5906f91
another baby step.
...
excluding import data,
no yacc node has type Type* anymore.
0 reduce/reduce conflicts.
R=ken
OCL=31793
CL=31795
2009-07-17 14:42:14 -07:00
Russ Cox
db508ccbff
baby step: const decls can refer to future
...
consts in the same factored block
const (
X = Y;
Y = 2;
)
R=ken
OCL=31782
CL=31782
2009-07-17 13:38:16 -07:00
Russ Cox
e52e9ca82e
another step toward eliminating forward declarations.
...
introduce NodeList* type in compiler to replace OLIST.
this clarifies where lists can and cannot occur.
list append and concatenation are now cheap.
the _r rules are gone from yacc.
rev and unrev are gone.
no more lists of lists.
the representation of assignments is a bit clunkier.
split into OAS (1=1) and OAS2 (2 or more on one side).
delete dead chanrecv3 code.
delay construction of func types.
R=ken
OCL=31745
CL=31762
2009-07-17 01:00:44 -07:00
Russ Cox
be16caf872
step toward no function prototypes.
...
delay evaluation of most types (all but func)
from parse time to type check time.
R=ken
OCL=31585
CL=31585
2009-07-13 23:38:39 -07:00
Russ Cox
e11447f7da
bug148.
...
R=ken
OCL=31582
CL=31582
2009-07-13 23:29:44 -07:00
Russ Cox
0dadc4fe4f
cleanup in preparation for new scoping.
...
walkstate -> walkstmt
walktype -> walkexpr; stmts moved to walkstmt
walktype and friends have a final Node **init
argument that can have side effects appended,
making it more explicit when they do and do not happen.
this replaces the old global addtop and addtotop.
delete switch map and interface conversion cases
(dropped from the language months ago).
R=ken
OCL=31465
CL=31468
2009-07-10 16:29:26 -07:00
Ken Thompson
ed124a971e
segfault
...
R=rsc
OCL=31467
CL=31467
2009-07-10 16:12:21 -07:00
Ken Thompson
5ff7d84892
segment fault
...
R=rsc
OCL=31396
CL=31396
2009-07-09 11:41:06 -07:00
Ken Thompson
a68b1da3cc
another nil reference
...
R=rsc
OCL=31373
CL=31373
2009-07-08 17:58:15 -07:00
Russ Cox
903d28bd1e
ANY is already checked separately,
...
so remove code from go.y.
show original types in badtype; don't remove pointers.
not sure why this was here but it confuses things
if the bad part involves two named pointer types
with different names but the same pointed-at type.
R=ken
OCL=31369
CL=31369
2009-07-08 16:39:19 -07:00
Russ Cox
42af80348c
method expansion bugs
...
R=ken
OCL=31310
CL=31310
2009-07-07 16:05:55 -07:00
Russ Cox
a1b64821f8
bug167
...
R=ken
OCL=31295
CL=31295
2009-07-07 11:48:22 -07:00
Russ Cox
541e638f9b
6g, 8g: generate data structures for new reflect interface (CL 31107)
...
R=ken
OCL=31122
CL=31278
2009-07-07 11:03:04 -07:00
Russ Cox
c7513eac88
runtime: use new reflect data structures (CL 31107)
...
in place of sigi, sigt.
R=ken
OCL=31118
CL=31277
2009-07-07 11:02:54 -07:00
Russ Cox
0417aafe75
insert ODCL in type switch case.
...
needed for heap allocation if variable escapes.
package main
func main(){
var i interface{} = 42;
switch v := i.(type) {
case int:
println(&v, v);
}
}
R=ken
OCL=31245
CL=31245
2009-07-06 23:42:57 -07:00
Russ Cox
0aa1b1508a
shift typechecking bugs
...
x << "a"
1 << int(2)
R=ken
OCL=31244
CL=31244
2009-07-06 23:33:17 -07:00
Russ Cox
2acbc37166
various 6g cleanup:
...
* give genwrapper and genembedtramp the same signature.
* move duint8, duint16, duint32, duint64, duintptr into gc.
* tidy genwrapper.
* bug involving struct field symbols in signature list.
(hash-order dependent so hard to trigger)
* new Type print format %#-T like %#T but omits
names on function arguments.
R=ken
OCL=31237
CL=31237
2009-07-06 22:31:20 -07:00
Russ Cox
74b546aefd
statements after panicln are unreachable, just like after panic.
...
missing break after error.
dot symbol bug fix: leave sym alone
(was incorrect for inserted cross-package dots).
R=ken
OCL=31234
CL=31236
2009-07-06 22:25:54 -07:00
Russ Cox
ef4ddd63f8
another piece for cross-file forward struct declarations.
...
R=ken
OCL=31233
CL=31233
2009-07-06 21:39:18 -07:00
Russ Cox
a14b28a24d
fix bug involving typed nil constants:
...
interface = (*int)(nil) is not the same as
interface = nil.
package main
func main() {
var x interface{} = (*int)(nil);
println(x.(*int));
}
R=ken
OCL=31232
CL=31232
2009-07-06 21:37:29 -07:00
Russ Cox
7af032b87b
fix forward struct declarations
...
R=ken
OCL=31230
CL=31230
2009-07-06 18:05:11 -07:00
Russ Cox
d436a70193
allow conversion to interface type
...
when implicit assignment would have been okay.
R=ken
OCL=31225
CL=31227
2009-07-06 17:20:48 -07:00
Russ Cox
53ebd163c6
more precise error message
...
package main
func main() {
var x interface {} = 42;
switch x := x.(type) {
case int:
case foo:
}
}
before:
x.go:7: non-type case in type switch
x.go:7: inappropriate case for a type switch
now:
x.go:7: foo: undefined
R=ken
OCL=31221
CL=31221
2009-07-06 16:29:28 -07:00
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
Ken Thompson
6bb3c48d3d
another seg fault
...
R=r
OCL=31156
CL=31156
2009-07-04 13:59:08 -07:00
Russ Cox
db312fa8de
bug163
...
R=ken
OCL=31149
CL=31149
2009-07-03 13:34:05 -07:00
Russ Cox
75fe1303c1
maps have == so maps are okay as map keys.
...
alignment issue is fixed.
R=ken
OCL=31124
CL=31144
2009-07-03 09:44:59 -07:00
Russ Cox
20cfa4a568
change alignment rules: roll receiver into
...
input parameters, move output parameters
into their own struct.
R=ken
OCL=30954
CL=30966
2009-06-30 20:02:07 -07:00
Russ Cox
5d5904bb4d
bug163 bug164 bug166
...
R=ken
OCL=30889
CL=30889
2009-06-29 17:46:22 -07:00
Russ Cox
9435dc2bdf
allow forward declaration of struct in another file
...
(in the same package).
allow forward method declaration to be satisfied
by implementation in another file (in the same package).
all methods must be declared in the same file
as the receiver type.
R=ken
OCL=30864
CL=30869
2009-06-29 15:13:37 -07:00
Russ Cox
480f51243c
bug165
...
R=ken
OCL=30783
CL=30783
2009-06-25 21:02:39 -07:00
Russ Cox
70e232e668
separate local path lookup from standard package directories
...
R=ken
OCL=30760
CL=30779
2009-06-25 20:15:56 -07:00
Russ Cox
5851a1b5ad
allow
...
package main
type t interface
type t interface{ m(map[t]bool) }
type m map[t] int
making it work without the forward declaration will require a second pass.
R=ken
OCL=30773
CL=30773
2009-06-25 18:19:05 -07:00
Russ Cox
1ea28570ec
the any fix was too aggressive; allow any in any import.
...
R=ken
OCL=30768
CL=30768
2009-06-25 16:57:56 -07:00
Russ Cox
fa6df47986
package main
...
const foo = []int{1,2}
x.go:3: expression must be a constant
instead of
x.go:3: fatal error: gettype: addtop
R=ken
OCL=30767
CL=30767
2009-06-25 16:42:08 -07:00
Russ Cox
70a273476b
better error; clean up lineno in a few places
...
wreck.mtv=; cat x.go
package main
var x = string.Split()
wreck.mtv=; 6g x.go
x.go:2: type string used as expression
x.go:2: undefined DOT Split on string
x.go:3: illegal types for operand: AS
undefined
wreck.mtv=;
BUG=1938751
R=ken
OCL=30766
CL=30766
2009-06-25 16:32:33 -07:00
Russ Cox
4bce6d455f
package main
...
func foo(y) { }
was:
x.go:2: NONAME-y G0 u(1) a(1) l(77) x(-1000000000) is not a type
now:
x.go:2: y is not a type
R=ken
OCL=30764
CL=30764
2009-06-25 16:25:06 -07:00
Russ Cox
30f2799f88
disable "any" except during canned imports.
...
new flag -A enables it during mkbuiltin.
avoids mysterious errors in programs
that refer to any accidentally.
R=ken
OCL=30763
CL=30763
2009-06-25 16:22:46 -07:00
Russ Cox
111ae83bb7
6g: update for spec change CL 30586
...
R=ken
OCL=30593
CL=30756
2009-06-25 14:44:45 -07:00
Ken Thompson
466dd8da4e
6g crash re mail from gri jun 18.
...
R=r
OCL=30719
CL=30719
2009-06-24 17:50:25 -07:00
Russ Cox
0aef57e37f
fix a 6g crash after type errors.
...
do not bother warning about marks left
on stack after syntax errors.
leave OCONV nodes in tree to avoid type errors
arising from multiple walks.
R=ken
OCL=30639
CL=30662
2009-06-23 15:30:59 -07:00
Russ Cox
7f3eb2738f
implement new spec language regarding conversions
...
R=ken
OCL=30519
CL=30534
2009-06-19 14:00:53 -07:00
Ken Thompson
eba82f4391
better diagnostics for eof in a string.
...
this assumes that embedded newlines are
legal in back-quote strings.
R=r
OCL=30502
CL=30502
2009-06-18 15:49:41 -07:00
Russ Cox
30a28aec25
b/1909731
...
package main
func f(a *c.b) {}
func main() {}
BUG=1909731
R=ken
OCL=30322
CL=30322
2009-06-15 20:15:59 -07:00
Russ Cox
8abcdee175
implement optional semicolons with help from the lexer,
...
instead of having to double the type and statement grammars.
R=ken
OCL=29987
CL=29998
2009-06-06 19:27:48 -07:00
Russ Cox
8f4af6d205
gc: grammar cleanup:
...
* no longer distinguishes const, var, type, package names.
* all the predefined names are not tokens anymore.
R=ken
OCL=29326
CL=29985
2009-06-06 12:46:38 -07:00
Russ Cox
01fe6a9c58
more build refinements:
...
* use new Make.$GOARCH files in gobuild.
* rename 6ar to arch-generic gopack.
* place objects in $GOROOT/pkg/$GOOS_$GOARCH
(makes cross-compiling easier, and no one
ever types these paths by hand anyway).
R=r
DELTA=29 (6 added, 8 deleted, 15 changed)
OCL=29923
CL=29967
2009-06-05 22:18:32 -07:00
Russ Cox
6609d2f88d
restructure makefiles, scripts to factor out O= logic.
...
remove a few hardcoded paths elsewhere too.
R=r,gri
DELTA=123 (44 added, 15 deleted, 64 changed)
OCL=29914
CL=29945
2009-06-05 10:59:55 -07:00
Russ Cox
2f2577a4f6
bug161, fixed
...
R=ken
OCL=29907
CL=29907
2009-06-04 16:18:13 -07:00
Russ Cox
9a9ffb2b0e
more 8g progress.
...
likely to go back to registers for most temporaries.
most tests in lib pass. these fail:
datafmt
fmt
go/scanner
log
reflect
strconv
template
R=ken
OCL=29896
CL=29898
2009-06-04 15:24:01 -07:00
Russ Cox
f51ca384eb
fix handling of floating point zero constant 0p+0
...
R=r
DELTA=25 (25 added, 0 deleted, 0 changed)
OCL=29875
CL=29875
2009-06-04 11:06:37 -07:00
Russ Cox
ea7f5505d1
zero struct in T{}
...
R=ken
OCL=29849
CL=29849
2009-06-03 16:10:13 -07:00
Russ Cox
f1f970ad21
minor cleanup, 64-bit /= and %= on 32-bit
...
R=ken
OCL=29806
CL=29808
2009-06-02 23:21:58 -07:00
Ken Thompson
c17ce9f94f
prevent multiple similar errors
...
in complex literals. side effect is
fix of error in initializerr.go
R=r
OCL=29667
CL=29667
2009-05-31 13:02:24 -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
Ken Thompson
fbcbcdbb1d
bug 156
...
R=r
OCL=29623
CL=29623
2009-05-29 15:34:47 -07:00
Ken Thompson
3b37b02834
bug 149
...
R=r
OCL=29612
CL=29612
2009-05-29 13:44:30 -07:00
Russ Cox
0a6d83567e
print uint64 as uint64.
...
R=ken
OCL=29568
CL=29570
2009-05-28 22:24:03 -07:00
Ken Thompson
e2613711aa
detect recursive initialization
...
R=r
OCL=29544
CL=29544
2009-05-28 16:00:55 -07:00
Russ Cox
3aa006b8cd
better 64-bit handling in 8g.
...
fewer moves, fewer stupid LEALs.
powser1 runs (with evaln commented out).
beginnings of floating point.
R=ken
OCL=29540
CL=29543
2009-05-28 15:48:47 -07:00
Russ Cox
e81d97ea84
clean up gmove:
...
* conversions all in one place.
* no separate load, store phases;
direct memory addressing when possible
(this is the x86 after all!).
avoids extra registers, extra MOVQs.
* fixes int32 -> uint64 bug
(was zero-extending)
R=ken
OCL=29482
CL=29484
2009-05-27 23:55:14 -07:00
Ken Thompson
b3f303ec9a
bug 153
...
R=r
OCL=29479
CL=29479
2009-05-27 18:37:02 -07:00