Wiki

Ticket #57: trace-no-posn.patch

File trace-no-posn.patch, 3.5 KB (added by hopscc, 9 years ago)
  • Source/CobraLang.cobra

     
    8080 
    8181        def trace(source as SourceSite, nameValues as vari Object) 
    8282            require nameValues.length % 2 == 0 
     83            writeSrcPosn = true 
     84            exprEqForm = true 
    8385            if .isActive 
    8486                _dest.write(.prefix) 
    8587                sep = .separator 
    8688                i = 0 
     89                opt = nameValues[0] to String 
     90                switch = opt[1:-1]  # remove quotes 
     91                if switch in [ '-at', '-noPosition'] # or -xAt or -xPos 
     92                    writeSrcPosn = false 
     93                    i += 2 
    8794                while i < nameValues.length-1 
    8895                    name = nameValues[i] to String 
    8996                    value = CobraImp._techStringMaker.makeString(nameValues[i+1]) 
    90                     _dest.write('[name]=[value][sep]') 
     97                    switch = name[1:-1] 
     98                    if switch in ['-=', '-noExprEq'] # or -x= 
     99                        exprEqForm = false 
     100                        i += 2 
     101                        continue 
     102                    _dest.write( if(exprEqForm, '[name]=[value][sep]', '[value][sep]')) 
    91103                    i += 2 
    92                 _dest.writeLine(source.oneLiner(.separator, .willOutputDirectoryNames)) 
     104                    exprEqForm = true 
     105                if writeSrcPosn, _dest.write(source.oneLiner(.separator, .willOutputDirectoryNames)) 
     106                _dest.writeLine 
    93107                if .willAutoFlush 
    94108                    _dest.flush 
    95109 
  • Tests/110-basics-two/900-trace.cobra

     
    33    def main is shared 
    44        Test().testTrace(1, 2) 
    55        .testStaticTrace 
     6        Test().testTraceSw(1, 2) 
    67 
    78    def testTrace(x as int, y as int) 
    89        tracer = CobraCore.tracer 
     
    1112        tracer.separator = ' | ' 
    1213        tracer.destination = StringWriter() 
    1314 
    14  
    1515        trace 
    1616        trace x 
    1717        x = 2 
     
    4545            expected = expected.replace('RuntimeType', 'MonoType') 
    4646        # fix filename in actual 
    4747        i = actual.indexOf(' at ') 
    48         i += 4 
    49         j = actual.indexOf(':', i) 
    50         actual = actual[:i] + 'FILE' + actual[j:] 
    51  
     48        if i >= 0 
     49            i += 4 
     50            j = actual.indexOf(':', i) 
     51            actual = actual[:i] + 'FILE' + actual[j:] 
    5252        assert actual == expected 
    5353 
    5454    def testStaticTrace is shared 
     
    6464        trace all 
    6565        output = CobraCore.tracer.destination.toString.trim 
    6666        .check(output, "prefix: this=Test (RuntimeType) | output='o' | at FILE:64 | in Test.testStaticTrace") 
     67         
     68    def testTraceSw(x as int, y as int) 
     69        tracer = CobraCore.tracer 
     70        tracer.prefix = 'prefix: ' 
     71        tracer.separator = ' . ' 
     72        tracer.destination = StringWriter() 
     73 
     74        trace '-noPosition', x   
     75        trace '-noPosition', '-noExprEq', 'Str:value of y=[y]' 
     76        trace '-noPosition', '-noExprEq', 'Str:value =[x]', y 
     77        trace '-noPosition', '-noExprEq', 'Str:value =[x]', y, x 
     78     
     79        # short form 
     80        trace '-at', x   
     81        trace '-at', '-=', 'Str:value R=[x]' 
     82        trace '-at', '-=', 'Str:value R=[x]', y 
     83        trace '-at', '-=', 'Str:value R=[x]', y, x 
     84        trace '-at', '-=', 'Str:value R=[x]', y, '-=', x 
     85 
     86        output = tracer.destination.toString.replace('\r', '') 
     87        lines = output.split(c'\n') 
     88        .check(lines[0], 'prefix: x=1 . ') 
     89        .check(lines[1], "prefix: 'Str:value of y=2' . ") 
     90        .check(lines[2], "prefix: 'Str:value =1' . y=2 . ") 
     91        .check(lines[3], "prefix: 'Str:value =1' . y=2 . x=1 . ") 
     92     
     93        .check(lines[4], 'prefix: x=1 . ') 
     94        .check(lines[5], "prefix: 'Str:value R=1' . ") 
     95        .check(lines[6], "prefix: 'Str:value R=1' . y=2 . ") 
     96        .check(lines[7], "prefix: 'Str:value R=1' . y=2 . x=1 . ") 
     97        .check(lines[8], "prefix: 'Str:value R=1' . y=2 . 1 . ") 
     98