Show
Ignore:
Timestamp:
08/28/08 04:00:40 (4 months ago)
Author:
Chuck.Esterbrook
Message:

Added support for "extended initializers" which allow you to set properties of the object in the same call being used to create the object.

Files:
1 modified

Legend:

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

    r1590 r1591  
    427427        def writeSharpDef(sw as SharpWriter, parens as bool) is override 
    428428                if parens, sw.write('(') 
    429                 expr = _expr 
    430                 isMethodSig = false 
    431                 isDynamic = false 
    432                 if expr inherits TypeExpr 
    433                         if expr.containedType inherits ArrayType 
    434                                 # arrays 
    435                                 sw.write('new ') 
    436                                 sw.write((expr.containedType to ArrayType).theWrappedType.sharpRef) 
    437                                 sw.write(r'[') 
    438                                 .writeSharpArgs(sw) 
    439                                 sw.write(r']') 
     429                if _helperMethod 
     430                        sw.write(_helperMethod.name + '(') 
     431                        sep = '' 
     432                        for arg in _args 
     433                                sw.write(sep) 
     434                                if arg inherits AssignExpr 
     435                                        arg = arg.right 
     436                                arg.writeSharpDefInContext(sw, false) 
     437                                sep = ',' 
     438                        sw.write(')') 
     439                else 
     440                        expr = _expr 
     441                        isMethodSig = false 
     442                        isDynamic = false 
     443                        if expr inherits TypeExpr 
     444                                if expr.containedType inherits ArrayType 
     445                                        # arrays 
     446                                        sw.write('new ') 
     447                                        sw.write((expr.containedType to ArrayType).theWrappedType.sharpRef) 
     448                                        sw.write(r'[') 
     449                                        .writeSharpArgs(sw) 
     450                                        sw.write(r']') 
     451                                else 
     452                                        sw.write('new ') 
     453                                        expr.writeSharpDef(sw) 
     454                                        sw.write('(') 
     455                                        .writeSharpArgs(sw) 
     456                                        sw.write(')') 
     457                        else if expr inherits IdentifierExpr 
     458                                if expr.isTypeReference 
     459                                        sw.write('new ') 
     460                                        expr.writeSharpDef(sw) 
     461                                        sw.write('(') 
     462                                        .writeSharpArgs(sw) 
     463                                        sw.write(')') 
     464                                else if expr.receiverType inherits GenericParam # TODO: shouldn't expr.isTypeReference above have caught this? 
     465                                        sw.write('new [expr.receiverType.sharpRef](') 
     466                                        .writeSharpArgs(sw) 
     467                                        sw.write(')') 
     468                                else if expr.type inherits MethodSig 
     469                                        isMethodSig = true 
     470                                else if expr.type.isSystemTypeClass or _type.isDynamic 
     471                                        isDynamic = true 
     472                                else 
     473                                        assert false, expr  # TODO: .throwError 
     474                        else if expr inherits IndexExpr 
     475                                if expr.type inherits MethodSig 
     476                                        isMethodSig = true 
     477                                else if expr.type.isSystemTypeClass or _type.isDynamic 
     478                                        isDynamic = true 
     479                                else 
     480                                        assert false, expr  # TODO: .throwError 
    440481                        else 
    441                                 sw.write('new ') 
     482                                assert false, expr  # TODO: .throwError 
     483                        if isMethodSig 
    442484                                expr.writeSharpDef(sw) 
    443485                                sw.write('(') 
    444486                                .writeSharpArgs(sw) 
    445487                                sw.write(')') 
    446                 else if expr inherits IdentifierExpr 
    447                         if expr.isTypeReference 
    448                                 sw.write('new ') 
    449                                 expr.writeSharpDef(sw) 
    450                                 sw.write('(') 
    451                                 .writeSharpArgs(sw) 
     488                        else if isDynamic 
     489                                defi = (expr to dynamic).definition 
     490                                assert not defi inherits Box, expr  # TODO: just curious 
     491                                what = if(defi inherits IType, 'typeof([defi.sharpName])', defi.sharpName to String) 
     492                                if defi inherits IVar 
     493                                        if defi.type.isDynamic 
     494                                                what = '(System.Type)' + what 
     495                                sw.write('Activator.CreateInstance([what]') 
     496                                .writeSharpArgs(sw, ', ') 
    452497                                sw.write(')') 
    453                         else if expr.receiverType inherits GenericParam # TODO: shouldn't expr.isTypeReference above have caught this? 
    454                                 sw.write('new [expr.receiverType.sharpRef](') 
    455                                 .writeSharpArgs(sw) 
    456                                 sw.write(')') 
    457                         else if expr.type inherits MethodSig 
    458                                 isMethodSig = true 
    459                         else if expr.type.isSystemTypeClass or _type.isDynamic 
    460                                 isDynamic = true 
    461                         else 
    462                                 assert false, expr  # TODO: .throwError 
    463                 else if expr inherits IndexExpr 
    464                         if expr.type inherits MethodSig 
    465                                 isMethodSig = true 
    466                         else if expr.type.isSystemTypeClass or _type.isDynamic 
    467                                 isDynamic = true 
    468                         else 
    469                                 assert false, expr  # TODO: .throwError 
    470                 else 
    471                         assert false, expr  # TODO: .throwError 
    472                 if isMethodSig 
    473                         expr.writeSharpDef(sw) 
    474                         sw.write('(') 
    475                         .writeSharpArgs(sw) 
    476                         sw.write(')') 
    477                 else if isDynamic 
    478                         defi = (expr to dynamic).definition 
    479                         assert not defi inherits Box, expr  # TODO: just curious 
    480                         what = if(defi inherits IType, 'typeof([defi.sharpName])', defi.sharpName to String) 
    481                         if defi inherits IVar 
    482                                 if defi.type.isDynamic 
    483                                         what = '(System.Type)' + what 
    484                         sw.write('Activator.CreateInstance([what]') 
    485                         .writeSharpArgs(sw, ', ') 
    486                         sw.write(')') 
    487498                if parens, sw.write(')') 
    488499