class Metasm::C::Return

Attributes

value[RW]

Public Class Methods

new(value) click to toggle source
# File metasm/parse_c.rb, line 891
def initialize(value)
        @value = value
end

Public Instance Methods

dump(scope, r=[''], dep=[]) click to toggle source
# File metasm/parse_c.rb, line 3835
def dump(scope, r=[''], dep=[])
        r.last << 'return '
        r, dep = CExpression.dump(@value, scope, r, dep)
        r.last.chop! if r.last[-1] == \     # the space character
        r.last << ';'
        [r, dep]
end
precompile(compiler, scope) click to toggle source
# File metasm/compile_c.rb, line 904
def precompile(compiler, scope)
        if @value
                @value = CExpression.new(nil, nil, @value, @value.type) if not @value.kind_of? CExpression
                if @value.type.untypedef.kind_of? Union
                        @value = @value.precompile_inner(compiler, scope)
                        func = scope.function.type
                        CExpression.new(CExpression.new(nil, :*, func.args.first, @value.type), :'=', @value, @value.type).precompile(compiler, scope)
                        @value = func.args.first
                else
                        # cast to function return type
                        @value = CExpression.new(nil, nil, @value, scope.function.type.type).precompile_inner(compiler, scope)
                end
                scope.statements << self
        end
        Goto.new(scope.return_label).precompile(compiler, scope)
end