private CodeTree createFastPathTryCatchRewriteException(SpecializationData specialization, ExecutableTypeData forType, LocalContext currentValues, CodeTree execution) { if (specialization.getExceptions().isEmpty()) { return execution; } CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startTryBlock(); builder.tree(execution); TypeMirror[] exceptionTypes = new TypeMirror[specialization.getExceptions().size()]; for (int i = 0; i < exceptionTypes.length; i++) { exceptionTypes[i] = specialization.getExceptions().get(i).getJavaClass(); } builder.end().startCatchBlock(exceptionTypes, "ex"); builder.startStatement().tree(accessParent(excludedFieldName(specialization))).string(" = true").end(); builder.tree(createCallRemove("threw rewrite exception", forType, currentValues)); builder.end(); return builder.build(); }
private CodeTree createCatchRewriteException(CodeTreeBuilder parent, SpecializationData specialization, ExecutableTypeData forType, FrameState frameState, CodeTree execution, NodeExecutionMode mode) { if (specialization.getExceptions().isEmpty()) { return execution; } CodeTreeBuilder builder = parent.create(); builder.startTryBlock(); builder.tree(execution); boolean nonSlowPath = false; TypeMirror[] exceptionTypes = new TypeMirror[specialization.getExceptions().size()]; for (int i = 0; i < exceptionTypes.length; i++) { TypeMirror type = specialization.getExceptions().get(i).getJavaClass(); if (!ElementUtils.isAssignable(type, context.getType(SlowPathException.class)) && !ElementUtils.isAssignable(type, context.getType(ArithmeticException.class))) { nonSlowPath = true; } exceptionTypes[i] = type; } builder.end().startCatchBlock(exceptionTypes, "ex"); if (nonSlowPath) { builder.tree(createTransferToInterpreterAndInvalidate()); } else { builder.lineComment("implicit transferToInterpreterAndInvalidate()"); } builder.tree(createExcludeThis(builder, frameState, forType, specialization, mode)); builder.end(); return builder.build(); }
builder.startTryBlock(); builder.tree(delegateBuilder.build()); builder.end().startCatchBlock(context.getType(UnexpectedResultException.class), "ex");
builder.startTryBlock(); builder.startStatement().startCall(FIELD_PROBE, METHOD_ON_ENTER).string(frameParameterName).end().end();
private static CodeTree createTryExecuteChild(LocalVariable value, CodeTree executeChild, boolean needDeclaration, boolean hasTry) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); boolean hasDeclaration = false; if ((hasTry || !executeChild.isSingleLine()) && needDeclaration) { builder.tree(value.createDeclaration(null)); hasDeclaration = true; } if (hasTry) { builder.startTryBlock(); } else { builder.startGroup(); } if (executeChild.isSingleLine()) { builder.startStatement(); if (hasDeclaration || !needDeclaration) { builder.tree(executeChild); } else { builder.type(value.getTypeMirror()).string(" ").tree(executeChild); } builder.end(); } else { builder.tree(executeChild); } builder.end(); return builder.build(); }
private static CodeTree createTryExecuteChild(LocalVariable value, CodeTree executeChild, boolean needDeclaration, boolean hasTry) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); boolean hasDeclaration = false; if ((hasTry || !executeChild.isSingleLine()) && needDeclaration) { builder.tree(value.createDeclaration(null)); hasDeclaration = true; } if (hasTry) { builder.startTryBlock(); } else { builder.startGroup(); } if (executeChild.isSingleLine()) { builder.startStatement(); if (hasDeclaration || !needDeclaration) { builder.tree(executeChild); } else { builder.type(value.getTypeMirror()).string(" ").tree(executeChild); } builder.end(); } else { builder.tree(executeChild); } builder.end(); return builder.build(); }
builder.startTryBlock(); for (AssumptionExpression assumption : specialization.getAssumptionExpressions()) { LocalVariable assumptionVar = currentValues.get(assumptionName(assumption));
builder.startTryBlock(); builder.tree(returnBuilder.build()); builder.end().startCatchBlock(context.getType(UnexpectedResultException.class), "ex");
builder.declaration(context.getType(Lock.class), "lock", "getLock()"); builder.statement("lock.lock()"); builder.startTryBlock(); String fieldName = createSpecializationFieldName(specialization); if (!useSpecializationClass || specialization.getMaximumNumberOfInstances() == 1) {
polyChainBuilder.tree(createTransferToInterpreterAndInvalidate()); polyChainBuilder.declaration(context.getType(Class.class), typeFieldName, polyChainBuilder.create().typeLiteral(genericType).build()); polyChainBuilder.startTryBlock(); polyChainBuilder.declaration(genericExecutableType.getReturnType(), valueFieldName, executeGeneric); builder.startTryBlock(); builder.tree(executePolymorphic); builder.end();
generateSaveOldPolymorphismState(builder, frameState); builder.startTryBlock();