Commits

Chris Lattner committed b61a6fd946f
Rework AST and SILGen of properties and subscripts to take advantage of the new mutability model. - Change the AST for get/set functions to take self @inout only when they are @mutating. Setters default to @mutating, but can be explicitly marked @!mutating. Getters default to not mutating, but can be marked @mutating. This causes self to follow. - Change sema to handle semantic analysis of a.y (and subscripts) based on whether the computed type of a allows mutation (which is when 'a' is an lvalue, or both the getter and setter are non-mutating). When both of these conditions fail, 'a.y' has rvalue type, and is thus non-mutable. - Rework silgen of lvalues to handle this: now properties and subscripts can have rvalues as bases, which means that all the lvalue machinery needs to be able to handle the full generality of base expressions (which is what my recent patches have been paving the way towards). - Rework silgen of rvalues to similarly handle rvalue bases. - Rework silgen of both to handle the case where the AST has found a base expression that is an lvalue, but where only a non-mutating getter or setter is needed. Right now, we just emit a load of the lvalue, but it would result in better code to not require the base be an lvalue at all (todo). The upshot of all of this is that we are doing *much* less AST-level materialization (MaterializeExpr goes down), we generate a lot better SIL out of SILGen in many cases, and 'self' being an rvalue in properties and subscripts means that we correctly reject code like the examples in test/Sema/immutability.swift. Swift SVN r11884