예제 #1
0
def const_ast_from_python(val: Any) -> qlast.BaseConstant:
    if isinstance(val, str):
        return qlast.StringConstant.from_python(val)
    elif isinstance(val, bool):
        return qlast.BooleanConstant(value='true' if val else 'false')
    elif isinstance(val, int):
        if MIN_INT64 <= val <= MAX_INT64:
            return qlast.IntegerConstant(value=str(val))
        else:
            raise ValueError(f'int64 value out of range: {val}')
    elif isinstance(val, decimal.Decimal):
        return qlast.DecimalConstant(value=f'{val}n')
    elif isinstance(val, float):
        return qlast.FloatConstant(value=str(val))
    elif isinstance(val, bytes):
        return qlast.BytesConstant.from_python(value=val)
    else:
        raise ValueError(f'unexpected constant type: {type(val)!r}')
예제 #2
0
 def reduce_FCONST(self, *kids):
     self.val = qlast.FloatConstant(value=kids[0].val)
예제 #3
0
 def visit_FloatValue(self, node):
     return qlast.FloatConstant(value=node.value)