Ignore:
Timestamp:
Jul 12, 2013, 1:09:25 PM (6 years ago)
Author:
linmengl
Message:

handle bitblock_iterator.hpp correctly now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib_c/cpp2c/passes.rb

    r3393 r3396  
    121121end
    122122
    123 # use #if #else #end to wrap KEYs
     123# use #if #else #end to wrap KEYs as field width
    124124# e.g.
    125125#   #define Carry0 simd<BLOCK_SIZE>::constant<0>()
     
    137137        def initialize key, values             
    138138                @key = key
     139                @reg_key = Regexp.escape(key)
    139140                @values = values
    140141        end
     
    152153                                res += "#if (#{@key} == #{v}) \n"
    153154                        elsif i == @values.size - 1
    154                                 res += "#else\n"
     155                                res += "#else //#{@key} == #{v}\n"
    155156                        else
    156157                                res += "#elif (#{@key} == #{v})\n"
    157158                        end
    158159
    159                         res += @line_store.gsub /(\{\{\{[^}]*)#{@key}/, "\\1#{v}"
     160                        res += @line_store.gsub /(\{\{\{[^}]*)#{@reg_key}/, "\\1#{v}"
    160161                end
    161162                res += "#endif\n"
     
    166167
    167168        def output_tail outfile, options               
    168                 outfile.puts dump
    169         end
    170 
    171         def t line
    172                 if line =~ /\{\{\{.*#{@key}\b/
     169                res = dump
     170                outfile.puts res if res != ""
     171        end
     172
     173        def t line
     174                if line =~ /\{\{\{.*#{@reg_key}/
    173175                        @line_store += line
    174176                        "<empty>"
     
    179181end
    180182
     183# Slightly different wrap, use "if" insted of "#if"
     184# In order to enable "sizeof()" as wrap condition
     185class ConditionWrapPass1 < ConditionWrapPass
     186        def dump
     187                return "" if @line_store == ""
     188
     189                res = ""               
     190                @values.each_with_index do |v, i| 
     191                        if i == 0
     192                                res += "if (#{@key} == #{v}) {\n"
     193                        elsif i == @values.size - 1
     194                                res += "} else { //#{@key} == #{v}\n"
     195                        else
     196                                res += "} else if (#{@key} == #{v}) {\n"
     197                        end
     198
     199                        res += @line_store.gsub /(\{\{\{[^}]*)#{@reg_key}/, "\\1#{v}"
     200                end
     201                res += "}\n"
     202
     203                @line_store = ""
     204                res
     205        end
     206end
     207
    181208# Eval expressions inside {{{ }}}
    182209# e.g. {{{256 / 2}}} => 128
Note: See TracChangeset for help on using the changeset viewer.