Wiki

Ticket #32: tracePrintSuppress.patch

File tracePrintSuppress.patch, 7.9 KB (added by hopscc, 16 years ago)
  • Source/CommandLine.cobra

     
    147147            'description': 'Includes unit tests for classes and members in the output assembly.', 
    148148        }, 
    149149        { 
     150            'name': 'include-traces', 
     151            'type': 'bool', 
     152            'default': 'yes', 
     153            'description': 'Includes tracing code in the output assembly.', 
     154        }, 
     155        { 
    150156            'name': 'keep-intermediate-files', 
    151157            'synonyms': ['kif'], 
    152158            'type': 'bool', 
     
    595601            options['include-asserts'] = false 
    596602            options['include-nil-checks'] = false 
    597603            options['include-tests'] = false 
     604            options['include-traces'] = false 
    598605            options['optimize'] = true 
    599606 
    600607    def interpretValue(valueStr as String, spec as Dictionary<of String, Object>) as dynamic? 
  • Source/CobraLang.cobra

     
    9292                _dest.writeLine(source.oneLiner(.separator, .willOutputDirectoryNames)) 
    9393                if .willAutoFlush 
    9494                    _dest.flush 
    95  
     95                     
     96        def tracePrint(source as SourceSite, nameValues as vari Object) 
     97            require nameValues.length % 2 == 0 
     98            if .isActive 
     99                _dest.write(.prefix) 
     100                sep = ' ' # .separator 
     101                i = 0 
     102                while i < nameValues.length-1 
     103                    name = nameValues[i] to String 
     104                    if nameValues[i+1] inherits String # emit strings as is 
     105                        value = nameValues[i+1] 
     106                        _dest.write('[value][sep]') 
     107                    else 
     108                        value = CobraImp._techStringMaker.makeString(nameValues[i+1]) 
     109                        _dest.write('[name]=[value][sep]') 
     110                    i += 2 
     111                _dest.writeLine 
     112                if .willAutoFlush 
     113                    _dest.flush 
     114                     
    96115    class Visitor 
    97116        is abstract 
    98117        """ 
  • Source/CobraParser.cobra

     
    19901990            on 'EOL' 
    19911991                .expect('EOL') 
    19921992                return if(_isTraceOn, TraceLocationStmt(token, _curCodePart), nil) 
     1993            on 'PRINT' 
     1994                .expect('PRINT', 'EOL') 
     1995                if _isTraceOn 
     1996                    return TracePrintExprsStmt(token, _curCodePart, .commaSepExprs('EOL')) 
     1997                else 
     1998                    .commaSepExprs('EOL') 
     1999                    return nil 
    19932000            else 
    19942001                if _isTraceOn 
    19952002                    return TraceExprsStmt(token, _curCodePart, .commaSepExprs('EOL')) 
  • Source/Statements.cobra

     
    12201220    def init(token as IToken, codePart as AbstractMethod) 
    12211221        base.init(token) 
    12221222        _codePart = codePart 
     1223         
     1224    def includeTraces as bool    
     1225        return .compiler.options.boolValue('include-traces') 
    12231226 
    1224  
    12251227class TraceLocationStmt 
    12261228    inherits TraceStmt 
    12271229 
     
    12301232 
    12311233    def writeSharpDef(sw as SharpWriter) 
    12321234        base.writeSharpDef(sw) 
    1233         sw.write('CobraCore.Tracer.Trace([.sharpSourceSite]);\n') 
     1235        if .includeTraces 
     1236            sw.write('CobraCore.Tracer.Trace([.sharpSourceSite]);\n') 
    12341237 
    12351238 
    12361239class TraceAllStmt 
     
    12411244 
    12421245    def writeSharpDef(sw as SharpWriter) 
    12431246        base.writeSharpDef(sw) 
     1247        if not .includeTraces 
     1248            return 
    12441249        sw.write('CobraCore.Tracer.Trace([.sharpSourceSite], "this", [_codePart.sharpThis]') 
    12451250        for param in _codePart.params 
    12461251            sw.write(', "[param.name]", [param.sharpName]') 
     
    12681273 
    12691274    def writeSharpDef(sw as SharpWriter) 
    12701275        base.writeSharpDef(sw) 
     1276        if not .includeTraces 
     1277            return 
    12711278        sw.write('CobraCore.Tracer.Trace([.sharpSourceSite]') 
    12721279        sep = ', ' 
    12731280        for expr in _exprs 
    12741281            sw.write('[sep][Utils.sharpStringLiteralFor(expr.toCobraSource)][sep]') 
    12751282            expr.writeSharpDef(sw, false) 
    12761283        sw.write(');\n') 
     1284         
    12771285 
     1286class TracePrintExprsStmt 
     1287    inherits TraceExprsStmt 
    12781288 
     1289    def init(token as IToken, codePart as AbstractMethod, exprs as List<of Expr>) 
     1290        base.init(token, codePart, exprs) 
     1291 
     1292    def writeSharpDef(sw as SharpWriter) is override 
     1293        if not .includeTraces 
     1294            return 
     1295        sw.write('CobraCore.Tracer.TracePrint([.sharpSourceSite]') 
     1296        sep = ', ' 
     1297        for expr in _exprs 
     1298            sw.write('[sep][Utils.sharpStringLiteralFor(expr.toCobraSource)][sep]') 
     1299            expr.writeSharpDef(sw, false) 
     1300        sw.write(');\n') 
     1301 
     1302 
    12791303class TryStmt 
    12801304    inherits Stmt 
    12811305 
  • Tests/700-command-line/602-turbo.cobra

     
    44 
    55    def main is shared 
    66        assert false 
     7        trace  
     8        x=1 
     9        trace all 
     10        trace x 
  • Tests/700-command-line/601-include-traces.cobra

     
     1# .args. -include-traces:no 
     2 
     3class Program 
     4 
     5    def main is shared 
     6        x=1 
     7        trace  
     8        trace all 
     9        trace x 
     10        trace off 
     11        trace 'hello' 
     12        trace on 
     13        trace print 'hello2' 
  • Tests/110-basics-two/900-trace.cobra

     
    2727        trace 
    2828        trace on 
    2929        trace 
    30  
     30        trace print x 
     31        trace print x,y 
     32        trace print 'x is [x]', y 
     33         
    3134        output = tracer.destination.toString.replace('\r', '') 
    3235        lines = output.split(c'\n') 
    3336        .check(lines[0], 'prefix: at FILE:15 | in Test.testTrace') 
     
    3942        .check(lines[6], 'prefix: i=3 | at FILE:23 | in Test.testTrace') 
    4043        .check(lines[7], 'prefix: this=Test | x=2 | y=2 | tracer=Cobra.Lang.Tracer | i=3 | output=nil | lines=nil | at FILE:24 | in Test.testTrace') 
    4144        .check(lines[8], 'prefix: at FILE:29 | in Test.testTrace') 
     45        .check(lines[9], 'prefix: x=2 ') 
     46        .check(lines[10],'prefix: x=2 y=2 ') 
     47        .check(lines[11],'prefix: x is 2 y=2 ') 
    4248 
    4349    def check(actual as String, expected as String) is shared 
    4450        if CobraCore.isRunningOnMono 
    4551            expected = expected.replace('RuntimeType', 'MonoType') 
    4652        # fix filename in actual 
    4753        i = actual.indexOf(' at ') 
    48         i += 4 
    49         j = actual.indexOf(':', i) 
    50         actual = actual[:i] + 'FILE' + actual[j:] 
     54        if i >= 0 
     55            i += 4 
     56            j = actual.indexOf(':', i) 
     57            actual = actual[:i] + 'FILE' + actual[j:] 
    5158 
    5259        assert actual == expected 
    5360 
     
    5663        CobraCore.tracer.destination = StringWriter() 
    5764        trace 
    5865        output = CobraCore.tracer.destination.toString.trim 
    59         .check(output, 'prefix: at FILE:57 | in Test.testStaticTrace') 
     66        .check(output, 'prefix: at FILE:64 | in Test.testStaticTrace') 
    6067 
    6168        # trace all in a shared method 
    6269        CobraCore.tracer.destination = StringWriter() 
    6370        output = 'o' 
    6471        trace all 
    6572        output = CobraCore.tracer.destination.toString.trim 
    66         .check(output, "prefix: this=Test (RuntimeType) | output='o' | at FILE:64 | in Test.testStaticTrace") 
     73        .check(output, "prefix: this=Test (RuntimeType) | output='o' | at FILE:71 | in Test.testStaticTrace") 
  • Developer/IntermediateReleaseNotes.text

     
    11Post 0.8 
    22 
     3* Add trace form trace print, emits trace lines without position info and  
     4    strings are emitted as is ( no name=value form). 
     5 Add compile option -include-traces default value yes to allow compile time 
     6 suppression of any trace code. 
     7  
    38* Added a new built-in doc tool accessible via "cobra -doc ...". The documentation is generated to local HTML files using your declarations, doc strings, contracts, etc. 
    49 
    510* Add support for specifying unsigned integers as Hex literals