Wiki

Ticket #141: ticket141-turbo-plus1.patch

File ticket141-turbo-plus1.patch, 9.0 KB (added by hopscc, 8 years ago)
  • Source/CommandLine.cobra

     
    6363                    return not CobraCore.isRunningOnMono 
    6464        return false 
    6565 
     66    def hasBoolTrue(name as String) as bool 
     67        """ 
     68        Contains key of name and value is boolean true  
     69        """ 
     70        return .containsKey(name) and (this[name] to bool)  
     71         
    6672    def unpack 
    6773        _name = this['name'] to String 
    6874        try 
     
    445451        }, 
    446452        { 
    447453            'name': 'turbo', 
    448             'description': 'Maximum run-time performance. This is a convenience for -contracts:none -include-asserts:no -include-nil-checks:no -include-tests:no -include-traces:no -optimize', 
     454            'description': 'Build to maximize run-time performance. This is a convenience for -contracts:none -include-asserts:no -include-nil-checks:no -include-tests:no -include-traces:no -optimize', 
    449455            'type': 'bool', 
     456            'composite': true, 
    450457        }, 
    451458        { 
    452459            'name': 'verbosity', 
     
    792799        for spec in CommandLineOptionSpecs().specsList 
    793800            if spec.containsKey('type') and spec['type']=='main' # CC: spec.get('main', '') 
    794801                continue 
    795             if spec.containsKey('developer-only') and spec['developer-only'] to bool and not Utils.isDevMachine 
     802            if spec.hasBoolTrue('developer-only')and not Utils.isDevMachine 
    796803                continue 
    797804            if spec.isOptionSpecRestrictionViolated 
    798805                continue 
     
    10391046                        continue 
    10401047                         
    10411048                    value = _processToValue(name, valueStr, spec, mainOptions) 
    1042                     if value == 'args-list' 
    1043                         value = args[argn:] 
    1044                     if value is nil 
    1045                         errMsg = 'Cannot parse value "[valueStr]" for option "[name]".' 
    1046                         branch spec.type 
    1047                             on 'bool', errMsg += ' Possible values include yes, no, y, n, true, false, t, f, 1, 0, + and -.' 
    1048                             on 'menu', errMsg += ' Possible values are [spec.choices.join(", ", " and ")].' 
    1049                         _error(errMsg) 
    1050                     valueDict[name] = value to ! 
    1051                     didSpecify[name] = true 
     1049                    if value == 'args-list', value = args[argn:] # remainder of argslist 
     1050                    if value is nil  
     1051                        _emitArgsParseError(name, valueStr, spec) 
     1052                    _setArgComposite(name, value to !, spec, valueDict, didSpecify)      
    10521053                    if spec.type == 'args-list' 
    10531054                        break   # absorbed remainder of args 
    10541055                else # not isOption 
     
    10621063            _addInDefaults(valueDict)        
    10631064 
    10641065            # TODO: make the option names case-insensitive 
    1065  
    10661066            if mainOptions.count > 1 
    10671067                _error('Cannot have these main options at the same time: [mainOptions.join(", ")]') 
    10681068 
     
    11571157        if valueDict.containsKey(name) 
    11581158            (valueDict[name] to System.Collections.IList).add(value) 
    11591159        else 
    1160             valueDict[name] = [value to String] 
    1161             didSpecify[name] = true 
     1160            _setArg(name, [value to String], valueDict, didSpecify) 
    11621161 
     1162    def _setArg(name as String, value as dynamic,  
     1163                valueDict as Dictionary<of String, Object>, 
     1164                didSpecify as Dictionary<of String, bool>) 
     1165        valueDict[name]  = value 
     1166        didSpecify[name] = true 
     1167         
    11631168    def _fixDebug(valueStr as String) as String? 
    11641169        if valueStr == 'pdbonly' or valueStr == 'full' 
    11651170            return valueStr 
     
    11891194                value = _interpretValue(valueStr, spec) 
    11901195        return value 
    11911196 
     1197    def _emitArgsParseError(name as String, valueStr as String, spec as OptionSpec) 
     1198        errMsg = 'Cannot parse value "[valueStr]" for option "[name]".' 
     1199        branch spec.type 
     1200            on 'bool', errMsg += ' Possible values include yes, no, y, n, true, false, t, f, 1, 0, + and -.' 
     1201            on 'menu', errMsg += ' Possible values are [spec.choices.join(", ", " and ")].' 
     1202        _error(errMsg) 
     1203         
     1204    def _setArgComposite(name as String, value, spec as OptionSpec,  
     1205            valueDict as Dictionary<of String, Object>, 
     1206            didSpecify as Dictionary<of String, bool>) 
     1207        if spec.hasBoolTrue('composite') 
     1208            branch name   
     1209                on 'turbo' 
     1210                    _setArg('contracts',          'none', valueDict, didSpecify) 
     1211                    _setArg('include-asserts',    false,  valueDict, didSpecify) 
     1212                    _setArg('include-nil-checks', false,  valueDict, didSpecify) 
     1213                    _setArg('include-tests',      false,  valueDict, didSpecify) 
     1214                    _setArg('include-traces',     false,  valueDict, didSpecify) 
     1215                    _setArg('optimize',           true,   valueDict, didSpecify) 
     1216                else 
     1217                    _error('Unknown composite arg "[name]"') 
     1218        else 
     1219            _setArg(name, value to !, valueDict, didSpecify) 
     1220         
    11921221    def _handleSynonyms(valueDict as Dictionary<of String, Object>) 
    11931222        for syn in _synList 
    11941223            if valueDict.containsKey(syn) 
     
    12711300            options['compile'] = true 
    12721301        if options.getDefault('debug', '') not in ['', '0', '-'] and not options.isSpecified('debugging-tips') 
    12731302            options['debugging-tips'] = false 
    1274         if options.boolValue('turbo') 
    1275             options['contracts'] = 'none' 
    1276             options['include-asserts'] = false 
    1277             options['include-nil-checks'] = false 
    1278             options['include-tests'] = false 
    1279             options['include-traces'] = false 
    1280             options['optimize'] = true 
    1281              
     1303 
    12821304    def _interpretValue(valueStr as String, spec as OptionSpec) as dynamic? 
    12831305        value as dynamic? 
    12841306        branch spec.type 
  • Tests/700-command-line/603-turbo-plus.cobra

     
     1# test -turbo with suboptions overidden,  
     2# test that options are LtoR order dependant 
     3 
     4use System.Diagnostics 
     5 
     6class Test 
     7 
     8    def main is shared 
     9        Test().runOverride 
     10        Test().runTurboAfter 
     11 
     12    def runOverride 
     13        sub = '603a-sub.cobra' 
     14        ite  = '-include-tests:yes' 
     15        itr  = '-include-traces:yes' 
     16        ia   = '-include-asserts:yes' 
     17 
     18        output = .runCobraExe('-turbo [sub]') 
     19        try 
     20            assert '** Test' not in output 
     21            assert 'trace:' not in output 
     22            assert 'AssertException' not in output 
     23            assert 'OKThxBai' in output 
     24        success 
     25            print '-turbo OK' 
     26 
     27        output = .runCobraExe('-turbo [ite] [sub]') 
     28        try 
     29            assert '** Test' in output 
     30            assert 'trace:' not in output 
     31            assert 'AssertException' not in output 
     32            assert 'OKThxBai' in output 
     33        success 
     34            print '-turbo [ite] OK' 
     35             
     36        output = .runCobraExe('-turbo [itr] [sub]') 
     37        try 
     38            assert '** Test' not in output 
     39            assert 'trace: a=99;'  in output 
     40            assert 'AssertException' not in output 
     41            assert 'OKThxBai' in output 
     42        success 
     43            print '-turbo [itr] OK' 
     44         
     45        output = .runCobraExe('-turbo [ia] [sub]') 
     46        try 
     47            assert '** Test' not in output 
     48            assert 'trace:'  not in output 
     49            assert 'AssertException thrown' in output 
     50            assert 'OKThxBai' in output 
     51        success 
     52            print '-turbo [ia] OK' 
     53         
     54        output = .runCobraExe('-turbo [ia] [itr] [ite] [sub]') 
     55        try 
     56            assert '** Test' in output 
     57            assert 'trace:'  in output 
     58            assert 'AssertException thrown' in output 
     59            assert 'OKThxBai' in output 
     60        success 
     61            print '-turbo [ia] [itr] [ite]  OK' 
     62         
     63    def runTurboAfter 
     64        sub = '603a-sub.cobra' 
     65        ite  = '-include-tests:yes' 
     66        itr  = '-include-traces:yes' 
     67        ia   = '-include-asserts:yes' 
     68 
     69        output = .runCobraExe('[ia] [itr] [ite] -turbo [sub]') 
     70        try 
     71            assert '** Test' not in output 
     72            assert 'trace:'  not in output 
     73            assert 'AssertException thrown' not in output 
     74            assert 'OKThxBai' in output 
     75        success 
     76            print '[ia] [itr] [ite] -turbo OK' 
     77         
     78        output = .runCobraExe('[ia] [itr] [ite] -turbo [ia] [sub]') 
     79        try 
     80            assert '** Test' not in output 
     81            assert 'trace:'  not in output 
     82            assert 'AssertException thrown' in output 
     83            assert 'OKThxBai' in output 
     84        success 
     85            print '[ia] [itr] [ite] -turbo [ia] OK' 
     86             
     87        output = .runCobraExe('[ia] [itr] [ite] -turbo [ia] [itr] [sub]') 
     88        try 
     89            assert '** Test' not in output 
     90            assert 'trace:'  in output 
     91            assert 'AssertException thrown' in output 
     92            assert 'OKThxBai' in output 
     93        success 
     94            print '[ia] [itr] [ite] -turbo [ia] [itr] OK' 
     95         
     96             
     97    def runCobraExe(args as String) as String 
     98        p as System.Diagnostics.Process? 
     99        return CobraCore.runCobraExe(args, out p) 
  • Tests/700-command-line/603a-sub.cobra

     
     1# .skip. 
     2# executed by 603-turbo-plus 
     3class Test 
     4    def main is shared 
     5        test 
     6            print '** Test' 
     7        body 
     8            a = 99 
     9            trace a 
     10            print 'OKThxBai' 
     11            try 
     12                assert a == 100 
     13            catch AssertException    
     14                print 'AssertException thrown' 
  • Developer/IntermediateReleaseNotes.text

     
    404404* Fixed: Numeric for expression broken for `get` expressions with types other than `int`  ticket:158 
    405405 
    406406* Fixed: Operators `?` and `?=` give error if left hand expression is not nilable.  ticket:117 
     407 
     408* Fixed: Cannot effectively put more options after -turbo. ticket:141