def visit_NameConstant(self, node): if node.value == True: return ir_ast.Constant(ir_ast.ConstantKind.BOOLEAN, str(True)) elif node.value == False: return ir_ast.Constant(ir_ast.ConstantKind.BOOLEAN, str(False)) elif node.value == None: return ir_ast.Constant(ir_ast.ConstantKind.NULL, 'NULL') raise Exception('Unsupported NameConstant %s' % node)
def visit_Slice(self, node): args = [node.lower, node.upper, node.step] args = [ir_ast.Constant(kind=ir_ast.ConstantKind.NULL, value="NULL") if i is None else self.visit(i) for i in args] return ir_ast.Call( value=ir_ast.Name('slice'), args=[ir_ast.Call.Arg(name=None, value=i) for i in args] )
def visit_Bytes(self, node): return ir_ast.Constant(ir_ast.ConstantKind.BYTES, str(node.s))
def visit_Num(self, node): if isinstance(node.n, float): return ir_ast.Constant(ir_ast.ConstantKind.FLOAT, str(node.n)) elif isinstance(node.n, int): return ir_ast.Constant(ir_ast.ConstantKind.INTEGER, str(node.n)) return self.Unsupported()
def visit_Str(self, node): return ir_ast.Constant(ir_ast.ConstantKind.STRING, node.s)
def Unsupported(self): return ir_ast.Constant(ir_ast.ConstantKind.NULL, 'NULL')
def _deserialize_object(self, object): if 'File' in object.keys(): obj = object['File'] return ast.File([self._deserialize_object(i) for i in obj['Body']], ) if 'FunctionDef' in object.keys(): obj = object['FunctionDef'] return ast.FunctionDef( obj['Name'], [self._deserialize_object(i) for i in obj['Args']], [self._deserialize_object(i) for i in obj['Body']], ) if 'ClassDef' in object.keys(): obj = object['ClassDef'] return ast.ClassDef( obj['Name'], obj['Bases'], [self._deserialize_object(i) for i in obj['Fields']], [self._deserialize_object(i) for i in obj['Body']], ) if 'Return' in object.keys(): obj = object['Return'] return ast.Return(self._deserialize_object(obj['Value']), ) if 'Assign' in object.keys(): obj = object['Assign'] return ast.Assign( self._deserialize_object(obj['Target']), self._deserialize_object(obj['Value']), ) if 'For' in object.keys(): obj = object['For'] return ast.For( self._deserialize_object(obj['Value']), self._deserialize_object(obj['Generator']), [self._deserialize_object(i) for i in obj['Body']], ) if 'Block' in object.keys(): obj = object['Block'] return ast.Block( [self._deserialize_object(i) for i in obj['Body']], ) if 'Try' in object.keys(): obj = object['Try'] return ast.Try([self._deserialize_object(i) for i in obj['Body']], ) if 'Raise' in object.keys(): obj = object['Raise'] return ast.Raise(self._deserialize_object(obj['Value']), ) if 'Catch' in object.keys(): obj = object['Catch'] return ast.Catch( [self._deserialize_object(i) for i in obj['Body']], ) if 'BoolOp' in object.keys(): obj = object['BoolOp'] return ast.BoolOp( obj['Kind'], self._deserialize_object(obj['Left']), self._deserialize_object(obj['Right']), ) if 'BinOp' in object.keys(): obj = object['BinOp'] return ast.BinOp( obj['Kind'], self._deserialize_object(obj['Left']), self._deserialize_object(obj['Right']), ) if 'UnaryOp' in object.keys(): obj = object['UnaryOp'] return ast.UnaryOp( obj['Kind'], self._deserialize_object(obj['Value']), ) if 'Constant' in object.keys(): obj = object['Constant'] return ast.Constant( obj['Kind'], obj['Value'], ) if 'Attribute' in object.keys(): obj = object['Attribute'] return ast.Attribute( self._deserialize_object(obj['Value']), obj['Attribute'], ) if 'Subscript' in object.keys(): obj = object['Subscript'] return ast.Subscript( self._deserialize_object(obj['Value']), self._deserialize_object(obj['Index']), ) if 'Name' in object.keys(): obj = object['Name'] return ast.Name( obj['Name'], obj['Kind'], ) if 'Array' in object.keys(): obj = object['Array'] return ast.Array( [self._deserialize_object(i) for i in obj['Values']], ) if 'Tuple' in object.keys(): obj = object['Tuple'] return ast.Tuple( [self._deserialize_object(i) for i in obj['Values']], ) if 'Call' in object.keys(): obj = object['Call'] return ast.Call( self._deserialize_object(obj['Value']), [self._deserialize_object(i) for i in obj['Args']], [self._deserialize_object(i) for i in obj['KwArgs']], ) if 'ArgumentDef' in object.keys(): obj = object['ArgumentDef'] return ast.ArgumentDef( obj['Key'], obj['Default'] if obj['Default'] is None else self._deserialize_object(obj['Default']), ) if 'KwArg' in object.keys(): obj = object['KwArg'] return ast.KwArg( obj['Key'], self._deserialize_object(obj['Value']), )