binop.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:sherlock.py 作者: Luavis 项目源码 文件源码
def _generate_binop(self, node, ext_info):
    left_type = self.get_type(node.left)
    right_type = self.get_type(node.right)
    extra_code = ext_info.get('extra_code', '')

    if left_type.is_void or right_type.is_void:
        raise CompileError('Void type is not able to operate.')

    if left_type.is_number and right_type.is_number:
        op = self.generate_numeric_op(node.op, ext_info)
        if len(op) is 0:
            raise SyntaxNotSupportError("%s operation is not support yet." % node.op.__class__.__name__)

        left_name, extra_code = get_node_name_with_extra_code(self, node.left, extra_code)
        right_name, extra_code = get_node_name_with_extra_code(self, node.right, extra_code)

        return '$(( %s %s %s ))' % (left_name, op, right_name), extra_code
    elif (left_type.is_string or right_type.is_string) and isinstance(node.op, ast.Add):
        _ext_info = {'extra_code': extra_code}
        left = self.dispatch(node.left, _ext_info)
        right = self.dispatch(node.right, _ext_info)

        return left + right, _ext_info['extra_code']
    else:
        raise SyntaxNotSupportError("%s operation is not support yet." % node.op.__class__.__name__)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号