Class: HRP2PostHook

Inherits:
Object show all
Defined in:
lib/tecsgen/plugin/HRP2PostHook.rb

Instance Method Summary collapse

Constructor Details

#initialize(celltype) ⇒ HRP2PostHook

@celltype

Celltype



44
45
46
47
# File 'lib/tecsgen/plugin/HRP2PostHook.rb', line 44

def initialize(celltype)
  puts "new post hook #{celltype.get_name}"
    @celltype = celltype
end

Instance Method Details

#generateObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/tecsgen/plugin/HRP2PostHook.rb', line 49

def generate
    # カーネルオブジェクトのセルタイプはメモリ保護しない
#=begin
    # TODO: テストのために無効化
  if HRP2KernelObjectPlugin.include_celltype?(@celltype)
    puts "nothing is generated for kernel object component"
      return
  end
#=end

    rlist = @celltype.get_region_list
    if @celltype.is_singleton?
        # singletonの場合
      puts "<singleton>"

        if rlist.length == 0
          file = AppFile.open("#{$gen}/tecsgen.cfg")
        else
          file = AppFile.open("#{$gen}/tecsgen_#{rlist[0].get_param}.cfg")
        end
        # セル管理ブロックとスケルトンのメモリ保護
        file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
        if !@celltype.is_all_entry_inline?
            # セルタイプコードのメモリ保護
          file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
        end

        file.close

    else
        # singletonでない場合
      puts "<non-singleton>"

        # スケルトンとセルタイプコードの保護
        if (rlist.length == 1) &&
            (@celltype.get_n_cell_gen == @celltype.get_n_cell_gen_r(rlist[0]))
            # 所属する保護ドメインが1つの場合
          puts "<private celltype>"
            file = AppFile.open("#{$gen}/tecsgen_#{rlist[0].get_param}.cfg")
        else
            # 無所属 or 所属する保護ドメインが複数の場合
          puts "<shared celltype>"
            file = AppFile.open("#{$gen}/tecsgen.cfg")
        end

        # スケルトンのメモリ保護
        file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
        if !@celltype.is_all_entry_inline?
            # セルタイプコードのメモリ保護
          file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
        end
        file.close

        # セル管理ブロックの保護
        rlist.each {|reg|
          file = AppFile.open("#{$gen}/tecsgen_#{reg.get_param}.cfg")
            file.print "ATT_MOD(\"#{@celltype.get_global_name}_#{reg.get_name}_tecsgen.o\");\n"
            file.close
        }

    end
end