]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/noder/noder.go
[dev.typeparams] all: merge dev.regabi (5e4a0cd) into dev.typeparams
[gostls13.git] / src / cmd / compile / internal / noder / noder.go
index 5b5b09cb2df930a0055fa89fd3db023b3ef3b2b1..1c38f1a934d0b71c3256bfb7f45a72fde9cfbac5 100644 (file)
@@ -30,6 +30,9 @@ func LoadPackage(filenames []string) {
        base.Timer.Start("fe", "parse")
 
        mode := syntax.CheckBranches
+       if base.Flag.G != 0 {
+               mode |= syntax.AllowGenerics
+       }
 
        // Limit the number of simultaneously open files.
        sem := make(chan struct{}, runtime.GOMAXPROCS(0)+10)
@@ -65,10 +68,16 @@ func LoadPackage(filenames []string) {
                for e := range p.err {
                        p.errorAt(e.Pos, "%s", e.Msg)
                }
-               lines += p.file.Lines
+               lines += p.file.EOF.Line()
        }
        base.Timer.AddEvent(int64(lines), "lines")
 
+       if base.Flag.G != 0 {
+               // Use types2 to type-check and possibly generate IR.
+               check2(noders)
+               return
+       }
+
        for _, p := range noders {
                p.node()
                p.file = nil // release memory
@@ -1031,8 +1040,7 @@ func (p *noder) stmtFall(stmt syntax.Stmt, fallOK bool) ir.Node {
        case *syntax.DeclStmt:
                return ir.NewBlockStmt(src.NoXPos, p.decls(stmt.DeclList))
        case *syntax.AssignStmt:
-               if stmt.Rhs == syntax.ImplicitOne {
-                       one := constant.MakeInt64(1)
+               if stmt.Rhs == nil {
                        pos := p.pos(stmt)
                        n := ir.NewAssignOpStmt(pos, p.binOp(stmt.Op), p.expr(stmt.Lhs), ir.NewBasicLit(pos, one))
                        n.IncDec = true