Age | Commit message (Collapse) | Author | Files | Lines |
|
a := true;
a |= a;
in the front end.
R=ken
OCL=32240
CL=32243
|
|
R=ken
OCL=31865
CL=31867
|
|
excluding import data,
no yacc node has type Type* anymore.
0 reduce/reduce conflicts.
R=ken
OCL=31793
CL=31795
|
|
consts in the same factored block
const (
X = Y;
Y = 2;
)
R=ken
OCL=31782
CL=31782
|
|
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
|
|
delay evaluation of most types (all but func)
from parse time to type check time.
R=ken
OCL=31585
CL=31585
|
|
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
|
|
R=rsc
OCL=31396
CL=31396
|
|
R=ken
OCL=31122
CL=31278
|
|
x << "a"
1 << int(2)
R=ken
OCL=31244
CL=31244
|
|
missing break after error.
dot symbol bug fix: leave sym alone
(was incorrect for inserted cross-package dots).
R=ken
OCL=31234
CL=31236
|
|
when implicit assignment would have been okay.
R=ken
OCL=31225
CL=31227
|
|
R=r
OCL=31156
CL=31156
|
|
alignment issue is fixed.
R=ken
OCL=31124
CL=31144
|
|
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
|
|
R=ken
OCL=30593
CL=30756
|
|
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
|
|
R=ken
OCL=30519
CL=30534
|
|
* no longer distinguishes const, var, type, package names.
* all the predefined names are not tokens anymore.
R=ken
OCL=29326
CL=29985
|
|
R=ken
OCL=29849
CL=29849
|
|
R=ken
OCL=29806
CL=29808
|
|
in complex literals. side effect is
fix of error in initializerr.go
R=r
OCL=29667
CL=29667
|
|
R=ken
OCL=29651
CL=29653
|
|
R=ken
OCL=29568
CL=29570
|
|
R=r
OCL=29479
CL=29479
|
|
R=r
OCL=29466
CL=29466
|
|
can run 64-bit sieve and powser.
interfaces are limping along.
next hurdle is floating point.
R=ken
OCL=29418
CL=29423
|
|
R=r
OCL=29419
CL=29419
|
|
R=r
OCL=29409
CL=29409
|
|
R=r
OCL=29405
CL=29405
|
|
structtype{a:1, a:2}
maptypetype{"xx":1, "xx":2}
arraytypetype{5:1, 5:2}
2. bug in registerization concerning
alias of a struct and one of its elements
3. code optimization of struct.field
(which exposed bug in 2)
R=r
OCL=29315
CL=29315
|
|
R=ken
OCL=29209
CL=29216
|
|
renamed 6g/(gen|align|obj).c
R=r
OCL=29205
CL=29205
|
|
when assigning a multifield object
(structs or arrays of structs) they
must not contain any fields that could
not be assigned individually.
R=ken
OCL=29192
CL=29194
|
|
structure and array literals
R=r
OCL=29190
CL=29190
|
|
must have non-nil i.
R=ken
OCL=29136
CL=29136
|
|
that came from two different enums.
spilt into ifacecvt and ifaceop depending
on which enum the argument is.
R=ken
OCL=29122
CL=29122
|
|
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
|
|
do not update lineno from ONAME nodes,
because they have declaration lineno not use.
show actual name in top-level statement error.
before
runtime.a:7: x.go:5: walkstate: NAME not a top level statement
after
x.go:14: walkstate: runtime.Goexit not a top level statement
R=ken
OCL=29113
CL=29116
|
|
R=r
OCL=29016
CL=29016
|
|
structs and arrays are done
slices and maps are yet to do
R=r
OCL=28977
CL=28977
|
|
R=ken
OCL=28814
CL=28814
|
|
new type equality restrictions
better handling of renamed packages
"sys" is no longer available to programs
R=ken
OCL=28553
CL=28578
|
|
R=ken
OCL=28559
CL=28562
|
|
with method m, s.m() is ok and m now shows up
in s's method set for interface runtime.
see http://cl/28419-p2 for new test interface10.go.
R=ken
OCL=28420
CL=28423
|
|
replace "shape error across CALL" with more information.
x.go:7: not enough arguments to CALL
a int, b int
int
x.go:10: assignment count mismatch: 3 = 2
x.go:12: too many arguments to RETURN
[no arguments expected]
int, int, int
also leave type alone after conversion failure,
for later errors:
bug049.go:6: cannot convert nil constant to string
bug049.go:6: illegal types for operand: EQ
string
nil # this used to be blank
R=ken
OCL=28405
CL=28407
|
|
R=ken
OCL=28374
CL=28378
|
|
R=ken
OCL=28120
CL=28124
|
|
as a new name in a later declaration
(bug 144)
R=r
OCL=27850
CL=27850
|
|
lv context for some [] operations
calling implicit(*map) before walk.
R=r
OCL=27706
CL=27706
|