def infer_call_result(self, caller, context=None):
if (<EOL>self.is_subtype_of("<STR_LIT>" % (BUILTINS,), context)<EOL>and len(caller.args) == <NUM_LIT:3><EOL>):<EOL><INDENT>result = self._infer_type_call(caller, context)<EOL>yield result<EOL>return<EOL><DEDENT>dunder_call = None<EOL>try:<EOL><INDENT>metaclass = self.metaclass(context=context)<EOL>if metaclass is not None:<EOL><INDENT>dunder_call = next(metaclass.igetattr("<STR_LIT>", context))<EOL><DEDENT><DEDENT>except exceptions.AttributeInferenceError:<EOL><INDENT>pass<EOL><DEDENT>if dunder_call and dunder_call.qname() != "<STR_LIT>":<EOL><INDENT>context = contextmod.bind_context_to_node(context, self)<EOL>yield from dunder_call.infer_call_result(caller, context)<EOL><DEDENT>else:<EOL><INDENT>yield bases.Instance(self)<EOL><DEDENT>
infer what a class is returning when called