avoid duplicating conditions in asserts

This commit is contained in:
Vaci Koblizek 2020-10-13 17:43:23 +01:00
parent dea4d2d3c0
commit 61c98ac266

View file

@ -270,7 +270,7 @@ final class RpcState {
return; return;
} }
var answerId = bootstrap.getQuestionId(); final var answerId = bootstrap.getQuestionId();
var answer = answers.put(answerId); var answer = answers.put(answerId);
if (answer.active) { if (answer.active) {
assert false: "questionId is already in use: " + answerId; assert false: "questionId is already in use: " + answerId;
@ -339,8 +339,8 @@ final class RpcState {
{ {
var answer = answers.put(answerId); var answer = answers.put(answerId);
assert !answer.active : "questionId is already in use";
if (answer.active) { if (answer.active) {
assert false: "questionId is already in use";
return; return;
} }
@ -381,13 +381,13 @@ final class RpcState {
var exportsToRelease = new ArrayList<Integer>(); var exportsToRelease = new ArrayList<Integer>();
var question = questions.find(callReturn.getAnswerId()); var question = questions.find(callReturn.getAnswerId());
assert question != null : "Invalid question ID in Return message.";
if (question == null) { if (question == null) {
assert false: "Invalid question ID in Return message.";
return; return;
} }
assert question.isAwaitingReturn: "Duplicate Return";
if (!question.isAwaitingReturn) { if (!question.isAwaitingReturn) {
assert false: "Duplicate Return";
return; return;
} }
@ -397,8 +397,8 @@ final class RpcState {
question.paramExports = List.of(); question.paramExports = List.of();
} }
assert !callReturn.isTakeFromOtherQuestion(): "Not implemented";
if (callReturn.isTakeFromOtherQuestion()) { if (callReturn.isTakeFromOtherQuestion()) {
assert false: "Not implemented";
// TODO process isTakeFromOtherQuestion... // TODO process isTakeFromOtherQuestion...
return; return;
} }
@ -414,19 +414,22 @@ final class RpcState {
var response = new RpcResponseImpl(question, message, capTable, payload.getContent()); var response = new RpcResponseImpl(question, message, capTable, payload.getContent());
question.answer(response); question.answer(response);
break; break;
case EXCEPTION: case EXCEPTION:
assert !question.isTailCall : "Tail call `Return` must set `resultsSentElsewhere`, not `exception`.";
if (question.isTailCall) { if (question.isTailCall) {
assert false: "Tail call `Return` must set `resultsSentElsewhere`, not `exception`.";
return; return;
} }
question.reject(RpcException.toException(callReturn.getException())); question.reject(RpcException.toException(callReturn.getException()));
break; break;
case CANCELED: case CANCELED:
assert false : "Return message falsely claims call was canceled."; assert false : "Return message falsely claims call was canceled.";
break; break;
case RESULTS_SENT_ELSEWHERE: case RESULTS_SENT_ELSEWHERE:
assert question.isTailCall : "`Return` had `resultsSentElsewhere` but this was not a tail call.";
if (!question.isTailCall) { if (!question.isTailCall) {
assert false: "`Return` had `resultsSentElsewhere` but this was not a tail call.";
return; return;
} }
// Tail calls are fulfilled with a null pointer. // Tail calls are fulfilled with a null pointer.
@ -436,22 +439,22 @@ final class RpcState {
case TAKE_FROM_OTHER_QUESTION: case TAKE_FROM_OTHER_QUESTION:
var other = callReturn.getTakeFromOtherQuestion(); var other = callReturn.getTakeFromOtherQuestion();
var answer = answers.find(other); var answer = answers.find(other);
assert answer != null : "`Return.takeFromOtherQuestion` had invalid answer ID.";
if (answer == null) { if (answer == null) {
assert false: "`Return.takeFromOtherQuestion` had invalid answer ID.";
return; return;
} }
assert answer.redirectedResults != null : "`Return.takeFromOtherQuestion` referenced a call that did not use `sendResultsTo.yourself`.";
if (answer.redirectedResults == null) { if (answer.redirectedResults == null) {
assert false: "`Return.takeFromOtherQuestion` referenced a call that did not use `sendResultsTo.yourself`.";
return; return;
} }
question.response = answer.redirectedResults.toCompletableFuture(); question.response = answer.redirectedResults.toCompletableFuture();
answer.redirectedResults = null; answer.redirectedResults = null;
break; break;
default: default:
assert false : "Unknown 'Return' type."; assert false : "Unknown 'Return' type.";
return; return;
} }
} }
void handleFinish(RpcProtocol.Finish.Reader finish) { void handleFinish(RpcProtocol.Finish.Reader finish) {
@ -536,8 +539,8 @@ final class RpcState {
target = resolved; target = resolved;
} }
assert target.getBrand() == RpcState.this : "'Disembargo' of type 'senderLoopback' sent to an object that does not point back to the sender.";
if (target.getBrand() != this) { if (target.getBrand() != this) {
assert false: "'Disembargo' of type 'senderLoopback' sent to an object that does not point back to the sender.";
return; return;
} }
@ -710,14 +713,16 @@ final class RpcState {
void releaseExport(int exportId, int refcount) { void releaseExport(int exportId, int refcount) {
var export = exports.find(exportId); var export = exports.find(exportId);
assert export != null;
if (export == null) { if (export == null) {
assert false: "Cannot release unknown export";
return; return;
} }
assert export.refcount <= refcount;
if (export.refcount <= refcount) { if (export.refcount <= refcount) {
assert false: "Over-reducing export refcount";
return; return;
} }
export.refcount -= refcount; export.refcount -= refcount;
if (export.refcount == 0) { if (export.refcount == 0) {
exportsByCap.remove(exportId, export.clientHook); exportsByCap.remove(exportId, export.clientHook);
@ -834,14 +839,19 @@ final class RpcState {
switch (target.which()) { switch (target.which()) {
case IMPORTED_CAP: case IMPORTED_CAP:
var exp = exports.find(target.getImportedCap()); var exp = exports.find(target.getImportedCap());
assert exp != null: "Message target is not a current export ID."; if (exp != null) {
return exp != null ? exp.clientHook : null; return exp.clientHook;
}
else {
assert false: "Message target is not a current export ID.";
return null;
}
case PROMISED_ANSWER: case PROMISED_ANSWER:
var promisedAnswer = target.getPromisedAnswer(); var promisedAnswer = target.getPromisedAnswer();
var base = answers.find(promisedAnswer.getQuestionId()); var base = answers.find(promisedAnswer.getQuestionId());
assert base != null && base.active: "PromisedAnswer.questionId is not a current question.";
if (base == null || !base.active) { if (base == null || !base.active) {
assert false: "PromisedAnswer.questionId is not a current question.";
return null; return null;
} }