private CodeTree createReference(FrameState frameState) { CodeTree ref = createLocalReference(frameState); if (ref == null) { ref = CodeTreeBuilder.createBuilder().string("this.", name, "_").build(); } return ref; }
private static CodeTree createAssignmentStart(LocalVariable target, boolean shared) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); if (shared) { builder.string("return "); } else { builder.string(target.getName()).string(" = "); } return builder.build(); }
public CodeTree createIsNotAny(FrameState frameState, Object[] elements) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.tree(createMaskedReference(frameState, elements)); builder.string(" != 0 "); builder.string(" /* is-not ", toString(elements, " && "), " */"); return builder.build(); }
static CodeTree invokeImplicitCast(TypeSystemData typeSystem, ImplicitCastData cast, CodeTree expression) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startStaticCall(createTypeSystemGen(typeSystem), cast.getMethodName()).tree(expression); builder.end(); return builder.build(); }
private CodeTree createThrowUnsupported(LocalContext currentValues) { singleSpecializableUnsupportedUsed = true; CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startThrow().startCall("unsupported"); currentValues.addReferencesTo(builder); builder.end().end(); return builder.build(); }
public static CodeTree invokeImplicitCast(TypeSystemData typeSystem, ImplicitCastData cast, CodeTree expression) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startStaticCall(createTypeSystemGen(typeSystem), cast.getMethodName()).tree(expression); builder.end(); return builder.build(); }
private CodeTree createAssumptionGuard(AssumptionExpression assumption, CodeTree assumptionValue) { CodeTree assumptionGuard = CodeTreeBuilder.createBuilder().startCall("isValid_").tree(assumptionValue).end().build(); isValidSignatures.put(ElementUtils.getQualifiedName(assumption.getExpression().getResolvedType()), assumption.getExpression().getResolvedType()); return assumptionGuard; }
static CodeTree cast(TypeSystemData typeSystem, TypeMirror type, CodeTree content) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); TypeCastData cast = typeSystem.getCast(type); if (cast == null) { builder.cast(ElementUtils.fillInGenericWildcards(type), content); } else { builder.startStaticCall(typeSystem.getTemplateType().asType(), cast.getMethodName()).tree(content).end(); } return builder.build(); }
static CodeTree createTransferToInterpreterAndInvalidate() { ProcessorContext context = ProcessorContext.getInstance(); CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startStatement().startStaticCall(context.getType(CompilerDirectives.class), "transferToInterpreterAndInvalidate").end().end(); return builder.build(); }
public CodeTree createIs(FrameState frameState, Object[] selectedElements, Object[] maskedElements) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.tree(createMaskedReference(frameState, maskedElements)); builder.string(" == ").string(formatMask(createMask(selectedElements))); return builder.build(); }
public CodeTree createContains(FrameState frameState, Object[] elements) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.tree(createMaskedReference(frameState, elements)); builder.string(" != 0"); builder.string(" /* ", label("is"), toString(elements, " || "), " */"); return builder.build(); }
public static CodeTree createTransferToInterpreterAndInvalidate() { ProcessorContext context = ProcessorContext.getInstance(); CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startStatement().startStaticCall(context.getType(CompilerDirectives.class), "transferToInterpreterAndInvalidate").end().end(); return builder.build(); }
public static CodeTree check(TypeSystemData typeSystem, TypeMirror type, CodeTree content) { if (ElementUtils.isObject(type)) { return content; } CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); TypeCheckData check = typeSystem.getCheck(type); if (check == null) { builder.instanceOf(content, ElementUtils.boxType(typeSystem.getContext(), type)); } else { builder.startStaticCall(typeSystem.getTemplateType().asType(), check.getMethodName()).tree(content).end(); } return builder.build(); }
public CodeTree createContainsOnly(FrameState frameState, int offset, int length, Object[] selectedElements, Object[] allElements) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); long mask = ~createMask(offset, length, selectedElements) & createMask(allElements); builder.tree(createMaskedReference(frameState, mask)); builder.string(" == 0"); builder.string(" /* only-active ", toString(selectedElements, " && "), " */"); return builder.build(); }
public CodeTree createNotContains(FrameState frameState, Object[] elements) { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.startParantheses(); builder.tree(createMaskedReference(frameState, elements)); builder.end(); builder.string(" == 0"); builder.string(" /* ", label("is-not"), toString(elements, " && "), " */"); return builder.build(); }
private CodeTree createMaskedReference(FrameState frameState, long maskedElements) { if (maskedElements == this.allMask) { // no masking needed return createReference(frameState); } else { CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); // masking needed we use the state bitset for guards as well builder.string("(").tree(createReference(frameState)).string(" & ").string(formatMask(maskedElements)).string(")"); return builder.build(); } }
static CodeTree expect(TypeSystemData typeSystem, TypeMirror type, CodeTree content) { if (ElementUtils.isObject(type) || ElementUtils.isVoid(type)) { return content; } CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); if (typeSystem.hasType(type)) { builder.startStaticCall(createTypeSystemGen(typeSystem), expectTypeMethodName(typeSystem, type)).tree(content).end(); } else { builder.startCall(expectTypeMethodName(typeSystem, type)).tree(content).end(); } return builder.build(); }
public CodeTree createIsOneBitOf(FrameState frameState, Object[] elements) { CodeTree masked = createMaskedReference(frameState, elements); CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); // use the calculation of power of two // (state & (state - 1L)) == 0L builder.startParantheses().tree(masked).string(" & ").startParantheses().tree(masked).string(" - 1").end().end().string(" == 0"); builder.string(" /* ", label("is-single"), " */"); return builder.build(); }
public static CodeTree expect(TypeSystemData typeSystem, TypeMirror type, CodeTree content) { if (ElementUtils.isObject(type) || ElementUtils.isVoid(type)) { return content; } CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); if (typeSystem.hasType(type)) { builder.startStaticCall(createTypeSystemGen(typeSystem), expectTypeMethodName(typeSystem, type)).tree(content).end(); } else { builder.startCall(expectTypeMethodName(typeSystem, type)).tree(content).end(); } return builder.build(); }
private static CodeTree createShortCircuit(LocalVariable targetValue, LocalVariable shortCircuitValue, CodeTree tryExecute) { if (shortCircuitValue == null) { return tryExecute; } CodeTreeBuilder builder = CodeTreeBuilder.createBuilder(); builder.tree(shortCircuitValue.createDeclaration(shortCircuitValue.createReference())); builder.tree(targetValue.createDeclaration(builder.create().defaultValue(targetValue.getTypeMirror()).build())); builder.startIf().string(shortCircuitValue.getName()).end().startBlock(); builder.tree(tryExecute); builder.end(); return builder.build(); }