Changeset 1730

Show
Ignore:
Timestamp:
11/04/08 20:56:49 (2 months ago)
Author:
Chuck.Esterbrook
Message:

_fooMethod warns about empty parens like .fooMethod() does.
Code cleanup.
Consolidate .isImplicit at Node. Get rid of duplication.

Location:
cobra/trunk
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • cobra/trunk/Source/BinaryOpExpr.cobra

    r1729 r1730  
    5050                                        return AssignExpr(opToken, op, left, right) 
    5151                                on 'DOT' 
    52                                         return DotExpr(opToken, op, left, right, false) 
     52                                        return DotExpr(opToken, op, left, right) 
    5353                                on 'INHERITS' or 'IMPLEMENTS' 
    5454                                        return InheritsExpr(opToken, op, left, right) 
     
    564564        inherits BinaryOpExpr 
    565565        implements IPotentialTypeExpr 
     566        """ 
     567        When creating a DotExpr, set .isImplicit to true if the original expression did not actually 
     568        contain a dot (.), but only implied it. For example: `_foo()` 
     569        """ 
    566570 
    567571        var _dotRightExpr as IDotRightExpr 
    568         var _isImplicit as bool 
    569  
    570         def init(opToken as IToken, op as String, left as Expr, right as Expr) 
    571                 require 
    572                         op == 'DOT' 
    573                         right inherits IDotRightExpr  
    574                 body 
    575                         .init(opToken, op, left, right, false) 
    576  
    577         def init(opToken as IToken, op as String, left as Expr, right as Expr, isImplicit as bool) 
     572 
     573        def init(opToken as IToken, op as String, left as Expr, right as Expr) 
    578574                require 
    579575                        op == 'DOT' 
     
    582578                        base.init(opToken, op, left, right) 
    583579                        _dotRightExpr = right to IDotRightExpr 
    584                         _isImplicit = isImplicit 
    585580 
    586581        get dotRight as IDotRightExpr 
     
    589584                """ 
    590585                return _dotRightExpr 
    591  
    592         pro isImplicit from var 
    593                 """ 
    594                 True if the original expression did not actually contain a dot (.), but only implied it. 
    595                 For example: `_foo()` 
    596                 """ 
    597586 
    598587        def _bindImp 
     
    699688                        # try to use right.contains(left) 
    700689                        # this is more direct and offers speed up on some classes like Set 
    701                         contains = DotExpr(.token, 'DOT', _right, CallExpr(.token, 'contains', List<of Expr>([_left]), true)) 
     690                        contains = DotExpr(.token, 'DOT', _right, CallExpr(.token, 'contains', List<of Expr>([_left]), true, isImplicit=true)) 
    702691                        try 
    703692                                contains.bindImp 
  • cobra/trunk/Source/Expr.cobra

    r1729 r1730  
    14651465                                # _foo(x) --> ._foo(x) 
    14661466                                newCall = CallExpr(.token, .name, .args, true) 
    1467                                 dotted = DotExpr(.token, 'DOT', ThisLit(.token, isVisible=false), newCall, true, isVisible=false).bindImp 
     1467                                dotted = DotExpr(.token, 'DOT', ThisLit(.token, isVisible=false), newCall, isVisible=false).bindImp 
    14681468                                _type = dotted.type to IType 
    14691469                                _transformTo(dotted) 
  • cobra/trunk/Source/Indexer.cobra

    r1645 r1730  
    8080 
    8181                if indexer.returnType 
    82                         p = Param(t, indexer.returnType, true) 
     82                        p = Param(t, indexer.returnType, isImplicit=true) 
    8383                else if indexer.returnTypeNode 
    84                         p = Param(t, indexer.returnTypeNode, true) 
     84                        p = Param(t, indexer.returnTypeNode, isImplicit=true) 
    8585                else 
    8686                        throw FallThroughException(indexer) 
  • cobra/trunk/Source/Members.cobra

    r1729 r1730  
    13621362        var _codeMember as AbstractMethod 
    13631363        var _exprs as List<of Expr> 
    1364         var _isImplicit as bool # meaning the source code did not define this object 
    13651364 
    13661365        def init(codeMember as AbstractMethod) 
    13671366                base.init(codeMember.token) 
    1368                 _isImplicit = true 
     1367                .isImplicit = true 
    13691368                _codeMember = codeMember 
    13701369                _exprs = List<of Expr>() 
     
    13791378                base.addMinFields 
    13801379                .addField('connectToken', _connectToken) 
    1381                 .addField('isImplicit', _isImplicit) 
    13821380 
    13831381        def addSubFields 
     
    14001398                return _codeMember.canHaveDetailedStackTrace and .compiler.options['contracts'] <> 'none' and not (.willInlineSharp and not .haveConditions) 
    14011399                 
    1402         get isImplicit from var 
    1403  
    14041400        def _bindImp is override 
    14051401                base._bindImp 
     
    14231419                """ 
    14241420                isNames = _codeMember.isNames 
    1425                 if not _isImplicit 
     1421                if not .isImplicit 
    14261422                        if _connectToken 
    14271423                                if 'override' not in isNames 
  • cobra/trunk/Source/Node.cobra

    r1711 r1730  
    341341        var _serialNum as int is private 
    342342 
     343        var _isImplicit as bool is private 
     344 
    343345        var _didStartBindInh as bool is private 
    344346        var _didStartBindInt as bool is private 
     
    387389 
    388390        get serialNum from var 
     391 
     392        pro isImplicit from var 
     393                """ 
     394                Indicates if the source code defined this node. Defaults to false. 
     395                Implicit nodes can include implicit symbols like `value` and nodes defined for _transfromTo purposes. 
     396                Checking .isImplicit is used for various purposes including avoiding false warnings. 
     397                Setting .isImplicit to true is only required in cases where it affects the compiler. 
     398                """ 
    389399 
    390400        def setSerialNum(serialNum as int) is protected 
     
    753763                Subclasses should override to add minimal fields. 
    754764                """ 
    755                 if .didStartBindInh 
    756                         .addField('didStartBindInh', .didStartBindInh) 
    757                 if .isBindingInh 
    758                         .addField('isBindingInh', .isBindingInh) 
     765                if .isImplicit, .addField('isImplicit', .isImplicit) 
     766 
     767                if .didStartBindInh, .addField('didStartBindInh', .didStartBindInh) 
     768                if .isBindingInh, .addField('isBindingInh', .isBindingInh) 
    759769                .addField('didBindInh', .didBindInh) 
    760770 
    761                 if .didStartBindInt 
    762                         .addField('didStartBindInt', .didStartBindInt) 
    763                 if .isBindingInt 
    764                         .addField('isBindingInt', .isBindingInt) 
     771                if .didStartBindInt, .addField('didStartBindInt', .didStartBindInt) 
     772                if .isBindingInt, .addField('isBindingInt', .isBindingInt) 
    765773                .addField('didBindInt', .didBindInt) 
    766774 
    767                 if .didStartBindImp 
    768                         .addField('didStartBindImp', .didStartBindImp) 
    769                 if .isBindingImp 
    770                         .addField('isBindingImp', .isBindingImp) 
     775                if .didStartBindImp, .addField('didStartBindImp', .didStartBindImp) 
     776                if .isBindingImp, .addField('isBindingImp', .isBindingImp) 
    771777                .addField('didBindImp', .didBindImp) 
    772778 
  • cobra/trunk/Source/Property.cobra

    r1645 r1730  
    5858 
    5959                if prop.returnType 
    60                         p = Param(t, prop.returnType, true) 
     60                        p = Param(t, prop.returnType, isImplicit=true) 
    6161                else if prop.returnTypeNode 
    62                         p = Param(t, prop.returnTypeNode, true) 
     62                        p = Param(t, prop.returnTypeNode, isImplicit=true) 
    6363                else 
    6464                        throw FallThroughException(prop) 
  • cobra/trunk/Source/SharpGenerator.cobra

    r1718 r1730  
    12551255                                decl.sharpExtraIsNames = {'static'} 
    12561256                                if decl inherits AbstractMethod 
    1257                                         decl.params.insert(0, Param('_lh_this', .extendedBox, true).bindAll to Param) 
     1257                                        decl.params.insert(0, Param('_lh_this', .extendedBox, isImplicit=true).bindAll to Param) 
    12581258                base.writeSharpDef(sw) 
    12591259 
  • cobra/trunk/Source/Vars.cobra

    r1713 r1730  
    3636        var _type as IType? 
    3737        var _typeNode as ITypeProxy? 
    38         var _isImplicit as bool 
    3938        var _isTracked as bool 
    4039        var _ifInheritsStack = Stack<of IType>() 
     
    4342        var _useSharpNameStack = Stack<of String>()  # for if-inherits 
    4443 
    45         def init(token as IToken, type as IType, isImplicit as bool) 
     44        def init(token as IToken, type as IType) 
    4645                base.init(token, token.text) 
    4746                _type = type 
    4847                assert not _type inherits NameSpace  # TODO: can remove with NameSpace is no longer an IType 
    49                 _init(isImplicit) 
    50  
    51         def init(token as IToken, typeNode as ITypeProxy, isImplicit as bool) 
     48                _init 
     49 
     50        def init(token as IToken, typeNode as ITypeProxy) 
    5251                base.init(token, token.text) 
    5352                _typeNode = typeNode 
    54                 _init(isImplicit) 
     53                _init 
    5554 
    5655        def init(name as String, typeNode as ITypeProxy) 
    57                 .init(name, typeNode, false) 
    58  
    59         def init(name as String, typeNode as ITypeProxy, isImplicit as bool) 
    6056                base.init(name) 
    6157                _typeNode = typeNode 
    62                 _init(isImplicit) 
    63  
    64         def _init(isImplicit as bool) 
    65                 _isImplicit = isImplicit 
     58                _init 
     59 
     60        def _init 
    6661                _isTracked = false 
    67                 if _isImplicit 
     62                if .isImplicit 
    6863                        sharpPrefix = '' 
    6964                else if Utils.isSharpKeyWord(.name) 
     
    8075        pro isAssignedTo from var 
    8176 
    82         get isImplicit from var 
    83  
    8477        pro isTracked from var 
    8578 
     
    8881        def addMinFields 
    8982                base.addMinFields 
    90                 if _isImplicit 
    91                         .addField('isImplicit', _isImplicit) 
    9283                .addField('isTracked', _isTracked) 
    9384 
     
    176167 
    177168        def init(token as IToken, type as IType) 
    178                 .init(token, type, false) 
     169                base.init(token, type) 
    179170 
    180171        def init(token as IToken, typeNode as ITypeProxy) 
    181                 .init(token, typeNode, false) 
    182  
    183         def init(token as IToken, type as IType, isImplicit as bool) 
    184                 base.init(token, type, isImplicit) 
    185  
    186         def init(token as IToken, typeNode as ITypeProxy, isImplicit as bool) 
    187                 base.init(token, typeNode, isImplicit) 
     172                base.init(token, typeNode) 
    188173 
    189174        def init(name as String, typeNode as ITypeProxy) 
    190175                base.init(name, typeNode) 
    191  
    192         def init(name as String, typeNode as ITypeProxy, isImplicit as bool) 
    193                 base.init(name, typeNode, isImplicit) 
    194176 
    195177        get englishName as String is override 
     
    227209 
    228210        def init(token as IToken, type as IType) 
    229                 .init(token, type, false) 
     211                base.init(token, type) 
    230212 
    231213        def init(token as IToken, typeNode as ITypeProxy) 
    232                 .init(token, typeNode, false) 
    233  
    234         def init(token as IToken, type as IType, isImplicit as bool) 
    235                 base.init(token, type as IType, isImplicit) 
    236  
    237         def init(token as IToken, typeNode as ITypeProxy, isImplicit as bool) 
    238                 base.init(token, typeNode, isImplicit) 
     214                base.init(token, typeNode) 
    239215 
    240216        def addMinFields 
     
    254230 
    255231        def init(token as IToken, codePart as AbstractMethod) 
    256                 base.init(_makeToken(token, codePart), codePart.resultType, true) 
     232                base.init(_makeToken(token, codePart), codePart.resultType) 
     233                .isImplicit = true 
    257234                _sharpName = codePart.sharpResultVarName 
    258235 
  • cobra/trunk/Tests/120-classes/705-implicit-this.cobra

    r1181 r1730  
    2626        def test 
    2727                .setXY(1, 2) 
    28                 _underscoredDoesNotRequireDot() 
     28                _underscoredDoesNotRequireDot 
    2929                assert .equals(1, 2) 
    3030                assert .sum==3