diff --git a/javatools/src/main/java/org/xvm/runtime/template/reflect/xRef.java b/javatools/src/main/java/org/xvm/runtime/template/reflect/xRef.java index 27eed406c..4fc0e1988 100644 --- a/javatools/src/main/java/org/xvm/runtime/template/reflect/xRef.java +++ b/javatools/src/main/java/org/xvm/runtime/template/reflect/xRef.java @@ -186,9 +186,14 @@ private int ensureClassHandle(Frame frame, ObjectHandle hTarget, int iReturn) { if (hTarget.getComposition() instanceof ClassComposition clzTarget) { - // the only way for a handle to be a relational or not shared type is to be - // explicitly masked - assert !clzTarget.isInception(); + if (clzTarget.isInception()) + { + // the only way for a handle to be a relational or not shared type is to be + // explicitly masked + return frame.raiseException(xException.invalidType(frame, "Type \"" + + type.getValueString() + "\" is not shared with the TypeSystem of module \"" + + frame.f_context.f_container.getModule().getName() + '"')); + } if (clzTarget.getInceptionType().isShared(pool)) { @@ -217,7 +222,8 @@ public String toString() return ctxOwner.sendOp1Request(frame, opClassHandle, iReturn); } } - return frame.raiseException("Unsupported type: " + type.getValueString()); + return frame.raiseException( + xException.invalidType(frame, "Unsupported type: " + type.getValueString())); } if (type.isImmutabilitySpecified()) @@ -260,9 +266,18 @@ private int maskClassHandle(Frame frame, ObjectHandle hClass, TypeConstant typeM listAnno.toArray(Annotation.NO_ANNOTATIONS)); } } - - TypeComposition clzMask = hClass.getTemplate().ensureClass(frame.f_context.f_container, typeClz); - return frame.assignValue(iReturn, hClass.cloneAs(clzMask)); + try + { + TypeComposition clzMask = hClass.getTemplate(). + ensureClass(frame.f_context.f_container, typeClz); + return frame.assignValue(iReturn, hClass.cloneAs(clzMask)); + } + catch (Exception e) + { + return frame.raiseException( + xException.invalidType(frame, "Failed to create a class handle for : " + + typeMask.getValueString())); + } } @Override