def requires_emit(self, resolver: Resolver, queue: QueueScheduler) -> typing.Dict[object, ResultVariable]: sub = ReferenceStatement.requires_emit(self, resolver, queue) temp = ResultVariable() temp.set_type(self.type) temp.set_provider(self) HangUnit(queue, resolver, sub, temp, self) return {self: temp}
def requires_emit(self, resolver, queue): # introduce temp variable to contain the eventual result of this stmt temp = ResultVariable() temp.set_type(Bool()) temp.set_provider(self) # wait for the lhs HangUnit(queue, resolver, self.children[0].requires_emit(resolver, queue), temp, self) return {self: temp}
def requires_emit_gradual(self, resolver: Resolver, queue: QueueScheduler, resultcollector) -> Dict[object, ResultVariable]: # The tricky one! # introduce temp variable to contain the eventual result of this stmt temp = ResultVariable() temp.set_provider(self) # construct waiter resumer = AttributeReferenceHelper(temp, self.instance, self.attribute, resultcollector) self.copy_location(resumer) # wait for the instance RawUnit(queue, resolver, self.instance.requires_emit(resolver, queue), resumer) return {self: temp}